Времена, когда софт весил меньше mp3-трека, а HDD на 100 GB хватало на все — прошли. Современный софт погряз в обилии зависимостей, фреймворков на каждый чих и безжалостном потреблении ресурсов, а появление в свободном доступе LLM сделало использование классических подходов и инструментов для скачивания почти бесполезным.
В этой статье мы поделимся опытом и тонкостями использования aria2 и rsync для скачивания, копирования и синхронизации большого объема тяжелых файлов. Если вы все еще мучаетесь и используете scp и wget — эта статья точно для вас.
Вы узнаете:
- Как скачивать быстро и параллельно несколько файлов с докачкой после разрыва или остановки соединения;
- Как настроить синхронизацию файлов и директорий на разных серверах;
- Как копировать файлы с частичной заменой на основании временных маркеров.
Будет много пользы и консольных команд. Открывайте свой любимый терминал, подключайтесь к VPS и поехали изучать новые инструменты.
Aria2 — швейцарский нож для скачивания
Aria2 — это легковесная мультипротокольная утилита для скачивания файлов в мультипоточном режиме с возможностью докачки после разрыва соединения. Поддерживаются HTTP/HTTPS, FTP, SFTP, BitTorrent и Metalink.
Основные фичи Aria2:
- Одновременная загрузка файлов из нескольких источников/протоколов с использованием максимальной пропускной способности сети;
- Поддержка дискового кеша и кеша в память для распределения нагрузки на IO-ресурсы;
- Полноценный BitTorrent-клиент с поддержкой DHT, PEX, Magnet URI, Web-Seeding, выборочной загрузкой, Local Peer Discovery и UDP-трекером;
- Поддержка Metalink с верификацией файлов, интеграцией с HTTP/FTP/SFTP/BitTorrent и различными конфигурациями для языка, местоположения, ОС и т.д;
- Удаленное управление по RPC с поддержкой JSON-RPC и XML-RPC интерфейсов.
Установить Aria2 можно с помощью команды sudo apt update && sudo apt install aria2, а вызывать утилиту нужно так: aria2c ....
Загрузка файлов по HTTP/HTTPS/FTP
Продемонстрируем различные способы и опции скачивания файлов больших размеров на примере скачивания NVIDIA-драйверов для RTX 6000 ada. Драйвер весит 397.79 MB и скачивать его с помощью cURL или wget — долго и неэффективно, а при нестабильном соединении еще и велики риски повреждения файла.
Однопоточное скачивание
Вот как можно скачать файл в одну простую команду: aria2c "https://us.download.nvidia.com/XFree86/Linux-x86_64/580.119.02/NVIDIA-Linux-x86_64-580.119.02.run". При скачивании выводится следующая информация:

А по завершении скачивания будет выведен отчет:

Файл будет скачан в текущую активную директорию, если нужно задать конкретную директорию — это можно сделать с помощью ключа -d
Многопоточное скачивание и сегментирование
Для многопоточного скачивания используется ключ -xN, где N — число одновременных соединений, а для указания размера сегмента используется ключ -kSIZE (или --min-split-size=SIZE), где SIZE — минимальный размер части (например, 1M, 20M). Например, если мы хотим скачать файл с 2 одновременными соединениями и минимальным размером сегмента в 1M — нам нужно вызвать утилиту со следующими параметрами:
"https://us.download.nvidia.com/XFree86/Linux-x86_64/580.119.02/NVIDIA-Linux-x86_64-580.119.02.run"
Скорость скачивания увеличится, если сервер, откуда вы скачиваете файл поддерживает HTTP Range requests (частичные загрузки по байтам). Это позволяет делить файл на части и качать их параллельно. В отчете количество одновременных соединений указывается как CN:X, где X — число одновременных соединений:

