我想复制整个 Linux 服务器,该服务器将通过网络退役,这样我们就可以确保不会丢失任何内容。

我做到了 du / 并被告知有 60 GB 以下 /

然后我做了 rsync -r / root@newserver:/old-server 当做 du 在里面 old-server dir 我有 22 GB。

那么为什么会有这样的差异呢?有没有什么东西 du 可以看到但是 rsync 无法复制?

有帮助吗?

解决方案

您可能已删除了尚未解除分配的文件,因为它们上有打开的文件句柄。 (我以前不知道du会看到那些用法,但是有些测试显示它确实如此。)你可以使用 lsof 。根据我的经验,这两个主要原因是删除了Apache日志而没有踢出httpd并从文件系统中删除mysql表而不是使用DROP TABLE。

其他提示

如果你有一些时间在手上,你可以弄清楚到底有什么区别:在旧服务器上运行cd /; find . > /tmp/old,在新服务器上运行cd /old-server; find . > /tmp/new,然后vimdiff这两个文件看看有什么变化。

有一些特殊的文件系统应避免使用rsync进行复制,例如/proc/sys/tmp。他们可能会说明你看到的差异,但无论如何它似乎太大了。

可能存在一些不可读的目录(例如,没有rx)。我不记得使用root权限运行的进程是否可以在没有先修复权限的情况下访问这些目录。

更好地生成和比较文件列表及其md5总和。

一些建议:

  • 稀疏文件 (使用-S)
  • 硬链接 (使用-H)
  • /proc/sys (使用 --exclude 或更好的 -x 并分别备份每个文件系统)

我倾向于使用 rsync -axHSW --numeric-ids 在类似的情况下。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top