CentOS サーバー管理・運用 LVM

(最終更新日時:2012-10-28 13:35:57)
当サイトサーバーでは、ディスク管理システムに LVM (Logical Volume Manager) : 論理ボリュームマネージャーを使用し、
を実現しています。

※ 以下の内容は lvm2-2.02.95-10.el6_3.2.x86_64 を対象に記述しています。

LVM は、物理ボリューム (PV : Phisical Volume)、ボリュームグループ (VG : Volume Group)、論理ボリューム (LV : Logical Volume) から構成されます。

物理ボリューム (PV : Phisical Volume)

ハードディスク上の物理パーティションに対して、pvcreate で初期化することにより、物理ボリュームが作成されます。
なお、物理パーティションは、パーティションタイプが 8E : Linux LVM で作成されていなければなりません。
当サイトでは、以下で物理パーティションを作成しています。
# fdisk -l

ディスク /dev/sda: 500.1 GB, 500106780160 バイト
ヘッド 255, セクタ 63, シリンダ 60801
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sda1   *           1          39      307200   83  Linux
/dev/sda2              39       12787   102400000   8e  Linux LVM
/dev/sda3           12787       44658   256000000   8e  Linux LVM
/dev/sda4           44658       60802   129676288   8e  Linux LVM
/dev/sda2 ~ /dev/sda4 をLVM用の物理パーティションとして作成しています。

LVM の PV(Phisical Volume) として利用するには、作成した物理パーティションを物理ボリュームとして初期化します。
# vgscan                                                      # LVM情報を初期化します

# pvcreate /dev/sda2
# pvcreate /dev/sda3
# pvcreate /dev/sda4
(※) 実際はCentOSのインストール時にパーティション設定で行っています。

ボリュームグループ (VG : Volume Group)

1つ以上の物理ボリューム (PV : Phisical Volume) をまとめて、ボリュームグループ (VG : Volume Group) を作成します。
# (例)物理ボリューム /dev/sda2 から ボリュームグループ VgSystem を作成します
# vgcreate VgSystem /dev/sda2

# (例)物理ボリューム /dev/sda3 と /dev/sda4 から ボリュームグループ VgData を作成します
# vgcreate VgData   /dev/sda3 /dev/sda4
(※) 実際はCentOSのインストール時にパーティション設定で行っています。

ボリュームグループを作成することにより、物理エクステント (PE : Physical Extent) がボリュームグループ内に配置されます。
この PE(Physical Extent) がLVMの最小領域単位になります。
なお、CentOS 5.2からLVM2が採用されてますので、最大エクステント数に制限はありません。

当サイトでは、以下でボリュームグループを作成しています。
# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda4
  VG Name               VgVirtual
  PV Size               123.67 GiB / not usable 0
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              31659
  Free PE               16659
  Allocated PE          15000
  PV UUID               Q0GUrh-HBzi-kM0l-Azxq-CU2g-Ih52-qlFixj

  --- Physical volume ---
  PV Name               /dev/sda3
  VG Name               VgData
  PV Size               244.14 GiB / not usable 4.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              62499
  Free PE               29999
  Allocated PE          32500
  PV UUID               aton8I-tJtD-DRTW-D7Y3-rCQg-CIb3-HNwodf

  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               VgSystem
  PV Size               97.66 GiB / not usable 4.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              24999
  Free PE               13975
  Allocated PE          11024
  PV UUID               piTdWN-u7Bq-hU56-0w6A-PAnK-KGOh-FNiebE

# vgdisplay
  --- Volume group ---
  VG Name               VgVirtual
  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               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               123.67 GiB
  PE Size               4.00 MiB
  Total PE              31659
  Alloc PE / Size       15000 / 58.59 GiB
  Free  PE / Size       16659 / 65.07 GiB
  VG UUID               eCiDWO-qyc3-SOWf-RzrQ-ECgZ-RLF4-jAfPD7

  --- Volume group ---
  VG Name               VgData
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                4
  Open LV               4
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               244.14 GiB
  PE Size               4.00 MiB
  Total PE              62499
  Alloc PE / Size       32500 / 126.95 GiB
  Free  PE / Size       29999 / 117.18 GiB
  VG UUID               X2zcEl-TtLK-8zTe-TPkS-OoYz-wJW7-o7MICX

  --- Volume group ---
  VG Name               VgSystem
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               3
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               97.65 GiB
  PE Size               4.00 MiB
  Total PE              24999
  Alloc PE / Size       11024 / 43.06 GiB
  Free  PE / Size       13975 / 54.59 GiB
  VG UUID               KCwZ3H-Zo9w-MMdP-Umsp-So2k-0JFh-bgaLP0
各ボリュームグループには、スナップショット用に領域を残しています。

