LVM運用

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

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

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

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

Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14        3053    24418800   8e  Linux LVM
/dev/sda3            3054        7917    39070080   8e  Linux LVM
/dev/sda4            7918       19457    92695050   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               88.40 GB / not usable 2.32 MB
  Allocatable           yes
  PE Size (KByte)       4096
  Total PE              22630
  Free PE               18790
  Allocated PE          3840
  PV UUID               iCPgNq-jwhf-Qig3-rWdM-2bp5-ZPU8-rZyEvr

  --- Physical volume ---
  PV Name               /dev/sda3
  VG Name               VgData
  PV Size               37.26 GB / not usable 2.19 MB
  Allocatable           yes
  PE Size (KByte)       4096
  Total PE              9538
  Free PE               1090
  Allocated PE          8448
  PV UUID               dtD0Df-qMB6-cTyV-3SoO-AmUG-nZbk-NahfMm

  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               VgSystem
  PV Size               23.29 GB / not usable 2.30 MB
  Allocatable           yes
  PE Size (KByte)       4096
  Total PE              5961
  Free PE               713
  Allocated PE          5248
  PV UUID               I2O4GO-VcWk-BPpf-OKEf-v4S7-JUnB-p1lgIV

# vgdisplay
  --- Volume group ---
  VG Name               VgVirtual
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  17
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               88.40 GB
  PE Size               4.00 MB
  Total PE              22630
  Alloc PE / Size       3840 / 15.00 GB
  Free  PE / Size       18790 / 73.40 GB
  VG UUID               PHmdnP-jrLL-nGof-COdS-MTNn-DDbU-fGQNT8

  --- Volume group ---
  VG Name               VgData
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  6
  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               37.26 GB
  PE Size               4.00 MB
  Total PE              9538
  Alloc PE / Size       8448 / 33.00 GB
  Free  PE / Size       1090 / 4.26 GB
  VG UUID               PHh2NT-iNkk-nkRo-cX2w-vDJr-DhML-v4E3vz

  --- Volume group ---
  VG Name               VgSystem
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  6
  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               23.29 GB
  PE Size               4.00 MB
  Total PE              5961
  Alloc PE / Size       5248 / 20.50 GB
  Free  PE / Size       713 / 2.79 GB
  VG UUID               ige9Mb-puLR-JlyQ-imWQ-BlfA-gFqd-b9Irrv
各ボリュームグループには、スナップショット用に領域を残しています。

ハードディスクを増設した場合は、増設したハードディスクに物理ボリュームを作成し、その物理ボリュームをボリュームグループに追加すれば、容易にボリュームグループのサイズを拡張することができます。
# (例)物理ボリューム /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 Name                /dev/VgVirtual/LvMySQL
  VG Name                VgVirtual
  LV UUID                UxdQ8e-WEtD-V3Ue-u0fc-USNs-bS8a-30Z1DM
  LV Write Access        read/write
  LV Status              available
  # open                 2
  LV Size                15.00 GB
  Current LE             3840
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:3

  --- Logical volume ---
  LV Name                /dev/VgData/LvVar
  VG Name                VgData
  LV UUID                ymPNLM-Zt8U-Yw9V-WD6c-8vqD-8zk3-mqmNAa
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                1.00 GB
  Current LE             256
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:4

  --- Logical volume ---
  LV Name                /dev/VgData/LvHome
  VG Name                VgData
  LV UUID                aUY5Ea-OPOL-LjKM-wAom-pUx1-29Cl-p4se4C
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                30.00 GB
  Current LE             7680
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:5

  --- Logical volume ---
  LV Name                /dev/VgData/LvMySQL
  VG Name                VgData
  LV UUID                riX9Eh-4mDi-1nUf-9NYE-mtsM-dFcG-VQI0vX
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                1.00 GB
  Current LE             256
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:6

  --- Logical volume ---
  LV Name                /dev/VgData/LvPgSQL
  VG Name                VgData
  LV UUID                wcsBmJ-gKdy-Oi0A-cU4t-h6kp-DAeR-QhyXo0
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                1.00 GB
  Current LE             256
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:7

  --- Logical volume ---
  LV Name                /dev/VgSystem/LvRoot
  VG Name                VgSystem
  LV UUID                7Bds27-0vuP-dy3Q-sJek-pmUh-mGdO-KdP5LX
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                10.00 GB
  Current LE             2560
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Logical volume ---
  LV Name                /dev/VgSystem/LvSwap
  VG Name                VgSystem
  LV UUID                4Z2wj5-5id1-Azq6-3ucg-SVQh-ZsVq-6vFoUx
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                512.00 MB
  Current LE             128
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

  --- Logical volume ---
  LV Name                /dev/VgSystem/LvTmp
  VG Name                VgSystem
  LV UUID                vAbWDf-WuN6-SXjF-4Vr7-D6h7-sI01-tyqSBA
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                10.00 GB
  Current LE             2560
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2

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

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

1. 旧HDDをシステムに接続し、CentOS のインストールCD-ROM#1/DVDからブートします。
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

# lvdisplay で確認すると /dev/VgData/LvHome のスナップショットが作成されていることがわかります
# lvdisplay /dev/VgData/LvSnap
  --- Logical volume ---
  LV Name                /dev/VgData/LvSnap
  VG Name                VgData
  LV UUID                lo2uud-0YNd-2R32-tDqT-iXj5-PefD-LXs5tp
  LV Write Access        read/write
  LV snapshot status     active destination for /dev/VgData/LvHome
  LV Status              available
  # open                 0
  LV Size                39.06 GB
  Current LE             1250
  COW-table size         10.00 GB
  COW-table LE           320
  Allocated to snapshot  0.00%
  Snapshot chunk size    4.00 KB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:7

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

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

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

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

ご意見・ご指摘等

当記事に対するご意見やご指摘は、weblog までお寄せください。

謝辞

当記事の執筆にあたり、下記のサイトを参考にさせていただきました。
この場を借りてお礼申し上げます。
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