Есть ли утилита (или какая-то магия оболочки), которая позволяет мне сравнивать два блочных устройства?
Подробности: у меня есть одно большое (0,5 ТБ) RAID-устройство, которое я скопировал на немного большее SATA-устройство с использованием dd. На устройстве имеется несколько разделов, однако я копирую с «родительского» устройства, а не с разделенных узлов устройства (например, я копирую / dev / hda, а не / dev / hda1, например).
Я хотел бы убедиться, что резервная копия хорошая / правильная.
Я думал о запуске md5sum на каждом устройстве, однако это не даст мне точного результата, так как второе устройство немного больше первого, и поэтому дополнительные байты изменят хэш.
источник
info cmp
: «Команда 'cmp' сравнивает два файла и, если они различаются, сообщает первый байт и номер строки, где они различаются."--bytes=LIMIT
опцию, устанавливаяLIMIT
значение в байтах меньшего устройства, чтобы останавливаться на конце меньшего диска (или границы раздела), неcmp
выходя с ненулевым состоянием.В зависимости от того, насколько заполнены накопители, может быть быстрее всего смонтировать файловые системы и сделать
В противном случае я бы сказал что-то вроде этого:
Очевидно, выясните, насколько большой вам нужно сделать
bs
иcount
остановиться (или просто раньше, если это намного удобнее) в конце меньшего диска.Или, благодаря комментарию enzotib, похоже, что вы можете использовать
cmp
, но вам понадобится-n
флаг, чтобы ограничить количество байтов до более короткого из двух дисков.источник
diff
подоболочки не будут читать все устройство перед записью.dd
записываетbs
байты сразу после чтения (или обработки, если указано, а не здесь), и они записывают вfifo
s, которые блокируются, пока не будут прочитаны.Вы ищете программное обеспечение для двоичных различий
rdiff
предназначен для резервного копирования и передачи по сети, посмотрите на rdiff-backup и duplicity для обеспечения резервного копирования
xdelta3
- это бинарный diff с открытым исходным кодом, инструменты дифференциального сжатия, дельта-сжатие VCDIFF (RFC 3284).
bsdiff
тоже !! Память голодна, не подходит для блочных устройств.
источник
Существует утилита bsdiff , которая делает именно такие вещи. Он делает это очень быстро и способен генерировать бинарный патч, если вам нужно.
Смотрите этот пост для некоторых объяснений вокруг него.
источник
bsdiff
Работа сложнее, чем просто сравнить два файла, поэтому я сомневаюсь, что это может быть быстрее, чем простойcmp
.Вы можете сравнить два блочных устройства разных размеров, используя
md5sum
это:(при условии, что устройство меньше
/dev/sda
)источник
Подумайте о запуске
fsck
в резервной копии. Возможно, вам придется поработать над некоторыми хитростями,losetup
чтобы получить петлевые устройства, установленные на разделах, встроенных в резервную копию, но если проверка файла показывает, что структура файла согласована, сами данные, вероятно, хороши.Если вам нужна полная контрольная сумма, вы можете использовать петлевые устройства со смещениями для просмотра внутренних «разделов» резервной копии и md5sum каждый по отдельности, но принудительное выполнение
fsck
может дать вам базовую идею гораздо быстрее, чем байтовое сравнение байтов или вычисления контрольной суммы.источник