디스크 이미지 파일의 파티션 크기를 조정한 후 디스크 이미지 파일의 파티션 테이블을 어떻게 업데이트합니까?

디스크 이미지 파일의 파티션 크기를 조정한 후 디스크 이미지 파일의 파티션 테이블을 어떻게 업데이트합니까?

디스크에 있는 디스크 이미지(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

그런 다음 파일 시스템의 크기를 조정하십시오.

관련 정보