Używam dd
do kopiowania danych ze starego dysku twardego na nowy. Chcę mieć pewność, że integralność danych jest bezpieczna.
Na tę odpowiedź Gilles mówi
Jeśli [dd] zakończyło się pomyślnie, tworzenie kopii zapasowej jest prawidłowe, z wyjątkiem błędu sprzętowego…
Co to dokładnie znaczy? Czy dd
ma wbudowaną weryfikację?
Gdybym zamiast tego używał rsync, uruchamiam również drugie przejście --checksum
w celu weryfikacji. Czy tego rodzaju paranoja jest uzasadniona?
dd
verification
integrity
Krogulec
źródło
źródło
rsync
byłyby prawdopodobnie najprostsze.Odpowiedzi:
dd
lub żadna inna aplikacja nie ma „wbudowanej weryfikacji” w takim sensie, o jakim prawdopodobnie myślisz: nie odczytuje danych z nośnika pamięci w celu porównania z tym, co zostało napisane. To jest zadanie systemu operacyjnego.Naprawdę nie jest możliwe wykonanie weryfikacji odczytu do sprzętu z aplikacji. To działałoby w niektórych scenariuszach, ale w większości przypadków nic nie osiągnęłoby. Aplikacja mogłaby odczytać to, co właśnie napisała, jeśli zapisuje bezpośrednio na nośniku pamięci , ale zwykle odczytałby z pamięci podręcznej w pamięci, co nie dałoby żadnej użytecznej gwarancji. W przykładzie zacytowanie ,
dd
pisze do rury, a w tym przypadku nie ma żadnej kontroli nad tym, co dzieje się z danymi w dalszej linii. W twoim przykładzie rsync, drugie przejściersync --checksum
nie ma sensu: teoretycznie może złapać błąd, ale w praktyce, jeśli błąd się zdarzy, wtedy drugie przejście prawdopodobnie nie zgłosi niczego złego, więc marnujesz wysiłek na coś, co nie daje użytecznej pewności.Jednak aplikacje nie sprawdza, co dzieje się z danymi, w tym sensie, że ich zweryfikowania, czy system operacyjny przyjął odpowiedzialność za dane. Wszystkie wywołania systemowe zwracają status błędu. Jeśli wywołanie systemowe zwraca status błędu, aplikacja powinna propagować ten błąd do użytkownika, generalnie poprzez wyświetlenie komunikatu o błędzie i zwrócenie niezerowego statusu wyjścia.
Uwaga:
dd
jest to wyjątek: w zależności od parametrów wiersza poleceńdd
może zignorować niektóre błędy . Jest to niezwykle niezwykłe:dd
jest to jedyne wspólne polecenie z tą właściwością. Używajcat
zamiastdd
, w ten sposób nie ryzykujesz korupcji i może to być szybsze .W łańcuchu kopiowania danych mogą wystąpić dwa rodzaje błędów.
źródło
dd if=/dev/sdc of=/dev/sdb bs=4M
, więc rozumiem, że kwestie ignorowania błędów i prędkości (mniej więcej w porównaniu docat
) są dyskusyjne. Czy chcesz po prostu sprawdzić rozmiar, montującdf
?Nie,
dd
nie dokonuje wyraźnej weryfikacji. Jeśli potrzebujesz / potrzebujesz kopii dysku lub jakiejkolwiek jego części, zweryfikowanej przez sąd, skorzystajdcfldd
z ulepszonej wersjidd
opracowanej przez Departament Obrony Komputerowej Departamentu Obrony USA.źródło
Jedynym sposobem na „pewność” jest wykonanie dodatkowej operacji odczytu i porównania (po usunięciu pamięci podręcznej).
Poza tym
dd
wykrywa błędy odczytu i zapisu w taki sam sposób, jak robią to wszystkie inne programy ... działa, jeśli napędy (i inne komponenty) zgłaszają błędy; dla dysków, które akceptują dane w trybie dyskretnym bez ich zapisywania, nie masz szczęścia.Jeśli nie możesz ufać, że Twój sprzęt jest niezawodny, sprawy się komplikują ...
źródło
dd
wykrywania błędów.dd
ma poważne problemy uszkodzenia danych , ale szczególne przypadki, takie jak te nie były częścią mowy.dd
. Prawdziwym rozwiązaniem jest użycie czegokolwiek, aledd
specjalizacja polega na cichym uszkodzeniu danychdd
.dd
aby ignorować błędy. Nie można dokładnie winić programu za wykonanie dokładnie tego, o co go prosiłeś.dd
aby nie ignorować błędów? I nie,conv=noerror
to nie jest poprawna odpowiedź. Zobacz na przykład odpowiedź frostschutza . I zrobić winę projektdd
za błędy spowodowane ignorując tryb domyślny, i jeden, który nie może być wyłączony, nie znając jego wewnętrznych mechanizmów bardzo precyzyjnie.Tak, wadliwy sprzęt może wstawiać losowe bity błędu w danych z szybkością jednego bitu na liczbę megabajtów, jest to możliwe i czasami ma to miejsce w praktyce.
Zwykle używam skrótu md5 lub sha1, aby sprawdzić, czy dane są nienaruszone, ponownie czytając zarówno źródło, jak i miejsce docelowe, np .:
Zakłada się, że dane są znacznie większe niż pamięć podręczna systemu plików, w przeciwnym razie może być konieczne ponowne uruchomienie systemu w celu zweryfikowania rzeczywistych danych na nośniku, a nie zawartości pamięci podręcznej, lub użycie innego systemu.
źródło
Od
man dd
:dd
sprawdza, czy rozmiary bloku wejściowego / wyjściowego są dopasowane przy każdym kopiowaniu bloku. Jeśli nie, obsługuje błąd z ostrzeżeniem lub błąd krytyczny (zastąpiony przeznoerror
). Dlategodd
działa praktycznie przez cały czas.Mimo to nie zastępuje ręcznego sprawdzania integralności dysku. Jeśli informacja jest dla ciebie cenna, to tak, twoja paranoja jest uzasadniona . Uruchom ręczną weryfikację po
dd
zakończeniu.źródło
dd
nie działa praktycznie cały czas: zbs
parametrem ignoruje niektóre błędy .