네트워크를 통해 외장 하드 드라이브에 DD하는 방법은 무엇입니까?

네트워크를 통해 외장 하드 드라이브에 DD하는 방법은 무엇입니까?

현재 사용 중인 컴퓨터의 외장 하드 드라이브와 동일한 네트워크에 있는 Raspberry Pi의 하드 드라이브를 복제하려고 합니다. 하지만 명령을 올바르게 전송하는 데 문제가 있습니다. 나는 시도했다:

ssh user@hostip "dd if=/dev/sda" | sudo dd of=/dev/sdc

그러나 sudo 및 ssh 연결에 대한 프롬프트는 함께 쌓입니다.

답변1

netcat을 사용하세요 - 개인 정보 보호에 신경 쓰지 않는다면(즉, 홈 네트워크가 실제로 귀하의 것이라면) CPU에 불필요한 로드가 발생하지 않습니다.

호스트에서 실행

cat /dev/sda | nc -n ipaddr 10000

ipaddrPI의 IP 주소는 어디에 있습니까?

PI에서 실행

nc -l 10000 >/dev/sdc

모든 명령은 루트로 실행해야 합니다. OpenBSD netcat은 귀하의 버전(LibreSSL에 있음)으로 간주되지만 nc다른 버전도 작동해야 합니다.

답변2

명령줄을 변경하지 않고 몇 가지 간단한 해결 방법:

  • ssh-agentSSH에 대한 비밀번호 인증 대신 키 인증(키 파일이 비밀번호로 보호된 경우)을 사용하십시오 . 어쨌든, 그것은 일반적으로 좋은 생각입니다.
  • SSH를 사용한 연결 재사용은 먼저 연결(예: ssh -o ControlMaster=yes -M -f sleep 999999)을 연 다음 인증이 필요하지 않은 슬레이브 연결에서 복사본을 실행합니다. 바라보다SSH 명령에 대한 지침 보기예를 들어.
  • sudo true이 명령을 실행하기 전에 실행하세요. 기본적으로 sudo는 비밀번호를 확인하기 위해 15분 동안 정보를 캐시합니다(적어도 구성에 따라 동일한 터미널에서 이 작업을 수행하는 경우).

비정상적으로 엄격한 구성으로 인해 명령에 두 개의 암호를 입력해야 하는 경우 명명된 파이프를 사용하여 명령을 구분할 수 있습니다.

mkfifo pipe
ssh user@hostip cat /dev/sda >pipe
# and in another terminal
sudo sh -c 'cat >/dev/sdc' <pipe

또는 cat대신 사용 dd하십시오.서둘러요그리고더 듬직 해요.

답변3

전체 원격 디스크의 비트 단위 복사본이 정말로 필요합니까? 디지털 포렌식을 좋아하시나요?

그렇지 않은 경우 파티션 복사본과 해당 파티션의 데이터만 필요한 경우 다음을 통해 많은 시간과 전송 대역폭을 절약할 수 있습니다.

  1. 예를 들어 를 사용하여 파티션 테이블을 복사합니다 sfdisk.

예를 들어:

ssh user@hostip sudo sfdisk -d /dev/sda | sudo sfdisk /dev/sdc

또는 다음 두 단계로 임시 파일을 사용합니다.

ssh user@hostip sudo sfdisk -d /dev/sda > /tmp/sda.txt
sudo sfdisk /dev/sdc < /tmp/sda.txt
  1. partclone빈 공간, 삭제된 파일 등을 모두 무시하고 현재 사용 중인 파일 시스템 부분만 복제하는 데 사용됩니다 .

예를 들어:

ssh user@hostip sudo partclone.ext4 -c -s /dev/sda1 -o - | 
    sudo partclone.ext4 -r -s - -o /dev/sdc1

partcloneLinux(ext2/3/4, btrfs, xfs 등) 및 Windows(NTFS, FAT)에서 사용되는 모든 공통 파일 시스템과 일부 일반적이지 않은 파일 시스템을 지원합니다.

부분 클론Debian을 포함한 대부분의 배포판에 패키지되어 있습니다. sfdisk패키지의 일부입니다 util-linux.

여전히 ssh/sudo 문제를 해결해야 하지만 @Gilles가 이에 대한 훌륭한 답변을 제공합니다.

비밀번호 프롬프트를 제거하는 가장 쉬운 방법은 이 모든 작업을 루트로 수행하는 것입니다( 루트 쉘을 얻기 위해). 따라서 각 명령 앞에 를 추가하고 SSH 키를 설치하기 위해 루트로 실행할 sudo -i필요가 없습니다. 호스트 시스템 의 root@localhost . 그런 다음 다음을 실행할 수 있습니다.sudossh-copy-id hostip~/.ssh/authorized_keys

ssh hostip sfdisk -d /dev/sda | sfdisk /dev/sdc
ssh hostip partclone.ext4 -c -s /dev/sda1 -o - | 
    partclone.ext4 -r -s - -o /dev/sdc1

ssh-agent를 실행하는 경우 루트 키의 비밀번호를 최대 한 번만 입력하면 됩니다(또는 이전에 사용한 적이 있는 경우에는 전혀 입력하지 않아도 됩니다).

관련 정보