web-dev-qa-db-ja.com

FreeBSDでのZFS xattrサポートの状態

私は、XFSがZFSを使用してFreeBSDでサポートされているかどうか、または拡張するかどうかを考えています。矛盾する情報を読みました。

  1. _zfs get xattr_は、_/_、_/usr_および_/var_の場合はon (default)としてリストしますが、その他のすべてのデータセット(子を含む)の場合はoff (temporary)としてリストします上記のもののうち。
  2. 実行中_zfs set xattr=on zroot/usr/home_メッセージが表示されます

    _property 'xattr' not supported on FreeBSD: permission denied_。

  3. これは zfs manページ :と一致します。

    xattrプロパティは現在FreeBSDではサポートされていません。

  4. setextattrgetextattrおよびlsextattrは十分に機能するようです。
  5. _rsync --fake-super_を使用してデバイスファイルノードを保存および復元することもでき、lsextattrおよびgetextattrを使用してそのデータを表示できました。
  6. ウィキペディアの xattrトークページ で議論が行われています。どうやら、ZFSがFreeBSD 8以降にxattrをサポートしているという主張がありましたが、それはマンページ(3を参照)を参照して後で削除されました。

現在、zfsの拡張属性は実際には機能するが、それらの使用を制御するxattrプロパティは他のzfsディストリビューションのようには機能しないという印象を受けます。しかし、そのようなマシンで実行されている_rsync --fake-super_に大量のバックアップデータを信頼する前に、その確認(または修正)を聞きたいと思います。既知のxattrの問題により、すべてのメタデータを失いたくない。

重要なのは、これはveryの新しいFreeBSD 10.2インストールであり、インストーラーによってZFSがセットアップされています。

15
MvG

あなたが見つけたように、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

つまり、実際に起こっていると思うのは、xattrsworkですが、ZFSデータセットプロパティによってそれらをオフ(またはオン)にする機能が壊れているため、「 「サポートされていません」というメッセージは、「あなたは自分でいる」という意味です。

MNTOPT_XATTRを設定するコードがいくつかありますが、私はそれを追跡していません。 zfs setを使用して変更しようとすると、サポートされていないメッセージが表示されます。私の推測では、これは/、/ usr、/ varでのzfsxattrプロパティの奇妙さ、および/ homeの競合する設定/動作を説明していると思います。

これは物事にいくつかの光を当てます。 https://www.lesbonscomptes.com/pages/extattrs.html

5
Jeremy