我正在使用带有选项的 rsync
-r for recursive
-l copy symlinks as symlinks
-t preserve modification time
-D preserve devices and specials
-v verbose
--prune-empty-dirs
Run Code Online (Sandbox Code Playgroud)
源文件系统是 ext4,目标文件系统是 XFS。我复制了几百个文件夹,范围在几百个演出到几 TB 之间,它们都在小于 1GB 的大小差异内。然而,这个特定的文件夹在源上是 264GB,一旦我 rsync 它跨它是 286GB。这是一个巨大的差异,我不知道它有什么问题。
如果源 ext4 FS 有一些损坏,它是否可能没有报告正确的磁盘使用情况?我正在使用'du -skh'。
我已经删除了整个内容并重新启动了 3 次,它产生了相同的结果。
最可能的原因是硬链接。默认情况下,Rsync 将 2 个硬链接文件转换为目标上的重复文件,占用两倍的磁盘空间。如果要保留硬链接,请添加该-H/--hard-links选项。
下一个最可能的问题是稀疏文件。默认情况下,Rsync 不会将任何文件写入为稀疏文件,即使它们位于源上(它实际上无法分辨)。如果您有稀疏文件(最常用作虚拟机映像和不完整的 p2p 下载),那么您将需要使用--sparse option.
使用 'du -b -d0 source destination' 时遇到了这个“问题”,
因为我在深入研究时有一大堆不匹配的东西。
问题似乎是 du 坚持报告目录和文件的磁盘使用情况,而我只想要文件的大小。
因此,由于创建一些目录将在某些文件系统上使用更多字节,而在其他文件系统上使用更少字节,因此您会有所不同。
解决方案只是比较实际文件的大小,而不是目录。
以下命令行使用 find 仅输出音乐目录中的文件,然后使用 du 计算总字节数
find music -type f -print0 |du --files0-from=- -cb
Run Code Online (Sandbox Code Playgroud)
如果有人会发布一个 sed 脚本来做同样的事情,请做
rsync 常见问题解答页面列出了以下原因:https ://sanitarium.net/rsyncfaq/# Differentsizes
然而,了解的唯一方法是比较文件。
对于少量文件,您可以这样做diff -r /mnt/data /mnt/data-BACKUP。但是,如果中途停止,则无法从中断处重新启动。旧的 diff 程序不能很好地处理二进制文件。
对于大量文件,我建议计算所有文件的哈希值并查找差异。这样,如果进程停止或中断,您可以毫无困难地继续。
请参阅此脚本作为示例:
https://github.com/TomOnTime/tomutils/blob/master/bin/md5tree
md5tree /mnt/data >/var/tmp/list.orig
md5tree /mnt/data-BACKUP >/var/tmp/list.backup
# NOTE: For these next 2 lines TAB means press the TAB key.
sort -t'TAB' -k6 </var/tmp/list.backup >/var/tmp/list.backup.sorted
sort -t'TAB' -k6 </var/tmp/list.orig >/var/tmp/list.orig.sorted
diff /var/tmp/list.orig.sorted /var/tmp/list.backup.sorted
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12859 次 |
| 最近记录: |