После того, как я скопировал, скажем, 50+ ГБ (30 000 файлов, включая различные форматы) файлов с внутреннего жесткого диска на внешний диск, есть ли способ узнать, все ли правильно скопировано? Кроме того, если я остановлюсь в промежутке, отменив операцию, а затем произнесу , слить , продолжая операцию, будет ли корректность попадать в цель?
Я мог бы использовать такие приложения, как back-in-time
, но я очень разборчив в копировании файлов, и в следующий раз я намерен использовать операцию copy
и сказать merge
вместо replace
. Желательно ли при копировании большого количества файлов?
Я использую 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
s означает более подробный),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
, чтобы выполнить фактическую синхронизацию.
Некоторые связанные вопросы:
В «если все было скопировано правильно», я использую модифицированный cp (или mv), который включает контрольную сумму (опционально хранится в xattr, следовательно, он должен быть рассчитан только один раз для источника) http: / /sourceforge.net/projects/crcsum/
Ситуация, о которой вы говорите, слишком сложна. Хотя вы можете написать скрипт для расчета MD5 всех файлов, которые вы хотите скопировать, а затем сравнить их с скопированными:
sudo apt-get install meld
Если приложения с графическим интерфейсом, предложенные в Средстве сравнения файлов и каталогов? , не делают этого за вас, попробуйте diff -rq /path/to/one /path/to/other
спокойно выполнить поиск по обоим каталогам, регистрируя только различия на экране.