彷徨えるフジワラ

年がら年中さまよってます

実環境向けに ZFS 構成を試行錯誤

今回組み上げた Solaris マシンでは、1TB HDD x 4 で RAID-Z な感じで行こう、と思っているのだけれど、「ZFS root はミラーリング限定」という縛りがある(OpenSolaris 200906 段階でも制限解除されてないよね?)。

流石に1TB HDD x 4 なミラーリングなどという豪快な冗長化をする気はさらさら無いので、インストールの段階=HDD 一本での稼動では、Solaris fdisk パーティションにはとりあえず 250GB 程度だけを割り当てた。

で、4本の HDD をそれぞれ 250GB + 750GB に分割し:

といった運用で行こう、という目論み。利用可能容量は 250GB + 750GB x 3 = 2.5TB となって、総容量 4TB に対して利用率 62.5 % な感じ。
20 世紀だと、24 時間稼動マシンの SCSI HDD は、ちょっとでも温度管理が甘いと途端にお亡くなりになったものだけれど、最近の個人的な経験では、HDD よりもメモリモジュールやマザーボードが飛ぶトラブルの方が多い(それはそれで問題なのかも?)ので、正直 HDD の冗長化にはそれ程真剣味が無い。

そんなわけで、利用率 62.5% な冗長化というのはちょっとアレな気がしないでもないが、1TB x 4 の RAID-Z でも 75% なわけなので、まぁ、良しとするか。自宅サーバとは言え、サーバのストレージを今時 RAID-0 で組むのは流石に気が引けるしね。

さて、2 本目の HDD を設定+rpool に追加する段階になって:

  1. HDD ごとに Solaris fdisk パーティションを 2 つ切るのは面倒臭くね?
  2. ⇒ 1 つの fdisk パーティションでスライス分割すれば十分じゃね?
  3. ⇒ 1 本目の HDD だけ fdisk パーティションが 2 つって格好悪くね?
  4. ⇒ 同じパーティション構成なら、fmthard での書き込み設定も共有できるから楽じゃね?
  5. ⇒ 2 〜 4 本目のミラーリング後に detach して、fdisk で単一パーティション化すれば良くね? > 1 本目

などという余計なこだわり閃きが。ZFS 以前だったら、面倒臭くて、とてもじゃないが実行する気にもならない話だけど、仮想マシン上で散々予行演習したことの応用でしかないので、ZFS 的には何の事は無い話。

但し、2 〜 4 本目の HDD からスライスを rpool に attach =ミラーリング開始する前に、ちょいと一手間を。

OpenSolaris のデフォルト設定だと、rpool 上から割り当てた ZFS Volume が dump/swap デバイスに設定されているけれど、仕事でカーネルモジュールの開発をやっている身としては、カーネルが PANIC するような状況で ZFS が正常動作することを期待する程には楽観的にはなれないので:

  • swap デバイスには独立したスライスを割り当て
  • dump デバイスには swap を指定
  • 再起動時には savecore を実施

という方向で。

dumpadm のマニュアル(英語)には「savecore 実施が推奨」と書かれているのに、OpenSolaris のデフォルト設定では「savecore 実施無し」な件に関しては、OpenSolaris ユーザグループ ML にも投稿したけれど:

いつのまにか savecore した crash dump で /var = rpool の使用量が増えるのはライトユースのエンドユーザにとっては嬉しくない

という判断だと思うので、PANIC したなら寧ろ carsh dump を見たい身としては、ここはあえて 20 世紀的な運用を。

swap/dump スライス分の容量が勿体無い、という話もあるけれど、搭載メモリが 16GB だから、HDD あたり 16GB も確保すれば良い(HDD 数で x4 になる)ので、ま、消費税とでも思えば。

まずは 2 本目の HDD に対して:

  1. prtvtoc で VTOC 情報収集
  2. 採取した VTOC 情報を元に、スライス分割設定を記述
  3. fmthard でスライス分割設定を HDD に書き込み
  4. swap 用スライスを "swap -a" で有効化
  5. /etc/vfstab に swap 用スライスの設定を追加
  6. swap 用 ZFS volume を "swap -d" で無効化
  7. dumpadm で crash dump の保存先を swap に変更(= dump 用 ZFS volume の無効化)
  8. "zfs destroy" で swap/dump 用 ZFS volume を破棄
  9. rpool 用スライスを "zpool attach" してミラーリング開始

という手順を実施。3 本目以降の HDD に関しては、(6) 〜 (8) は不要。

スライス分割設定の記述の際には、タグ値(表 10-6) および標準用途(表 10-2)を参考に。

ちなみに、最初の設定ではシリンダあたりの容量を勘違いして、swap スライスに 32MB を割り当ててしまったのは内緒。"swap -l -h" で見てれば気が付いたんだろうなぁ。でも、そんな時でも:

  1. "swap -d" でスワップ利用停止
  2. "zpool detach" でミラーリング解消
  3. "fmthard" でスライス切り直し
  4. "swap -a" でスワップ利用開始
  5. "zpool attach" でミラーリング開始(+ "installgrub")

上記手順を各 HDD ごとに繰り返せば再構成可能、というのは ZFS 万歳な感じ。ミラーリング運用していれば、後からどうとでも構成変更できる、ってのは楽チンだねぇ。

位置/サイズ変更の影響を受けないスライスの運用は停止しなくて良いのかもしれないけれど、そこはそれ、念には念を入れるのが 20 世紀流。もっとも、そういったものが積み上がって「良くわからないオマジナイ」化してしまうのがコンピュータ業界の怖いところ。

なお、上記手順実施の際に swap 使用設定のエントリが /etc/vfstab に残っていると "swap -a" 実行が中断されるので、当該スライス群は一旦 /etc/vfstab から抜いておく必要がある点には注意。