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

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

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

하나의 Raspberry Pi 배포판을 다른 배포판으로 교체하려고 합니다. 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. SSH에 전달하는 옵션은 MACs연결이 메시지 무결성 다이제스트에 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/mmcblk0p5root=/dev/mmcblk0p3.

  7. 다음을 수행하여 장치 및 복사된 원본 시스템의 장치를 삭제할 수 있습니다 loop.mapper

    sudo kpartx -d pi.img
    
  8. 이제 Raspberry Pi를 다시 시작하면 새 이미지를 사용할 수 있습니다!

답변4

USB ARM 이미지를 사용하여 Pi를 부팅하는 경우 네트워크에 연결하면 저장 공간이 충분합니다. 저는 전문가가 아니기 때문에 여기에 댓글을 남깁니다. 오류가 있는 경우 전문가에게 수정을 요청하시기 바랍니다.

관련 정보