Проверьте правильность скопированных файлов
После того, как я скопирую, скажем, 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 всех файлов, которые вы хотите скопировать, а затем сравнить их с скопированными:
- http://dll.nu/md5i/
- http://www.unix.com/unix-desktop-dummies-questions-answers/156854-script-compare-md5.html
Если вы хотите что-то простое и быстрое (это не будет работать в очень сложных сценариях), вы можете использовать Meld
sudo apt-get install meld
На "если все было скопировано правильно", я использую модифицированный cp (или mv), который включает контрольные суммы (опционально хранится в xattr, следовательно, он должен быть рассчитан только один раз для источника) http://sourceforge.net/projects/crcsum/