어떻게 해야 하나요: dd if=coolstuff.iso of=(ssh kev@mypi )

어떻게 해야 하나요: dd if=coolstuff.iso of=(ssh kev@mypi )

내 노트북의 카드 리더가 작동하지 않아요. dd(또는 다른 도구)를 사용하여 네트워크 디스크에 이미지를 쓸 수 있나요?

하나의 라즈베리 파이 배포판을 다른 배포판으로 교체하려고 합니다. SD 카드에는 6GB의 여유 공간이 있으며 2GB만 사용합니다.

SD 카드에서

$ sudo parted -l
Model: SD SU08G (sd/mmc)
Disk /dev/mmcblk0: 7948MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type      File system  Flags
 1      1049kB  95.4MB  94.4MB  primary   fat16        lba
 2      95.4MB  1878MB  1783MB  extended
 5      96.5MB  1878MB  1782MB  logical   ext4
 3      1878MB  7948MB  6070MB  primary   ext4

그리고제발, 내가 왜 이러고 싶은지 비판하기 전에 질문에 대답하십시오. 그런 다음 내가 얼마나 멍청한지 말해주세요.

답변1

SSH를 통해 파이프할 수 있습니다.

dd if=something | ssh host dd of=something

그러나 , 등을 사용하는 dd것이 더 나은 단순한 파일 복사 작업보다 사용하는 더 나은 이유가 있어야 합니다 .scprsync

답변2

Raspberry에 SSH 서버가 있고 Raspberry의 SD 카드가 에 표시된다고 가정하면 /dev/sda다음과 같이 할 수 있습니다.

dd if=SDcardimage.img | ssh -o MACs=hmac-ripemd160 -l raspberry-pi-user <your Raspberry's IP address> 'dd of=/dev/sda'

내가 설명한다:

  1. dd출력 파일이 지정 되지 않으면 표준 출력으로 출력되고 of, 에 입력 파일이 지정되지 않으면 표준 입력에서 읽습니다 if.
  2. SSH에 명령을 직접 전달하면 클라이언트는 표준 입력을 서버로 전달한 다음 서버는 해당 데이터를 서버로 전송된 명령에 지정된 프로세스의 표준 입력으로 전달합니다.
  3. 이 경우 SSH 클라이언트의 표준 입력은 에서 나오고 dd원격 장치의 표준 입력은 ddSSH 서버에서 나오므로 SSH 클라이언트-서버 쌍은 암호화된 데이터 전송 역할을 하여 표준 출력을 연결합니다. dd리모컨의 표준 입력에 대한 로컬입니다 dd. (이것은 실제로 SSH가 원격 로그인을 수행하는 방식입니다. 표준 입력은 키보드에서 나오고 표준 입력을 수신하는 원격 프로세스는 UNIX 쉘입니다.
  4. MACsSSH에 전달한 옵션은 연결이 RIPEMD160 알고리즘을 메시지 무결성 다이제스트로 사용하도록 강제합니다 . 이렇게 하면 전송된 데이터가 보호되어 전송 오류나 의도적인 변조가 감지됩니다. 전파를 사용하여 디스크 이미지를 전송한다는 점을 고려하면 이는 중요합니다. Raspberry가 기본적으로 약한 암호화를 수행하는 경우를 대비하여 암호화를 추가 o Ciphers=aes256-cbc하거나 강제 적용할 수 있습니다 .o Ciphers=aes256-ctr
  5. -l내가 해당 구문을 사용하는 경향이 있기 때문에 로그인에 사용하는 사용자를 나타냅니다.

답변3

다음 재부팅 시 새 루트 이미지가 사용되도록 실행 중인 시스템을 업데이트하는 것은 네트워크를 통해 직접 복사하는 것보다 조금 더 복잡합니다. 루트 이미지가 켜져 있다고 가정하면 /dev/mmcblk0p5(위의 출력 parted -l및 설명에 표시된 대로) OP는 문제 없이 이미지에서 루트 파티션을 복사할 수 있어야 합니다 /dev/mmcblk0p3(물론 원하는 데이터가 없는 경우). 이 파티션을 계속 유지하고 싶습니다). 아래 지침을 따를 수 있습니다.그러나 제안된 검사를 수행하고 명령을 적절하게 변경했는지 확인하십시오. 아래 명령을 맹목적으로 복사하는 것은 시스템을 관리하는 좋은 방법입니다.

  1. 새 이미지의 루트 파티션은 파티션 5라고 가정하지만 그렇지 않을 수도 있습니다. pi.img으로 호출된 이미지의 파티션 테이블을 인쇄할 수 있습니다 parted pi.image print. 확실하지 않은 경우 질문에 출력을 추가하세요.

  2. 전체 디스크 이미지(자체 파티션 테이블과 부팅 파티션도 포함)가 아닌 루트 파티션의 이미지만 복사하려고 하므로 이를 이미지의 나머지 부분과 분리해야 합니다. 이를 수행하는 한 가지 방법(Linux 시스템에서)은 다음을 사용하는 것입니다 kpartx.

    sudo kpartx -av pi.img
    

    사용 중인 다른 루프 장치가 없으면 을 사용 loop0하지만 출력을 확인하고 이에 따라 추가 명령을 변경하십시오.

  3. 다음을 수행하여 대상 파티션이 Raspberry Pi에 마운트되지 않았는지 확인하세요.

    sudo umount /dev/mmcblk0p3
    
  4. 다음 단계에서는 SSH를 통해 데이터를 파이프할 수 있어야 합니다.그리고루트 액세스 권한이 있습니다. 이를 수행하는 방법은 몇 가지가 있지만 가장 쉬운 방법은 루트 로그인을 활성화하는 것입니다. 일반적으로 이는 권장되지 않지만 새 시스템 이미지를 업로드하려고 하므로 문제가 되지 않을 것이라고 생각합니다. Raspberry Pi에서 다음을 수행하십시오.

    sudo passwd root
    
  5. 다음으로 이미지를 Raspberry Pi에 복사합니다(사용데이터 무결성을 위한 RAAK의 제안):

    sudo dd if=/dev/mapper/loop0p5 |
      ssh -o MACs=hmac-ripemd160 root@host dd of=/dev/mmcblk0p3
    

    host/etc/hostnameRaspberry Pi에 있는 내용 ( mypiOP용으로 보임) 또는 Raspberry Pi의 IP 주소일 수 있습니다. 또한 를 사용하지 않는 경우 이에 따라 이를 변경하는 것을 잊지 마십시오 loop0.

  6. 다음으로 Raspberry Pi의 루트 파티션을 변경합니다. 제가 볼 수 있는 한(테스트할 Raspberry Pi가 없습니다) 변경해야 합니다 /boot/cmdline.txt. root=/dev/mmcblk0p5라고 적힌 부분을 바꾸시면 됩니다 root=/dev/mmcblk0p3.

  7. 다음을 수행하여 복사한 시스템에서 loop및 장치를 삭제할 수 있습니다 .mapper

    sudo kpartx -d pi.img
    
  8. 이제 Raspberry Pi를 재부팅하면 새 이미지를 사용해야 합니다!

답변4

USB ARM 이미지를 사용하여 Pi를 부팅하고 네트워크에 연결하면 스토리지가 충분히 길들여질 것입니다. 나는 프로가 아니다. 그냥 여기서 공을 뱉는다. 전문가님들, 제가 틀렸다면 정정해 주시기 바랍니다.

관련 정보