KVMゲストのディスク容量を変更する

小ネタ

利用しているKVMゲストのディスク容量が足りなくなってきて、nagios から警告が上がってくるようになったため、リサイズ ( 増量 ) を実施しました。
以前にも実施した事があり、社内のナレッジサーバ上にある記事の焼き直しですが、手順を記しておきます。

はじめに

プロジェクト準備で忙しく、記事を書いている時間が殆どない状態が続いていますが、先日プロジェクトで利用するサーバ ( KVMゲスト ) のディスク容量拡張を行ったので、ついでに手順を書いておきます。

サーバ上のディスクを拡張する方式としては、ファイルサーバ上の適当なディレクトリをNFSマウントするといった方法もありますが、仮想サーバ上のディスク容量そのものを増加する手順になります。

幾つかの方法がありますが、私が実際に試してみてリサイズが行えた手順になります。

環境

環境は以下になります。

KVMホストOSCentOS6.5(x64)
KVMゲストOSCentOS6.5(x64)
LVMを利用

※KVMイメージが raw フォーマットの場合の手順になります。

手順

※作業をはじめる前に、ディスク容量を変更するKVMゲストはシャットダウンし、必ずKVMイメージのバックアップを取りましょう。

KVMイメージのチェック

KVMイメージのフォーマットとサイズをチェックします。

# qemu-img info /var/lib/libvirt/images/<イメージファイル名>

※ file format: raw になっている事。

ファイル容量の拡張

dd コマンドを利用しKVMイメージのファイル容量を増やします。

# dd if=/dev/zero of=<イメージファイル名>  bs=1G count=12 seek=8

上記は8GBのイメージに12GB追加し、20GBにする場合の例です。
追加するサイズを増やす場合 count=n の値を増やしてください。
元のイメージが 10GBの場合には seek=10 という風になります。

fdisk による操作

  1. 容量を増やしたイメージでKVMゲストを起動します。
  2. fdisk を実行して、ディスクを切り直します。

    ※デバイス名は環境に併せて適宜変更して下さい。

    # fdisk /dev/vda
    
    警告: DOS互換モードは廃止予定です。このモード (コマンド 'c') を止めることを
          強く推奨します。 and change display units to
             sectors (command 'u').
    

    警告が表示されますが、そのまま続けます。

  3. 状態を確認します。( p コマンド )

    コマンド (m でヘルプ): p
    ( 中略 )
    
    デバイス ブート      始点        終点     ブロック   Id  システム
    /dev/vda1   *           3        1018      512000   83  Linux
    /dev/vda2            1018       16645     7875584   8e  Linux LVM
    

    /dev/vda2 の LVMをリサイズします。開始シリンダの値を控えておきます。

  4. 一旦削除して
    コマンド (m でヘルプ): d
    パーティション番号 (1-4): 2
    
  5. 作成しなおし
    コマンド (m でヘルプ): n
    コマンドアクション
       e   拡張
       p   基本パーティション (1-4)
    p
    パーティション番号 (1-4): 2
    最初 シリンダ (1-16644, 初期値 1): 1018
    Last シリンダ, +シリンダ数 or +size{K,M,G} (1018-41610, 初期値 41610):
    初期値 41610 を使います
    
  6. Linux LVM にタイプ変更
    コマンド (m でヘルプ): t
    パーティション番号 (1-4): 2
    16進数コード (L コマンドでコードリスト表示): 8e
    領域のシステムタイプを 2 から 8e (Linux LVM) に変更しました
  7. 変更後の状態を確認し、
    コマンド (m でヘルプ): p
    (中略)
    デバイス ブート      始点        終点     ブロック   Id  システム
    /dev/vda1   *           3        1018      512000   83  Linux
    /dev/vda2            1018       41610     7875552   8e  Linux LVM
    
  8. 想定している状態(サイズ)に変更されていたら、書き込み、fdisk を終了します。
    コマンド (m でヘルプ): w
    コマンド (m でヘルプ): q
    

再起動

一旦再起動します。

# reboot

物理ボリュームのサイズ変更

pv ( PhysicalVolume ) をリサイズします

# pvdisplay
# pvresize /dev/vda2

論理ボリュームをリサイズします。

# lvs
# lvdisplay 
# lvresize -L +12G /dev/VolGroup/lv_root
# resize2fs /dev/VolGroup/lv_root

※CentOS7(xfs)の場合、resize2fs の代わりに xfs_growfs を利用します。
例) # xfs_growfs /dev/VolGroup/lv_root

サイズ確認

# df 
Filesystem           1K-blocks    Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root
                      19005644 3540560  14497768  20% /
tmpfs                   251100       0    251100   0% /dev/shm
/dev/vda1               487652  117210    344842  26% /boot

容量が拡張されていれば成功です。

スワップの拡張

スワップも拡張可能ですが、少々手順が異なります。

上記物理ボリュームのサイズ変更までは同じ手順なので、そこまで終わらせて下さい。

  1. 論理ボリュームをリサイズします。
    # lvresize -L +1G /dev/VolGroup/lv_swap
    

    ※例えば物理ボリュームを 5G増加した場合に、1G分 lv_swap 増加に、残り4G分 lv_root に割り当てるといった事も当然可能です。

  2. スワップの場合 resize2fs ではありません。一旦スワップオフします。

    ※この際、メモリが足らずに swapoff できない場合があります。その場合は ( 自動起動しているサービスを落とす等 ) 空きメモリを確保してから再試行しましょう。

    # swapoff /dev/mapper/VolGroup-lv_swap
    
  3. mkswap します。
    # mkswap /dev/mapper/VolGroup-lv_swap
    

    lvresize で変更後のサイズでスワップが作成されます。
  4. swapon します。
    # swapon /dev/mapper/VolGroup-lv_swap
    
  5. 実際にスワップサイズが増加したかは free コマンドで確認して下さい。

まとめ

fdisk 実行時に警告が表示されるなど、この方法がいつまで利用可能かは判りませんが、CentOS6.5 の環境であれば、上記手順でディスク容量を拡張できました。

同様の環境であれば機能するのではないかと思います。

※しつこいですが、必ずバックアップを取ってから実行しましょう。