FreeBSD 中 ZFS xattr 支持的状态

MvG*_*MvG 16 freebsd zfs bsd xattr

我正在尝试确定是否使用 ZFS 在 FreeBSD 中支持 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,并且可以使用lsextattr和查看其数据getextattr
  6. 维基百科在xattr 讨论页中有一些讨论。显然,曾经有人声称 ZFS 从 FreeBSD 8 开始就支持 xattr,但后来参考手册页(参见 3.)将其删除。

目前,我的印象是 zfs 上的扩展属性在实践中起作用,但是xattr控制它们使用的属性不像在其他 zfs 发行版中那样起作用。但在我相信大量备份数据可以rsync --fake-super在这样的机器上运行之前,我想听到确认(或纠正)。由于已知的 xattr 问题,我不想丢失所有元数据。

如果重要的话,这是我刚刚设置的一个非常新的 FreeBSD 10.2 安装,安装程序设置了 ZFS。

小智 5

正如您所发现的,xattrs 可以工作,但有一些粗糙的地方。

有时您必须像人类学家一样接近开源代码。如果这本身没有帮助,也许这会激发一些更好的贡献(或最终代码修复!)

我在源代码中找到了这个:

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

/*
 * 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);
Run Code Online (Sandbox Code Playgroud)

和这个 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_dataset38c#

所以我认为实际发生的是 xattrs工作,但通过 ZFS 数据集属性关闭(或打开)它们的功能被破坏,所以“不支持”消息意味着“你是自己的”。

那里有一些设置 MNTOPT_XATTR 的代码,但我没有追踪它。尝试使用 zfs set 更改它会得到不受支持的消息。我的猜测是解释了 zfs xattr 属性与 /、/usr、/var 的怪异性以及 /home 的冲突设置/行为。

这说明了一些事情。 https://www.lesbonscomptes.com/pages/extattrs.html