로컬 컴퓨터에서 SSH를 사용하여 원격 디스크를 작성하고 로컬 디스크에 저장하는 방법


85

로컬 컴퓨터에서 SSH를 사용하여 원격 디스크 백업을 생성하여 로컬 디스크에 저장하려면 어떻게해야합니까?


나는 다음을 시도했다.

ssh hostname@my.ip.address "sudo dd if=/dev/sdX " | \
  dd of=/home/username/Documents/filename.image`

그러나 다음과 같은 오류가 발생합니다.

tty가없고 askpass 프로그램이 지정되지 않았습니다.

답변:


114

SSH를 통해 원격 컴퓨터의 HDD A 를 로컬 컴퓨터의 HDD에있는 단일 파일 로 백업하려는 경우 다음 중 하나를 수행 할 수 있습니다.

예

원격 컴퓨터에서 실행

$ dd if=/dev/sda | gzip -1 - | ssh user@local dd of=image.gz

로컬 컴퓨터에서 실행

$ ssh user@remote "dd if=/dev/sda | gzip -1 -" | dd of=image.gz

라이브 예

$ ssh skinner "dd if=/dev/sda5 | gzip -1 -" | dd of=image.gz
208782+0 records in
208782+0 records out
106896384 bytes (107 MB) copied, 22.7608 seconds, 4.7 MB/s
116749+1 records in
116749+1 records out
59775805 bytes (60 MB) copied, 23.9154 s, 2.5 MB/s

$ ll | grep image.gz
-rw-rw-r--.   1 saml saml  59775805 May 31 01:03 image.gz

모니터링 방법?

  1. ssh다른 터미널과 ls -l파일을 통해 로그인하여 크기를 확인하십시오.
  2. pv예를 들어 위의 원격 예와 같이 큰 dd 작업의 진행 상황을 모니터링하는 데 사용할 수 있습니다 .

    $ dd if=/dev/sda | gzip -1 - | pv | ssh user@local dd of=image.gz
    
  3. "SIGUSR1"신호를 보내면 dd통계가 인쇄됩니다. 다음과 같은 것 :

    $ pkill -USR1 dd
    

참고 문헌

위에서 언급 한 모니터링 방법은 원래 @Ryan & @bladt 와 자신의 의견을 통해 남겨 졌습니다 . 나는 그들을 더 분명하게하기 위해 대답으로 옮겼습니다.


비슷한 문제 (원격 컴퓨터 ONE의 하드 드라이브를 원격 컴퓨터 TWO의 저장소에 백업)에 대해 다음과 같이 시도했습니다 . <br /> [root @ ONE] # dd if = / dev / sda1 | ssh root @ TWO dd of=/root/Public/ONE/sda1.img<br /> 409600 + 0의 409600 + 0 레코드는 209715200 바이트 (210MB)가 복사 됨, 0.894929s, 234MB / s stdin이 터미널 root @ TWO의 비밀번호가 아니므로 의사 터미널이 할당되지 않습니다. : 문제는 /root/Public/ONE/sda1.img파일이 예상대로 작동 ONE하지 않고에 생성 되었다는 것 TWO입니다. 이 문제를 어떻게 해결합니까?
— Urhixidur

1
누군가 pv로컬 컴퓨터에서 사용하는 예를 들어 줄 수 있습니까 ? 감사합니다.
— TCB13

zipzip2 또는 gzip insted zip을 사용하는 것이 좋습니다
— Shimon Doodkin

왜 마지막에 "| dd of = image.gz"가 필요합니까? (다만 "> image.gz을") DD는 하나 개의 CPU가 100 % 필요하기 때문에
— 시몬 Doodkin

6
모니터링 관련 : 최신 dd 버전에도 status=progress옵션이 있습니다. 따라서 pkill -USR1 dd더 이상 다른 터미널에서 실행할 필요가 없습니다.
— Till Schäfer

12

당신이받는 오류는 원격으로 sudo를 사용했기 때문에 발생합니다 (암호를 묻는 메시지가 있지만 입력 할 tty가 없습니다). 반면에 일반 사용자 dd는 다른 답변에서 제안한대로 간단히 사용할 수 없습니다 (기기에 필요한 권한이 없음). dd비밀번호없이 sudo 로 실행할 권한을 부여하여 문제를 해결할 수 있습니다 . sudoers 파일 (원격에서!)을 편집하여이를 수행 할 수 있습니다.

sudo visudo

다음 줄을 추가하십시오.

userfoo ALL=(ALL) NOPASSWD: /bin/dd if=/dev/sdX

이제 다음을 발행 할 수 있습니다.

ssh userfoo@host "sudo /bin/dd if=/dev/sdX" | dd of=test.dd

작동해야합니다. sudoers에서 더 일반적인 항목을 만들 수 있으므로 dd모든 매개 변수 로 실행할 수 있지만이 무료 권한을 필요한 최소로 유지하는 것이 더 현명합니다.


또는 'sudo dd ...'명령을 실행하기 직전에 적용 가능한 끝에서 'sudo ls'를 실행하고 암호를 입력하면됩니다.
— MikeW

최신 버전의 dd를 사용하면 status = progress를 추가하여 복사 진행 상황을 모니터링 할 수도 있습니다.
— sensslen

7

방금 가상 Linux 민트 상자에서 수정 된 버전을 사용하여 노화 된 RedHat 서버의 실제 하드 드라이브를 복제했습니다.

가상 상자에서 루트로 다음을 실행했습니다.

ssh root@192.168.1.5 "dd if=/dev/cciss/c0d0" | dd of=/dev/sdb
  • 192.168.1.5는 실제 Red Hat Enterprise Linux 2.1 박스입니다.
  • / dev / sdb는 새로운 가상 디스크이며, 복제가 완료되면 이전 버전의 물리적 물리적 상자의 가상 버전이됩니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.