CentOS 7でLVMのボリュームグループを拡張する方法

CentOS 7でLVMのボリュームグループを拡張する方法

前回の記事で、yumでシステムを更新するときなどにスナップショットを取れるように、yumプライグインを導入したのですが、その際に既存のボリュームグループに空きなかったので、HDDを追加してボリュームグループを拡張する必要がありました。

そこでここでは、CentOS 7マシンにHDDを増設して、LVMのボリュームグループを拡張する方法を紹介します。

パーティションを作成する

ここでは1本のHDDしか搭載されていないマシンに15GBのHDDを追加して、ボリュームグループ「centos」を拡張します。ボリュームグループの現在の状態は、以下のとおりで、サイズが33.8GB、空きエクステントが0の状態です。

# vgdisplay 
  --- Volume group ---
  VG Name               centos
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               33.80 GiB
  PE Size               4.00 MiB
  Total PE              8653
  Alloc PE / Size       8653 / 33.80 GiB
  Free  PE / Size       0 / 0   
  VG UUID               Uwqv3Q-BGHh-0hQ4-Df2h-xdnL-RMFs-8m4imW

HDDが認識されているかを確認する

まずは、次のコマンドで、増設したHDDが認識されているか確認します。

# fdisk -l
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

Disk /dev/sda: 37.6 GB, 37580963840 bytes, 73400320 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト
Disk label type: gpt
Disk identifier: 2EADAF79-5C6C-4A8D-A4E6-8F35515B1546

#         Start          End    Size  Type            Name
 1         2048       411647    200M  EFI System      EFI System Partition
 2       411648      2508799      1G  Microsoft basic 
 3      2508800     73398271   33.8G  Linux LVM       

Disk /dev/mapper/centos-root: 32.5 GB, 32535216128 bytes, 63545344 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト

Disk /dev/mapper/centos-swap: 3758 MB, 3758096384 bytes, 7340032 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト

Disk /dev/sdb: 16.1 GB, 16106127360 bytes, 31457280 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト

増設したHDDが認識されていれば、出力行の下部に表示されているはずです。

ここでは「/dev/sdb」として認識されていることが分かります。

パーティションを作成する

fdiskコマンドで増設したHDDを指定し、パーティションを作成します。

# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x6dec2e2f.

The device presents a logical sector size that is smaller than
the physical sector size. Aligning to a physical sector (or optimal
I/O) size boundary is recommended, or performance may be impacted.

まずは「n」コマンドで、パーティションを作成します。

ここでは、増設したHDDのすべての容量を使って1つのパーティションを作成するので、次のように設定しています。

コマンド (m でヘルプ): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
パーティション番号 (1-4, default 1): 1
最初 sector (2048-31457279, 初期値 2048): 2048
Last sector, +sectors or +size{K,M,G} (2048-31457279, 初期値 31457279): 31457279
Partition 1 of type Linux and of size 15 GiB is set

次に「t」コマンドで、作成したパーティション番号「1」を指定して、タイプ「8e」を指定します。

コマンド (m でヘルプ): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'

最後に、変更内容をパーティションテーブルに書き込むため「w」コマンドを実行します。

コマンド (m でヘルプ): w
パーティションテーブルは変更されました!

ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。

パーティションを作成し終えたら、以下のコマンドで正しくパーティションが作成されているか確認します。

# fdisk -l /dev/sdb
Disk /dev/sdb: 16.1 GB, 16106127360 bytes, 31457280 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト
Disk label type: dos
ディスク識別子: 0x6dec2e2f

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdb1            2048    31457279    15727616   8e  Linux LVM

最下行で「/dev/sdb1」というパーティションが作成できていることが確認できます。

LVMの操作

物理ボリューム(PV)を作成

次に、pvcreateコマンドを使って、上で作成したパーティションを指定して物理ボリュームを作成します:

# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.

上のように「successfully created.」と表示されればOKです。

物理ボリュームをボリュームグループに追加

次に、vgextendコマンドを実行して、上で作成した物理ボリュームを、ボリュームグループ(ここでは、ルートファイルシステムがあるボリュームグループ「centos」を指定しています)に追加します。

# vgextend centos /dev/sdb1
Volume group "centos" successfully extended

上のように「successfully extended」と表示されればOKです。

ボリュームグループが拡張されていることを確認

最後にvgdisplayコマンドを実行して、ボリュームグループが拡張されていることを確認します。

# vgdisplay 
  --- Volume group ---
  VG Name               centos
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               <48.80 GiB
  PE Size               4.00 MiB
  Total PE              12492
  Alloc PE / Size       8653 / 33.80 GiB
  Free  PE / Size       3839 / <15.00 GiB
  VG UUID               Uwqv3Q-BGHh-0hQ4-Df2h-xdnL-RMFs-8m4imW

「VG Size」が33.8GBから15GB分増えて48.8GBになっており、「Free PE / Size」も拡張した領域の分だけ空きエクステントが増えていることが分かります。

以上で、ボリュームグループの拡張は完了です。

あとがき

はじめは、既存のファイルシステム(論理ボリューム)を縮小して、ボリュームグループの空き容量を増やそうとしていましたが、CentOS 7のデフォルトで使用されるファイルシステムXFSは、拡張はできても縮小はできないため、ここで紹介したHDDを増設することになりました。