Mentransfer file besar (8 GB) melalui ssh

27

Saya mencobanya dengan SCP, tetapi tertulis "Ukuran file negatif".

>scp matlab.iso xxx@xxx:/matlab.iso
matlab.iso: Negative file size

Juga mencoba menggunakan SFTP, berfungsi dengan baik hingga 2 GB file telah ditransfer, lalu berhenti:

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

Adakah yang tahu apa yang salah? Jangan SCP dan SFTP mendukung file yang lebih besar dari 2 GB? Jika demikian, lalu bagaimana saya bisa mentransfer file yang lebih besar melalui SSH?

Sistem file tujuan adalah ext4. Distribusi Linux adalah CentOS 6.5. Sistem file saat ini memiliki (dapat diakses) file besar di dalamnya (hingga 100 GB).

eimrek
sumber
5
Sepertinya ukuran variabel overrun. Tetapi AFAIK scp / sftp tidak memiliki batas ukuran. Apa sistem file tujuan? Apakah ini mendukung LARGEFILES?
Milind Dumbare
1
Bagaimana dengan aplikasi sftp dan scp? Anda dapat menemukan ini menggunakan perintah file terhadap binari mereka.
mdpc
1
@shepherd - ya.
mdpc
2
Aplikasi 32-bit dapat mengakses file besar jika dikompilasi -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64. Tetapi jika Anda menjalankan sistem 6.5 64-bit, mungkin akan lebih mudah untuk menginstal admin openssh-5.3p1-94.el6_6.1.x86_64dan openssh-server-5.3p1-94.el6_6.1.x86_64dari repo standar.
Mark Plotnick
1
lol pada perangkat lunak menggunakan bilangan bulat yang ditandatangani untuk ukuran file
Lightness Races dengan Monica

Jawaban:

9

Masalah aslinya (berdasarkan membaca semua komentar untuk pertanyaan OP) adalah bahwa scpdieksekusi pada sistem 64-bit adalah aplikasi 32-bit. Aplikasi 32-bit yang tidak dikompilasi dengan "dukungan file besar" berakhir dengan mencari pointer yang terbatas 2^32 =~ 4GB.

Anda dapat mengetahui apakah scp32-bit dengan menggunakan fileperintah:

file `which scp`

Pada kebanyakan sistem modern, itu akan menjadi 64-bit, jadi tidak akan ada pemotongan file:

$ file `which scp`
/usr/bin/scp: ELF 64-bit LSB  shared object, x86-64 ...

Sebuah aplikasi 32 seharusnya masih dapat mendukung "file besar" tetapi harus dikompilasi dari sumber dengan dukungan file besar yang ternyata kasus ini tidak.

Solusi yang disarankan adalah mungkin menggunakan distribusi 64-bit standar penuh di mana aplikasi dikompilasi sebagai 64-bit secara default.

diri sendiri
sumber
33

Rsync sangat cocok untuk mentransfer file besar melalui ssh karena dapat melanjutkan transfer yang terputus karena beberapa alasan. Karena menggunakan fungsi hash untuk mendeteksi blok file yang sama, fitur terus cukup kuat.

Agak mengejutkan bahwa sftp/ scpversi Anda tampaknya tidak mendukung file besar - bahkan dengan binari 32 Bit, dukungan LFS harus cukup standar, saat ini.

maxschlepzig
sumber
4
Mengingat sebagian besar file sudah ditransfer, rsyncada baiknya sekarang. Gunakan -Popsi untuk mendapatkan indikasi kemajuan dan memerintahkan penerima untuk menyimpan file yang tidak lengkap jika transfer terputus lagi.
Simon Richter
25

Saya tidak yakin tentang batas ukuran file SCP dan SFTP, tetapi Anda dapat mencoba mengatasi masalah dengan split:

split -b 1G matlab.iso

Ini akan membuat 1 file GiB yang, secara default, dinamai xaa, xab, xac, .... Anda kemudian dapat menggunakan scp untuk mentransfer file:

scp xa* xxx@xxx:

Kemudian pada sistem jarak jauh buat ulang file asli dengan cat:

cat xa* > matlab.iso

Tentu saja, hukuman untuk penyelesaian ini adalah waktu yang diambil dalam operasi split dan cat, serta ruang disk tambahan yang diperlukan pada sistem lokal dan jarak jauh.

putar
sumber
1
ide bagus. Saya sudah mentransfer file dengan drive usb, tetapi ini mungkin akan lebih nyaman. Namun, tidak senyaman mendapatkan scp dan sftp agar bekerja dengan benar.
eimrek