Próbowałem z SCP, ale napis „Negatywny rozmiar pliku”.
>scp matlab.iso xxx@xxx:/matlab.iso
matlab.iso: Negative file size
Próbowałem także przy użyciu SFTP, działało dobrze do momentu przesłania 2 GB pliku, a następnie przestało działać:
sftp> put matlab.iso
Uploading matlab.iso to /home/x/matlab.iso
matlab.iso -298% 2021MB -16651.-8KB/s 00:5d
o_upload: offset < 0
Masz pojęcie, co może być nie tak? Czy SCP i SFTP nie obsługują plików większych niż 2 GB? Jeśli tak, to jak mogę przesyłać większe pliki przez SSH?
Docelowym systemem plików jest ext4. Dystrybucja Linuksa to CentOS 6.5. System plików ma obecnie (dostępne) duże pliki (do 100 GB).
scp
sftp
large-files
eimrek
źródło
źródło
-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
. Ale jeśli korzystasz z 64-bitowego systemu 6.5, prawdopodobnie łatwiej byłoby mieć administratorów zainstalowanychopenssh-5.3p1-94.el6_6.1.x86_64
iopenssh-server-5.3p1-94.el6_6.1.x86_64
ze standardowych repozytoriów.Odpowiedzi:
Pierwotny problem (oparty na przeczytaniu wszystkich komentarzy do pytania OP) polegał na tym, że
scp
plik wykonywalny w systemie 64-bitowym był aplikacją 32-bitową. 32-bitowa aplikacja, która nie została skompilowana z „obsługą dużych plików”, kończy się na ograniczeniu wskaźników wyszukiwania2^32 =~ 4GB
.Możesz sprawdzić, czy
scp
jest 32-bitowy, używającfile
polecenia:W większości nowoczesnych systemów będzie to wersja 64-bitowa, więc nie nastąpi obcięcie pliku:
32-aplikacja powinna nadal być w stanie obsługiwać „duże pliki”, ale musi być skompilowana ze źródła z obsługą dużych plików, co najwyraźniej nie było w tym przypadku.
Zalecanym rozwiązaniem może być użycie pełnej standardowej dystrybucji 64-bitowej, w której aplikacje są domyślnie kompilowane jako 64-bitowe.
źródło
Rsync bardzo dobrze nadaje się do przesyłania dużych plików przez ssh, ponieważ jest w stanie kontynuować przesyłanie, które zostały przerwane z jakiegoś powodu. Ponieważ wykorzystuje funkcje skrótu do wykrywania równych bloków plików, funkcja kontynuacji jest dość solidna.
Zaskakujące jest to, że twoje wersje
sftp
/scp
nie wydają się obsługiwać dużych plików - nawet w przypadku 32-bitowych plików binarnych obsługa LFS powinna być obecnie dość standardowa.źródło
rsync
jest to dobry pomysł. Skorzystaj z tej-P
opcji, aby zarówno uzyskać wskazanie postępu, jak i poinstruować odbiorcę, aby zachował niekompletny plik na wypadek, gdyby przesyłanie zostało ponownie przerwane.Nie jestem pewien limitów rozmiaru plików SCP i SFTP, ale możesz spróbować obejść problem z podziałem:
Spowoduje to utworzenie 1 plików GiB, które domyślnie są nazywane jako
xaa, xab, xac, ...
. Następnie możesz użyć scp do przesłania plików:Następnie w systemie zdalnym odtwórz oryginalny plik za pomocą cat:
Oczywiście karami za to obejście są czas pracy operacji dzielenia i operacji cat, a także dodatkowe miejsce na dysku potrzebne w systemach lokalnych i zdalnych.
źródło