
私は何が間違っていましたか?
ループデバイスとして追加した画像があります。
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バイトにのみ到達します。