Порівняння необроблених блокових пристроїв


12

Чи є утиліта (чи якась магія оболонки), яка дозволяє мені порівнювати два блокові пристрої?

Докладніше: У мене є один великий (0,5 ТБ) RAID-пристрій, який я створив резервну копію на дещо більший пристрій SATA за допомогою dd. Пристрій має на ньому кілька розділів, однак я копіюю з 'батьківського' пристрою, а не з розділених вузлів пристрою (наприклад, я копіюю / dev / hda, а не / dev / hda1, наприклад).

Я хотів би переконатися, що резервне копіювання добре / правильне.

Я думав про запуск md5sum на кожному пристрої, однак це не дасть мені точного результату, оскільки другий пристрій трохи більший за перший, і таким чином додаткові байти змінять хеш.

Відповіді:


13

Я використовував би команду

cmp /dev/hda /dev/hdb

він зупиняється на першому байті, що розрізняється, виписуючи його зміщення, або на EOF на коротшому.


Я не бачу в мапарі нічого про зупинку на EOF, це десь задокументовано?
Кевін

Фактично, статус виходу говорить: "1: Файли різні; це включає випадок, коли один файл ідентичний першій частині іншого". Це, мабуть, означає, що він не повідомляє їх про однакові, якщо коротший.
Кевін

@Kevin: from info cmp: "Команда 'cmp" порівнює два файли, і якщо вони відрізняються, повідомляє номер першого байта та рядка там, де вони відрізняються. "
enzotib

1
Можна скористатися --bytes=LIMITопцією, встановивши LIMITзначення на байтажний розмір меншого пристрою, щоб зупинитися в кінці меншого диска (або межі розділу), не маючи cmpвиходу з ненульовим статусом.
rozcietrzewiacz

якщо у мене є копія / dev / loop0 of / dev / sda, і я вношу зміни до / dev / loop0, як я можу додати нові зміни до / dev / sda ?? Дякую
Milor123

2

Залежно від того, наскільки справді накопичені накопичувачі, можливо, найшвидше монтувати файлові системи та робити

diff -qr /mnt/root1 /mnt/root2

Інакше я б сказав щось подібне:

diff -q <(dd bs=1M count=500K if=/dev/sda) <(dd bs=1M count=500K if=/dev/sdb)

Очевидно, з’ясуйте, наскільки велике вам потрібно зробити, bsі countзупинитися на (або трохи раніше, якщо це набагато зручніше) в кінці меншого приводу.

Або, завдяки коментарю enzotib, це здається, що ви можете використовувати cmp, але вам знадобиться -nпрапор, щоб обмежити кількість байтів на коротший з двох дисків.

cmp /dev/sda /dev/sdb -n 500GB

На жаль, я не в змозі встановити пристрій як його NTFS-обсяг, і у мене є LiveCD без потрібних драйверів на ньому. У другій команді використовувані допоміжні оболонки не намагайтеся засмоктувати весь пристрій перед тим, як подавати його в diff?
alanxz

1
@alanxz Ні, передплатки diffне прочитають весь пристрій перед його написанням. ddзаписує bsбайти відразу після їх читання (або обробляється, якщо вказано, не тут), і вони записують в fifos, який блокують, поки їх не прочитають.
Кевін

Я більше думав на рівні оболонки (або що інше реалізує FIFO). Але це відповідає на моє запитання!
alanxz

2

Ви шукаєте бінарне програмне забезпечення різного рівня

rdiff
призначений для резервного копіювання та передачі мережі, дивіться на rdiff-резервне копіювання та подвійність для резервного завантаження

xdelta3
- це бінарний диференціальний інструмент диференційного стиснення з відкритим кодом, дельта стиснення VCDIFF (RFC 3284).

bsdiff
теж !! пам'ять голодна, не підходить для блокових пристроїв.


1

Є утиліта під назвою bsdiff , яка робить саме такі речі. Це робиться це дуже швидко, і він може створити бінарний патч, якщо вам потрібно.

Дивіться цей пост, щоб отримати пояснення навколо нього.


bsdiffРобота є більш складною, ніж просто порівняння двох файлів, тому я сумніваюся, що вона може бути швидшою, ніж простіша cmp.
enzotib

Посилання розірвано.
Оуен Полінг

1

Можна порівняти два блок-пристрої різного розміру, використовуючи md5sumтакий:

(припустимо, що менший пристрій є /dev/sda)

# md5sum /dev/sda && head -c $(blockdev --getsize64 /dev/sda) /dev/sdb | md5sum

0

Подумайте про запуск fsckрезервної копії. Можливо, вам доведеться зіграти кілька хитрощів, losetupщоб встановити пристрої зворотного зв'язку на розділи, вбудовані в резервну копію, але якщо перевірка файлу говорить, що структура файлу є узгодженою, самі дані, ймовірно, хороші.

Якщо ви хочете отримати повну контрольну суму, ви можете використовувати пристрої зворотного зв'язку із зміщенням для перегляду внутрішніх "розділів" резервної копії та md5sum кожен окремо, але примусовий fsckможе дати вам основну ідею набагато швидше, ніж байт для порівняння байтів або контрольної суми.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.