로컬 컴퓨터에서 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.