2011年12月20日火曜日

共有ディスクとしての論理ボリューム(Logical Volume)の利用手順



概要
node1、node2など複数のノードからマウントされる可能性のある論理ボリューム
排他制御し単一のノードでマウントさせるまでの手順を記載しておく。

そもそもなぜ複数のノードで同じボリュームを利用するのであろうか。
その疑問を抱いたのであれば例えばクラスタを想像してもらえればいいだろうか。


さて共有ディスク云々の前に、今回は論理ボリュームを作成する手順もあわせて残しておく。
論理ボリュームを作るまでの流れは以下の通りである。
1つ以上の物理ボリューム(Physical Volume)をまとめ、
ボリュームグループ(Volume Group)を作り、
そこから論理ボリューム(Logical Volume)を切り出す。

物理ボリュームが1つであってもボリュームグループは当然作成できるが、
ここでは2つの物理ボリュームを使うこととする。特に理由はない。ただの学習のためである。


物理ボリューム(Physical Volume)
/dev/sda1 (500MB)
/dev/sda2 (500MB)
         
ボリュームグループ(Volume Groupe)
/dev/vg01 (1000MB)
名前は任意である。
         
論理ボリューム(Logical Volume)
/dev/vg01/lvol01 (200MB)
/dev/vg01/lvol02 (50MB)
/dev/vg01/lvol03 (10MB)
        ・
        ・
        ・
名前は任意である。
当然1000MBまで、任意の容量でボリュームで切ることができる。



それでは早速始めていく。
パーティションの作成
OSインストール時にすでに適切にパーティションを分けていればここでの手順は不要である。

fdiskコマンドを使いパーティションを分ける。
# fdisk /dev/sda

現在のパーティション状態を確認する(print)。
Command(m for help): p

新規パーティションを作る(new)
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p

ここでパーティションsda1、sda2を作る。
既に4つパーティションを作っていれば、拡張領域に作成していけばよい。

以下は、sda1パーティションを作成する例を示す。

パーティション番号を設定する。
Partition number (1-4): 1

どこからパーティションを作成するのか、シリンダ番号を指定する。
First cylinder(1-10240, default 1): Enter

パーティションタイプを変更する(toggle)。
Command (m for help): t
Hex code ( type L to list codes ): 8e
8eはLinux LVM用のヘックスコードである。

変更を適用する(write)
Command (m for help): w
q(quit)で終了すると、変更は有効にならない。


物理ボリューム(PG)の作成
物理ボリュームを作成するためのパーティションを指定する。
# pvcreate -f /dev/sda1
# pvcreate -f /dev/sda2
-f : force

作成したPGを確認する。
# pvdisplay


ボリュームグループ(VG)の作成
ボリュームグループvg01を作成する。
# vgcreate vg01 /dev/sda1 /dev/sda2

作成したVGを確認する。
# vgdisplay


論理ボリューム(LV)の作成
データ格納用の論理ボリュームlvol01を作成する。
# lvcreate -L 200M -n lvol01 vg01
その他論理ボリュームも同じ手順で作っていけばいい。ここでは省略。

作成したLVをを確認する。
# lvdisplay


ファイルシステムの作成
ext3のファイルシステムを作成する。
# mke2fs -j /dev/vg01/lvol01
-j :  ext3 ジャーナルを持ったファイルシステムを作成

ファイルシステムが作成されたことを確認する。
# tune2fs -l  /dev/vg01/lvol01
※作成したファイルシステムに対して自動でfsckをかけるかどうかは検討した方がいい


マウントの実施(ディスクを共有していない場合)
マウントポイントを作成する。
# mkdir /test

マウントする。
# mount /dev/vg01/lvol01 /test


マウントの実施(ディスクを共有している場合)
同時に複数のノードからボリュームグループがアクティブ化されないように、
ボリュームグループにアクティブ化保護用の排他タグを付与する。
# vgchange --addtag node01 vg01

ボリュームグループのタグを確認する。
# vgs -o +tags

共有ディスクのアクティベイトを行う。
# vgchange -a y vg01
a : active
y : yes

マウントポイントを作成する。
# mkdir /test

マウントする。
# mount /dev/vg01/lvol01 /test


別ノードへの共有ディスクのつけかえ
node01、node02で利用できる共有ディスクをnode01側にマウントさせた。
この状態からnode2側へ共有ディスクをつけかえるにはどうすればいいだろうか。

node01側操作
アンマウントする。
# umount /test

ボリュームグループを無効にする。
# vgchange -a n vg01
n : no

ボリュームグループのタグを削除する。
# vgchange --deltag node01 vg01

念のため、node01を停止しておく。
# shutdown -h now


node02側操作
# vgchange --addtag node02 vg01

# vgchange -a y vg01

# mkdir test

# mount /dev/vg01/lvol10 /test