rootパーティションをオンライン状態で拡張する

  • 2022年3月6日
  • 2022年1月26日
  • Tips

rootの空きが無いのに気が付いた!!!

別件でWebサーバのコンソールに入って作業中、偶然 / の空きが無いのに気が付きました!

[root@www ~]# df
ファイルシス   1K-ブロック     使用  使用可 使用% マウント位置
devtmpfs           1012664        0 1012664    0% /dev
tmpfs              1023332        0 1023332    0% /dev/shm
tmpfs              1023332   107652  915680   11% /run
tmpfs              1023332        0 1023332    0% /sys/fs/cgroup
/dev/vda4         47710188 43981096 3729092   93% /
/dev/vda2           508588   226176  282412   45% /boot
tmpfs               204668        0  204668    0% /run/user/1002
tmpfs               204668        0  204668    0% /run/user/0

何と言うことでしょう。このままだと、近い将来落ちてしまう事が考えられます。

このサーバはさくらのVPSで、以前ディスク容量が100GBに増量されたとの通知があったので安心していたのですが、自動で拡張はされていないようです(当たり前)。

ので、オンライン状態のまま、手動で拡張してみます(飛んでしまっても良いように、フルバックアップは取得しておいて下さい)。

それでは拡張してみる

まずはOSのバージョンを確認します。

[root@www ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

そう言えばCentOS7だったような気がします(適当)。

作業に必要な gdisk をインストールします。

[root@www ~]# rpm -q gdisk
パッケージ gdisk はインストールされていません。
[root@www ~]# yum -y install gdisk
読み込んだプラグイン:fastestmirror, langpacks
:
:
インストール:
  gdisk.x86_64 0:0.8.10-3.el7

完了しました!

gdiskコマンドでデバイス番号と空きディスク容量を確認してみます。

[root@www ~]# gdisk -l /dev/vda
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/vda: 209715200 sectors, 100.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): ********-****-****-****-************
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 104857566
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048            4095   1024.0 KiB  EF02  BIOS boot partition
   2            4096         1028095   500.0 MiB   0700  Microsoft basic data
   3         1028096         9416703   4.0 GiB     8200  Linux swap
   4         9416704       104857566   45.5 GiB    0700  Microsoft basic data

認識している空き容量(Total free space)が変ですね…。

gdisk コマンドで、パーティションテーブルを再構成します。

[root@www ~]# gdisk -s /dev/vda
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.

空き容量を再確認します。

[root@www ~]# gdisk -l /dev/vda
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/vda: 209715200 sectors, 100.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): ********-****-****-****-************
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 209715166
Partitions will be aligned on 2048-sector boundaries
Total free space is 104859614 sectors (50.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048            4095   1024.0 KiB  EF02  BIOS boot partition
   2            4096         1028095   500.0 MiB   0700  Microsoft basic data
   3         1028096         9416703   4.0 GiB     8200  Linux swap
   4         9416704       104857566   45.5 GiB    0700  Microsoft basic data

ちゃんと50GB程度の空きが認識されました。

growpart コマンドで、パーティションを空き目一杯拡張します。

[root@www ~]# growpart
-bash: growpart: コマンドが見つかりません
[root@www ~]# yum -y install cloud-utils-growpart
読み込んだプラグイン:fastestmirror, langpacks
:
:
インストール:
  cloud-utils-growpart.noarch 0:0.29-5.el7

完了しました!

vda4 を拡張します。

[root@www ~]# growpart /dev/vda 4
CHANGED: partition=4 start=9416704 old: size=95440863 end=104857567 new: size=200298462 end=209715166

ファイルシステムを拡張します。

[root@www ~]# resize2fs /dev/vda4
resize2fs 1.42.9 (28-Dec-2013)
resize2fs: Bad magic number in super-block while trying to open /dev/vda4
Couldn't find valid filesystem superblock.

怒られてしまいました。

Google先生によると、CentOS7では xfs_growfs を使うようです。

[root@www ~]# xfs_growfs /dev/vda4
meta-data=/dev/vda4              isize=256    agcount=52, agsize=230015 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=11930107, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 11930107 to 25037307

エラー無く完了したようです。

状態を確認してみます。

[root@www ~]# df
ファイルシス   1K-ブロック     使用   使用可 使用% マウント位置
devtmpfs           1012664        0  1012664    0% /dev
tmpfs              1023332        0  1023332    0% /dev/shm
tmpfs              1023332   107684   915648   11% /run
tmpfs              1023332        0  1023332    0% /sys/fs/cgroup
/dev/vda4        100138988 45760564 54378424   46% /
/dev/vda2           508588   226176   282412   45% /boot
tmpfs               204668        0   204668    0% /run/user/1002
tmpfs               204668        0   204668    0% /run/user/0

無事に / が拡張されたようです。

再起動して動作確認をざっと行い、完了です。