Проверьте правильность скопированных файлов

После того, как я скопирую, скажем, 50+ ГБ (30000 файлов, включая различные форматы) файлов с внутреннего жесткого диска на внешний диск, есть ли способ узнать, все ли правильно скопировано? Кроме того, если я остановлюсь в промежутке, отменив операцию, а затем произнесу слияние при продолжении операции, ударится ли правильность?

Я мог бы использовать такие приложения, как back-in-time но я очень разборчив в копировании файлов и в следующий раз собираюсь использовать copy операция и сказать merge вместо replace, Желательно ли при копировании большого количества файлов?

5 ответов

Решение

Я использую hashdeep для проверки резервных копий / восстановления и иногда для проверки повреждения файловой системы в RAID.

Скорость зависит от того, какие хэш-функции вы используете (некоторые загружают больше ресурсов процессора, чем другие), а также от скорости чтения ваших дисков. В моей системе hashdeep может обрабатывать или проверять около 1 ТБ / час со скоростью чтения md5 и 300 МБ / с.


Пример расчета контрольных сумм и сохранения их в файле:

cd my-data
hashdeep -rlc md5 . > ~/checksums.txt

Параметры:

  • r - рекурсивный
  • l - использовать относительные пути
  • c - указать хеш-функцию
  • . - рекурсивный запуск в текущем каталоге
  • > - перенаправить вывод в указанный файл

Смотрите справочную страницу.


Пример проверки контрольных сумм и распечатки списка различий:

$ cd /mnt/my-backup
$ hashdeep -ravvl -k ~/checksums.txt .
hashdeep: Audit passed
          Files matched: 40914
Files partially matched: 0
            Files moved: 0
        New files found: 0
  Known files not found: 0

Параметры:

  • a - аудит (сравните со списком известных контрольных сумм)
  • v - подробный (чтобы получить список несоответствий, несколько vс означает более многословный)
  • k - файл известных хэшей

Обратите внимание, что по состоянию на март 2016 года hashdeep кажется заброшенным.

Похоже, идеальная задача для rsync. Rsync сравнивает и копирует различия.

rsync Утилита впервые всплыла у меня в голове, когда я увидел твой вопрос. Выполнение чего-либо подобного приведенному ниже может быстро показать, какие файлы находятся в каталоге a но не в b:

$ rsync -rcnv a/* b/

-r will recurse into the directories
-c will compare based on file checksum
-n will run it as a "dry run" and make no changes, but just print out the files 
   that would be updated
-v will print the output to stdout verbosely

Это хороший вариант, потому что вы можете сравнить содержимое файлов, чтобы убедиться, что они совпадают. rsyncДельта-алгоритм оптимизирован для этого типа использования. Тогда, если вы хотите сделать b сопоставить содержимое aВы можете просто удалить -n возможность выполнить фактическую синхронизацию.

Некоторые связанные вопросы:

Если приложения с графическим интерфейсом предложены в инструменте сравнения файлов и каталогов? не делай это для себя, попробуйте diff -rq /path/to/one /path/to/other спокойно проходить по обоим каталогам, регистрируя только различия на экране.

Ситуация, о которой вы говорите, слишком сложна. Хотя вы можете написать скрипт для расчета MD5 всех файлов, которые вы хотите скопировать, а затем сравнить их с скопированными:

Если вы хотите что-то простое и быстрое (это не будет работать в очень сложных сценариях), вы можете использовать Meld

sudo apt-get install meld

На "если все было скопировано правильно", я использую модифицированный cp (или mv), который включает контрольные суммы (опционально хранится в xattr, следовательно, он должен быть рассчитан только один раз для источника) http://sourceforge.net/projects/crcsum/

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