dd, netcat 및 ssh 터널로 디스크 복제를 설정하는 방법은 무엇입니까?


26

ddLinux에서 ssh 암호화 채널을 통해 호스트 A에서 B로 netcat을 사용하여 대량으로 (이미지를 사용하는 이미지 디스크 ) 복사하고 싶습니다 .

양쪽에 어떤 명령을 입력해야합니까?

답변:


28

대상에서 sshd가 실행중인 소스에서 대상으로 복사 :

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

대상이 sshd를 실행하지 않을 때 sshd_host를 통해 소스에서 대상으로 복사

  • 목표: 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 는 종료하기 전에 pipline의 데이터를 기다리는 시간을 설정합니다.

    ssh -- L 은 원격 호스트에서 터널을 설정합니다. 인수의 형식은 local_port:target_host:target_port입니다. 로컬 프로그램 (nc)은 local_port에 연결되며이 연결은 터널링되고 target_host의 target_port에 연결됩니다.

정의 된 옵션은이 옵션에 사용 된 옵션입니다. 자세한 내용은 매뉴얼 페이지를 참조하십시오.

몇 가지 참고 사항 :

  1. LAN 이외의 다른 곳 에서이 작업을 수행하는 경우 gzip 또는 compress로 데이터 스트림을 압축하는 것이 좋습니다. Bzip2도 작동하지만 CPU 시간이 조금 더 걸립니다. 첫 번째는 그 사용법의 예입니다.
  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

ssh없이 netcat을 사용하려면. 이것이 가장 빠른 방법이고 안전한 방법은 아니라고 가정합니다. 다음과 같이 전체 디스크를 복사하고 복원 할 수 있습니다.
IP 192.168.0.1의 컴퓨터 A

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 또는 기타 유사한 라이브 배포판으로 두 상자를 모두 부팅 할 수 있습니다 .

DD - 데이터 걸리는 경우 - [제공되지 않은 경우 표준 입력에서 소요]로 데이터를 송신 [제공되지 않는 경우 - 데이터는 표준 출력으로 전송된다]. bs -block size ...는 속도를 높여줍니다.

ssh-원격 상자에서 따옴표로 제공된 명령을 실행합니다. ssh의 stdin으로 펌핑 된 모든 데이터는 원격 시스템으로 터널링되고 그곳에서 실행 된 명령에 stdin으로 porovided됩니다.


마운트 된 디스크에서 불가능할까요?
Evgeny

@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

그러나 전체적으로, 당신은 (netcat없이) 먼저 SSH 전송을 수행 할 수 있습니다.


1

파일 시스템이 모두 마운트 해제되어 있으면 dd가 잘 작동합니다.

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

미리 호스트 키 인증을 설정해야합니다. 그렇지 않으면 암호 프롬프트로 인해 복사가 실패합니다.

탑재 된 볼륨에서이 작업을 수행하면 결과가 좋지 않습니다.


감사. 따옴표가 필요합니까?
Evgeny

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

LVM을 통해 로컬 디스크를 사용하는 Enterprise GigE 스위치를 통해 GigE에 연결된 두 개의 빠른 서버가 사용되었습니다.


0

슬레지 해머를 사용하여 너트를 깨뜨리는 것처럼 보이거나 더 나은 비유로 가위로 잔디를 자르려고합니다. :)

사내에서해야 할 큰 이유가없는 한 이런 작업을 수행하기위한 도구 중 일부를 살펴 보는 것이 좋습니다.

Trinity Rescue Kit 는 멀티 캐스트를 통한 이미징 드라이브를 지원하는 무료 라이브 CD이며, 전체 보어 이미징 시스템으로 가지 않고 원하는 것을 수행 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.