Od czasu do czasu pobieram bardzo duży plik przez scp i za każdym razem istnieje małe prawdopodobieństwo, że połączenie zostanie przerwane i odcięte w połowie transferu.
Czy istnieje sposób, aby go wznowić?
Od czasu do czasu pobieram bardzo duży plik przez scp i za każdym razem istnieje małe prawdopodobieństwo, że połączenie zostanie przerwane i odcięte w połowie transferu.
Czy istnieje sposób, aby go wznowić?
Możesz wypróbować następującą metodę: zamiast scp użyj dd, aby pominąć pobraną część i dołączyć resztę do pliku.
sofar=`ls -l ./destfile | awk '{print $5}'`
ssh rsys "dd if=./srcfile bs=1 skip=$sofar" >> ./destfile
Możliwa optymalizacja: praca z dużymi blokami. Zostawmy to jako zadanie domowe.
dd
przy małych rozmiarach bloków może być powolny (zaledwie 350 kB / s tutaj). Na szczęściescp
transfery wydają się mieć 1024 bajty bloków. Jeśli więc do pliku (lub innego, przez odcięcie go do najbliższego bloku 1024 bajtów), można ją przyspieszyć tak:ssh rsys "dd if=./srcfile bs=1024 skip=$sofar" >> ./destfile
. (Zauważ, że$sofar
wtedy musi być liczba 1024 bajtów bloków do pominięcia!)rsys
w drugim wierszu jest tylko przykładowa nazwa hosta, a nie jakiś specjalny argumentssh
. Sugeruję zastąpienie go,user@host
aby uniknąć nieporozumień.Z
scp
nieJeśli oba końce go mają, możesz użyć
rsync -LvzP remoteserver:path/to/file localfile
do przesłania jednego pliku.źródło
Tak, istnieją sposoby wznowienia od momentu przerwania, ale nie jest to możliwe przy użyciu scp.
sftp reget filename
robi to, czego potrzebujesz. Yarek i Grawity dostarczyli prawidłowe rozwiązania, które dałem +1 dla obu, ale dla wznowienia od momentu przerwy lubię rsync. Podane przykładowe polecenia zakładają, że pobierasz plik ze zdalnego serwera na lokalną stację roboczą (pobieranie). Należy pamiętać, że dwa ostatnie parametry należy traktować jako plik_źródłowy i plik_docelowy w tej kolejności. Składnia nazwy pliku różni się w zależności od tego, czy plik źródłowy czy docelowy jest lokalny czy zdalny. Gdybym wysyłał (ładował) pliki [tekstowe], przepisałbym przykłady podane jako:I do rozwiązania rsync, dodaję
-e ssh
. Powinieneś zastanowić się, czy potrzebujesz gadatliwości, kompresji, zachowania własności, uprawnień, znacznika czasu, katalogów cyklicznych itp. Sprawdź strony podręcznika i Google, jeśli chodzi o parametr -L. Możesz chcieć, aby dowiązania symboliczne pozostały jako linki zamiast odwoływania się do nich.rsync -P -e ssh local_source_file remoteserver:path/to/interrupted_target_file
źródło
Nie ma innego rozwiązania (oprócz
rsync
lubdd
rozwiązania podane tutaj), które jestem zaskoczony nikt wymienić: to jestreput
rozkazsftp
.źródło
Pozwala określić limit czasu połączenia. Może uchronić twoje połączenie przed zerwaniem.
źródło
Tak, jeśli oba końce obsługują sftp - po
scp remoteuser@remotehost:/absolute/filename .
awarii możesz wznowić, wykonując,sftp remoteuser@remotehost
a następniereget /absolute/filename
wznowić pobieranie.źródło