我想要复制一个将通过网络退役的整个Linux服务器,这样我们确定没有任何东西丢失。
我做了du /
并且被告知有60 GB以下/
然后我做了rsync -r / root@newserver:/old-server
并且在du
目录中执行old-server
时我获得了22 GB。
那为什么会有这种差异?是否有du
可以看到但rsync
无法复制的内容?
答案 0 :(得分:3)
您可能已删除了尚未解除分配的文件,因为它们上有打开的文件句柄。 (我以前不知道du会看到那些用法,但有些测试表明它确实如此。)你可以使用lsof进行研究。根据我的经验,这两个主要原因是删除了Apache日志而没有踢出httpd并从文件系统中删除mysql表而不是使用DROP TABLE。
答案 1 :(得分:0)
有些特殊文件系统应避免使用rsync
进行复制,例如/proc
,/sys
,/tmp
。他们可能会说明你看到的差异,但无论如何它似乎太大了。
可能有一些不可读的目录(例如,它们上没有r
或x
。我不记得使用root
权限运行的进程是否可以在没有先修复权限的情况下访问这些目录。
更好地生成和比较文件列表及其md5总和。
答案 2 :(得分:0)
如果你手头有一点时间,你可以弄清楚到底有什么区别:在旧服务器上运行cd /; find . > /tmp/old
,在新服务器上运行cd /old-server; find . > /tmp/new
,然后{{ 1}}两个文件,看看有什么变化。
答案 3 :(得分:0)
一些建议:
/proc
和/sys
(使用--exclude或者更好,-x并分别备份每个文件系统)我倾向于在类似情况下使用rsync -axHSW --numeric-ids
。