parted를 사용하여 파티션 크기 변경

parted를 사용하여 파티션 크기 변경

내가 뭘 잘못했나요?

루프 장치로 추가한 이미지가 있습니다.

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바이트에 도달합니다.

관련 정보