FreeBSDのZFS xattrサポートステータス

FreeBSDのZFS xattrサポートステータス

FreeBSDでZFSを使用してxattrsがサポートされているのか、それともxattrsがどの程度サポートされているのかを調べたいと思います。矛盾する情報を読みました。

  1. zfs get xattron (default)/およびとしてリストされ/usrますが、上記のデータセットの子データセットを含む他のすべてのデータセット/varに対応します。off (temporary)
  2. 実行中にzfs set xattr=on zroot/usr/homeメッセージを受信しました。

    property 'xattr' not supported on FreeBSD: permission denied

  3. これは次のように一致します。マニュアルzfsページ:

    xattrFreeBSDは現在このプロパティをサポートしていません。

  4. setextattr、十分にうまく動作しているようですgetextattrlsextattr
  5. また、デバイスファイルノードを保存して復元し、そのrsync --fake-superデータを使用して表示することができました。lsextattrgetextattr
  6. ウィキペディアにいくつかの議論がありますxattr ディスカッションページ。明らかに、ZFSはFreeBSD 8からxattrをサポートすると主張しましたが、後でマニュアルページ(3参照)を参照して削除されました。

現在私の考えでは、ZFSの拡張属性は実際には機能しますが、xattrその使用を制御する属性は、他のZFSディストリビューションのようにうまく機能しないことです。しかし、rsync --fake-superこのようなシステムで実行されている大量のバックアップデータを信頼する前に、これが確認(または変更)されることを聞きたいと思います。既知のxattrの問題により、すべてのメタデータが失われることはありません。

重要であれば、これ非常に私は新しいFreeBSD 10.2をインストールし、インストーラはZFSを設定しました。

答え1

発見したように、xattrsはうまくいきますが、いくつかの粗い部分があります。

時々、人類学者のようにオープンソースコードを扱う必要があります。これがそれ自体に役立たない場合は、おそらくより良い貢献(または最終的なコード修正)を引き起こすでしょう。

ソースコードでこれを見つけました。

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

/*
 * 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#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

関連情報