Я сделал "rsync -Sap --numeric-ids --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 завершил передачу нормально, все вроде нормально и «обновлено».
Тем не менее, каким-то образом / dev / md0 на 2 гигабайта меньше после того, что должно было быть передачей "из зеркала A в B".
Вывод df производился с помощью "df --sync". Я считаю это надежной цифрой. df никогда не врет, не так ли?
Важное различие между / dev / md0 и / dev / md1 заключается в том, что хотя оба они относятся к типу raid1, raid / dev / md0 в настоящее время имеет только 1 член массива. Мне интересно, почему в отчете df разные цифры?
Итак, у меня двоякий вопрос:
2 гигабайта пропущенных данных - это значимо. Если бы размер увеличился на 2 Гб, то этому было бы несколько простых объяснений: жесткие ссылки превратились в повторяющиеся файлы, файлы с дырами превратились в полностью заполненные файлы и так далее. Это вполне разумные объяснения.
Однако, поскольку новый размер меньше, вам следует сравнить, что изменилось. Вы же не хотите оказаться в ситуации, когда через 5 месяцев вы поймете, что что-то не так и у вас нет действующей резервной копии.
Резервные копии не важны. Реставрации важны. Мы не знаем, сработает ли восстановление, пока не проверим резервную копию.
Для небольшого количества файлов вы можете сделать diff -r /mnt/RAIDVault /mnt/RAIDVault-BACKUP
. Однако, если это остановится на полпути, его нельзя будет перезапустить с того места, где он остановился.
Для большого количества файлов рекомендую вычислять хеши всех файлов и искать отличия. Таким образом, если процесс остановится или прервется, вы сможете продолжить без особого труда.
Вот программа, которая будет генерировать 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
Мне было бы интересно узнать, какую разницу вы найдете!
На странице часто задаваемых вопросов по rsync можно найти хороший и подробный ответ по адресу https://sanitarium.net/rsyncfaq/#differentsizes
Существует несколько причин, по которым источник и цель могут иметь разные размеры:
В последний раз, когда я видел эту ситуацию, целевая копия находилась в файловой системе с нечувствительными к регистру именами файлов. У мастера были файлы с именем foo
и FOO
. Место назначения считает, что эти имена файлов совпадают, поэтому процесс резервного копирования скопировал foo
к foo
, затем он скопировал FOO
к foo
. Таким образом, мы потеряли оригинал foo
. Так мы потеряли много файлов.