Вы здесь

Перенос файлов в Linux по сети

Перенести большой объем данных по сети с одного сервера Linux на другой отлично помогает связка утилит tar, ssh и pv.
На исходном хосте (назовем его host1) сжимаем данные с помощью tar и передаем их по ssh на принимающий хост (host2) и там "на лету", распаковываем.
pv - сокращение от pipeviewer, то есть просмотрщик пайпов (конвееров) в Linux. Данная утилита будет показывать нам скорость обработки данных. По умолчанию в состав дистрибутива pv не входит, поэтому устанавливаем сами:

sudo apt-get install pv

Пример команды переноса данных:

cd /mnt/data; tar -cpzf - *|pv|ssh user@host2 tar -xzf - -C /mnt/data

Происходит следующее:

  1. cd /mnt/data - переводим в каталог /mnt/data;
  2. tar -cpzf - * - создаем архив из всех файлов и папок в текущем каталоге (первой командой мы перешли в /mnt/data);
  3. pv - будет показывать там объем переданных данных.
  4. ssh user@host2 - подключаемся по ssh к host2
  5. tar -xzf - -C /mnt/data - распаковываем полученные данные в каталог /mnt/data

Параметры tar:

-c - создаем новый архив;
-f - имя файла;
-z – архивация будет происходить посредством архиватора gzip;
-C - Опция принуждает tar на целевом компьютере сменить текущий рабочий каталог на /mnt/data, прежде чем начать какие-либо операции разархивирования;
-p, –preserve-permissions, –извлекать информацию o правах доступа к файлу (по умолчанию для суперпользователя);
-x - распаковать архив;
– - считывает архив из стандартного потока ввода. Опция -C принуждает tar на целевом компьютере сменить текущий рабочий каталог на /mnt/data, прежде чем начать операцию разархивирования.

Авторизацию лучше настроить по открытому ключу. Если вы логинитесь по паролю, то после запроса ввода пароля у вас появится счетчик переданных данных pv, но это не помешает вводу пароля.

В итоге в локальной сети перемещение каталога объемом ~200GB заняло примерно 4,5 часов. При желании можно перенести без сжатия - убрав из ключей tar'а опцию -z.