Büyük (8 GB) dosyaları ssh üzerinden aktarma


27

SCP ile denedim, ancak "Olumsuz dosya boyutu" yazıyor.

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

Ayrıca SFTP kullanmayı denedi, 2 GB dosya aktarılana kadar iyi çalıştı, sonra durdu:

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

Sorunun ne olduğu hakkında bir fikrin var mı? SCP ve SFTP, 2 GB'den büyük dosyaları desteklemiyor mu? Öyleyse, daha büyük dosyaları SSH üzerinden nasıl aktarabilirim?

Hedef dosya sistemi ext4. Linux dağıtımı CentOS 6.5'tir. Dosya sisteminde şu anda (erişilebilir) büyük dosyalar var (en fazla 100 GB).


5
Değişken boyut aşımı gibi görünüyor. Ancak AFAIK scp / sftp'nin boyut sınırı yoktur. Hedef dosya sistemi nedir? LARGEFILES'i destekliyor mu?
Milind Dumbare

1
Peki ya sftp ve scp uygulamaları? Bunu file komutunu ikili dosyalarına karşı kullanarak öğrenebilirsiniz.
mdpc

1
@shepherd - evet.
mdpc

2
32 bit uygulamalar, derlenmişse büyük dosyalara erişebilir -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64. Ancak 64 bit 6.5 sistemi kullanıyorsanız, yöneticilerin openssh-5.3p1-94.el6_6.1.x86_64ve openssh-server-5.3p1-94.el6_6.1.x86_64standart depolardan yöneticileri yüklemesi daha kolay olacaktır .
Mark Plotnick

1
dosya boyutu için işaretli tamsayıları kullanarak yazılımda lol
Monica

Yanıtlar:


9

Orijinal sorun (OP sorusundaki tüm yorumları okumaya dayanarak) scp64 bit sistemdeki yürütülebilir dosyanın 32 bit bir uygulama olmasıydı. "Büyük dosya desteği" ile derlenmemiş 32 bit bir uygulama , sınırlı olan işaretçilerle sonuçlanır 2^32 =~ 4GB.

Komutu scpkullanarak 32 bit olup olmadığını söyleyebilir file:

file `which scp`

Çoğu modern sistemde 64 bit olacaktır, bu nedenle dosya kesilmesi olmaz:

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

32 uygulama hala "büyük dosyaları" destekleyebilmeli, ancak bu durumun görünmediği büyük dosya desteğiyle kaynaktan derlenmelidir.

Önerilen çözüm, uygulamaların varsayılan olarak 64 bit olarak derlendiği tam standart bir 64 bit dağıtım kullanmak olabilir.


33

Rsync , büyük dosyaları ssh üzerinden aktarmak için çok uygundur, çünkü bazı nedenlerden dolayı kesilen aktarımlara devam edebilmektedir. Eşit dosya bloklarını tespit etmek için karma fonksiyonlarını kullandığından, devam özelliği oldukça sağlamdır.

Sizin sftp/ scpsürümlerinizin büyük dosyaları desteklemiyor görünmesi şaşırtıcıdır - 32 Bit ikili dosyalarda bile, LFS desteği bugünlerde oldukça standart olmalıdır.


4
Dosyanın büyük bir bölümünün zaten aktarılmış olduğu göz önüne alındığında, rsyncşimdi iyi bir fikirdir. -PHem ilerleme göstergesi almak için seçeneği kullanın hem de alıcıya aktarımın tekrar kesilmesi durumunda eksik bir dosya tutmasını söyleyin.
Simon Richter

25

SCP ve SFTP'nin dosya boyutu sınırlarından emin değilim, ancak sorunla uğraşırken split'i deneyebilirsiniz:

split -b 1G matlab.iso

Bu, varsayılan olarak, olarak adlandırılan 1 GiB dosyası oluşturur xaa, xab, xac, .... Dosyaları aktarmak için daha sonra scp kullanabilirsiniz:

scp xa* xxx@xxx:

Ardından uzaktaki sistemde orijinal dosyayı cat ile yeniden oluşturun:

cat xa* > matlab.iso

Elbette, bu geçici çözümün getirdiği cezalar, yerel ve uzak sistemlerde ihtiyaç duyulan fazladan disk alanının yanı sıra, split ve cat işlemlerinde harcanan zamandır.


1
İyi bir fikir. Dosyayı bir usb sürücüyle aktardım, ancak bu muhtemelen daha uygun olurdu. Yine de düzgün çalışabilmesi için scp ve sftp almak kadar uygun değil
eimrek
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.