resize2fsを使用してファイルシステムを縮小した直後にパーティションを縮小するにはどうすればよいですか?

resize2fsを使用してファイルシステムを縮小した直後にパーティションを縮小するにはどうすればよいですか?

/homeパーティションのファイルシステムを縮小する方法は次のとおりです。

e2fsck /dev/sda1

resize2fs /dev/sda1 150G

現在実行してみると、dfパーティションが210Gから150Gに縮小されたものになります。間違った)。

ファイルシステムのサイズだけが小さくなったので、fdiskパーティションのサイズをどのように使用または縮小できますかparted

ベストアンサー1

まず、一般的な警告:データをバックアップしてください。パーティションとファイルシステムのサイズ変更は決して100%安全な作業ではありません。

GPartedでグラフィカル環境を使用できる場合、最も簡単な解決策は次のとおりです。

  1. /dev/sda1パーティションを含むファイルシステムのサイズに戻します。パーティションを右クリックして「検査」を選択し、すべての操作を適用します。

  2. パーティションを希望のサイズに縮小します。パーティションを右クリックして[サイズの調整/移動]を選択し、目的の[新しいサイズ]を設定し、すべての操作を確認して適用します。 GPartedもファイルシステムのサイズ変更を処理します。

dumpe2fsあるいは、コマンドラインツールを使用してtune2fsファイルシステムのブロックサイズとブロック数を取得し、縮小したいパーティションを再作成して、新しいパーティションを元のパーティションと同じバイトで開始し、そのパーティションに追加することもできます。 offset縮小が終了するファイルシステムのサイズ(バイト単位)。

parted以下は、一般ファイルでサポートされているGNUおよびループデバイスを使用して関連コマンドを操作する完全な例です。

  • まず、ブロックデバイスを作成してそれを分割し、最初の(唯一の)パーティションに210MiBファイルシステムを作成します。

    $ fallocate -l 211MiB testfile
    $ sudo losetup -f testfile
    $ sudo parted /dev/loop0 unit MiB mklabel msdos mkpart primary 1 100%FREE
    $ lsblk /dev/loop0
    NAME      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
    loop0       7:0    0  211M  0 loop 
    └─loop0p1 259:0    0  210M  0 part
    $ sudo mkfs.ext4 -L test -v /dev/loop0p1 210M
    $ sudo mount /dev/loop0p1 /mnt/temp
    $ df /mnt/temp
    Filesystem     1K-blocks  Used Available Use% Mounted on
    /dev/loop0p1      202353    14    187491   1% /mnt/temp
    
  • その後、ファイルシステムのサイズを150MiBに調整し、あなたの質問に記載されているものと同様の状態になりました。

    $ sudo umount /mnt/temp
    $ sudo e2fsck -f /dev/loop0p1
    $ sudo resize2fs /dev/loop0p1 150M
    $ sudo mount /dev/loop0p1 /mnt/temp
    $ df /mnt/temp
    Filesystem     1K-blocks  Used Available Use% Mounted on
    /dev/loop0p1      144716  1550    132414   2% /mnt/temp
    $ sudo umount /mnt/temp
    
  • これで、パーティションでホストされているファイルシステムの現在のサイズに基づいてパーティションのターゲットサイズを取得します。

    $ sudo dumpe2fs -h /dev/loop0p1
    

    または

    $ sudo tune2fs -l /dev/loop0p1
    

    関連する行は次のとおりです。

    Block count:              153600
    First block:              1
    Block size:               1024
    

    次のように、新しいパーティションサイズをバイト単位で計算できます。

    153600 * 1024 = 157286400
    

    その後、パーティションの現在の開始バイトが必要です(まだ分からないチャック)。

    $ sudo parted /dev/loop0 unit b print
    Number  Start     End         Size        Type     File system  Flags
     1      1048576B  221249535B  220200960B  primary  ext4
    

    今、私たちは新しいパーティションがバイト1048576で始まり、バイトで終わることを知っています。

    1048576 + 157286400 -1 = 158334975
    

    計算はparted0から始まり包含範囲を使用するため、終了バイトを計算するにはパーティションサイズから1バイトを減算する必要があります。

    これでパーティションを再作成して結果を確認できます。

    $ sudo parted /dev/loop0 unit b rm 1 mkpart primary 1048576 158334975
    $ lsblk /dev/loop0
    NAME      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
    loop0       7:0    0  211M  0 loop 
    └─loop0p1 259:0    0  150M  0 part
    

    sudo e2fsck -f /dev/loop0p1パーティションが小さすぎると、再実行すると警告が表示されるため、ファイルシステムが破損する前に回復できます。

おすすめ記事