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