LVMじゃないcentos/7, 8 Vagrant Boxのパーティションを拡張する


LVMじゃないcentos/7のBoxでパーティション拡張したかったのでメモ。

⚠️(お約束ですが)操作する前に消えたら泣きそうになるファイルのバックアップは取ってください

TL;DR

  1. fdisk でパーティションを確認する
  2. fdisk で拡張したいパーティションそのものを削除して、削除前と同じStartの値・新しいサイズでパーティションを作る
    • 新しいサイズでパーティションを作るまで fdisk で書き込まないこと
  3. 再起動する
  4. xfs_growfs で拡張したパーティションをXFSに認識させる

環境

centos/7 のBoxを用いて作成された仮想マシンを使います。
vagrant-disksizeのプラグインを導入して 仮想マシンのストレージを拡張します。

$ vagrant box list
centos/7 (virtualbox, 1905.1)
centos/8 (virtualbox, 1905.1)
Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.disksize.size = '240GB'

...

仮想マシンに入ったあと df -hT でわかりやすいパーティションサイズ・ファイルシステムを表示します。
うーん増えていません🤔

CentOS 7からファイルシステムが xfs になっています。 resize2fs は使えません。

$ df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/sda1      xfs        40G  4.7G   36G   2% /              <-- 240GBになっていないこれを拡張する
devtmpfs       devtmpfs  3.9G     0  3.9G   0% /dev
tmpfs          tmpfs     3.9G     0  3.9G   0% /dev/shm
tmpfs          tmpfs     3.9G  8.5M  3.9G   1% /run
tmpfs          tmpfs     3.9G     0  3.9G   0% /sys/fs/cgroup
tmpfs          tmpfs     783M     0  783M   0% /run/user/1000

1. fdisk -l でパーティションを確認する

パーティションの拡張に fdisk を使いますが、 -l オプションを付けると詳細な情報を出して終了します。
拡張したいパーティションについて次の情報はメモしてください。

  • Device
  • Start
  • Id
  • System
$ sudo fdisk -l

Disk /dev/sda: 257.7 GB, 257698037760 bytes, 503316480 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 label type: dos
Disk identifier: 0x0009ef88

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    83886079    41942016   83  Linux

2. fdisk で元のパーティションを削除して新しいサイズでパーティションを作る

オプション無しで fdisk を実行するとコマンドの入力を待っています。
d と入力して 拡張したいパーティションの番号を入力して まずは削除します。

  • このとき、fdisk -lで出した削除するパーティションのStartの値をメモしておきます
  • 大丈夫です、ここで削除は実際に反映されていません
    • 間違えてしまったときは q コマンドで反映させずに fdisk を終了させましょう
$ sudo fdisk /dev/sda
Command (m for help): d
Selected partition 1
Partition 1 is deleted

次に n コマンドで新規にパーティションを作成します。p を入力してパーティションのタイプをプライマリーにします。

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p

パーティションの番号はそのままで良いでしょう。 何も入力せずEnterキーを押すとdefaultの値が採用されます。

Partition number (1-4, default 1):

(デフォルトで設定されていますが) 削除する前のパーティションに設定されていたStartの値と同じものを設定します
ここでStartの値を間違えたまま進めるとデータが消えます。

First sector (2048-503316479, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-503316479, default 503316479):
Using default value 503316479
Partition 1 of type Linux and of size 240 GiB is set

xfs signature を取り除くか質問されたときは Y と答えてsignatureを取り除きます。
(centos/7 のBoxでは表示されませんでした)

Partition #1 contains a xfs signature.

Do you want to remove the signature? [Y]es/[N]o: Y

The signature will be removed by a write command.

p コマンドを使って確認すると End が増えました。 w コマンドで反映させてから終了します。

Command (m for help): p

Disk /dev/sda: 257.7 GB, 257698037760 bytes, 503316480 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 label type: dos
Disk identifier: 0x0009ef88

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048   503316479   251657216   83  Linux

Command (m for help): w
The partition table has been altered!

3. 再起動する

$ sudo reboot

しばらく待ってから vahrant ssh で仮想マシンに入り直します。

4. xfs_growfs で拡張したパーティションをXFSに認識させる

再起動したあとでも実際に使える領域は拡張されていません。パーティションの拡張をXFSに認識させる必要があります。

$ df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/sda1      xfs        40G  4.7G   36G   2% /              <-- 240GBになっていないこれを拡張する
...

xfs_growfs を使ってパーティションの拡大分をXFSに認識させます。 "data blocks changed" と表示されれば成功です。

  • "data size unchanged, skipping"と表示された場合は失敗です。 fdisk 後に仮想マシンを再起動していないと変更できません。
    • -d オプションを使わないと"data size unchanged, skipping"は表示されません

ここでは拡大したいパーティションの Mounted on (/) を指定します。 xfs_growfs(8): expand XFS filesystem - Linux man page
拡大したいパーティションの Filesystem に表示されている /dev/sda1 を指定しても拡大できる場合があります。

$ sudo xfs_growfs / -d
meta-data=/dev/sda1              isize=512    agcount=4, agsize=2621376 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=10485504, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=5119, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 10485504 to 62914304

再度確認してみると使用できる領域は増えています。やったぜ👏

$ df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/sda1      xfs       240G  4.7G  236G   2% /           <-- これ
devtmpfs       devtmpfs  3.9G     0  3.9G   0% /dev
tmpfs          tmpfs     3.9G     0  3.9G   0% /dev/shm
tmpfs          tmpfs     3.9G  8.5M  3.9G   1% /run
tmpfs          tmpfs     3.9G     0  3.9G   0% /sys/fs/cgroup
tmpfs          tmpfs     783M     0  783M   0% /run/user/1000

参考

fdiskでDisk容量を拡張する - Qiita
https://qiita.com/2or3/items/501f206a6091a4ce895f#3-%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E5%89%8A%E9%99%A4%E3%81%A8%E4%BD%9C%E6%88%90

CentOS7なインスタンスのルートボリューム拡張 - Qiita
https://qiita.com/mimumemo/items/1820be501b59ee204d21

xfs_growfs(8): expand XFS filesystem - Linux man page
https://linux.die.net/man/8/xfs_growfs