Porównanie surowych urządzeń blokowych

12

Czy istnieje narzędzie (lub jakaś magia powłoki), które pozwala mi porównać dwa urządzenia blokowe?

Szczegóły: Mam jedno duże (0,5 TB) urządzenie RAID, którego kopię zapasową wykonałem na nieco większym urządzeniu SATA przy użyciu dd. Na urządzeniu jest kilka partycji, jednak kopiuję z urządzenia „nadrzędnego”, a nie z węzłów urządzenia podzielonego na partycje (np. Kopiuję / dev / hda i nie / dev / hda1).

Chciałbym sprawdzić, czy kopia zapasowa jest dobra / poprawna.

Myślałem o uruchomieniu md5sum na każdym urządzeniu, ale to nie da mi dokładnego wyniku, ponieważ drugie urządzenie jest nieco większe niż pierwsze, a zatem dodatkowe bajty zmienią skrót.

alanxz
źródło

Odpowiedzi:

13

Użyłbym polecenia

cmp /dev/hda /dev/hdb

zatrzyma się na pierwszym różniącym się bajcie, zapisując swoje przesunięcie, lub na EOF na krótszym.

enzotib
źródło
Nie widzę na stronie man nic o zatrzymywaniu się na EOF, czy to gdzieś udokumentowano?
Kevin
W rzeczywistości status wyjścia mówi: „1: Pliki są różne; obejmuje to przypadek, w którym jeden plik jest identyczny z pierwszą częścią drugiego”. Wydaje się to sugerować, że nie zgłasza ich jako identycznych, jeśli ktoś jest krótszy.
Kevin
@Kevin: from info cmp: "Polecenie 'cmp' porównuje dwa pliki, a jeśli się różnią, podaje pierwszy bajt i numer linii, gdzie się różnią."
enzotib
1
Możesz użyć tej --bytes=LIMITopcji, ustawiając LIMITwartość bajtu mniejszego urządzenia, aby zatrzymać się na końcu mniejszego dysku (lub granicy partycji) bez cmpwyjścia z niezerowym statusem.
rozcietrzewiacz
jeśli mam kopię / dev / loop0 z / dev / sda i robię zmiany w / dev / loop0, jak mogę dodać nowe zmiany do / dev / sda? Dziękuję
Milor123,
2

W zależności od zapełnienia dysków dyski mogą być najszybsze do zainstalowania systemów plików i wykonania

diff -qr /mnt/root1 /mnt/root2

W przeciwnym razie powiedziałbym coś takiego:

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

Oczywiście dowiedz się, jak duże musisz zrobić bsi countzatrzymać się na (lub tuż przed, jeśli jest to o wiele wygodniejsze) na końcu mniejszego dysku.

Lub, dzięki komentarzowi enzotib, wygląda na to, że możesz użyć cmp, ale potrzebujesz -nflagi, aby ograniczyć liczbę bajtów do krótszego z dwóch dysków.

cmp /dev/sda /dev/sdb -n 500GB
Kevin
źródło
Niestety nie jestem w stanie zamontować urządzenia jako woluminu NTFS i mam LiveCD bez odpowiednich sterowników. W przypadku drugiego polecenia używane powłoki nie próbują wessać całego urządzenia do pamięci przed wprowadzeniem go do pliku różnicowego?
alanxz
1
@alanxz Nie, diffpodpowłoki nie będą czytać całego urządzenia przed jego zapisaniem. ddzapisuje bsbajty natychmiast po przeczytaniu (lub przetwarzaniu, jeśli jest to określone, nie tutaj) i zapisuje do fifos, które blokują, dopóki nie zostaną odczytane.
Kevin
Myślałem bardziej na poziomie powłoki (lub cokolwiek, co implementuje FIFO). Ale to odpowiada na moje pytanie!
alanxz
2

Szukasz oprogramowania do różnicowania binarnego

rdiff
jest przeznaczony do tworzenia kopii zapasowych i transmisji w sieci, spójrz na rdiff-backup i duplikowanie pod kątem tworzenia kopii zapasowych

xdelta3
to open-source binarny plik różnicowy, narzędzia do kompresji różnicowej, kompresja delta VCDIFF (RFC 3284).

bsdiff
też jest !! głodny pamięci, nie nadaje się do urządzeń blokowych.

gustavodiazjaimes
źródło
1

Istnieje narzędzie o nazwie bsdiff , które robi dokładnie takie rzeczy. Robi to naprawdę szybko i jest w stanie wygenerować łatkę binarną, jeśli potrzebujesz.

Zobacz ten post, aby uzyskać wyjaśnienie.

Coren
źródło
bsdiffpraca jest bardziej złożona niż zwykłe porównywanie dwóch plików, więc wątpię, że może być szybsza niż prostsza cmp.
enzotib
Link jest zepsuty.
Owen Pauling,
1

Możesz porównać dwa urządzenia blokowe o różnych rozmiarach, używając md5sumtego:

(zakładając, że mniejsze urządzenie to /dev/sda)

# md5sum /dev/sda && head -c $(blockdev --getsize64 /dev/sda) /dev/sdb | md5sum
EmmaV
źródło
0

Rozważ uruchomienie fsckkopii zapasowej. Może być konieczne wykonanie kilku sztuczek, losetupaby ustawić urządzenia pętli zwrotnej na partycjach osadzonych w kopii zapasowej, ale jeśli podczas sprawdzania pliku stwierdzono, że struktura pliku jest spójna, prawdopodobnie same dane są dobre.

Jeśli potrzebujesz pełnej sumy kontrolnej, możesz użyć urządzeń sprzężenia zwrotnego z przesunięciami, aby spojrzeć na wewnętrzne „partycje” kopii zapasowej i md5sum oddzielnie, ale wymuszone fsckmogą dać ci podstawowy pomysł znacznie szybciej niż bajt dla porównań bajtów lub obliczeń sumy kontrolnej.

Evan Langlois
źródło