Как подтвердить, что файл скопирован на новый диск без ошибок?


4

Я хотел бы скопировать файлы с одного внешнего диска на диск, подключенный к сети. Я хочу убедиться, что нет ошибок.

Я знаю о хэш-файлах MD5, которые я вижу для больших отдельных файлов, загружаемых из Интернета. Я также знаю, что могу использовать терминал для «сравнения» двух наборов файлов.

Тем не менее, я ищу программный продукт, который мог бы подтвердить, что все файлы в файловой структуре были полностью скопированы искателем, или программный продукт, который сделал бы для меня копирование и подтвердил бы, что все биты точно тот же самый.

Файлы связаны с видео - и часто имеют размер более ТБ (не в одном файле - сложные вложенные файлы из нескольких папок)

Я в порядке, если есть команда терминала, которая может сделать копию и сравнить для меня. (хотя возможность видеть количество времени, оставшегося на копии, является очень хорошей функцией ... кроме того, я хочу убедиться, что я получаю ВСЕ из файла - вилки ресурсов и все)

Ответы:


8

или часть программного обеспечения, которая сделает для меня копирование и подтвердит, что все биты одинаковы.

Это то, что Rsync делает. Он может копировать один файл, целые деревья файлов, что угодно. И делает это надежным алгоритмом. В конце rsync вы можете быть уверены, что получатель получил именно то, что отправил из источника.

Там есть графический интерфейс для rsync под названием arRsync это может сделать работу с ним немного дружелюбнее, хотя это не работает для вызовов rsync-over-ssh.

Другое преимущество rsync в том, что он может выполнять копирование с возобновлением при прерывании. Особенно хорошо, если вы копируете много файлов или даже большие файлы по сетям, которые менее надежны.

Если вы копируете локальный диск и сеть, которые доступны на одном и том же Mac, вы можете сделать следующее:

rsync -avz /Volumes/LocallyAttachedDrive/path/to/big-movie.mov /Volumes/RemoteShare/path/

И вы все сделали.

Если это каталог (какие .app а) вы можете сделать полную рекурсивную копию с помощью:

rsync -avz /Volumes/LocallyAttachedDrive/path/to/my-bundle.app /Volumes/RemoteShare/path/

Если у вас нет доступа к приемнику уровня Finder / Bonjour, вы можете сделать rsync-over-ssh:

rsync -avz /Volumes/LocallyAttachedDrive/path/to/my-bundle.app remoteuser@remotehost:/Volumes/RemoteShare/path/

Общий ключ может быть создан, поэтому вам не нужно вводить пароль, если хотите.

Изменить: вы можете использовать rsync проверить, совпадают ли два дерева с --dry-run/-n вариант. Если у меня есть исходное дерево /Volumes/dir и я скопировал его /Volumes/ConnectedDrive/dir Я могу сравнить их с:

rsync -acvn /Volumes/dir /Volumes/ConnectedDrive/

Выходные данные скажут мне, если какие-либо файлы должны быть скопированы в приемник, чтобы сделать приемник равным источнику.

Например, если я синхронизировал два дерева:

> rsync -avz ./8779 ./a/
building file list ... done
8779/
8779/.DS_Store
8779/logs/
8779/logs/MasterLog.txt
8779/logs/StartLog.txt

sent 893980 bytes  received 98 bytes  596052.00 bytes/sec
total size is 10034671  speedup is 11.22

Сравнение их на равенство не должно давать никаких операций:

> rsync -acvn ./8779 ./a/
building file list ... done

sent 213 bytes  received 20 bytes  155.33 bytes/sec
total size is 10034671  speedup is 43067.26

Если бы приемник немного отличался, мы бы увидели вывод примерно так:

> echo foo >> a/8779/logs/MasterLog.txt 

> rsync -acvn ./8779 ./a/              
building file list ... done
8779/logs/MasterLog.txt

sent 219 bytes  received 26 bytes  490.00 bytes/sec
total size is 10034671  speedup is 40957.84

Теперь мы знаем MasterLog.txt файл не тот же.


Спасибо, Ян, правильно ли я понимаю, что я могу запустить rsync -vcn / Volumes / dir / Volumes / ConnectedServer / dir, чтобы он дал мне отчет, в котором было бы указано, поврежден ли какой-либо из файлов? (Если бы я уже скопировал некоторые с Finder?)
evilblender

1
Близко. / дело в rsync. Пытаться: rsync -avcn /Volumes/dir /Volumes/ConnectedServer/ Это должно делать свое дело. Я расширю свой ответ более подробной информацией.
Ian C.

Спасибо за подробное объяснение! Это очень ясно. Еще раз спасибо.
evilblender

1
md5 -r file1 file2

напечатает хэши обоих файлов, чтобы вы могли сравнить их с глазным яблоком. Флаг -r сначала печатает хэши (а не имена файлов в первую очередь), поэтому хэши выстраиваются в линию друг с другом на левом поле, что облегчает визуальное сравнение.


MD5 был сломан, я предлагаю заменить его на shasum -a 256 /path/to/file
Alexander

MD5 взломан только для криптографического использования. Пока не существует модели угроз, когда злоумышленник пытается изменить файл, не обнаружив его, MD5 подходит для использования здесь.
zigg

0

Я бы придерживался MD5, если вам нужна абсолютная проверка того, что файлы одинаковы. Вы можете написать небольшой bash-скрипт для рекурсии каталогов и генерирования / проверки хэша для каждого файла.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.