終始オンラインとはいかなさそうだが、多少はスマートに出来たと思う。
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を追加してLVを拡張するのみでもOK、というかそれが普通。
iSCSIディスクも拡張するより、もう一個作って接続するほうが真っ当なやり方でしょう。
ちょっと感想
安易な思い付きってのはなかなか上手くいかないもんです・・・
もっと安全にしたいのであれば、ディスクを追加しPVをVGに入れたあとでリプレースするような感じ、LVMならリデュースかな?をするのがいいかと思います。すっごく普通ですが安全確実でしょう。
まあiSCSIディスクはZFS上だったおかげでスナップショットから生み出された幾重ものクローンと、send&recvにより量産されたボリュームを潰し放題と、こういう実験しやすいですね。
ついでにVirtualBoxならiSCSIを直接管理できるし、ってこれもSunだなぁ。
もう本家にならって「すっかりSunがスキ!(/sukkri/)」とでも改名したらどうかと思ったりもするが、Windowsだって大好きなので変えない。