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バイトにのみ到達します。

おすすめ記事