コマンドラインから ext4 パーティションのサイズを変更するにはどうすればいいですか?

コマンドラインから ext4 パーティションのサイズを変更するにはどうすればいいですか?

コマンドラインから ext4 パーティション (または方法に応じて任意のタイプのパーティション) のサイズを変更する最も簡単な方法は何ですか (コマンドが最も少なく、最も理解しやすい可能性があります)?

Gparted のようなツールを GUI で使用するのは明らかに簡単ですが、コマンド ラインではどうでしょうか。技術的にはコマンド ラインのままなので、テキストベースの GUI も答えとしてカウントできると思います。簡単に実行できればよいのです。

パーティションとは、パーソナル コンピューター (たとえば、ラップトップ) の単一のディスク上の単純なパーティションを意味します。たとえば、サイズを変更したいとします/dev/sda4。RAID はなく、複数のディスク ドライブはなく、ここでは複雑なことは何もありません。単一のディスク上の単純なパーティション (/dev/sda 上の /dev/sdaX) だけです。

答え1

fdisk実行中にパーティションテーブルを変更するには、Linux 上の ext4 ファイルシステムのライブサイズ変更 (の上コードの沈黙ブログ):

免責事項: 以下の手順は、間違えると簡単にデータが台無しになる可能性があります。私は以下の操作を実行する前にバックアップした VM でこれを実行していました。バックアップを実行しなかったためにデータが失われた場合は、文句を言わないでください。

...

まず、ディスク サイズを増やします。

ESXi では、これは簡単で、仮想ディスクのサイズを増やすだけです。これでハード ドライブは大きくなりましたが、a) パーティション サイズを増やし、b) ファイルシステムのサイズを変更する必要があります。

2番目: パーティションサイズを増やします。

実行中にパーティション テーブルを変更するには、 を使用できますfdisk。標準の Ubuntu インストールでは、プライマリ (sda1)、拡張 (sda2)、論理パーティション (sda5) が 1 つずつ、合計 3 つのパーティションが作成されています。拡張パーティションは単にスワップ用に使用されるだけなので、データを失うことなく簡単に移動できます。

  1. プライマリパーティションを削除する

  2. 拡張パーティションを削除する

  3. 元のパーティションと同じセクターから、より大きなサイズで新しいプライマリ パーティションを作成します (スワップ用にいくらか残します)

  4. スワップ領域を保持するための論理パーティションを含む新しい拡張パーティションを作成します。

    me@ubuntu:~$ sudo fdisk /dev/sda
    
    Command (m for help): p
    
    Disk /dev/sda: 268.4 GB, 268435456000 bytes
    255 heads, 63 sectors/track, 32635 cylinders, total 524288000 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x000e49fa
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1   *        2048   192940031    96468992   83  Linux
    /dev/sda2       192942078   209713151     8385537    5  Extended
    /dev/sda5       192942080   209713151     8385536   82  Linux swap / Solaris
    
    Command (m for help): d
    Partition number (1-5): 1
    
    Command (m for help): d
    Partition number (1-5): 2
    
    Command (m for help): n
    Partition type:
       p   primary (0 primary, 0 extended, 4 free)
       e   extended
    Select (default p): p
    Partition number (1-4, default 1):
    Using default value 1
    First sector (2048-524287999, default 2048):
    Using default value 2048
    Last sector, +sectors or +size{K,M,G} (2048-524287999, default 524287999): 507516925
    
    Command (m for help): p
    
    Disk /dev/sda: 268.4 GB, 268435456000 bytes
    255 heads, 63 sectors/track, 32635 cylinders, total 524288000 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x000e49fa
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1            2048   507516925   253757439   83  Linux
    
    Command (m for help): n
    Partition type:
       p   primary (1 primary, 0 extended, 3 free)
       e   extended
    Select (default p): e
    Partition number (1-4, default 2): 2
    First sector (507516926-524287999, default 507516926):
    Using default value 507516926
    Last sector, +sectors or +size{K,M,G} (507516926-524287999, default 524287999):
    Using default value 524287999
    
    Command (m for help): p
    
    Disk /dev/sda: 268.4 GB, 268435456000 bytes
    255 heads, 63 sectors/track, 32635 cylinders, total 524288000 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x000e49fa
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1            2048   507516925   253757439   83  Linux
    /dev/sda2       507516926   524287999     8385537    5  Extended
    
    Command (m for help): n
    Partition type:
       p   primary (1 primary, 1 extended, 2 free)
       l   logical (numbered from 5)
    Select (default p): l
    Adding logical partition 5
    First sector (507518974-524287999, default 507518974):
    Using default value 507518974
    Last sector, +sectors or +size{K,M,G} (507518974-524287999, default 524287999):
    Using default value 524287999
    
    Command (m for help): p
    
    Disk /dev/sda: 268.4 GB, 268435456000 bytes
    255 heads, 63 sectors/track, 32635 cylinders, total 524288000 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x000e49fa
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1            2048   507516925   253757439   83  Linux
    /dev/sda2       507516926   524287999     8385537    5  Extended
    /dev/sda5       507518974   524287999     8384513   83  Linux
    
    Command (m for help): t
    Partition number (1-5): 5
    
    Hex code (type L to list codes): 82
    Changed system type of partition 5 to 82 (Linux swap / Solaris)
    
    Command (m for help): p
    
    Disk /dev/sda: 268.4 GB, 268435456000 bytes
    255 heads, 63 sectors/track, 32635 cylinders, total 524288000 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x000e49fa
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1            2048   507516925   253757439   83  Linux
    /dev/sda2       507516926   524287999     8385537    5  Extended
    /dev/sda5       507518974   524287999     8384513   82  Linux swap / Solaris
    
    Command (m for help): w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    
    WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
    The kernel still uses the old table. The new table will be used at
    the next reboot or after you run partprobe(8) or kpartx(8)
    Syncing disks.
    
    me@ubuntu:~$ sudo reboot 
    

