rsync 和 --fake-super - 如何保留属性?

Pet*_*erB 5 backup rsync backup-restoration

我一直在尝试整理我的备份,以便在恢复文件时正确恢复所有者/组和任何其他元数据。对于我的测试,我一直通过 ssh 从 Ubuntu 9.10 服务器(安装了 rsync 版本 3.0.6,协议版本 30)备份到 OSX 10.6 笔记本电脑或 Ubuntu 9.10 服务器。

已使用以下命令(以 root 身份执行)完成备份:

# rsync -avz --fake-super /var/www/myfolder backupuser@remoteserver.com:/home/backups
Run Code Online (Sandbox Code Playgroud)

执行此操作时不会报告任何错误。

然后我使用以下命令取回我的测试目录:

# rsync -avz --fake-super backupuser@remoteserver.com:/home/backups/myfolder /tmp
Run Code Online (Sandbox Code Playgroud)

对于每个文件,它都会报告错误:

rsync: failed to write xattr user.rsync.%stat for "/tmp/myfolder/path/to/file": Operation not supported (95)
Run Code Online (Sandbox Code Playgroud)

最初我认为这一定是因为我正在备份到 OSX,所以我再次尝试备份到 Ubuntu 服务器 - 只是在恢复文件时出现相同的错误。我用谷歌搜索并查看了 rsync 的联机帮助页,但没有找到任何帮助。

我的本地Ubuntu服务器使用ext3,远程Ubuntu服务器ext4,Mac有HFS

and*_*dol 15

你至少做错了一件事。

首先,您在连接的错误一侧使用 --fake-super 。让我引用 rsync 手册页。

--fake-super 选项仅影响使用该选项的一侧。要影响远程外壳连接的远程端,请指定 rsync 路径:

rsync -av --rsync-path="rsync --fake-super" /src/ 主机:/dest/

您正在做的是在您已经是 root 的连接一侧运行 --fake-super 。

关于“无法写入 xattr user.rsync.%stat for”的部分是因为与 --fake-super 一起使用的文件系统尚未使用标志 user_xattr 挂载。此挂载选项必须在您使用 --fake-super 的连接一侧生效,在您的原因中将是“remoteserver.com”。

总而言之,这些是您应该运行的命令:

# rsync -avz --rsync-path="rsync --fake-super" /var/www/myfolder backupuser@remoteserver.com:/home/backups
# rsync -avz --rsync-path="rsync --fake-super" backupuser@remoteserver.com:/home/backups/myfolder /tmp
Run Code Online (Sandbox Code Playgroud)

...安装选项 user_xattr 在 remoteserver.com 上生效

  • 请注意,至少从 rsync 3.1.2(但可能已经是更早的版本)开始,有一个 `--remote-option` 参数通常可能更可取。还有一个快捷方式“-M”。所以除了`--rsync-path="rsync --fake-super"`,也可以写成`-M--fake-super`。 (4认同)