“zfs send” 快照从 Linux 机器到 Solaris 时 ACL 损坏

“zfs send” 快照从 Linux 机器到 Solaris 时 ACL 损坏

我在托管我们主目录的 Ubuntu 机器上运行 ZFS。池具有以下 ACL 设置:

# zfs get all homes | grep acl
homes  aclinherit            restricted             default
homes  acltype               off                    default

这里我有两个具有相同权限的常规文件:

# getfacl 1.txt 2.txt 
# file: 1.txt
# owner: usr
# group: grp
user::rw-
group::r--
other::r--

# file: 2.txt
# owner: usr
# group: grp
user::rw-
group::r--
other::r--

每天晚上我都会向运行 Solaris 8 上的 ZFS 的机器发送增量快照

zfs send -i homes@$PREV_BACKUP homes@$CURRENT_BACKUP | \
   ssh solarishost zfs receive -vFd homes_backup

Solaris 主机上的文件系统具有以下 ACL 设置:

# zfs get all homes_backup | grep acl
homes_backup  aclmode               passthrough            local
homes_backup  aclinherit            restricted             default

当我检查 Solaris 主机上的快照中的文件时,我发现较新的文件(1.txt)没有设置任何 ACL:

# /usr/bin/ls -v 1.txt 2.txt 
-rw-r--r--   1 2428     2000        2170 Oct 12 13:42 1.txt
-rw-r--r--   1 2428     2000        2146 May 31  2013 2.txt
     0:owner@:execute:deny
     1:owner@:read_data/write_data/append_data/write_xattr/write_attributes
         /write_acl/write_owner:allow
     2:group@:write_data/append_data/execute:deny
     3:group@:read_data:allow
     4:everyone@:write_data/append_data/write_xattr/execute/write_attributes
         /write_acl/write_owner:deny
     5:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize
         :allow

现在,当我在 Ubuntu 客户端上安装 solarishost-snapshot 时,我可以看到这些文件,并且它们似乎具有相同的权限,但我无法读取1.txt

# cat 2.txt >/dev/null; echo $?
0
# cat 1.txt >/dev/null; echo $?
cat: 1.txt: Permission denied
1

再次,与 Ubuntu 客户端看起来相同:

# getfacl 1.txt 2.txt
# file: 1.txt
# owner: usr
# group: grp
user::rw-
group::r--
mask::rwx
other::r--

# file: 2.txt
# owner: usr
# group: grp
user::rw-
group::r--
mask::rwx
other::r--

# ls -l 1.txt 2.txt 
-rw-r--r--+ 1 usr grp 2.2K Oct 12 13:42 1.txt
-rw-r--r--+ 1 usr grp 2.1K May 31  2013 2.txt

我的问题是:如何设置从 Ubuntu 到 Solaris 的快照创建,以便 Solaris 主机上的 ACL 允许用户挂载快照并读取自己的文件?看起来所有最近备份的文件都受到影响。

答案1

Solaris 11 ZFS 使用 NFSv4 ACL,而不是 POSIX ACL。Linux 在 ZFS 上根本没有 NFSv4 ACL,而且似乎永远不会有。虽然 NFSv4 ACL 是 POSIX ACL 的超集,但似乎只有 Solaris 可以在文件移动/复制期间将 POSIX ACL 传输/转换为 NFSv4 ACL。

因此,总而言之,我看不出在 ZFS 快照中保留 ACL 的方法。要么使用 Linux -> Linux 方案,要么使用 Solaris -> Solaris、Solaris -> FreeBSD 或 FreeBSD -> FreeBSD 方案(两者都有 NFSv4 ACL)。

相关内容