パスワードを忘れた? アカウント作成
7026273 journal
日記

tuneoの日記: [LVM]LVMでRAID5だとぅ?

日記 by tuneo

Linuxのlvmというかlvm2ではmd raidと組み合わせない単品でもミラーリングとストライピングとJBODが可能である、というのは知っていたのだが、最近はRAID4/5/6も可能になっちょるらしい。知らなかった。いったいどういう感じに使うんだろう?ということで試してみた。

テスト環境はVirtualBoxで動いているDebian sid(amd64)。RAIDのテスト用に、システムドライブとは別に2GBの仮想HDDを4台ほど作ってある。もちろん性能なんて知ったことじゃないので、ひとつのHDDの上に作ってあるわけだが。

まずは下準備。生のHDDなのでGPTを作ってパーティションを作成し、LVMフラグを立てる。

# parted /dev/sdc mktable gpt mkpart primary 1M 100% set 1 lvm on
# parted /dev/sdd mktable gpt mkpart primary 1M 100% set 1 lvm on
# parted /dev/sde mktable gpt mkpart primary 1M 100% set 1 lvm on
# parted /dev/sdf mktable gpt mkpart primary 1M 100% set 1 lvm on

続いて物理ボリュームの作成。AFTなディスクでの実践を前提にして4KB境界で整列させる。タイプするのが面倒になってきたので手抜き。

# ls -1 /dev/sd[c-f]1 | xargs pvcreate --dataalignment 4k

さらにボリュームグループの作成。

# vgcreate vg_raid5test /dev/sd[c-f]1

と、ここまでは通常のLVMの使い方と同じなので特に考えなかったのだが、論理ボリュームの作成ではまる。

# lvcreate -n lv_raid5test --extents 100%FREE --stripes 2 --type raid5 vg_raid5test /dev/sd[c-f]1
  Using default stripesize 64.00KiB
  Rounding size (2044 extents) up to stripe boundary size
  Volume group "vg_raid5test" has insufficient free space (2044 extents): 2046 required.

何だこりゃ。えーと、--extentsで与えられたエクステント数をチャンクサイズの整数倍になるように切り上げたんだけど、VGにそんな空きは無い、ということだな。そりゃ切り上げりゃそうなるわな、と100%はやめて99%VGとかにしてもダメ。なんか要求されるエクステント数が2700いくつとか素敵な数になっている。ということはこれはアレか、コマンドラインで指定されたエクステント数にパリティ分を上乗せしてる要求してるんだな。

山勘でエクステント数を適当に指定してみた。VG全体でエクステントが2000ちょいあってHDDが4つでraid5ってこたぁ1500なら大丈夫か?というかVGの中の利用可能なエクステント数ってどこで見るんだ。vgdisplayでも見れないんじゃないか?

# lvcreate -n lv_raid5test --extents 1500 --stripes 3 --type raid5 vg_raid5test /dev/sd[c-f]1
  Using default stripesize 64.00KiB
  Logical volume "lv_raid5test" created

うまくいった。さすがワシ、偉いぞワシ!……ところでいきなりガリガリ同期が走り出したんだが、どこで進捗状況を見りゃいいんだ?/proc/mdstatには何も出ないぞ。

……と、頭を抱えているうちに同期が終わってしまったので(仮想環境の上とは言え、しょせんトータルで8GBしかない)、次はデバイスを穏便に取っ払ってみた。

まずはファイルシステムの縮小をしなきゃいけないが、ここではやらない。次は論理ボリュームサイズの変更かな?1台分減らすので-500エクステントってところか。

# lvreduce --extents -500 /dev/vg_raid5test/lv_raitd5test
  WARNING: Reducing active logical volume to 3.91GiB
  THIS MAY DESTROY YOPUR DATA (filesystem etc.)
Do you really want to reduce lv_raid5test? [y/n]: yes
  Reducing logical volume lv_raid5test to 3.91GiB
  Unable to reduce RAID LV - operation not implemented

ありゃ、未実装ッスか。じゃあストライプ数を変えるのは?

# lvconvert --stripes 2 /dev/vg_raid5test/lv_raid5test
  Using default stripesize 64.00KiB
  Conversion operation not yet supported.

ありゃ、未実装ッスか。

そういえばこれ、ディスクが飛んだ場合はどうするんだ?まるっと認識できなくなった場合は当然アレイじゃなかったLVがデグるが、ディスクを置き換えるにはどういうオペレーションが要るんだろう。

VirtualBoxの仮想ディスクは(SATA/SCSIなら)ホットリムーブできるので/dev/sdcを取り外してみた。

# echo "1" > /sys/block/sdc/device/delete

以後、LVやらVGやらの状態を見ようとすると「Couldn't find device with uuid 」とメッセージが出るのでデグッたことがわかるんだが……結構深刻な障害なのにログにメッセージ吐かんのか?

VirtualBoxの仮想HDDはホットリムーブはできるがホットスワップはできないので、残念ながらここで断念。エラーメッセージやmanを見た感じだと、まず新しいディスクにPVを作り、VGに追加してlvconvert --repair で同期してからvgreduce --removemissingで失せたPVをVGから削除してやればいいのかな???

なお、うっかりミスで引っこ抜いてしまった場合はvgextend --restoremissing で再追加できる模様。バスの再スキャンかけたらvgextendしなくてもあっさりVGに復帰しやがりましたけど、これって何もしてない再同期のいらないVGだからなのかな。

あと、認識自体はできるし読み書きもできるんだけど特定セクタでリードエラーが出る壊れかけのディスクを切り離すにはどうするんだ(mdだとmdadm --manage --fail だが)。→前もってVGに新しいディスクを追加してからlvconvert --replace でいけるのか???

結局のところ、ドキュメントが無いのでよくわからない。どこにドキュメントがあるんだろう。TLDPのLVM HOWTOは内容古いしなー。

結論:未実装な機能あり、ドキュメントなしで実用には程遠い。

この議論は、tuneo (2938)によって ログインユーザだけとして作成されたが、今となっては 新たにコメントを付けることはできません。
typodupeerror

開いた括弧は必ず閉じる -- あるプログラマー

読み込み中...