Як налаштувати клонування дисків за допомогою DD, netcat та ssh tunnel?


26

Я хотів би скопіювати об'ємні матеріали (використовуючи диски з переробкою зображень dd) з netcat від хоста А до В через шифрований канал 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 - якщо = - джерело, 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 або стиснути. Bzip2 також працюватиме, але це потребує трохи більше часу для процесора. Перший - приклад такого використання.
  2. Краще, якщо розділ джерела не змонтований або встановлений лише для читання. Якщо ні, то вам потрібно буде розгорнути цільове зображення.
  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

Пам'ятайте, що відповідно до людини 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, щоб команда виконувалась там.


значить, на змонтованому диску це буде неможливо?
Євген

@Evgeny це буде нормально, якщо диск встановлений лише для читання. інакше - не робіть цього ... ваша копія буде непослідовною.
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

Вам потрібно буде встановити автентифікацію хост-ключа достроково, інакше підказка пароля призведе до відмови копії.

Якщо це зробити на встановленому обсязі, ви отримаєте погані результати.


Спасибі. чи потрібні цитати?
Євген

1

Або ви можете використовувати clonezilla і "змонтувати" віддалене сховище через sshfs.


Якщо ви копіюєте розділ, чи не хочете вимкнути цільовий розділ? Детальніше про цей варіант буде корисним.
Марк Стосберг

1

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

Як ви бачите, gzip лише покращив використання швидкого алгоритму в поєднанні з розміром блоку 1М.

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.