내가 뭘 잘못했나요?
루프 장치로 추가한 이미지가 있습니다.
losetup -P /dev/loop13 ./my_image.img
그런 다음 먼저 파티션의 FS 크기를 변경해 보았습니다.
e2fsck -f /dev/loop13p1
resize2fs /dev/loop13p1 7G
다음과 같이 출력됩니다.
Resizing the filesystem on /dev/loop13p1 to 1835008 (4k) blocks.
The filesystem on /dev/loop13p1 is now 1835008 (4k) blocks long.
그런 다음 섹션 자체를 축소합니다.
parted /dev/loop13p1 resizepart 1 7G
그 후 나는 다음을 실행합니다.
resize2fs /dev/loop13p1
산출
Resizing the filesystem on /dev/loop13p1 to 3659264 (4k) blocks.
The filesystem on /dev/loop13p1 is now 3659264 (4k) blocks long.
그럼 다시 원래 값으로 돌아오는데...
UPD
sfdisk를 통해 파티션을 줄이려고 했는데 효과가 있었지만 지금은 이유조차 이해하지 못합니다...
resize2fs -p /dev/loop13p1 7G
echo '2048,7G' | sfdisk /dev/loop13 -N 1
resize2fs /dev/loop13p1
산출:
The filesystem is already 1835008 (4k) blocks long. Nothing to do!
답변1
parted를 올바르게 사용하려면 불행하게도 때로는 계산을 해야 할 때도 있습니다.
parted /dev/loop13p1 resizepart 1 7G
이 명령은 예상한 대로 수행되지 않을 수 있습니다.
parted
파티션 테이블이 있는 블록 장치에 적용됩니다. 따라서 이 경우 /dev/loop13p1
파티션의 파티션 테이블이 됩니다. 파티션 1 크기 조정은 (가상) 장치(예: )의 크기를 조정하려고 한다는 의미입니다 /dev/loop13-p1-p1
.
을 사용하고 싶을 수도 있습니다 /dev/loop13
.
그런 다음 resizepart 1 7G
파티션 1의 크기가 7G 크기로 조정되지 않습니다.
resizepart의 구문은 입니다 resizepart NUMBER END
. SIZE가 아니라 종료됩니다.
따라서 파티션 1의 끝을 7G 오프셋으로 이동합니다. 파티션의 크기는 파티션 1의 시작 섹터에 따라 다릅니다. 파티션이 1MiB에서 시작하면 크기는 7G에서 1MiB를 뺀 값이 됩니다. 7G 파일 시스템에는 너무 작습니다.
또한 parted의 경우 G는 GiB(1024의 거듭제곱) 대신 GB(1000의 거듭제곱)를 의미합니다. 따라서 단위 자체도 혼란의 또 다른 원인이 될 수 있습니다. GiB를 참조할 때 크기를 G로 조정하면 파티션이 너무 작아집니다.
마지막으로, 새로운 파티션 크기를 얻으려면 커널이 파티션 테이블을 성공적으로 다시 읽어야 합니다. 때로는 장치가 사용 중일 때 실패합니다. 따라서 lsblk, blockdev --getsize64 등을 사용하여 다시 확인하거나 head /sys/block/loop13/loop13p1/{start,size}
커널이 현재 생각하는 크기를 확인하십시오.
The filesystem on /dev/loop13p1 is now 1835008 (4k) blocks long.
1835008 * 4096 = 7516192768
따라서 파티션은 7516192768바이트 이상이어야 합니다.
# parted /dev/loop0 unit b print free
Model: Loopback device (loopback)
Disk /dev/loop0: 15032385536B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1024B 1048575B 1047552B Free Space
1 1048576B 15032385535B 15031336960B primary ext2
섹션 크기를 조정해 보세요.
# parted /dev/loop0 resizepart 1 7G
Warning: Shrinking a partition can cause data loss, are you sure you want to continue?
Yes/No? Yes
# parted /dev/loop0 unit b print free
Model: Loopback device (loopback)
Disk /dev/loop0: 15032385536B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1024B 1048575B 1047552B Free Space
1 1048576B 7000000511B 6998951936B primary ext2
7000000512B 15032385535B 8032385024B Free Space
파티셔닝 후 resizepart 1 7G
크기는 약 7GB(7000000511B)로 필요한 7516192768B보다 훨씬 작습니다.
# parted /dev/loop0 resizepart 1 7GiB
Information: You may need to update /etc/fstab.
# parted /dev/loop0 unit b print free
Model: Loopback device (loopback)
Disk /dev/loop0: 15032385536B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1024B 1048575B 1047552B Free Space
1 1048576B 7516192767B 7515144192B primary ext2
7516192768B 15032385535B 7516192768B Free Space
그 후 resizepart 1 7GiB
파티션은 (대략) 7GiB(7516192768바이트)가 됩니다. 이는 더 가깝지만 1MiB(1048576B) 오프셋을 고려해야 하기 때문에 여전히 너무 작습니다.
따라서 이를 올바르게 수행하기 위한 간단한 명령은 없습니다. 단지 직접 계산을 수행하면 됩니다.
# parted /dev/loop0 resizepart 1 $((1+7*1024))MiB
Information: You may need to update /etc/fstab.
# parted /dev/loop0 unit b print free
Model: Loopback device (loopback)
Disk /dev/loop0: 15032385536B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1024B 1048575B 1047552B Free Space
1 1048576B 7517241343B 7516192768B primary ext2
7517241344B 15032385535B 7515144192B Free Space
그런 다음에만 필요한 파티션 크기인 7516192768바이트에 도달합니다.