Freebsd

FreeBSD 中 ZFS xattr 支持的狀態

  • March 11, 2017

我正在嘗試確定在使用 ZFS 的 FreeBSD 中是否支持 xattrs,或者更確切地說,在多大程度上支持 xattrs。我讀過一些相互矛盾的資訊。

  1. zfs get xattr將其列為on (default)、和/,但對於所有其他數據集,包括上述數據集的子數據集。/usr``/var``off (temporary)
  2. 跑步zfs set xattr=on zroot/usr/home我得到消息

property 'xattr' not supported on FreeBSD: permission denied.

  1. 這與手冊zfs一致:

xattrFreeBSD 目前不支持該屬性。

  1. setextattrgetextattr並且lsextattr似乎工作得很好。
  2. 我還設法使用 保存和恢復設備文件節點,並且可以使用和rsync --fake-super查看其數據。lsextattr``getextattr
  3. 維基百科在xattr 討論頁中有一些討論。顯然,自 FreeBSD 8 以來,曾經有人聲稱 ZFS 支持 xattr,但後來參考手冊頁(參見 3.)將其刪除。

目前我得到的印像是 zfs 上的擴展屬性在實踐中有效,但是xattr控制它們使用的屬性不像在其他 zfs 發行版中那樣有效。rsync --fake-super但在我相信大量備份數據可以在這樣的機器上執行之前,我想听到確認(或更正) 。由於已知的 xattr 問題,我寧願不要失去所有元數據。

如果重要的話,這是我剛剛設置的非常新鮮的 FreeBSD 10.2 安裝,安裝程序設置了 ZFS。

正如您所發現的,xattrs 可以工作,但有一些粗糙的邊緣。

有時您必須像人類學家一樣處理開原始碼。如果這本身沒有幫助,也許這會引發一些更好的貢獻(或最終程式碼修復!)

我在原始碼中找到了這個:

https://github.com/freebsd/freebsd/blob/c829c2411ae5da594814773175c728ea816d9a12/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c#L514

/*
* 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);

和這個 https://github.com/freebsd/freebsd/blob/386ddae58459341ec567604707805814a2128a57/sys/cddl/contrib/opensolaris/common/zfs/zfs_prop.c#L302

然而這讓你暫停: https ://github.com/freebsd/freebsd/blob/e95b1e137c604a612291fd223fce89c2095cddf2/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c#L1638

所以我認為實際發生的是 xattrs工作,但是通過 ZFS 數據集屬性關閉(或打開)它們的功能被破壞了,所以“不支持”消息意味著“你自己一個人”。

那裡有一些設置 MNTOPT_XATTR 的程式碼,但我還沒有找到它。嘗試使用 zfs set 更改它會得到不受支持的消息。我的猜測是,這解釋了 /、/usr、/var 的 zfs xattr 屬性怪異,以及 /home 的衝突設置/行為。

這為事情提供了一些啟示。 https://www.lesbonscomptes.com/pages/extattrs.html

引用自:https://unix.stackexchange.com/questions/266913