ハードディスクを増設した場合は、増設したハードディスクに物理ボリュームを作成し、その物理ボリュームをボリュームグループに追加すれば、容易にボリュームグループのサイズを拡張することができます。
# (例)物理ボリューム /dev/sdb1 を ボリュームグループ VgData に追加します
# vgextend VgData /dev/sdb1

論理ボリューム (LV : Logical Volume)

ボリュームグループ (VG : Volume Group) から PE(Physical Extent) を割り当て、論理ボリューム (LV : Logical Volume) を作成します。
作成した論理ボリュームをフォーマットした後、システムへマウントすれば論理ボリュームが使用可能になります。
# (例)ボリュームグループ VgData から 論理ボリューム LvMySQL を10Gバイトの容量で作成します
# lvcreate -n LvMySQL -L 10G VgData

# (例)論理ボリューム LvMySQL をext3でフォーマットします
# 論理ボリュームのデバイス名は /dev/VG名/LV名 になります
# mke2fs -j /dev/VgData/LvMySQL

# (例)論理ボリューム LvMySQL を /var/database/mysql にマウントします
# mkdir -p /var/database/mysql
# mount /dev/VgData/LvMySQL /var/database/mysql

# (例)システム起動時に自動的にマウントさせるため /etc/fstab にエントリーを追加します
# vi /etc/fstab
----------(vi ここから)----------/dev/VgData/LvMySQL     /var/database/mysql     ext3    defaults        1 2----------(vi ここまで)----------
(※) 実際はCentOSのインストール時にパーティション設定で行っています。

当サイトでは、以下で論理ボリュームを作成しています。
# lvdisplay
  --- Logical volume ---
  LV Path                /dev/VgVirtual/LvPgSQL
  LV Name                LvPgSQL
  VG Name                VgVirtual
  LV UUID                lD4Khe-0cKU-CN1T-dOWS-mL7L-fjeb-lJZhw2
  LV Write Access        read/write
  LV Creation host, time actgwsvr, 2012-10-08 01:29:42 +0900
  LV Status              available
  # open                 0
  LV Size                29.30 GiB
  Current LE             7500
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2

  --- Logical volume ---
  LV Path                /dev/VgVirtual/LvMySQL
  LV Name                LvMySQL
  VG Name                VgVirtual
  LV UUID                a8ZMAm-8gnt-XIsF-lQlU-dhv2-qSfM-GYth0H
  LV Write Access        read/write
  LV Creation host, time actgwsvr, 2012-10-08 01:29:55 +0900
  LV Status              available
  # open                 0
  LV Size                29.30 GiB
  Current LE             7500
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:3

  --- Logical volume ---
  LV Path                /dev/VgData/LvVar
  LV Name                LvVar
  VG Name                VgData
  LV UUID                UOANl9-ONCs-7zL3-1GLZ-FdXd-KSHH-TuQ2WX
  LV Write Access        read/write
  LV Creation host, time actgwsvr, 2012-10-08 01:28:55 +0900
  LV Status              available
  # open                 1
  LV Size                9.77 GiB
  Current LE             2500
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:4

  --- Logical volume ---
  LV Path                /dev/VgData/LvHome
  LV Name                LvHome
  VG Name                VgData
  LV UUID                gkvK2e-I35K-0nDr-mB6N-ri1m-vqbU-GiHJBP
  LV Write Access        read/write
  LV Creation host, time actgwsvr, 2012-10-08 01:29:00 +0900
  LV Status              available
  # open                 1
  LV Size                97.66 GiB
  Current LE             25000
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:5

  --- Logical volume ---
  LV Path                /dev/VgData/LvPgSQL
  LV Name                LvPgSQL
  VG Name                VgData
  LV UUID                vgOZ32-k2q7-0y8R-uKKi-tgEY-LNVQ-mabFh6
  LV Write Access        read/write
  LV Creation host, time actgwsvr, 2012-10-08 01:29:30 +0900
  LV Status              available
  # open                 1
  LV Size                9.77 GiB
  Current LE             2500
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:6

  --- Logical volume ---
  LV Path                /dev/VgData/LvMySQL
  LV Name                LvMySQL
  VG Name                VgData
  LV UUID                9AprQX-HAxi-Tq5X-jAMy-hlCr-bu15-JJVsst
  LV Write Access        read/write
  LV Creation host, time actgwsvr, 2012-10-08 01:29:36 +0900
  LV Status              available
  # open                 1
  LV Size                9.77 GiB
  Current LE             2500
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:7

  --- Logical volume ---
  LV Path                /dev/VgSystem/LvRoot
  LV Name                LvRoot
  VG Name                VgSystem
  LV UUID                T6MA7O-DEM3-zrTL-2MJ6-hLHl-NGd7-4LEKFD
  LV Write Access        read/write
  LV Creation host, time actgwsvr, 2012-10-08 01:28:38 +0900
  LV Status              available
  # open                 1
  LV Size                19.53 GiB
  Current LE             5000
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Logical volume ---
  LV Path                /dev/VgSystem/LvTemp
  LV Name                LvTemp
  VG Name                VgSystem
  LV UUID                y8YXGf-ybjH-Rep3-1KBi-2s09-zOe6-ezIGTO
  LV Write Access        read/write
  LV Creation host, time actgwsvr, 2012-10-08 01:28:46 +0900
  LV Status              available
  # open                 1
  LV Size                19.53 GiB
  Current LE             5000
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:8

  --- Logical volume ---
  LV Path                /dev/VgSystem/LvSwap
  LV Name                LvSwap
  VG Name                VgSystem
  LV UUID                MKgQxG-XbR7-D5Or-fmee-hlBo-zkcu-5Enki4
  LV Write Access        read/write
  LV Creation host, time actgwsvr, 2012-10-08 01:28:54 +0900
  LV Status              available
  # open                 1
  LV Size                4.00 GiB
  Current LE             1024
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

