2009年11月7日土曜日

続・ZFS上のiSCSIターゲットをサイズ変更、今度はLVM

前回ext3前々回NTFSとZFS+iSCSIで色々やり、結果がなんだか中途半端だった上『LVMならきっと大丈夫さ!』なんて締めではイカンと思ったのでLVMではどうなったか簡単に書いておく。
 
終始オンラインとはいかなさそうだが、多少はスマートに出来たと思う。
 
 


LVMでもパーティションはさすがに壁


まずちょっと勘違いがあった、LVMのボリューム操作について。
 

物理ボリューム(PV)
ボリュームグループ(VG) にまとめてそこから
論理ボリューム(LV) を切りだしたらその上にファイルシステムを作れる。
 

という所のPVが結構簡単にでかくできると思っていたんだよね、pvresize っていうコマンドあるし。
 

しかし実際は、
こんなパーティション構成でOSをインストールして、
 



















sda1 sda4(ex)sd5 sda3 sda2
ext3 SWAP ext3 LVM(LV00)
/boot SWAP / /data (ext3)

 



ZFS側でケツを拡張してみたら、、、
 






















sda1 sda4(ex)sd5 sda3 sda2 空き
ext3 SWAP ext3 LVM(LV00) ←パーティションの壁
/boot SWAP / /data ←パーティションの壁

 

となり、これでpvresizeを実行してもダメ。
なぜならパーティションに縛られているから、ってことは。
 
 




じゃあパーティションデーブルなんかイラネェや


とある考えのもと、もう一個環境を作った。
 



























sda1 sda4(ex)sd5 sda3
ext3 SWAP ext3
/boot SWAP /
sdb
LVM(LV00)
/data (ext3)

 

HDDは2つ、両方でもいいがiSCSIはsdbだ。
 

で、見たらわかるようにsdbを丸ごとPVにした。
通常見られる createpv では "/dev/sdb1" などパーティション上に作るが、fdiskもしてない状態で"/dev/sdb" にcreatepvしたらこうなる。
これならパーティションの壁を気にしなくていい、だってそんな物(=パーティションテーブル)無いんだから
 
 

この状態でZFSからiSCSIボリュームを拡張する、さすがにLinux側は再起動しないといけなかったが・・・
 












sdb
LVM(LV00) 空き(FreePV)
/data (ext3) -

 

上がってきたLinux上では、きっちりとPVが未使用領域を確認していた、これでpvresize出来る。
 
なぜか自動で一発MAXまで割り当ててくれなかったので一度手動でちょっと大きく(※)したあともう一回pvresizeしたら自動でPVのサイズが最大まで拡張した。
※ここらへんちょっとアヤシイ動きといえるのではあるが。。。
 
 

VG内のPVがでっかくなったので、あとはLVを大きくして、中のファイルシステムを拡張すればOKと。
 
 
追記:某所でつっこまれたので……
もちろん単純にPVを追加してLVを拡張するのみでもOK、というかそれが普通。
iSCSIディスクも拡張するより、もう一個作って接続するほうが真っ当なやり方でしょう。

 
 

ちょっと感想


安易な思い付きってのはなかなか上手くいかないもんです・・・
もっと安全にしたいのであれば、ディスクを追加しPVをVGに入れたあとでリプレースするような感じ、LVMならリデュースかな?をするのがいいかと思います。すっごく普通ですが安全確実でしょう。
 

まあiSCSIディスクはZFS上だったおかげでスナップショットから生み出された幾重ものクローンと、send&recvにより量産されたボリュームを潰し放題と、こういう実験しやすいですね。
 
ついでにVirtualBoxならiSCSIを直接管理できるし、ってこれもSunだなぁ。
 
 

もう本家にならってすっかりSunがスキ!(/sukkri/)」とでも改名したらどうかと思ったりもするが、Windowsだって大好きなので変えない。