すでに運用に入っているパーティションをミラーリングする方法。
一つは、LVMで運用されているならlvconvertで簡単にできる。
普通にext3なんかのパーティションの場合はどうするか。
sda1, sda2がすでに運用に入っていて、sdb1, sdb2をミラーリングディスクとして追加する例を考える。
ここではmdadmを使うことにする。
で、今回の作業の流れ。
ということでブロックデバイスの作成。
# mknod /dev/md1 b 9 0 # mknod /dev/md2 b 9 1
sdb1, sdb2はsda1, sda2と同じサイズでパーティションを切る。
パーティションのタイプはsda1, sda2も含めてすべてfd(Linux raid autodetect)にする。
で、新しく追加する方のディスクを方肺でミラー化する。
# mdadm --create /dev/md1 --level=1 --raid-devices=2 missing /dev/sdb1 # mdadm --create /dev/md2 --level=1 --raid-devices=2 missing /dev/sdb2
ミラー化したら、ファイルシステムを作成して、既存運用のディスクからデータを移行する。
この辺は/dev/md1, md2をmkfsしてsda1, sda2からmd1, md2にデータをcpする。
コピーが終わったら、元のディスクもミラーリングに参加させる。
# mdadm --add /dev/md1 /dev/sda1 # mdadm --add /dev/md2 /dev/sda2
っていう感じだろうか。
LVMにはミラーリングやストライピングといった機能がある。
って最近知った。
とりあえずデータが飛びかけた今回の障害から復旧するにあたって、LVMで構築したパーティションをミラーリングしようと思っていて調べていて気づいた。
以前と同じようにmdadmを使ったソフトウェアRAIDでミラーリングしようと思っていたけど、LVM自前のミラーリング機能を使った方が楽そうなのでこっちにした。
とりあえず、ミラーリングなのでディスクは最低2本いる。
で、同一ボリュームである必要があるようだ。
ということで、
# pvcreate /dev/sda1 /dev/sdb1 # vgcreate vg1 /dev/sda1 /dev/sdb1
みたいな感じで。
で、ミラーリングするのは至極簡単なようだ。
普通に論理ボリュームを作成するのと同じような感じで、-m 1とかつければいいみたい。
# lvcreate -L 30G -n lv1 -m 1 --alloc anywhere vg1
みたいな。
–alloc anywhere ってのが謎だが、これがないとLVMのミラーリングはディスクを3個必要になるらしい。基本は。
というのは、一つはログ用で用いるようだ。
で、このログを配置する先を、一つのディスクを利用しないで適当なファイルに書き出すようにするのがこのオプションらしい。
っていうのも、allocオプションの詳しい話がman lvcreateじゃ出てこないからよくわからん。
単純にこのオプションを使わずに、–mirrorlogオプションを使った方が平和かもしれない。
–mirrorlogオプションでは、以下のようになる。
で、論理ボリュームをミラーリングにしたりするのは、作成時だけじゃなくてすでに稼働している状態からでも簡単に行える。
lvconvertで似たような感じで指定すればいい。
mountしている状態でも、オンラインミラーリング化なんてことも問題なくできた。
# lvconvert -m 1 --alloc anywhere /dev/ms09/ms09
これで、普通の論理ボリュームがミラーリングされたボリュームに化けた。
このLVMの柔軟性はすばらしいというほかない。

Categories
Tag Cloud
Blog RSS
Comments RSS
Last 50 Posts
Back
Void « Default
Life
Earth
Wind
Water
Fire
Light 