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