디스크에 있는 디스크 이미지(Raspbian 이미지)의 크기를 조정하려고 합니다.
문제는 크기가 조정된 이미지(SD 카드에 쓴 후)에서 RaspberryPi를 부팅하려고 하면 다음과 같은 결과가 나온다는 것입니다.
커널 패닉 - 동기화되지 않음: VFS: 알 수 없는 블록에 루트 fs를 마운트할 수 없습니다.
(죄송합니다. 정확한 오류를 파악하지 못했습니다. 관련이 있으면 업데이트할 수 있습니다.)
나생각하다이는 파티션 테이블을 업데이트하지 않기 때문입니다. 배경은 다음과 같습니다.
초기 이미지 파티션
초기 파티션은 다음과 같습니다.
gregmac@test1:~/image$ fdisk -l test.img
Disk test.img: 1389 MB, 1389363200 bytes
255 heads, 63 sectors/track, 168 cylinders, total 2713600 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
Disk identifier: 0x5a7089a1
Device Boot Start End Blocks Id System
test.img1 8192 137215 64512 c W95 FAT32 (LBA)
test.img2 137216 2713599 1288192 83 Linux
초기에 디스크 크기는 1389MB입니다.
크기 조정
500MB 추가
gregmac@test1:~/image$ truncate -s +500M test.img
gregmac@test1:~/image$ fdisk -l test.img
Disk test.img: 1913 MB, 1913651200 bytes
255 heads, 63 sectors/track, 232 cylinders, total 3737600 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
Disk identifier: 0x5a7089a1
Device Boot Start End Blocks Id System
test.img1 8192 137215 64512 c W95 FAT32 (LBA)
test.img2 137216 2713599 1288192 83 Linux
좋아 보입니다. 새로운 총 크기는 1913MB입니다.
파일 시스템 크기 조정
이제 새 공간을 사용하기 위해 두 번째 파티션의 크기를 조정하고 싶습니다.
오프셋을 사용하여 루프 장치를 만듭니다(섹터당 512개 단위 * 137216개 섹터).
gregmac@test1:~/image$ sudo losetup -f --show test.img -o $((512*137216))
/dev/loop0
e2fsck를 실행하고(그렇지 않으면 resize2fs가 불만을 표시하므로) resize2fs를 실행합니다.
gregmac@test1:~/image$ sudo e2fsck -f /dev/loop0
e2fsck 1.42.9 (4-Feb-2014)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/loop0: 37167/80640 files (0.2% non-contiguous), 250800/322048 blocks
gregmac@test1:~/image$ sudo resize2fs /dev/loop0
resize2fs 1.42.9 (4-Feb-2014)
Resizing the filesystem on /dev/loop0 to 450048 (4k) blocks.
The filesystem on /dev/loop0 is now 450048 blocks long.
크기 조정이 제대로 작동하는 것 같습니다. 만일을 대비해 e2fsck를 다시 실행했는데, 새 블록이 표시되는 동안 뭔가 잘못되었다는 다른 징후는 없었습니다.
gregmac@test1:~/image$ sudo e2fsck -f /dev/loop0
e2fsck 1.42.9 (4-Feb-2014)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/loop0: 37167/112896 files (0.2% non-contiguous), 252824/450048 blocks
또한 가치가 거의 없는 다음 루프 장치를 설치할 수 있습니다.
gregmac@test1:~/image$ sudo mount /dev/loop0 temp-mnt
gregmac@test1:~/image$ ls temp-mnt/
bin boot dev etc home lib lost+found media mnt opt proc root run sbin srv sys tmp usr var
df -h
올바른 치수를 표시합니다 .
Filesystem Size Used Avail Use% Mounted on
/dev/loop0 1.7G 928M 667M 59% /home/gregmac/image/temp-mnt
파티션 테이블
이 내 꺼야생각하다문제는 파티션 테이블이 영향을 받지 않는다는 것입니다.
gregmac@test1:~/image$ fdisk -l test.img
Disk test.img: 1913 MB, 1913651200 bytes
255 heads, 63 sectors/track, 232 cylinders, total 3737600 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
Disk identifier: 0x5a7089a1
Device Boot Start End Blocks Id System
test.img1 8192 137215 64512 c W95 FAT32 (LBA)
test.img2 137216 2713599 1288192 83 Linux
공간 증가에 관계없이 종료 및 블록 값은 여전히 이전 값입니다. 최종 값은 3737599(총 섹터 수에서 1을 뺀 값)가 되어야 한다고 생각하지만 이에 대해 100% 명확하지는 않습니다.
나는 resize2fs가 파티션 테이블을 업데이트할 것이라고 생각했지만 분명히 그렇지 않습니다.
그래서..
크기 조정 단계를 건너뛰면 이미지가 제대로 부팅된다는 점도 언급할 가치가 있습니다.
문제는 자동화된 빌드의 일부로 스크립트에서 이 작업을 수행하려고 하는데 기본 Raspbian 이미지에 필요한 모든 항목을 설치하기에 충분한 여유 디스크 공간이 없다는 것입니다.
- 파티션 테이블이 원인이라고 가정하면 어떻게 업데이트할 수 있나요?
스크립트 가능한 방식으로 이 작업을 어떻게 수행합니까? (대화형 사용자 입력이 필요하지 않습니다)
파티션 테이블이 원인이 아니라면 원인은 무엇인가?
답변1
파일 시스템의 크기를 조정하기 전에 기본 파티션의 크기를 조정해야 합니다.
parted test.img resizepart 2 1980MB
그런 다음 파일 시스템의 크기를 조정하십시오.