Я хотел бы скопировать все сразу (преобразовать образ диска с помощью 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-страницы для получения более подробной информации.
Несколько примечаний:
source machine dd -> nc -> ssh -> ssh tunnel -> sshd server -> nc on target -> dd
Если вы хотите использовать 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, который поддерживает диски с образами через многоадресную рассылку и может делать то, что вы хотите (или кто-то другой, думающий в том же духе), без обращения к полнопроходным системам создания образов.