Jak skonfigurować klonowanie dysku za pomocą tunelu dd, netcat i ssh?


26

Chciałbym skopiować rzeczy masowo (używając dysku reimage dd) z netcat z hosta A na B za pośrednictwem kanału szyfrowanego ssh w systemie Linux.

Jakie polecenia powinienem pisać na obu końcach?

Odpowiedzi:


28

Kopiowanie ze źródła do miejsca docelowego, w którym działa sshd:

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

Kopiowanie ze źródła do celu przez sshd_host, gdy cel nie jest uruchomiony sshd.

  • Cel: nc -l -p 62222 | dd of=/dev/sda bs=$((16 * 1024 * 1024))
  • Źródło: ssh -L 62222:target:62222 sshd_host &
  • Źródło: dd if=/dev/sda | nc -w 3 localhost 62222

    dd - jeśli = jest źródłem, of = jest miejscem docelowym, bs = jest rozmiarem bloku. Różne rozmiary bloków mogą poprawić wydajność. 16 jest zwykle dość rozsądnym punktem wyjścia. Możesz także użyć count =, aby wskazać liczbę bloków do skopiowania.

    nc - -p wskazuje port używany przez usługi. -l służy do uruchomienia usługi. -w ustawia czas oczekiwania na dane w potoku przed zamknięciem.

    ssh - -L konfiguruje tunel na zdalnym hoście. Format argumentu jest local_port:target_host:target_port. Twój program lokalny (nc) łączy się z portem lokalnym, połączenie to jest tunelowane i połączone z portem docelowym na hoście docelowym.

Zdefiniowane opcje są tylko tymi używanymi do tego. Więcej informacji znajdziesz na stronach podręcznika użytkownika.

Kilka uwag:

  1. Jeśli robisz to za pośrednictwem innej sieci niż LAN, sugeruję skompresowanie strumienia danych za pomocą gzip lub kompresji. Bzip2 też by działał, ale zajmuje trochę więcej czasu procesora. Pierwszy ma przykład takiego użycia.
  2. Lepiej, jeśli partycja źródłowa nie jest zamontowana lub jest montowana tylko do odczytu. Jeśli nie, musisz sprawdzić obraz docelowy.
  3. O ile jedna z maszyn nie ma netcat, ale nie ssh, netcat nie jest tutaj naprawdę potrzebny. Ten przypadek wyglądałby następująco:

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

  1. dd działa najlepiej, jeśli źródło i cele są tego samego rozmiaru. Jeśli nie, cel musi być większy z 2.
  2. Jeśli używasz ext2 / 3 lub xfs, zrzut (lub xfsdump) i przywracanie mogą być lepszą opcją. Nie obsługuje sektora rozruchowego, ale działa, gdy cel i źródło mają różne rozmiary.

4

Jeśli chcesz używać netcat bez ssh. Zakładam, że jest to najszybszy, a nie bezpieczny sposób, możesz skopiować i przywrócić cały dysk w następujący sposób:
Na komputerze A o adresie IP 192.168.0.1

cat /dev/hdb | nc -p 9000
Na komputerze B
nc -l 192.168.0.1 9000 > /dev/hdb

Pamiętaj, że według man nc opcja -l to:

  -l Służy do określania, że ​​nc powinien nasłuchiwać połączenia przychodzącego zamiast inicjować połączenie ze zdalnym hostem. Używanie tej opcji w połączeniu z opcjami -p, -s lub -z jest błędem .

3

netcat nie jest potrzebny.

na maszynie src:

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

Zakładam, że żadna z partycji na sdX i sdY nie jest zamontowana. możesz uruchomić oba pola za pomocą knoppiksa lub innej podobnej dystrybucji na żywo.

dd - pobiera dane z jeżeli [ile nie zostało - bierze ze standardowego wejścia] wysyła dane o [o ile nie zostało - dane są wysyłane na standardowe]. bs - rozmiar bloku ... przyspieszy sprawę.

ssh - wykonuje polecenie podane w cudzysłowie na zdalnym urządzeniu, wszystkie dane pompowane do stdin ssh zostaną tunelowane do zdalnej maszyny i porowione jako stdin do komendy tam wykonanej.


więc będzie to niemożliwe na zamontowanym dysku?
Evgeny,

@ Evgeny będzie dobrze, jeśli dysk zostanie zamontowany jako tylko do odczytu. w przeciwnym razie - nie rób tego ... twoja kopia będzie niespójna.
pQd

3

Host A to ten, który obrazuje, host B to ten, na którym obraz będzie przechowywany:

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

Przywrócenie na dysk po prostu zamieniłoby te dwa.


1

Podstawowa kopia z netcat jest opisana tutaj .

Jeśli chcesz zaangażować SSH , możesz użyć przekierowania portów ,

-R [bind_address:]port:host:hostport

Ale ogólnie rzecz biorąc, możesz po prostu wykonać transfer SSH (bez netcata).


1

Tak długo, jak systemy plików są odmontowane, dd działa dobrze.

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

Musisz wcześniej skonfigurować uwierzytelnianie klucza hosta, w przeciwnym razie monit o podanie hasła spowoduje niepowodzenie kopiowania.

Wykonanie tego na zamontowanym woluminie spowoduje słabe wyniki.


dzięki. czy konieczne są wyceny?
Evgeny,

1

Lub możesz użyć clonezilli i „zamontować” swój zdalny magazyn za pomocą sshfs.


Jeśli kopiujesz partycję, czy nie chcesz, aby partycja docelowa została odmontowana? Przydałoby się więcej szczegółów na temat tej opcji.
Mark Stosberg

1

Wypróbowałem kombinację powyższych opcji i udostępniam Ci wyniki. od najszybszego do najwolniejszego przy użyciu kombinacji rozmiaru bloku dd, algorytmu kompresji gzip i gzip.

Jak widać gzip poprawił mi tylko użycie szybkiego algorytmu w połączeniu z wielkością bloku 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

Wykorzystano dwa szybkie serwery połączone z GigE za pomocą przełącznika Enterprise GigE za pomocą dysków lokalnych za pośrednictwem LVM.


0

Wygląda na to, że używasz młota do kruszenia orzechów - a może lepszą analogią jest cięcie trawnika nożyczkami :)

Zdecydowanie polecam przyjrzeć się niektórym narzędziom do wykonywania takiej pracy, chyba że masz doskonałe powody, aby zrobić to samodzielnie.

Trinity Rescue Kit to darmowy liveCD, który obsługuje dyski do przetwarzania obrazu w trybie multiemisji i może robić, co chcesz (a nawet każdy, kto myśli na tych samych liniach), bez przechodzenia na systemy obrazowania z pełnym otworem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.