Назад | Перейти на главную страницу

Как настроить клонирование диска с помощью туннеля dd, netcat и ssh?

Я хотел бы скопировать все сразу (преобразовать образ диска с помощью dd) с netcat с хоста A на B через зашифрованный канал ssh в Linux.

Какие команды мне вводить на обоих концах?

Копирование из источника в цель, где на цели запущен sshd:

  • dd if=/dev/sda | gzip | ssh root@target 'gzip -d | dd of=/dev/sda'

Копирование из источника в цель через sshd_host, когда на цели не запущен sshd.

  • Цель: nc -l -p 62222 | dd of=/dev/sda bs=$((16 * 1024 * 1024))
  • Источник: ssh -L 62222:target:62222 sshd_host &
  • Источник: dd if=/dev/sda | nc -w 3 localhost 62222

    дд - если = это источник, из = это пункт назначения, bs = размер блока. Различные размеры блоков могут улучшить производительность. 16 - обычно довольно разумная отправная точка. Вы также можете использовать count = чтобы указать, сколько блоков копировать.

    NC - -п указывает порт, используемый для служб. -l используется для запуска службы. -w устанавливает время ожидания данных в конвейере перед выходом.

    ssh - -L настраивает туннель на удаленном хосте. Формат аргумента: local_port:target_host:target_port. Ваша локальная программа (nc) подключается к local_port, это соединение туннелируется и подключается к target_port на target_host.

Определенные параметры - это только те, которые используются для этого. Смотрите man-страницы для получения более подробной информации.

Несколько примечаний:

  1. Если вы делаете это через что-либо, кроме локальной сети, я бы предложил сжать поток данных с помощью gzip или сжать. Bzip2 тоже подойдет, но требует немного больше процессорного времени. В первом есть пример такого использования.
  2. Лучше, если исходный раздел не смонтирован или установлен только для чтения. Если нет, вам нужно будет найти конечный образ.
  3. Если на одной из машин нет netcat, но нет ssh, netcat здесь действительно не нужен. Этот случай будет выглядеть так:

source machine dd -> nc -> ssh -> ssh tunnel -> sshd server -> nc on target -> dd

  1. dd работает лучше всего, если исходный и целевой файлы имеют одинаковый размер. В противном случае цель должна быть большей из двух.
  2. Если вы используете ext2 / 3 или xfs, дамп (или xfsdump) и восстановление могут быть лучшим вариантом. Он не обрабатывает загрузочный сектор, но работает, когда целевой и исходный файлы имеют разные размеры.

Если вы хотите использовать netcat без ssh. Я предполагаю, что это самый быстрый способ, а не безопасный, вы можете скопировать и восстановить весь диск следующим образом:
На компьютере A с IP 192.168.0.1

cat /dev/hdb | nc -p 9000
On computer B
nc -l 192.168.0.1 9000 > /dev/hdb

Помните, что согласно man nc опция -l:

  -l  Used to specify that nc should listen for an incoming connection rather than initiate a connection to a remote host.  It is an ошибка to use this option in conjunction with the -p, -s, or -z options.

Хост A - это тот, на котором создается изображение, хост B - тот, на котором изображение будет сохранено:

root@A# dd if=/dev/sda | ssh root@B "dd of=/some/file"

Восстановление на диск просто поменяет их местами.

netcat не нужен.

на машине src запускается:

dd if=/dev/sdX bs=1M | ssh root@dstMachine " dd of=/dev/sdY bs=1M"

Я предполагаю, что ни один из разделов на sdX и sdY не смонтирован. вы можете загрузить обе коробки с knoppix или другой аналогичный live-дистрибутив.

dd - берет данные из если [если не указан - берет из стандартного ввода], отправляет данные в из [если не указан - данные отправляются на стандартный вывод]. bs - размер блока ... ускорит процесс.

ssh - выполняет команду, указанную в кавычках на удаленном поле, все данные, перекачиваемые на stdin ssh, будут туннелироваться на удаленный компьютер и переданы как stdin команде, выполняемой там.

Базовая копия с netcat описано здесь.

Если вам нужно получить SSH вовлечены в это, вы можете использовать Перенаправление порта над этим,

-R [bind_address:]port:host:hostport

Но в целом вы можете просто выполнить передачу по SSH (без netcat).

Пока обе файловые системы отключены, dd работает хорошо.

(from server1) dd if=/dev/sda bs=32k | ssh <server2> dd of=/dev/sda bs=32k

Вам потребуется настроить аутентификацию hostkey заранее, иначе запрос пароля приведет к сбою копии.

Выполнение этого на смонтированном томе приведет к плохим результатам.

Или вы можете использовать clonezilla и «смонтировать» удаленное хранилище через sshfs.

Я попробовал комбинацию вариантов, представленных выше, и делюсь с вами результатами. от самого быстрого к самому медленному с использованием комбинации размера блока dd, алгоритма сжатия gzip и gzip.

Как видите, gzip дал мне улучшение только при использовании быстрого алгоритма в сочетании с размером блока 1M.

time dd bs=1M if=/dev/HypGroup00/stage-snapshot  | gzip --fast | ssh hyp5 'gzip -d | dd bs=1M of=/dev/HypGroup00/stage'
12884901888 bytes (13 GB) copied, 326.045 s, 39.5 MB/s

time dd if=/dev/HypGroup00/stage-snapshot  | gzip --fast | ssh hyp5 'gzip -d | dd of=/dev/HypGroup00/stage'
12884901888 bytes (13 GB) copied, 370.158 s, 34.8 MB/s

time dd if=/dev/HypGroup00/stage-snapshot  | ssh hyp5 dd of=/dev/HypGroup00/stage
12884901888 bytes (13 GB) copied, 370.274 s, 34.8 MB/s

time dd bs=1M if=/dev/HypGroup00/stage-snapshot  | ssh hyp5 dd bs=1M of=/dev/HypGroup00/stage
12884901888 bytes (13 GB) copied, 372.906 s, 34.6 MB/s

time dd bs=1M if=/dev/HypGroup00/stage-snapshot  | gzip | ssh hyp5 'gzip -d | dd bs=1M of=/dev/HypGroup00/stage'
12884901888 bytes (13 GB) copied, 520.116 s, 24.8 MB/s

Были использованы два быстрых сервера, подключенных к GigE через коммутатор Enterprise GigE с использованием локальных дисков через LVM.

Похоже, вы тут кувалдой раскололи орех - или, возможно, лучшая аналогия - это попытка подстричь лужайку ножницами :)

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

Спасательный комплект Trinity - это бесплатный liveCD, который поддерживает диски с образами через многоадресную рассылку и может делать то, что вы хотите (или кто-то другой, думающий в том же духе), без обращения к полнопроходным системам создания образов.