Синхронизация двух сильно идентичных огромных файлов

7

У меня есть два файла объемом 300 ГБ на разных томах:

  • зашифрованная локальная резервная копия
  • Зашифрованная «удаленная» резервная копия на NAS, которая есть).

По дизайну эти два файла идентичны по размеру, а также в основном (> 90%) идентичны по содержанию ...

Есть ли эффективный инструмент для «rsync» этих файлов и только копирование по различным разделам, поэтому целевой файл становится идентичным исходному?

Возможно, что-то, что строит контрольные суммы блоков, чтобы понять это, я не знаю ... (что-то более эффективное, чем cp -f ... rsync будет afaik также захватить весь исходный файл, чтобы перезаписать)

    
задан Frank Nocke 25.02.2017 в 13:56
источник

2 ответа

9

rsync можно использовать для этого.

--no-whole-file или --no-W используют синхронизацию на уровне блоков вместо синхронизации уровня файла.

Тестовый пример

Создал случайные текстовые файлы, используя /dev/random и большие куски текстового файла с веб-сайтов, как показано ниже. Эти 4 файла различны во всем содержимом. tf_2.dat - наш целевой файл.

~/logs/rs$ ls -tlh    
-rw-rw-r-- 1 vayu vayu 2.1G  二  25 23:11 tf_2.dat
-rw-rw-r-- 1 vayu vayu 978M  二  25 23:11 a.txt
-rw-rw-r-- 1 vayu vayu 556K  二  25 23:10 file2.txt
-rw-rw-r-- 1 vayu vayu 561K  二  25 23:09 nt.txt

Затем скопировали их на другой жесткий диск, используя rsync (пункт назначения пуст).

rsync -r --stats rs/ /mnt/raid0/scratch/t2

Получен следующий стат.

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 0
Number of deleted files: 0
Number of regular files transferred: 4
Total file size: 3,260,939,140 bytes
Total transferred file size: 3,260,939,140 bytes
Literal data: 3,260,939,140 bytes
Matched data: 0 bytes
File list size: 0
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 3,261,735,553
Total bytes received: 92

sent 3,261,735,553 bytes  received 92 bytes  501,805,483.85 bytes/sec
total size is 3,260,939,140  speedup is 1.00

Теперь я объединять файлы, чтобы создать новый файл, который содержит около 60% старых данных.

cat file2.txt a.txt >> tf_2.dat

Теперь я синхронизую две папки на этот раз, используя параметр --no-W .

rsync -r --no-W --stats rs/ /mnt/raid0/scratch/t2

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 0
Number of deleted files: 0
Number of regular files transferred: 4
Total file size: 4,289,593,685 bytes
Total transferred file size: 4,289,593,685 bytes
Literal data: 1,025,553,047 bytes
Matched data: 3,264,040,638 bytes
File list size: 0
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 1,026,127,265
Total bytes received: 611,604

sent 1,026,127,265 bytes  received 611,604 bytes  21,169,873.59 bytes/sec
total size is 4,289,593,685  speedup is 4.18

Вы можете видеть, что большие данные совпадают и ускоряются.

Затем я снова попробую, на этот раз я объединю несколько файлов оболочки с целью ( tf_2.dat ), так что изменение равно ~ 2%,

cat *.sh >> rs/tf_2.dat

И снова синхронизируйте, используя rsync .

rsync -r --no-whole-file --stats rs/ /mnt/raid0/scratch/t2


Number of files: 5 (reg: 4, dir: 1)
Number of created files: 0
Number of deleted files: 0
Number of regular files transferred: 4
Total file size: 4,289,727,173 bytes
Total transferred file size: 4,289,727,173 bytes
Literal data: 178,839 bytes
Matched data: 4,289,548,334 bytes
File list size: 0
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 541,845
Total bytes received: 690,392

sent 541,845 bytes  received 690,392 bytes  43,236.39 bytes/sec
total size is 4,289,727,173  speedup is 3,481.25

Мы видим большое совпадение и ускорение, обеспечивающее быструю синхронизацию.

    
ответ дан ankit7540 25.02.2017 в 15:43
источник
1

Вы также можете попытаться использовать Ссылка (отказ от ответственности: я являюсь автором этой конкретной вилки). Преимущество перед rsync заключается в том, что он читает файл только один раз (насколько я знаю, rsync не может быть уверен в том, что предполагается, что два файла отличаются друг от друга, не вычисляя контрольную сумму до того, как она начнет передачу дельта. Излишне говорить, что при чтении 160 ГБ жестких дисков дважды не является хорошей стратегией). Замечание: текущая версия blockync хорошо работает над соединениями с коротким RTT (например, localhost, LAN и локальным WiFi), но не особенно полезна для синхронизации на больших расстояниях.

    
ответ дан user3584196 12.01.2018 в 01:30