.png)
내 노트북의 카드 리더가 작동하지 않아요. 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
것이 더 나은 단순한 파일 복사 작업보다 사용하는 더 나은 이유가 있어야 합니다 .scp
rsync
답변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'
내가 설명한다:
dd
출력 파일이 지정 되지 않으면 표준 출력으로 출력되고of
, 에 입력 파일이 지정되지 않으면 표준 입력에서 읽습니다if
.- SSH에 명령을 직접 전달하면 클라이언트는 표준 입력을 서버로 전달한 다음 서버는 해당 데이터를 서버로 전송된 명령에 지정된 프로세스의 표준 입력으로 전달합니다.
- 이 경우 SSH 클라이언트의 표준 입력은 에서 나오고
dd
원격 장치의 표준 입력은dd
SSH 서버에서 나오므로 SSH 클라이언트-서버 쌍은 암호화된 데이터 전송 역할을 하여 표준 출력을 연결합니다.dd
리모컨의 표준 입력에 대한 로컬입니다dd
. (이것은 실제로 SSH가 원격 로그인을 수행하는 방식입니다. 표준 입력은 키보드에서 나오고 표준 입력을 수신하는 원격 프로세스는 UNIX 쉘입니다. MACs
SSH에 전달한 옵션은 연결이 RIPEMD160 알고리즘을 메시지 무결성 다이제스트로 사용하도록 강제합니다 . 이렇게 하면 전송된 데이터가 보호되어 전송 오류나 의도적인 변조가 감지됩니다. 전파를 사용하여 디스크 이미지를 전송한다는 점을 고려하면 이는 중요합니다. Raspberry가 기본적으로 약한 암호화를 수행하는 경우를 대비하여 암호화를 추가o Ciphers=aes256-cbc
하거나 강제 적용할 수 있습니다 .o Ciphers=aes256-ctr
-l
내가 해당 구문을 사용하는 경향이 있기 때문에 로그인에 사용하는 사용자를 나타냅니다.
답변3
다음 재부팅 시 새 루트 이미지가 사용되도록 실행 중인 시스템을 업데이트하는 것은 네트워크를 통해 직접 복사하는 것보다 조금 더 복잡합니다. 루트 이미지가 켜져 있다고 가정하면 /dev/mmcblk0p5
(위의 출력 parted -l
및 설명에 표시된 대로) OP는 문제 없이 이미지에서 루트 파티션을 복사할 수 있어야 합니다 /dev/mmcblk0p3
(물론 원하는 데이터가 없는 경우). 이 파티션을 계속 유지하고 싶습니다). 아래 지침을 따를 수 있습니다.그러나 제안된 검사를 수행하고 명령을 적절하게 변경했는지 확인하십시오. 아래 명령을 맹목적으로 복사하는 것은 시스템을 관리하는 좋은 방법입니다.
새 이미지의 루트 파티션은 파티션 5라고 가정하지만 그렇지 않을 수도 있습니다.
pi.img
으로 호출된 이미지의 파티션 테이블을 인쇄할 수 있습니다parted pi.image print
. 확실하지 않은 경우 질문에 출력을 추가하세요.전체 디스크 이미지(자체 파티션 테이블과 부팅 파티션도 포함)가 아닌 루트 파티션의 이미지만 복사하려고 하므로 이를 이미지의 나머지 부분과 분리해야 합니다. 이를 수행하는 한 가지 방법(Linux 시스템에서)은 다음을 사용하는 것입니다
kpartx
.sudo kpartx -av pi.img
사용 중인 다른 루프 장치가 없으면 을 사용
loop0
하지만 출력을 확인하고 이에 따라 추가 명령을 변경하십시오.다음을 수행하여 대상 파티션이 Raspberry Pi에 마운트되지 않았는지 확인하세요.
sudo umount /dev/mmcblk0p3
다음 단계에서는 SSH를 통해 데이터를 파이프할 수 있어야 합니다.그리고루트 액세스 권한이 있습니다. 이를 수행하는 방법은 몇 가지가 있지만 가장 쉬운 방법은 루트 로그인을 활성화하는 것입니다. 일반적으로 이는 권장되지 않지만 새 시스템 이미지를 업로드하려고 하므로 문제가 되지 않을 것이라고 생각합니다. Raspberry Pi에서 다음을 수행하십시오.
sudo passwd root
다음으로 이미지를 Raspberry Pi에 복사합니다(사용데이터 무결성을 위한 RAAK의 제안):
sudo dd if=/dev/mapper/loop0p5 | ssh -o MACs=hmac-ripemd160 root@host dd of=/dev/mmcblk0p3
host
/etc/hostname
Raspberry Pi에 있는 내용 (mypi
OP용으로 보임) 또는 Raspberry Pi의 IP 주소일 수 있습니다. 또한 를 사용하지 않는 경우 이에 따라 이를 변경하는 것을 잊지 마십시오loop0
.다음으로 Raspberry Pi의 루트 파티션을 변경합니다. 제가 볼 수 있는 한(테스트할 Raspberry Pi가 없습니다) 변경해야 합니다
/boot/cmdline.txt
.root=/dev/mmcblk0p5
라고 적힌 부분을 바꾸시면 됩니다root=/dev/mmcblk0p3
.다음을 수행하여 복사한 시스템에서
loop
및 장치를 삭제할 수 있습니다 .mapper
sudo kpartx -d pi.img
이제 Raspberry Pi를 재부팅하면 새 이미지를 사용해야 합니다!
답변4
USB ARM 이미지를 사용하여 Pi를 부팅하고 네트워크에 연결하면 스토리지가 충분히 길들여질 것입니다. 나는 프로가 아니다. 그냥 여기서 공을 뱉는다. 전문가님들, 제가 틀렸다면 정정해 주시기 바랍니다.