scp
sprawdza, czy skopiował wszystkie dane wysłane przez drugą stronę. Integralność transferu jest gwarantowana przez protokół kanału kryptograficznego. Nie musisz więc weryfikować integralności po przeniesieniu. Byłoby to zbędne i bardzo mało prawdopodobne jest wykrycie jakiegokolwiek błędu sprzętowego, ponieważ porównywane dane prawdopodobnie zostałyby odczytane z pamięci podręcznej. Okresowa weryfikacja danych może być przydatna, ale weryfikacja natychmiast po przesłaniu jest bezcelowa.
Musisz jednak upewnić się, że scp
nie oznacza to, że coś poszło nie tak. Powinien pojawić się komunikat o błędzie, ale wiarygodnym wskaźnikiem jest to, że scp
zwraca niezerowy kod wyjścia, jeśli coś poszło nie tak.
Mówiąc dokładniej, wiesz, że plik został poprawnie przesłany, jeśli scp
zwraca 0 (tj. Kod statusu powodzenia). Sprawdzenie, czy kod wyjścia ma wartość 0, jest konieczne po uruchomieniu dowolnego polecenia. Jeśli scp
zwróci status błędu lub zostanie zabity przez sygnał, lub jeśli nigdy nie umrze, ponieważ system ulega awarii lub traci moc podczas działania, nie masz żadnych gwarancji. W szczególności, ponieważ scp
plik jest kopiowany bezpośrednio do jego ostatecznej nazwy, oznacza to, że w przypadku awarii systemu możesz otrzymać plik częściowy. Na pewno skopiowana część jest poprawna, ale plik może zostać obcięty.
Aby uzyskać większą niezawodność, użyj rsync zamiast scp. O ile nie podano inaczej, rsync zapisuje plik tymczasowy i przenosi go na miejsce po zakończeniu. Zatem, jeśli rsync zwróci kod sukcesu, wiesz, że plik jest obecny i poprawna, kompletna kopia; jeśli rsync nie zwrócił kodu błędu, plik nie będzie obecny (chyba że istnieje starsza wersja pliku, w którym to przypadku starsza wersja nie zostanie zmodyfikowana).
scp
i towarzyszącego mu komunikatu o błędzie do stderr , skopiuje wszystko poprawnie i całkowicie.