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


14

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

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


2
Вы можете найти ответ здесь .
Таккат

Ответы:


16

Я использую 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- подробный (чтобы получить список несоответствий, несколько vs означает более подробный)
  • k - файл известных хэшей

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


14

Похоже, идеальная задача для 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опцию, чтобы выполнить фактическую синхронизацию.

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


1
rsync - определенно инструмент для этой работы, но он не сравнивает и не копирует diff-файлы как таковые. Он сравнивает файлы, используя размеры и хэши.
Джастин Форс

@JustinForce Используете размер? Конечно, разный размер гарантирует, что файл не точно такой же, но rsync очень универсален, он может опционально доверять метаданным (например, времени), чтобы избежать повторного чтения всех файлов. При копировании по сети он вычисляет скользящий хеш, чтобы точно определить общие части, чтобы избежать их передачи, но на локальном диске хеши по умолчанию не играют этой роли (если используются вообще). Вы даже можете попросить его поверить, что у более короткого места назначения уже есть правильный контент, и его просто нужно добавить, хотя давайте и остановимся на теме.
Стефан Гурихон


3

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

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

sudo apt-get install meld

0

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


1
Хотя ваш ответ на 100% правильный, для начинающего пользователя это также практически невозможно. Поэтому, пожалуйста, отредактируйте свой ответ и включите crccpв свой ответ шаги по загрузке, компиляции, установке и удалению ! ;-) Вы всегда можете оставить ссылку внизу вашего ответа в качестве источника для вашего материала ...
Fabby
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.