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żywaj cat
zamiast dd
, 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.
- Korupcja: podczas transferu trochę się przewraca. Nie ma sposobu, aby to zweryfikować na poziomie aplikacji, ponieważ jeśli tak się stanie, jest to spowodowane błędem programistycznym lub sprzętowym, który może spowodować takie samo uszkodzenie podczas odczytu. Jedynym przydatnym sposobem sprawdzenia, czy nie doszło do takiego uszkodzenia, jest fizyczne odłączenie nośnika i ponowienie próby, najlepiej na innym komputerze, na wypadek gdyby problem dotyczył pamięci RAM.
- Obcięcie: wszystkie skopiowane dane zostały skopiowane poprawnie, ale niektóre z nich w ogóle nie zostały skopiowane. Ta jedna jest warta sprawdzenia czasami, w zależności od stopnia skomplikowania polecenia. Aby to zrobić, nie musisz czytać danych: po prostu sprawdź rozmiar.