FreeBSDでZFSを使用して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 ディスカッションページ。明らかに、ZFSはFreeBSD 8からxattrをサポートすると主張しましたが、後でマニュアルページ(3参照)を参照して削除されました。
現在私の考えでは、ZFSの拡張属性は実際には機能しますが、xattr
その使用を制御する属性は、他のZFSディストリビューションのようにうまく機能しないことです。しかし、rsync --fake-super
このようなシステムで実行されている大量のバックアップデータを信頼する前に、これが確認(または変更)されることを聞きたいと思います。既知のxattrの問題により、すべてのメタデータが失われることはありません。
重要であれば、これ非常に私は新しいFreeBSD 10.2をインストールし、インストーラはZFSを設定しました。
答え1
発見したように、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);
しかし、これを行うとしばらく停止することができます。 https://github.com/freebsd/freebsd/blob/e95b1e137c604a612291fd223fce89c2095cddf2/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c#L16
だから実際に起こっていることはxattrsだと思います。働くただし、ZFSデータセットプロパティを介して機能をオフまたはオンにする機能が破損しているため、「サポートされていません」というメッセージは「ユーザーが自分で実行する必要がある」ことを意味します。
MNTOPT_XATTRを設定するコードがありますが、まだ見つかりませんでした。 zfs setを使用して変更しようとすると、サポートされていないメッセージが表示されます。私の考えでは、これは/, /usr, /varの奇妙なzfs xattr属性と/homeの競合する設定/動作を説明しているようです。
これは物事についてある程度明らかにする。 https://www.lesbonscomptes.com/pages/extattrs.html
答え2
FreeBSD-13.2に含まれているZFSで動作します。
例えば
% zfs get xattr rpool/usr/home
NAME PROPERTY VALUE SOURCE
rpool/usr/home xattr on default
%
% ls -tal test
-rw-r--r-- 1 sabadi sabadi 31 May 31 2016 test
%
% setextattr user md5 `md5 -q test` test
% getextattr user md5 test
test 93d1d06c3b60c965fc696609b8c57a3f