다음과 같은 파티션으로 구성된 마이크로 SD 카드가 있습니다.
Disk /dev/sdb: 29,7 GiB, 31914983424 bytes, 62333952 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xa6202af7
Device Boot Start End Sectors Size Id Type
/dev/sdb1 8192 122879 114688 56M c W95 FAT32 (LBA)
/dev/sdb2 122880 10608639 10485760 5G 83 Linux
복제하고 싶지만 전체 29,7GB가 아닌 이 두 개의 파티션만 복제하고 싶습니다. 그래서 다음 명령을 사용했습니다.
dd bs=1M count=$((5431623169 / (1024*1024) + 1)) if=/dev/sdb of=myimage.img
truncate -s 5431623169
이렇게 하면 두 개의 파티션이 있는 이미지가 생성됩니다. 이제 myimage.img의 두 번째 파티션을 마운트하여 수정하려고 합니다. 그래서 다음 명령을 실행하고 있습니다.
sudo mount -t ext4 -o loop,offset=62914560 myimage.img mount/
그러나 이는 다음과 같은 출력을 생성합니다.
mount: wrong fs type, bad option, bad superblock on /dev/loop1,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so.
대조적으로, sdb1은 잘 설치되었습니다. blkid가 반환하기 때문에 ext4라고 확신합니다.
이 마이크로 SD 카드는 Raspberry Pi Linux 시스템을 위한 완전한 펌웨어입니다. myimage.img를 새 SD 카드에 플래시하고 실행하면 시스템이 제대로 작동하는 것 같으니 설치할 수 있다는 의미입니다.
위에 표시된 mount 명령을 사용하여 수동으로 마운트할 수 없는 이유가 무엇인지 아시나요?
답변1
문제는 마지막 섹터의 마지막 512바이트를 복사하지 않는다는 것입니다. 이렇게 하면 마지막 파티션이 불완전해집니다. 섹터를 하나 더 복사하면 모든 것이 올바르게 설치됩니다.