完成rsync -Sap传输后,df输出中的可用磁盘空间数目不同

我做了“rsync -ap -numeric-id -delete-during / mnt / RAIDVault / / mnt / RAIDVault-BACKUP /”,意图使两个存储单元同步(具有相同的内容),但是以不同数量的空闲磁盘空间上的两个:

/dev/md1 2.0T 2.0T 81G 96% /mnt/RAIDVault /dev/md0 2.0T 2.0T 79G 97% /mnt/RAIDVault-BACKUP /dev/md1 1951405544 1873160540 78245004 96% /mnt/RAIDVault /dev/md0 1951405544 1874906476 76499068 97% /mnt/RAIDVault-BACKUP

我在这里摸不着头脑,因为我不知道为什么会发生这种情况,也不知道从哪里开始排除故障。 没有错误,rsync完成了一次传输就好了,一切看起来都很好,“uptodate”。

然而不知何故/ dev / md0在应该是“A镜像到B镜像”传输之后less了2千兆字节。

df输出是用“df –sync”生成的。 我认为这是一个可靠的数字。 df永远不会说谎,是吗?

/ dev / md0和/ dev / md1之间的一个重要的区别是即使两者都是raid1软件types的raid / dev / md0目前只有1个数组成员。 我想知道这是否是在df的报告中导致不同的数字?

所以,我的问题有两个:

  1. 为什么df报告中有不同的数字?
  2. 你怎样才能确保md0和md1具有相同内容的完整和相同的副本?

2个数据丢失是重要的。 如果大小增长了2G,那么会有一些简单的解释:硬链接变成了重复文件,带有漏洞的文件变成了完整的文件,等等。 这些是完全合理的解释。

然而,由于新的规模较小,你应该做一个比较,看看有什么变化。 您不希望处于从现在起5个月内意识到有问题并且没有有效备份的情况。

备份并不重要。 恢复很重要。 除非我们validation备份,否则我们不知道还原是否有效。

对于less量的文件,你可以做diff -r /mnt/RAIDVault /mnt/RAIDVault-BACKUP 。 但是,如果中途停止,则不能从停止的地方重新启动。

对于大量的文件,我build议计算所有文件的哈希值并寻找差异。 这样,如果进程停止或中断,你可以继续没有太大的困难。

这是一个程序,它将生成目录中所有文件的md5哈希值:

 #!/usr/local/bin/perl # md5tree: Output file data information for comparison use Digest::MD5; use File::Find (); # Default to "." unless things are speced on the cmd line. if ($#ARGV == -1) { @DIRS = ( '.' ); } else { @DIRS = @ARGV; } &File::Find::finddepth(\&wanted, @DIRS); exit; sub wanted { (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) && -f _ && ((-s _) > 0) && &doit($_, $File::Find::dir, -s _, $mode, $uid, $gid); } sub doit { my($fn, $dir, $size, $mode, $uid, $gid) = @_; return 0 if $fn =~ m/[\r\n]+/; open(FILE, "<$fn") or die "Can't open '$dir/$fn': $!"; binmode(FILE); print Digest::MD5->new->addfile(*FILE)->hexdigest, "\t$size\t$uid\t$gid\t$mode\t$dir/$fn\n"; return 0; } 

你可以像这样使用它:

 # md5tree /mnt/RAIDVault-BACKUP >/var/tmp/list.backup # md5tree /mnt/RAIDVault >/var/tmp/list.orig # 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 

我有兴趣知道你find了什么区别!

https://sanitarium.net/rsyncfaq/#differentsizes上的rsync FAQ页面上有一个很好的详细的答案

源和目标可能具有不同大小的原因有很多:

  • 排除
  • 目录大小,因为磁盘空间分配不同(devise和目标或来源的结果只略小)
  • 硬链接(1-10%的差异)
  • 稀疏文件(> 10%的差异)
  • 文件系统types,块大小,文件松弛开销等方面的差异
  • df使用二进制单位(2的幂),而rsync使用十进制单位(功率为1000)
  • 最后,比较源和目标大小并不总是可靠的,因此对文件的校验和validation是源和目标是否相同的更好的度量

上次看到这种情况时,目标副本位于文件系统,不区分大小写的文件名。 主人有文件叫fooFOO 。 目的地认为这些文件名是相同的,所以备份过程将foo复制到foo ,然后将FOO复制到foo 。 于是,我们失去了原来的foo 。 我们以这种方式丢失了很多文件。