Как копировать большие файлы по сети

Вопрос или проблема

Мне нужно копировать большие файлы по сети, но я не уверен, какую команду использовать для этого. Я использовал rsync, но, возможно, мне стоит сначала заархивировать файлы?

rsync уже предоставляет сжатие, если вы укажете опцию -z. Вам следует избегать применения этой опции для уже сжатых файлов или бинарных файлов, так как это только добавит дополнительные затраты.

Когда вы используете rsync с протоколом ssh (по умолчанию) и у вас ограниченные ресурсы ЦП, а безопасность не является проблемой, вы также можете попробовать указать -e ssh -c arcfour, чтобы использовать менее дорогостоящий алгоритм шифрования (RC4). Однако на современных ЦП это не приведет к значительной разнице.

Другие интересные аргументы, которые вы можете использовать:

  • -vP для красивой индикаторной строки и сохранения частично переданных файлов при прерывании, чтобы вы могли возобновить с частичного файла в следующий раз, когда запустите rsync
  • -a для сохранения большинства (но не всех!) метаданных файлов, таких как права доступа и время изменения

Я не уверен, понимаю ли я, есть ли у вас проблема с сжатием файлов или проблема с передачей файлов, или у вас просто общий вопрос. Я пойду по второму пути.

Если у вас есть несколько файлов в папке, вы можете заархивировать их в один архив (.tar) файл: tar -cvf myfile.tar myfolder

Затем вы можете сжать этот файл, используя очень хороший компрессор, например lzma: lzma myfile.tar. Обратите внимание, что вы также можете указать tar сжать с помощью опций -z (gzip), -j (bzip2) или --lzma, в этом случае вы выполните одну команду, например: tar --lzma -cvf myfile.tar.lzma myfolder.

Затем вы можете скопировать ваш файл, используя rsync или scp, и распаковать его (lzma -d myfile.tar.lzma) и затем извлечь (tar -xvf myfile.tar) на целевой системе. Если вы использовали одну команду, команда для извлечения будет: tar --lzma -xvf myfile.tar.lzma.

Вы также можете указать rsync сжимать с помощью опции -z и не беспокоиться о создании заранее архивного файла.

Обратите внимание, что вы также можете использовать cURL.

Мой случай использования заключался в копировании нескольких очень больших видеофайлов с одного веб-хостинга на другой (один был 1.1 Гб, другой – 750 Мб и т.д.)

К счастью, желаемый веб-хостинг (Namecheap) уже имел установленный cURL в своем терминальном приложении с оболочкой jail.

В терминале перейдите в желаемую папку назначения.

Команда, которую я использовал, была:

cURL -O https://mydomain.com/pathto/thefile/desiredfile.mp4

Сработало отлично. Я был приятно удивлён скоростью передачи (файл 1 Гб передался за примерно 90 секунд).

** Примечание: Опция -O (заглавная буква “O”) говорит “использовать то же имя для целевого файла”. Чтобы переименовать файл на стороне назначения, используйте -o (маленькая буква “о”) и укажите целевое имя файла в качестве последнего параметра.

Ссылки:

https://www.studytonight.com/linux-guide/curl-in-linux-how-to-transfer-data

.

Ответ или решение

Копирование больших файлов по сети может стать комплексной задачей, особенно при выборе правильного инструмента и метода. В этом ответе мы рассмотрим несколько подходов, включая использование rsync, возможность архивирования и сжатия файлов, а также альтернативные методы, такие как cURL.

Использование rsync

rsync — один из самых популярных инструментов для копирования файлов и директорий, который предлагает не только простоту в использовании, но и множество опций для оптимизации процесса.

  1. Команда rsync:
    Чтобы скопировать файл по сети, можно воспользоваться следующей командой:

    rsync -avz source_file user@hostname:/path/to/destination
    • -a: включает режим архива, сохраняющий метаданные (права доступа, временные отметки и т.д.).
    • -v: включает подробный вывод.
    • -z: активирует сжатие данных во время передачи, что особенно полезно для текстовых файлов, но для уже сжатых (например, видео) может быть излишним.
  2. Дополнительные опции:

    • -P: позволяет отслеживать прогресс передачи и сохранять частично переданные файлы на случай прерывания.
    • -e ssh: если необходимо использовать ssh для безопасного копирования:
      rsync -avz -e "ssh -c arcfour" source_file user@hostname:/path/to/destination

      Например, использование -c arcfour может сократить время процессора при работе с ограниченными ресурсами, но это решение не всегда целесообразно на современных процессорах.

  3. Архивирование и сжатие:
    Если вы копируете несколько файлов, имеет смысл сначала создать архив с помощью tar, а затем сжать его:

    tar -cvf myfile.tar myfolder
    lzma myfile.tar

    Для одного шага:

    tar --lzma -cvf myfile.tar.lzma myfolder

    Чтобы восстановить архив:

    tar --lzma -xvf myfile.tar.lzma

Альтернативный метод с использованием cURL

Если у вас есть доступ к файлам через URL, вы можете использовать cURL для скачивания больших файлов. Это решение удобно, если ваша исходная система и целевая система располагают доступом к интернету.

  1. Команда cURL:
    В терминале переходим в нужный каталог и выполняем команду:
    curl -O https://example.com/path/to/largefile.mp4

    Опция -O позволяет сохранить файл с тем же именем, что и на сервере. Если вы хотите изменить имя, используйте -o:

    curl -o newfilename.mp4 https://example.com/path/to/largefile.mp4

Заключение

Копирование больших файлов по сети может быть выполнено несколькими способами, и выбор метода зависит от конкретных условий:

  • rsync предлагает эффективный и надежный способ управления копированием с учетом восстановлений и метаданных.
  • Использование tar для архивирования позволяет упростить работу с несколькими файлами.
  • cURL становится идеальным решением, когда требуется загружать файлы по URL.

Выбор подходящего инструмента поможет вам оптимизировать процесс передачи данных и снизить затраты времени и ресурсов.

Оцените материал
Добавить комментарий

Капча загружается...