使用 rsync 将文件迁移到新服务器的问题

Issues using rsync to migrate files to new server

我正在尝试将一个充满目录和小文件的目录复制到新服务器以进行应用程序迁移。 rsync 一直是我进行此类迁移的首选工具,但这次它没有按预期工作。

该目录有174,412个文件,大小为136g。基于此我在新服务器上为他们创建了一个256G的磁盘

问题是当我将文件 rsync 到新服务器时,在复制所有文件之前 space 中的新分区 运行。

我在我的测试机器上用更大的目标磁盘做了一些测试,当它完成时,新磁盘上的总大小是 272G

time sudo rsync -avh /mnt/dotcms/* /data2/
sent 291.61G bytes  received 2.85M bytes  51.75M bytes/sec
total size is 291.52G  speedup is 1.00

df -h /data2
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/data2vg-data2lv  425G  272G  154G  64% /data2

源在 NAS 上,新目标是 XFS 文件系统,所以起初我认为这可能是块大小问题。但后来我使用了 cp 命令,它复制了完全相同的大小。

time sudo cp -av /mnt/dotcms/* /data

df -h /data2
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/data2vg-data2lv  425G  136G  290G  32% /data2

为什么 rsync 增加了 space 的使用?

根据 the documentation,dotcms 使用硬链接。因此,您需要为 rsync 提供 -H 选项以保留它们。请注意,GNU 的 cp -av 保留了硬链接,因此没有这个问题。

您应该考虑使用的其他 rsync 选项包括:

  • -H, --hard-links : 保留硬链接
  • -A--acls:保留 ACL(隐含 --perms)
  • -X, --xattrs : 保留扩展属性
  • -S, --sparse : 将空序列变成稀疏块
  • --delete : 从目标目录中删除无关文件

这假设您是 运行 root 并且目标应该与源具有相同的 users/groups。如果用户和组不相同,那么@Cyrus 的 alternative commandline 使用 --numeric-id 可能更合适。