Freebsd
FreeBSD 中 ZFS xattr 支持的狀態
我正在嘗試確定在使用 ZFS 的 FreeBSD 中是否支持 xattrs,或者更確切地說,在多大程度上支持 xattrs。我讀過一些相互矛盾的資訊。
zfs get xattr
將其列為on (default)
、和/
,但對於所有其他數據集,包括上述數據集的子數據集。/usr``/var``off (temporary)
- 跑步
zfs set xattr=on zroot/usr/home
我得到消息
property 'xattr' not supported on FreeBSD: permission denied
.
- 這與手冊
zfs
頁一致:
xattr
FreeBSD 目前不支持該屬性。
setextattr
,getextattr
並且lsextattr
似乎工作得很好。- 我還設法使用 保存和恢復設備文件節點,並且可以使用和
rsync --fake-super
查看其數據。lsextattr``getextattr
- 維基百科在xattr 討論頁中有一些討論。顯然,自 FreeBSD 8 以來,曾經有人聲稱 ZFS 支持 xattr,但後來參考手冊頁(參見 3.)將其刪除。
目前我得到的印像是 zfs 上的擴展屬性在實踐中有效,但是
xattr
控制它們使用的屬性不像在其他 zfs 發行版中那樣有效。rsync --fake-super
但在我相信大量備份數據可以在這樣的機器上執行之前,我想听到確認(或更正) 。由於已知的 xattr 問題,我寧願不要失去所有元數據。如果重要的話,這是我剛剛設置的非常新鮮的 FreeBSD 10.2 安裝,安裝程序設置了 ZFS。
正如您所發現的,xattrs 可以工作,但有一些粗糙的邊緣。
有時您必須像人類學家一樣處理開原始碼。如果這本身沒有幫助,也許這會引發一些更好的貢獻(或最終程式碼修復!)
我在原始碼中找到了這個:
/* * Register property callbacks. * * It would probably be fine to just check for i/o error from * the first prop_register(), but I guess I like to go * overboard... */ error = dsl_prop_register(ds, zfs_prop_to_name(ZFS_PROP_ATIME), atime_changed_cb, zfsvfs); error = error ? error : dsl_prop_register(ds, zfs_prop_to_name(ZFS_PROP_XATTR), xattr_changed_cb, zfsvfs); error = error ? error : dsl_prop_register(ds, zfs_prop_to_name(ZFS_PROP_RECORDSIZE), blksz_changed_cb, zfsvfs);
所以我認為實際發生的是 xattrs工作,但是通過 ZFS 數據集屬性關閉(或打開)它們的功能被破壞了,所以“不支持”消息意味著“你自己一個人”。
那裡有一些設置 MNTOPT_XATTR 的程式碼,但我還沒有找到它。嘗試使用 zfs set 更改它會得到不受支持的消息。我的猜測是,這解釋了 /、/usr、/var 的 zfs xattr 屬性怪異,以及 /home 的衝突設置/行為。
這為事情提供了一些啟示。 https://www.lesbonscomptes.com/pages/extattrs.html