Проверьте правильность скопированных файлов
После того, как я скопирую, скажем, 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/