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.

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.


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

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.


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.


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

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.