我知道这是一个有大量文献记载的主题,尽管我在网上找到了很多页关于它的信息,但我仍然找不到这个问题的明确答案,所以请耐心等待。
我有一台 Linux 服务器,我正在尝试通过 ssh 将该服务器备份到 Windows 机器上。我使用 rsync 并从 Windows 机器上使用 cygwin 运行它。问题是,从 Linux 服务器提取文件的权限和所有权被更改为使用 cygwin 提取文件的 Windows 用户。例如,Linux 测试文件的所有者是用户 dog。Windows 机器上的用户 cat 使用 cygwin 启动命令以 rsync 文件。当我查看复制过来的测试文件时,它们不再属于用户 dog。它们现在更改为用户 cat,组只显示“无”。我希望这一切都足够清楚。权限也没有正确复制。无论原始权限是什么,它在 Windows 机器上都保持 644。
显然,如果我将来需要恢复备份,我会希望能够将所有内容复制回来,并拥有与最初相同的所有权和权限,否则很多东西都会被破坏。我见过有人建议制作脚本,在复制文件时更改 chmod 和 chown,但我的服务器有几个不同的用户和许多不同的设置权限,就像我确信我们大多数人一样,所以我不会试图“那么”细致地管理备份过程。我输入的命令是
rsync -av -e “ssh -p 44” root@blahblah:/home/dog/backup /backup/
我来解释一下。是的,我通过 root 运行它,这样我甚至可以复制 root 的文件。它通过一个私钥强制命令或无论它叫什么,只运行特定的命令,以减轻由此造成的潜在安全漏洞。(我知道你可以通过 sudo 运行 rsync,但我运气不太好,也不明白如果你能够指定 root 用户唯一可以做的事情,它会有什么好处)。cygwin 在 fstab 文件夹中的“noacl”命令已经按照 (https://cygwin.com/ml/cygwin/2011-02/msg00116.html)。据我所知,这应该可以防止 Windows 尝试理解 Linux 执行用户:组/权限的方式并进行更改。不幸的是,这没有影响,而且我只有 80% 的把握我做对了。此外,启动备份的 Windows 计算机是管理员。我唯一能猜到的是,我读了很多关于双方都必须是 root 才能正确复制所有内容的文章。据我所知,cygwin 不能以 root 或 sudo 身份运行,我猜作为管理员并以管理员身份运行 cygwin 是等效的。也许不是。
我真的不明白我做错了什么,或者为什么它不起作用。如果 rsync 无法在不改变内容的情况下复制 linux 的文件,那么为什么在将服务器备份到桌面时 rsync 是一个可行的选择?我是否遗漏了什么,还是我对这个程序的要求太高了?你们能给我的任何帮助或启发都将是极好的。这让我抓狂了。(抱歉,这篇文章太长了。我试图尽可能彻底地回答我的问题,让所有相关人员更容易理解)
答案1
Windows 文件系统和 Linux 文件系统有很大不同。我认为 NTFS 不会处理 Linux 权限。Rsync 将无法映射它们。
我想到两个解决方案:
- 制作 Linux 的 tar.gz 或 tar.bz2,然后使用 netcat 直接保存到 Windows 文件系统。
- 在 Windows 中创建一个大的原始文件,通过 CIFS 共享,在 Linux 中作为回送文件挂载,将其格式化为 ext3/ext4/ 或其他格式,然后 rsync 到它。我这样做是为了将我的工作站备份到 samba 共享。这很棘手。您需要从 Linux 机器发送一些“同步”命令。如果您愿意,我可以为您提供有关此设置的更多详细信息。