(最終更新日時: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 までお寄せください。
謝辞
当記事の執筆にあたり、下記のサイトを参考にさせていただきました。
この場を借りてお礼申し上げます。
Copyright © 2004-2012 System House ACT. All Rights Reserved.