Копирование директорий на удалённый сервер используя tar, ssh, cat или dd

Оригинал http://shinkei.ru/node/4

Перепост http://lampalap.blogspot.com/2011/07/tar-ssh-cat-dd.html

1. Архивирование директории на удалённый сервер.
С использованием cat:
tar zcvfp - /home/user/sourcedir | ssh user@remote_host "cat > ~/from_somehost.tar.gz"

tar — архивирует, и с ключом z сжимает:
z — сжать, c — создать, v — выводить на экран, что архивирует, p — не менять права на файлы, f — в какой файл запихнуть архив, если указан прочерк -, то выводить на стандартный вывод. Далее идет имя каталога, который нужно заархивировать.

То, что tar выведет на стандартный вывод, перенаправляется на удаленный сервер (user@remote_host), где и запускается команда "cat > ~/from_somehost.tar.gz". Cat принимает на вход то, что выдал tar, а затем все это складывает в файл /from_somehost.tar.gz.

С использованием dd:
tar zcvfp - /home/user/sourcedir | ssh user@remote_host "dd of=~/from_somehost.tar.gz"

В этом примере вместо cat используется dd (disk destroy ;), у которой есть параметр of (output file), то есть тот, куда нужно складывать то, что пришло от tar.

Остальное по аналогии должно быть понятно.

2. Архивирование с удалённой машины на локальную:
С использованием cat:
ssh user@remote_host "tar zcvfp - /home/user/sourcedir" | cat > ~/from_somehost.tar.gz
С использованием dd:
ssh user@remote_host "tar zcvfp - /home/user/sourcedir" | dd of=~/from_somehost.tar.gz

3. Ну и напоследок - распаковка удалённого архива на локальную машину.
ssh user@remote_host "cat /home/user/from_somehost.tar.gz" |tar xvfp -

Памятка пользователям ssh (C)

http://habrahabr.ru/post/122445/

Оглавление:
управление ключами
копирование файлов через ssh
Проброс потоков ввода/вывода
Монтирование удалённой FS через ssh
Удалённое исполнение кода
Алиасы и опции для подключений в .ssh/config
Опции по-умолчанию
Проброс X-сервера
ssh в качестве socks-proxy
Проброс портов — прямой и обратный
Реверс-сокс-прокси
туннелирование L2/L3 трафика
Проброс агента авторизации
Туннелирование ssh через ssh сквозь недоверенный сервер (с большой вероятностью вы этого не знаете)

Создание образа с помощью dd со сжатием xz

Ради эксперимента решил попробовать сваять образ диска с помощью dd и на лету его сжать с помощью xz.
Для этого создал виртуальный диск md размером 2G и скопировал на него файлы, оставшиеся после сборки системы, объемом 1,7G.

# df -h
/dev/md0     2G    1.7G     55M    97%    /mnt/test

После этого выполнил:
# dd if=/dev/md0 | xz > test.img.xz
4194304+0 records in
4194304+0 records out
2147483648 bytes transferred in 3898.919065 secs (550789 bytes/sec)

Из 2G раздела у меня получился сжатый файл образ размером 205MB за 3899 секунд( 1ч 5 мин )

Можно использовать ssh для создания образа диска локальной машины на удаленной машине, при этом можно сделать выбор между тем, на какой стороне будет работать ресурсоемкая xz, насколько критична экономия трафика и какова пропускная способность соединения:

# dd if=/dev/md0 | xz | ssh 'user'@aaa.bbb.ccc.ddd "cat > test.img.xz"
xz выполняется на локальной машине, на удаленную передается сжатый файл
# dd if=/dev/md0 | ssh 'user'@aaa.bbb.ccc.ddd "xz > test.img.xz"
на удаленную машину передается весь вывод dd и сжатие xz происходит на удаленной машине

Отправить комментарий

CAPTCHA
Чтобы убедиться в том что Вы не робот, ответьте, пожалуйста, на вопрос
Fill in the blank