Время скачивания уменьшилось раза в четыре. В однопоточном режиме файл размером 397.79 MB скачивался 23 секунды при скорости в 10-11 MiB/s, а при двух потоках — время скачивания сократилось до 8 секунд и скорость выросла до 12-13 MiB/s.
Многопоточное скачивание нескольких файлов
Перейдем на следующий шаг эффективного скачивания файлов — скачаем одновременно несколько крупных файлов с сегментацией. Команда будет такой:
https://huggingface.co/Comfy-Org/flux2-dev/blob/main/split_files/loras/Flux2TurboComfyv2.safetensors
https://huggingface.co/Comfy-Org/flux2-dev/blob/main/split_files/loras/Flux_2-Turbo-LoRA_comfyui.safetensors
Однако такой вид записи не очень удобен, особенно если файлов больше двух. Удобнее и проще использовать текстовый файл со списком файлов для скачивания. Например, файл может выглядеть так:
out=NVIDIA-Linux-x86_64-580.119.02.run
https://huggingface.co/Comfy-Org/flux2-dev/blob/main/split_files/loras/Flux2TurboComfyv2.safetensors
out=Flux2TurboComfyv2.safetensors
https://huggingface.co/Comfy-Org/flux2-dev/blob/main/split_files/loras/Flux_2-Turbo-LoRA_comfyui.safetensors
out=Flux_2-Turbo-LoRA_comfyui.safetensors
Тогда команда с применением списка будет выглядеть так: aria2c -i nvidia_downloads.txt -x4 -k1M -j8 --auto-file-renaming=false. На что тут стоит обратить внимание:
- Ключ -j8 / --max-concurrent-downloads=8 — это максимальное количество одновременных файлов (очередей/queue items), которые качаются параллельно;
- Ключ --auto-file-renaming=false — указывает на то, что нужно использовать параметр out из списка скачиваемых файлов.
В отчете о скачивании видно, что качаются одновременно 3 файла:

