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

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

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

Дизайном эти два файла идентичны в размере и также главным образом (> 90%) идентичный в содержании...

Существует ли эффективный инструмент к „rsync “эти файлы, и только скопируйте по отличающимся разделам, таким образом, конечный файл становится идентичным с источником?

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

7
задан 25 February 2017 в 06:56

2 ответа

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

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

11
ответ дан 23 November 2019 в 06:20

Можно также попытаться использовать https://bitbucket.org/ppershing/blocksync (правовая оговорка: Я - автор этого конкретного ветвления). Преимущество перед rsync состоит в том, что он читает файл только однажды (насколько я знаю, что rsync не может быть убежден предположить, что два файла отличаются, не вычисляя контрольную сумму, прежде чем он запустит передачу дельты. Само собой разумеется, чтение жестких дисков на 160 ГБ дважды не является хорошей стратегией). Предупреждение - текущая версия blocksync работает хорошо по соединениям короткого RTT (например, localhost, LAN и локальный WiFi), но не особенно полезна для синхронизации по большим расстояниям.

1
ответ дан 23 November 2019 в 06:20

Другие вопросы по тегам:

Похожие вопросы: