Передача великих файлів (8 Гб) через ssh


27

Я спробував це з SCP, але він говорить "Негативний розмір файлу".

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

Також спробував використовувати SFTP, добре працював, поки не перенесли 2 ГБ файлу, а потім зупинив:

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

Будь-яка ідея, що може бути не так? Чи не підтримують файли підтримки SCP та SFTP розміром більше 2 Гб? Якщо так, то як я можу передавати більші файли через SSH?

Файлова система призначення - ext4. Дистрибутивом Linux є CentOS 6.5. На даний момент у файловій системі є (доступні) великі файли (до 100 ГБ).


5
Схоже на змінну перевищення розміру. Але AFAIK scp / sftp не має обмеження розміру. Що таке файлова система призначення? Чи підтримує він великі файли?
Milind Dumbare

1
А що з програмами sftp та scp? Дізнатися це можна за допомогою команди файлів проти їх бінарних файлів.
mdpc

1
@shepherd - так.
mdpc

2
32-розрядні програми можуть отримати доступ до великих файлів, якщо вони компільовані -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64. Але якщо ви працюєте з 64-розрядною системою 6.5, можливо, буде легше встановити адміністраторів openssh-5.3p1-94.el6_6.1.x86_64і openssh-server-5.3p1-94.el6_6.1.x86_64зі стандартних репостів.
Марк Плотнік

1
LOL на програмному забезпеченні, використовуючи підписані цілі числа для розміру файлу
Легкість перегонів з Монікою

Відповіді:


9

Первісна проблема (заснована на прочитанні всіх коментарів до питання про ОП) полягала в тому, що scpвиконуваний файл у 64-бітній системі був 32-бітним додатком. 32-розрядне додаток, яке не компілюється з "підтримкою великих файлів", закінчується покажчиками пошуку, які обмежені 2^32 =~ 4GB.

Ви можете сказати, чи scpє 32-бітним за допомогою fileкоманди:

file `which scp`

У більшості сучасних систем він буде 64-розрядним, тому жодне зрізання файлів не відбудеться:

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

32-додаток все ще повинен мати можливість підтримувати "великі файли", але він повинен бути зібраний з джерела з підтримкою великих файлів, чого в цьому випадку, очевидно, не було.

Рекомендоване рішення, можливо, використовувати повний стандартний 64-розрядний дистрибутив, де програми компілюються як 64-бітні за замовчуванням.


33

Rsync дуже добре підходить для передачі великих файлів через ssh, оскільки він може продовжувати передачі, які були перервані з певних причин. Оскільки він використовує хеш-функції для виявлення рівних блоків файлів, функція продовження є досить надійною.

Це дивно, що ваша sftp/ scpверсія, здається, не підтримує великі файли - навіть із 32-бітовими бінарними файлами, підтримка LFS має бути досить стандартною.


4
Зважаючи на те, що значна частина файлу вже передана, rsyncзараз хороша ідея. Скористайтеся -Pопцією, щоб отримати вказівку про хід і доручити одержувачу зберігати неповний файл у випадку, якщо передача буде перервана знову.
Саймон Ріхтер

25

Я не впевнений у обмеженні розміру файлу SCP та SFTP, але ви можете спробувати вирішити проблему зі спліт:

split -b 1G matlab.iso

Це створить файли 1 GiB, які за замовчуванням названі як xaa, xab, xac, .... Потім ви можете використовувати scp для передачі файлів:

scp xa* xxx@xxx:

Потім на віддаленій системі відтворіть оригінальний файл з cat:

cat xa* > matlab.iso

Звичайно, штрафні санкції за цей спосіб вирішення часу - це час, необхідний для операцій розділення та котів, а також додатковий дисковий простір, необхідний для локальної та віддаленої систем.


1
гарна ідея. Я вже передав файл за допомогою usb-накопичувача, але це, мабуть, було б зручніше. Не так зручно, як змусити scp і sftp працювати правильно.
eimrek
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.