後で気づいたのですが、起動フラグを設定していなかったようですが、本当に必要じゃない

3番目: ファイルシステムを拡大します。

resize2fsマウントされたパーティション上でオンラインでこれを行うことができます。

me@ubuntu:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        91G   86G   12M 100% /
udev            3.9G  4.0K  3.9G   1% /dev
tmpfs           1.6G  696K  1.6G   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            3.9G  144K  3.9G   1% /run/shm
none            100M   16K  100M   1% /run/user

me@ubuntu:~$ sudo resize2fs /dev/sda1
resize2fs 1.42.5 (29-Jul-2012)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old_desc_blocks = 6, new_desc_blocks = 16
The filesystem on /dev/sda1 is now 63439359 blocks long.

me@ubuntu:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       239G   86G  142G  38% /
udev            3.9G   12K  3.9G   1% /dev
tmpfs           1.6G  696K  1.6G   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            3.9G  152K  3.9G   1% /run/shm
none            100M   36K  100M   1% /run/user

ちょっとした問題: 再起動後、スワップ領域がアクティブになっていませんでした。 を実行しmkswap/etc/fstab新しい UUID に調整して、スワップをオンにする必要があることがわかりました。

me@ubuntu:~$ sudo mkswap /dev/sda5 
Setting up swapspace version 1, size = 8384508 KiB
no label, UUID=141d401a-b49d-4a96-9b85-c130cb0de40a

me@ubuntu:~$ sudo swapon --all --verbose
swapon on /dev/sda5
swapon: /dev/sda5: found swap signature: version 1, page-size 4, same byte order
swapon: /dev/sda5: pagesize=4096, swapsize=8585740288, devsize=8585741312

編集して/etc/fstab、古いスワップ パーティションの UUID を の新しい UUID に置き換えますmkswap

答え2

同じような状況に陥った場合に備えて、この質問に答えます。Ubuntu 18.0.4 LTS をゲストとして実行しているダイナミック ディスク上のファイル システム (Ext4) のサイズを変更する必要がありました。ホストからディスクのサイズを変更し、ファイル システムのサイズを変更することができました。

通常のコマンドを実行することはできませんでした。例:

$ resize2fs /dev/sda2
resize2fs 1.44.1 (24-Mar-2018)
The filesystem is already 13180160 (4k) blocks long.  Nothing to do!

かなり複雑でfdisk、マウントされていないディスクで作業するには LiveCD を実行する必要もあったと思います。

次の 2 つのコマンドで、問題が簡単かつ迅速に解決されました。

$ growpart /dev/sda 2
CHANGED: partition=2 start=4096 old: size=105441280 end=105445376 new: size=409595871,end=409599967

$ resize2fs /dev/sda2
resize2fs 1.44.1 (24-Mar-2018)
Filesystem at /dev/sda2 is mounted on /; on-line resizing required
old_desc_blocks = 7, new_desc_blocks = 25
The filesystem on /dev/sda2 is now 51199483 (4k) blocks long.

注:2最初のコマンドでは、デバイス上のパーティション番号を示します/dev/sda

答え3

パーティションとファイルシステムの両方のサイズを増やす場合は、最初に を実行してfdiskパーティションのサイズを増やし、次に を実行してresize2fsファイルシステムのサイズを増やします。

両方のサイズを縮小する場合は、resize2fsまず を実行してから を実行しますfdisk

答え4

noaloのソリューション明らかにこれが一番良いです。他のものよりずっと簡単です。

エコー "- +" | sfdisk -N<partnum>/dev/sdバツ

動作の仕組みを簡単に説明します。-Nsfdisk単一のパーティションで動作します。 このように起動すると、 はsfdisk対話型になり、開始位置、サイズ、およびオプションでパーティション タイプを待機します。 " -" は開始位置が変更されないことを意味し、 " " は終了位置が可能な限り多くのスペースを使用することを意味します。 その後は、 コマンドとコマンド+を使用する必要があります。 先頭の は、これを 1 行で実行します。printwriteecho "- +" |

制限は空きスペースが必要であることです直後. サイズ変更するパーティションの後にスワップ パーティション (つまり、内部に実際のデータがない) がある場合は、 で簡単に解決できますsfdisk。上記の構文を使用して、変更するパーティションが にありsda1、スワップがにsda2あり、128 G のディスクがあり、6 G のスワップが必要であると仮定します。最初の手順は、スワップ パーティションを末尾に移動することです。

echo "122G +" | sfdisk -N2 /dev/sda

最初のパーティションを拡張します。

echo "- +"    | sfdisk -N1 /dev/sda

そして を使用してサイズを変更しますresize2fs。新しいスワップが認識されることを確認する必要があるかもしれません。swapoff、、mkswapおよびswaponファイルを参照してくださいfstab。これはこの質問の範囲外です。

コマンドについてsda2: この方法でデータを含むパーティションを移動しないでください。  すべてのデータが失われます。このコマンドはデータを移動しません。パーティションの境界のみを移動します。sda1 ( ) に使用されるコマンドでは、パーティションの開始位置は変更されないため危険はありません。これは、単一のパーティションに使用される場合の- +" " の意味です。-

ありがとう@noalo

関連情報