ボリュームグループ (VG : Volume Group) 名の変更

HDDの換装を行った場合に、LVMで管理していた旧HDDをマウントしたいことがあるかもしれません。
LVMでは、ボリュームグループ名が同じだとマウントできませんので、下記の手順で旧HDDのボリュームグループ名を変更します。

1. 旧HDDをシステムに接続し、CentOS のインストールDVD#1からブートします。
2. boot : プロンプトで、linux rescue を入力し、レスキューモードで起動します。
3. 言語 Japanese、キーボード jp106 を選択します。
4. ネットワーク接続 No、ファイルシステムのマウント Skip を選択します。
5. シェルコマンドプロンプトが表示されたら、以下のコマンドでボリュームグループ名を変更します。
# lvm vgscan                                                  # LVM情報を初期化します

# lvm vgchange -a n                                           # 全ボリュームグループを非アクティブにします
# lvm vgrename VgSystem VgOldSystem                           # ボリュームグループ名 VgSystem を VgOldSystem に変更しています

# poweroff

スナップショット

LVMでは、ボリュームグループ内に論理ボリュームのスナップショット論理ボリュームを作成することができます。
スナップショットにより、スナップショット作成時点の論理ボリュームの内容が保証されますので、データの整合性が取れたバックアップを行うことができます。
# (例)論理ボリューム LvHome のスナップショットボリューム LvSnap をサイズ 10G で作成します
# lvcreate --snapshot -L10G -nLvSnap /dev/VgData/LvHome
  Logical volume "LvSnap" created

# lvdisplayで確認すると /dev/VgData/LvHome のスナップショットが作成されていることがわかります
# lvdisplay /dev/VgData/LvSnap
  --- Logical volume ---
  LV Path                /dev/VgData/LvSnap
  LV Name                LvSnap
  VG Name                VgData
  LV UUID                IXSiHf-chg0-xfaV-HXkO-29Ee-Uag1-gaXElp
  LV Write Access        read/write
  LV Creation host, time actgwsvr, 2012-10-28 13:08:54 +0900
  LV snapshot status     active destination for LvHome
  LV Status              available
  # open                 0
  LV Size                97.66 GiB
  Current LE             25000
  COW-table size         10.00 GiB
  COW-table LE           2560
  Allocated to snapshot  0.00%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:9

# スナップショットボリュームをマウントします
# mkdir /snap
# mount -o ro /dev/VgData/LvSnap /snap

# (tar、rsync 等を使って /snap からバックアップを行います)

# スナップショットボリュームをアンマウントします
# umount /snap
# rmdir  /snap

# スナップショットボリュームを削除します
# lvremove -f /dev/VgData/LvSnap
Logical volume "LvSnap" successfully removed

ご意見・ご指摘等

記事の内容についてのご質問、ご指摘、その他ご意見等は、Weblog/Twitter にて受け付けております。

System House ACT Weblog 内記事 : サーバー管理・運用 LVM

トラックバックまたはコメントにてお寄せください。

Twitter では .@systemact 宛につぶやいてください。
また、こちら から、この記事についてつぶやくことができます。

謝辞

当記事の執筆にあたり、下記のサイトを参考にさせていただきました。
この場を借りてお礼申し上げます。
Logical Volume Manager HOWTO : http://www.linux.or.jp/JF/JFdocs/LVM-HOWTO.html
論理ボリュームの管理 : http://www.ibm.com/developerworks/jp/linux/library/l-lvm2/
LVMで楽々ディスク管理 : http://www.itmedia.co.jp/enterprise/articles/0709/05/news008.html
LVMによるディスクパーティションの動的化(前編) : http://www.itmedia.co.jp/enterprise/0307/11/epn01.html
LVMによるディスクパーティションの動的化(後編) : http://www.itmedia.co.jp/enterprise/0308/08/epn01.html
a System House to build an Accounting system by the Computer Technology