Краткий вывод
Aria2 — это современный, мощный и удобный инструмент скачивания большого количества объемных файлов, который позволяет максимально эффективно использовать ресурсы как сервера, так и клиента.
С помощью Aria2 можно скачивать одновременно множество файлов в многопоточном режиме, а возможность использовать списки файлов для скачивания с дополнительными опциями делает работу с Aria2 еще удобнее и проще.
Rsync — перенос и синхронизация файлов между серверами
Часто бывает нужно перенести файлы с одного сервера на другой или синхронизировать директории. Выполнять такую задачу по старинке с помощью scp, конечно, можно, но очень долго и неэффективно. Есть более современный и мощный инструмент, который справляется с такого рода задачами куда более эффективно и элегантно — Rsync.
Rsync имеет привычный синтаксис, понятные опции копирования и входит в стандартные Linux-репозитории. Например, скачать Rsync на Ubuntu можно командой sudo apt update && sudo apt install rsync.
Базовый синтаксис Rsync выглядит следующим образом: rsync [-ключи] <что переносим> <куда переносим>.
Перенос файлов внутри одного сервера
Приведем сначала простой, наглядный пример переноса файлов и директорий внутри одного сервера с сохранением прав, владельцев, временных меток (ключ -a):.
- Перенос файлов из одной директории в другую: rsync -a ./downloads/ ./drivers/nvidia/. В этом примере содержимое директории ./downloads будет перенесено в директорию ./drivers/nvidia. Обратите внимание на наличие / в конце ./downloads/.
- Перенос директории в другую директорию: rsync -a ./downloads ./drivers/nvidia/. На первый взгляд кажется, что разницы с первым примером нет, однако она есть и существенная. Тут мы перенесли директорию ./downloads целиком в директорию ./drivers/nvidia/. Обратите внимание на отсутствие / в конце ./downloads. В первом примере он был.
Чтобы не ошибиться — можно запомнить простое правило: чтобы в директории назначения были файлы и папки из источника — ставим слеш в конце источника. Если нужно, чтобы в директории назначения появилась сама папка-источник — не ставьте слеш.
Копирование файлов между серверами
Копирование файлов между серверами — вот где Rsync раскрывается в полную силу! Во-первых, Rsync использует привычный SSH-синтаксис подключения. Во-вторых, Rsync поддерживает докачку файлов после разрыва соединения. В-третьих, имеет понятный log.
В зависимости от направления переноса файлов синтаксис Rsync имеет разный вид:
- PUSH-копирование файлов на сервер: rsync [ОПЦИИ] <что переносить> user@remote-server:<куда переносить>.
- PULL-копирование файлов с сервера: rsync [ОПЦИИ] user@remote-server:<что переносить> <куда переносить>.
Примеры копирования файлов между серверами
Важный лайфхак: так как rsync работает поверх SSH — можно использовать SSH-агента для копирования с одного сервера на другой без ввода SSH-ключа, если оба сервера используют один и тот же ключ.
Как это работает: подключаемся с локальной машины к первому серверу по SSH с параметром -A: ssh -A -i ssh_key root@ip, а затем просто выполняем описанные ниже команды. SSH-агент сам прокинет ключ и rsync все скопирует.
Пример копирования директории с драйверами с одного сервера на другой: rsync -avz ./downloads/drivers user@web-server:downloads/.
Пример копирования файлов из директории одного сервера в директорию на другом сервере: rsync -avz ./downloads/drivers/ user@web-server:downloads/drivers/.
Пример скачивания директории с удаленного сервера на текущий: rsync -avz user@web-server:downloads/drivers ./downloads/.
Пример скачивания файлов с удаленного сервера на текущий: rsync -avz user@web-server:downloads/drivers/ ./downloads/drivers/.
Значение ключей, которые использовались в примерах:
- -v — подробный вывод работы rsync: показывает, какие файлы и директории передаются. Можно добавлять несколько -v (-vv, -vvv) для увеличения уровня детализации — полезно для отладки.
- -z — сжатие файлов “на лету” на стороне отправителя и их распаковка на стороне получателя. Опция полезна при передаче большого количества текстовых файлов, логов, скриптов и т.д.
Построение плана копирования
Чтобы не допустить фатальных ошибок при копировании файлов, особенно если применяются такие опасные ключи, как --delete — используется ключ -n. Он переводит rsync в режим построения плана копирования. То есть все, что будет происходить — это симуляция процесса копирования. Если все прошло успешно — можно запускать rsync без ключа -n.
Пример использования ключа -n: rsync -avzn --delete user@web-server:downloads/drivers ./downloads/. В этом примере директория drivers копируется с удаленного сервера и удаляется. Но если была допущена ошибка в директории назначения или в самом сценарии копирования — откатиться к исходному состоянию уже не получится, а с ключом -n — получится.
Умная докачка
По умолчанию rsync при прерывании передачи файлов удаляет не до конца переданный файл и докачивает его при следующем соединении. Такое поведение явно неэффективно при передаче больших файлов. Изменить поведение rsync относительно работы с недокачанными файлами можно с помощью двух ключей:
- --partial — rsync не будет удалять частично переданные файлы, а в следующий раз попытается докачать их с того места, где закончил.
- --partial-dir=DIR — rsync будет сохранять частично докачанные файлы не в целевую директорию, а в указанную временную директорию DIR. После успешной докачки файл перемещается в указанную директорию.
Пример использования ключа --partial-dir=DIR:
rsync -av --partial-dir=.partial-dir user@server:/images/ubuntu2404.iso ./.
Синхронизация файлов и директорий
Rsync — утилита не просто для копирования, а еще для синхронизации, и для этого у нее несколько ключей, работу которых нужно понимать очень хорошо — иначе катастрофы не избежать.
Ключ --delete делает целевую директорию (куда копируются файлы) точной зеркальной копией исходной директории. Все файлы и папки, которых в источнике нет — будут удалены.
Ключ --ignore-existing заставляет rsync копировать только те файлы, которых еще нет в директории копирования. Если файл уже существует, он будет проигнорирован, даже если содержимое или метаданные отличаются.
Ключ --update указывает rsync, что нужно копировать файл только в том случае, если файл в источнике новее (по дате изменения), чем файл в целевой директории. Если файл в целевой директории новее или такой же, он будет проигнорирован. Ключевое отличие --update от --ignore-existing в том, что --update смотрит на временную метку и обновляет файлы, если они старее.
Краткое резюме
Rsync — это мощный и ультимативный инструмент для скачивания файлов и их синхронизации между серверами. Утилита заменяет scp, cp и даже отчасти сложные системы резервного копирования.
Rsync особенно полезен в следующих кейсах:
- Создание точных зеркал директорий на большом количестве ВМ.
- Копирование большого количества файлов с докачкой при нестабильном соединении.
- Периодическая синхронизация директорий между серверами (бэкапы, деплой).
Rsync — де-факто стандарт индустрии. Это надежный, проверенный временем инструмент любого, кто работает с Linux-серверами.
Aria2 и rsync: конец эпохи scp и wget
Сегодня, когда файлы весят десятки гигабайт, таскать их туда-сюда между серверами с помощью scp или wget — гарантированный выстрел в ногу. Нужны современные, производительные и удобные инструменты, которые отвечают потребностям времени, и это aria2 и rsync.
Aria2 — мультипротокольная утилита для скачивания файлов с возможностью параллельного скачивания, сегментацией и докачкой после разрыва или закрытия соединения. Aria2 позволяет скачивать файлы с HTTP/HTTPS, FTP, SFTP, BitTorrent и Metalink источников, не нагружая систему, а использование списков делает управление массовым скачиванием удобным и простым.
Rsync — проверенный временем, надежный и невероятно гибкий инструмент для синхронизации и переноса файлов. Благодаря использованию специальных алгоритмов Rsync передает только изменения, что экономит время и трафик, а поддержка SSH делает процесс безопасным и простым. С помощью опций --partial и --delete rsync превращается в мощный комбайн для создания зеркал и резервных копий.
Используйте правильные инструменты и надежные сервисы — это сэкономит вам время, нервы и деньги. Правильные и современные инструменты вы уже нашли в этой статье, а надежный VPS можно найти в разделе VPS/VDS.