Daydreaming in Brookline, MA

Linux VMのルートファイルシステムを拡張する

1 はじめに

VMware ESXi上にあるCent OS VMのルートファイルシステムがほぼ満杯になりました。 VMのいいところは、ストレージなどのリソースが不足したら比較的簡単に追加できるところです。 しかしVMにストレージ容量を追加しただけではOSが認識してくれません。今回は、ルートファイルシステムの中身を壊さずにストレージ容量を追加する手順を説明します。

説明はESXi上のCent OS 7での手順ですが、VirtualBox等のハイパーバイザーや別のLinux OSでも似たような手順で行けると思います。使用するコマンドが変わってきますが。。また、lvmを使っている場合には、もう少しリスクの低そうなやり方で拡張ができるようです。

2 手順

2.1 概要

以下のステップを行います。

  1. ESXi上でVMのHard disk <番号>を容量拡張する
  2. VMのLinux上で growpart をインストールする
  3. Linuxでルートパーティションを拡張する
  4. Linuxでルートファイルシステムを拡張する

2.2 ESXiでストレージ容量追加する

  • ESXi GUIにログインする
    • ブラウザーで https://<host_name>/ui を開き、ユーザー名とパスワードを入れます。
  • VMを選択する
    • 左端に縦に並んでいるアイコンの下から3つ目くらいをクリックし、VM一覧を表示します
    • VM名をクリックします
  • ストレージ容量を増やす
    • 右上のActionsアイコン > Edit settingsを選択します
    • ルートファイルシステムのあるHard disk <番号>の容量を増やし、Saveをクリックします
      • 容量から大体想像がつくと思いますが、同じ容量のデバイスがいくつかある場合には、、、/dev/sdaならHard disk 1、/dev/sdbならHard disk 2というように推測するのでしょうか。

これで、ESXi上ではストレージ容量が増えました。

2.3 growpartをインストール、ルートパーティションを拡張する

  • Linux VMにsshで入り、リブートします。
    • この時点ではまだパーティションサイズは増えていません
# ssh <Linux_VM>
# df -H /  # ルートファイルシステムの入っているデバイスを確認する
           # 私の環境では /dev/sdc1 がルートパーティションでした
# lsblk  # パーティションサイズが増えていないことを確認する
# reboot
  • growpart をインストールして実行する
    • 手元のFedora 35の parted コマンドには resizepart オプションがありますが、Cent OS 7のものには無かったので、 growpart を入れます。
    • リブート後に lsblk するとデバイス容量が増えていることがわかります
# lsblk
<snip>
sdc                           8:32   0   160G  0 disk  # 増えています!
└─sdc1                        8:33   0    80G  0 part /  # まだ増えていません
# yum install cloud-utils-growpart -y
# growpart /dev/sdc 1  
# lsblk
sdc                           8:32   0   160G  0 disk 
└─sdc1                        8:33   0   160G  0 part /  # 増えました!
# reboot  # 念の為

2.4 ルートファイルシステムを拡張する

  • 最初にファイルシステム容量を確認する
    • まだ増えていません。

      # df -H .
      Filesystem      Size  Used Avail Use% Mounted on
      /dev/sdc1        86G   73G   14G  84% /
      
  • ルートファイルシステムを拡張する
    • ファイルシステムタイプは xfs なので xfs_growfs を使います。 ext4 なら resize2fs でしょうか。

      # xfs_growfs /
      meta-data=/dev/sdc1              isize=512    agcount=4, agsize=5242816 blks
               =                       sectsz=512   attr=2, projid32bit=1
               =                       crc=1        finobt=0 spinodes=0
      data     =                       bsize=4096   blocks=20971264, imaxpct=25
               =                       sunit=0      swidth=0 blks
      naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
      log      =internal               bsize=4096   blocks=10239, version=2
               =                       sectsz=512   sunit=0 blks, lazy-count=1
      realtime =none                   extsz=4096   blocks=0, rtextents=0
      data blocks changed from 20971264 to 41942779
      # df -H .
      Filesystem      Size  Used Avail Use% Mounted on
      /dev/sdc1       172G   72G  100G  42% /    # 増えました!
      # reboot  # 念の為
      

3 終わりに

現在使用中のルートファイルシステムを容量拡張するということで、動かなくなったらどうしようと思いましたが、意外にもすんなり拡張できてしまいました。VMはつくづく便利だと思います。Linux管理者の方々には常識的な内容かもしれません。