我们使用 将一组虚拟机备份到外部 USB 驱动器rsync -a
。 报告的源目录为 145G du -sh
,但目标报告为 181G。
这两个文件系统ext3
和块大小都相同,所以有人可以解释一下差异是什么吗?
答案1
正如 Dennis 所说,这似乎是一个稀疏文件问题。例如:
$ dd if=/dev/zero of=sparse.txt count=0 seek=1000
0+0 records in
$ du sparse.txt
0 sparse.txt
$ ls -l sparse.txt
-rw-r--r-- 1 user user 512000 2010-03-22 11:54 sparse.txt
如您所见,du
报告实际使用了多少块,同时ls
显示文件应该有多大。
答案2
其他人已经谈到了稀疏文件,但还有另一件事:硬链接。硬链接 - 系统分区上经常使用文件的多个名称(以及磁盘上的空间)(例如,用于在同一二进制文件中实现的多个 shell 命令),并且 rsync 不会仅使用“-a”选项来专门处理它们。因此,例如,具有四个硬链接的文件将存储为四个单独的文件。
尝试使用rsync -aH
。
答案3
-S,--稀疏 尝试有效处理稀疏文件,以减少它们占用的内存 目标上的空间。与 --inplace 冲突,因为它 无法以稀疏的方式覆盖数据。 注意:当目标是 Solaris 时,请勿使用此选项 “tmpfs” 文件系统。它似乎无法处理空查找 区域正确并最终损坏文件。
答案4
使用 rsync 脚本,您是否会删除目标上存在但不再存在于目标上的项目?如果您希望在两边都有相同的副本,则需要在 rsync 例程中使用“--delete”标志。
"rsync -a --delete /source/ /destination/"
您还可以将“-n 和 -P”注入字符串以分别提供试运行和进度指示器,以向您展示使用“--delete”选项会发生什么。