Intereting Posts
Как избежать специальных символов в строке? Команда не запускается при загрузке Почему мой зашифрованный том LVM (устройство LUKS) не будет монтироваться во время загрузки? Подсказка: замените пользовательский путь коротким словом, например ~ для дома Есть ли хороший способ шифрования и хранения почтового ящика, хотя он может быстро получить доступ и выполнить поиск? Что означает восклицательный знак при разностном выходе? Как снять скриншот экрана KDE Splash? Тонна ввода при входе в систему появляется для блокировки устройства? Как захватить вывод из команды в сценарии оболочки Извлечь дату создания и время изменения файла в Sunos Разве это имеет значение (например, по производительности), если я выполняю команду из сценария bash (по сравнению с командной строкой)? Можно ли запускать приложение с другой, чем выбранная тема? Может ли selinux регистрировать имя владельца приложения? Разрешить только определенный исходящий трафик на определенных интерфейсах Почему нам нужно иметь 2> & 1 в / dev / null 2> & 1?

Передача больших (8 ГБ) файлов по ssh

Я попробовал его с помощью 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?

edit: Конечная файловая система – ext4. Linux-дистрибутив – CentOS 6.5. В настоящее время файловая система имеет (доступные) большие файлы (до 100 ГБ).

Первоначальная проблема (основанная на чтении всех комментариев к вопросу OP) заключалась в том, что исполняемый файл 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-разрядные по умолчанию.

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

Удивительно, что ваши версии sftp / scp , похоже, не поддерживают большие файлы – даже с 32-битными двоичными файлами, поддержка LFS должна быть довольно стандартной, в настоящее время.

Я не уверен в ограничениях размера файла для SCP и SFTP, но вы можете попробовать решить проблему с помощью split:

 split -b 1G matlab.iso 

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

 scp xa* xxx@xxx: 

Затем в удаленной системе воссоздайте исходный файл с cat:

 cat xa* > matlab.iso 

Конечно, штрафы за это временное решение – это время, затраченное на операции разделения и кошки, а также дополнительное дисковое пространство, необходимое для локальных и удаленных систем.