Я заметил, что оригинальный пост довольно старый, однако, я думаю, что эта информация все еще может быть полезна для тех, кто ищет решение для проверки правильности копирования файлов. Rsync может быть лучшим методом для копирования данных, и ответы, приведенные в этой теме, хороши, однако для тех, кто не знаком с Linux, я попытаюсь дать более подробное объяснение.
Сценарий: вы просто скопировали данные с диска на другой, с большим количеством подкаталогов и файлов. Вы хотите убедиться, что все данные скопированы правильно.
Сначала убедитесь, что md5deep установлен, введя команду md5deep -v
.
Если вы получаете сообщение, в котором говорится что-то вроде «команда не найдена», то установите md5deep by apt-get install md5deep
.
Предполагается, что вы хотите иметь дело только с обычными файлами. Если вы хотите работать с другими типами файлов, обратитесь к флажку -o в руководстве по md5deep. ( man md5deep
)
Теперь все готово, и мы предполагаем, что вы скопировали файлы из /mnt/orginal
в /mnt/backup
, заменив их на любые каталоги, которые вы используете.
Сначала перейдите в исходный каталог, это исходный источник для файлов, которые вы скопировали или скопировали:
cd /mnt/orginal
Затем создайте контрольную сумму каждого файла:
md5deep -rel -o f . >> /tmp/checksums.md5
Эта команда объяснила:
-r
включает рекурсивный режим
-e
отображает индикатор прогресса
-l
включает относительные пути к файлам.
-o f
работать только на обычных файлах (не блочных устройствах, именованных каналах и т. д.)
.
говорит md5deep запускаться в текущем каталоге.
>> /tmp/checksums.md5
говорит md5deep перенаправить весь вывод /tmp/checksums.md5
.
Обратите внимание, если вы хотите перезаписать содержимое в предыдущих версиях /tmp/checksums.md5
, используйте, >
а не>>
Обратите внимание, что эта команда может занять довольно много времени, в зависимости от скорости ввода-вывода и размера данных. Вы можете поэкспериментировать с nice и / или ionice, чтобы увеличить производительность md5deep, но это выходит за рамки этого ответа.
Когда создание контрольных сумм завершено, у вас есть файл, в котором есть записи, похожие на:
69c0a826b29c8f40b7ca5e56e53d7f83 ./oldconfig-11-09-2013/etc2/apm/event.d/20hdparm 651f3c7f79a14332f9fa7bb368039210 ./oldconfig-11-09-2013/etc2/apm-09fb0bdbdfd5fd6f5df4bd4fd4fd4fd4fd4fd4ef4 /etc2/apm/scripts.d/alsa e9b9131660a8013983bc5e19d7d669eb ./oldconfig-11-09-2013/etc2/ld.so.cache
Первый столбец - контрольная сумма md5, а второй столбец - относительный путь к файлу, к которому принадлежит контрольная сумма.
Если вы хотите увидеть, сколько файлов существует в файле контрольной суммы, введите команду:
wc /tmp/checksums.md5 -l
Теперь вы хотите проверить правильность скопированных данных:
cd /mnt/backup
md5deep -o f -reX /tmp/checksums.md5 . >> /tmp/compare.result
Единственное отличие от того, когда мы создали контрольные суммы, - это -X, который отображает текущий хэш файла, если запись в файле checkums.md5 не совпадает. Таким образом, к концу теста, если /tmp/compare.result
он пуст, вы можете быть уверены, что все файлы скопированы правильно, поскольку контрольные суммы совпадают.
Обратите внимание, что только файлы, перечисленные в /tmp/checksums.md5
файле, будут проверены на правильность контрольной суммы. Если в /mnt/backup
каталоге есть какие-либо дополнительные файлы , md5deep не уведомит вас об этом.
Заметки:
Вам не обязательно использовать перенаправление для хранения выходных файлов. Обратитесь к руководству md5deep для получения дополнительной информации.
Возможно, вам придется запускать команды md5deep от имени пользователя root, в зависимости от прав доступа к файлам, с которыми вы работаете.
sudo apt-get install md5deep
md5deep -rel /path/to/your/directory/ > directory_hash.md5
md5deep -X directory_hash.md5 -r /path/to/your/second/direcotory
спасибо большое.