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


26

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

Какие команды я должен набрать на обоих концах?

Ответы:


28

Копирование из источника в цель, где на цели работает 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

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

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

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

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

Несколько заметок:

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

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

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

4

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

cat /dev/hdb | nc -p 9000
На компьютере B
nc -l 192.168.0.1 9000 > /dev/hdb

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

  -l Используется для указания того, что nc должен прослушивать входящее соединение, а не инициировать соединение с удаленным хостом. Это ошибка , чтобы использовать эту опцию в сочетании с -p, -s или -z опций.

3

netcat не нужен.

на src машина работает:

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

Я предполагаю, что ни один из разделов на SDX и SDY не смонтированы. вы можете загрузить обе коробки с помощью knoppix или другого аналогичного дистрибутива.

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

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


так будет невозможно на смонтированном диске?
Евгений

@ Евгений, все будет в порядке, если диск смонтирован только для чтения. в противном случае - не делайте этого ... ваша копия будет противоречивой.
PQD

3

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

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

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


1

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

Если вам нужно подключить к этому SSH , вы можете использовать переадресацию портов поверх этого,

-R [bind_address:]port:host:hostport

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


1

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

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

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

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


Спасибо. цитаты нужны?
Евгений

1

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


Если вы копируете раздел, не хотите ли вы отключить целевой раздел? Более подробно об этой опции будет полезно.
Марк Стосберг

1

Я испробовал комбинацию из приведенных выше вариантов и делюсь результатами с вами. самый быстрый и медленный, используя комбинации размера блока 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.


0

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.