Представьте себе такой сценарий.
Вы копируете несколько больших файлов из одной системы в другую по SSH с помощью команды scp.
Внезапно отключается питание, сетевое соединение прерывается, и процесс копирования прерывается на полпути.
Что бы вы сделали?
Перезапустить процесс копирования, как только питание снова будет включено?
Да, это сработает.
Однако команда scp не имеет опции возобновления, поэтому она просто начнет копировать файлы с самого начала и перезапишет существующие файлы.
Это немного раздражает и отнимает много времени.
Здесь полезна утилита Rsync
! Мы можем легко возобновить частично перенесенные файлы через SSH, используя Rsync.
Это поможет вам возобновить прерванный процесс копирования или загрузки с того места, где вы его оставили.
Что такое Rsync?
Для тех, кому интересно, Rsync – это быстрая, универсальная утилита для копирования файлов, которую можно использовать для копирования и передачи файлов или папок в и из удаленных и локальных систем.
Инструмент предлагает большое количество параметров, которые управляют каждым аспектом его поведения и позволяют очень гибко задавать набор файлов для копирования.
Он известен своим алгоритмом дельта-передачи, который уменьшает объем данных, передаваемых по сети, отправляя только различия между исходными файлами и существующими файлами в месте назначения.
Rsync широко используется для резервного копирования и зеркалирования, а также как улучшенная команда копирования для повседневного использования.
Так же, как SCP, rsync также будет копировать файлы через SSH.
Если вы хотите загружать или передавать файлы и папки большого размера по SSH, я рекомендую вам использовать утилиту rsync, как описано ниже.
Возобновление передачи файлов по SSH
Обратите внимание, что утилита rsync должна быть установлена с обеих сторон (то есть удаленных и локальных систем) для возобновления частично переданных файлов.
Rsync доступен в официальных репозиториях большинства дистрибутивов Linux, поэтому вы можете установить его с помощью диспетчера пакетов по умолчанию.
В Arch Linux и его вариантах установите Rsync, используя команду:
$ sudo pacman -S rsync
На Debian, Ubuntu, Linux Mint:
$ sudo apt-get install rsync
На Fedora:
$ sudo dnf install rsync
На RHEL, CentOS:
$ sudo yum install rsync
На SUSE/openSUSE:
$ sudo zypper install rsync
Теперь давайте посмотрим на пример.
Я собираюсь скопировать Ubuntu 18.04 ISO из моей локальной системы в удаленную систему с помощью команды:
$ scp ubuntu.iso itsecforu@192.168.225.22:/home/itsecforu/
Где:
- itsecforu – это имя пользователя моей удаленной системы
- 192.168.225.22 – это IP-адрес удаленного компьютера.
- /home/itsecforu/ – это удаленный пункт назначения.
itsecforu@192.168.43.2's password: ubuntu-16.04-desktop-amd64.iso 26% 372MB 26.2MB/s 00:39 ETA^c
Как вы видите в приведенном выше выводе, я прекратил процесс копирования, когда он достиг 33%.
Если я перезапущу приведенную выше команду, она просто перезапишет существующий файл.
Другими словами, процесс копирования не возобновится с того места, где я его остановил.
$ rsync -P -rsh=ssh ubuntu.iso itsecforu@192.168.225.22:/home/itsecforu/
Пример вывода:
itsecforu@192.168.225.22's password: sending incremental file list ubuntu.iso 834.00M 100% 14.81MB/s 0:00:56 (xfr#1, to-chk=0/1)
Теперь процесс копирования возобновляется с того места, где мы остановились ранее.
Вы также можете использовать «–partial» вместо параметра «-P», как показано ниже.
$ rsync --partial -rsh=ssh ubuntu.iso itsecforu@192.168.225.22:/home/itsecforu/
Здесь параметр «–partial» или «-P» указывает команде rsync сохранить частично загруженный файл и возобновить процесс.
Проверьте, действительно ли файл скопирован или нет в удаленную систему, используя команду:
$ ssh itsecforu@192.168.225.22 ls -lh itsecforu@192.168.225.22's password: total 835M -rw-rw-r-- 1 sk sk 834M Jul 26 2019 ubuntu.iso
$ rsync -avP ubuntu.iso itsecforu@192.168.225.22:/home/itsecforu/
или
$ rsync -av --partial ubuntu.iso itsecforu@192.168.225.22:/home/itsecforu/
Теперь вы знаете, как возобновить отмененные, прерванные и частично загруженные файлы с помощью команды rsync.
Как видите, это не так сложно.
Если rsync установлен в обеих системах, мы можем легко возобновить процесс копирования, как описано выше.