FreeBSD 中 ZFS xattr 支持的状态

FreeBSD 中 ZFS xattr 支持的状态

我正在尝试弄清楚 FreeBSD 中使用 ZFS 是否支持 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

  3. 这符合手册zfs:

    xattrFreeBSD 目前不支持该属性。

  4. setextattrgetextattr并且lsextattr似乎工作得足够好。
  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.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

答案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

相关内容