Za scp
pomocą polecenia: rekursywnie przesłałem wiele plików i folderów :
scp -rp /source/folder [email protected]:/destination/folder
Czy po zakończeniu przesyłania muszę sprawdzić, czy wszystkie pliki zostały przesłane bez żadnego uszkodzenia, czy się tym scp
zajmuje (tzn. Wyświetla komunikat o błędzie, jeśli któryś z plików nie został poprawnie przesłany)?
scp
i towarzyszącego mu komunikatu o błędzie do stderr , skopiuje wszystko poprawnie i całkowicie.rsync
jeśli możesz. Kopiuje sprawdzanie poprawności dla każdego pliku po zakończeniu transakcji, więc warto go użyć, aby być trochę bezpieczniejszym.Odpowiedzi:
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, żescp
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śliscp
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).
źródło
Nigdy nie miałem problemu z korupcją po
scp
czymś, ale jeśli martwisz się tym, zawsze możesz uruchomićmd5sum <filename>
oba systemy, aby upewnić się, że są takie same.źródło
Według sugestii Davida-króla jest to
md5
oparte na rozwiązaniu rozwiązanie do sprawdzania integralności plików po przesłaniu. Uruchom następującą komendę raz pocd
ING/source/folder
na lokalnym komputerze i raz pocd
ing aby/destination/folder
na zdalnym serweremfind . -type f -print0 | xargs -0 -I {} md5sum {} | md5sum
. Wynikowy skrót powinien być identyczny po udanym przeniesieniu.Aktualizacja:
Zgodnie z tą odpowiedzią na podobne pytanie dotyczące ServerFault ,(Proszę sprawdzić tę odpowiedź przez @Gilles, aby uzyskać szczegółowe informacje). Alternatywnie do sprawdzania skrótów plików po przesłaniu, możesz użyćscp
nie gwarantuje integralność plikursync
do przesłania plików i sprawdzenia kodu powrotu.Aktualizacja 2: Poniższe sprawdza tylko, czy pliki i ich odpowiednie rozmiary są zgodne po przesłaniu:
find . -type f -print0 | xargs -0 -I {} stat --printf="%n %s\n" {} | sort | md5sum
źródło
scp
kodu powrotu jest wystarczające, a sprawdzanie skrótów jest bezużyteczne.scp
zwraca 0 nie gwarantuje, że system plików nie namieszałem, więc sprawdzanie skrótów jest nadal przydatny do sprawdzania integralności danych wrażliwych jeśli ktoś zdecydować się na stosowaniescp
przezrsync
.