LVM運用

(最終更新日時:2009-12-15 18:46:29)
当サイトサーバーでは、ファイルシステムに 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/sda3
  VG Name               VgData
  PV Size               111.78 GB / not usable 31.12 MB
  Allocatable           yes
  PE Size (KByte)       32768
  Total PE              3576
  Free PE               1061
  Allocated PE          2515
  PV UUID               0aBZrS-266i-AsHW-QanV-4qwT-xrZz-pQ6XuP

  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               VgSystem
  PV Size               37.17 GB / not usable 12.24 MB
  Allocatable           yes
  PE Size (KByte)       32768
  Total PE              1189
  Free PE               213
  Allocated PE          976
  PV UUID               oM7lBg-kAcU-VbQB-P7Oa-372Y-Kywb-o8xT3I

# vgdisplay
  --- 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               111.75 GB
  PE Size               32.00 MB
  Total PE              3576
  Alloc PE / Size       2515 / 78.59 GB
  Free  PE / Size       1061 / 33.16 GB
  VG UUID               yRjcWG-BSod-jxXH-Qgbo-eA6E-fHrY-fBlVhv

  --- 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               37.16 GB
  PE Size               32.00 MB
  Total PE              1189
  Alloc PE / Size       976 / 30.50 GB
  Free  PE / Size       213 / 6.66 GB
  VG UUID               fTdG4j-GRKE-D4wa-AVeV-k1IL-YbvQ-fi9lGF
各ボリュームグループには、スナップショット用に領域を残しています。

ハードディスクを増設した場合は、増設したハードディスクに物理ボリュームを作成し、その物理ボリュームをボリュームグループに追加すれば、容易にボリュームグループのサイズを拡張することができます。
# (例)物理ボリューム /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
/dev/VgData/LvMySQL     /var/database/mysql     ext3    defaults        1 2
(※) 実際は CentOS のインストール時にパーティション設定で行っています。

当サイトでは、以下で論理ボリュームを作成しています。
# lvdisplay
  --- Logical volume ---
  LV Name                /dev/VgData/LvVar
  VG Name                VgData
  LV UUID                9vr2jC-Bfjt-TJxH-EQnF-ML8T-OBWP-MusTIt
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                19.53 GB
  Current LE             625
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:3

  --- Logical volume ---
  LV Name                /dev/VgData/LvHome
  VG Name                VgData
  LV UUID                uHeZSa-NSwN-rBcq-17mD-TJyY-fw9O-QtLdUs
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                39.06 GB
  Current LE             1250
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:4

  --- Logical volume ---
  LV Name                /dev/VgData/LvMySQL
  VG Name                VgData
  LV UUID                vWaoao-pgzi-mu8S-Eie2-W2Sf-80OE-HHMjUi
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                10.00 GB
  Current LE             320
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:5

  --- Logical volume ---
  LV Name                /dev/VgData/LvPgSQL
  VG Name                VgData
  LV UUID                0ABlE6-hglq-alxf-UfIt-s0Ga-BKWd-FUNCy5
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                10.00 GB
  Current LE             320
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:6

  --- Logical volume ---
  LV Name                /dev/VgSystem/LvRoot
  VG Name                VgSystem
  LV UUID                guwfYu-RtTY-scaG-iF3x-VNR1-24ty-qER7Vr
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                20.00 GB
  Current LE             640
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Logical volume ---
  LV Name                /dev/VgSystem/LvTmp
  VG Name                VgSystem
  LV UUID                8X2qsQ-32in-EYBL-mFPf-4EOS-RqfO-MUDVMh
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                10.00 GB
  Current LE             320
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

  --- Logical volume ---
  LV Name                /dev/VgSystem/LvSwap
  VG Name                VgSystem
  LV UUID                6YerkT-G5X0-2zj1-UrcC-IXjg-894D-0reZHI
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                512.00 MB
  Current LE             16
  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