2008-03-20 raidframeチューニング
1T×5を買ってきてNetBSDのraidframeでRAID5を組んだはいいが、いろいろハマってしまった。
列挙すると、
といったところ。順に解決していこう。
2T overのdiskはそもそもdisklabelでは管理できないので、別の仕組みが必要。
diskまるごと使うので newfs /dev/rraid0d (whole disk) とすればいい気もするが、そもそも disk type 等の情報が保存できないので、これもできない。
こういう時NetBSDでは gpt と wedge を使う。
gpt で disklabel 以外の方法でパーティション情報を定義してやる。gpt(GUID)についてはこのへん参照 。
NetBSD では、
とすれば確保できる。gpt add で全領域をデフォルトでfilesystemとして確保される。
gpt show の結果は、34セクタ目から7814100093セクタ分がNetBSD用に確保されていることを示している。
(最初と最後にGPT headerがあるのはバックアップらしい)
gpt add しただけだと「GUIDパーティション情報をディスクに書いただけ」なのでまだ使えない。
このパーティション情報とブロックデバイスを紐付けるのが、dk (wedge) である。
とすることで、「rraid0d の 34 セクタから 7814100093 セクタ分を、dk0 (/dev/dk0) に割当てる」ことができる。
ちゃんと disk type 情報等も保持してくれるので、newfs もできるようになる。あとは
で、2T overなディスクでも問題なく使用可能となる。
gptパーティション情報は、disk を attach する時に自動的に見てくれて、一度でも addwedge されていれば disk attach 時に自動的に addwedge してくれる。
ので、一度 gpt を作って addwedge しておけば、次回起動時は手動で dkctl する必要な無い。
逆に、自動的に addwedge されるので、gpt を作りなおしたりする場合は delwedge 忘れ (dkctl /dev/rraid0d delwedge dk0) に注意。
次こそチューニング…
列挙すると、
- 1T*5で4Tのraid5にしたが、そもそも 2T overの時点でdisklabelが書けない。disklabelの総セクタ数は32bitなのです。(512byte/sectorだと、2T=0xFFFFFFFFセクタ)
- NetBSD-current で MULTIPROCESSOR で raid5 を使うと panic (たぶんcurrentのバグ)
- 異様に遅い
といったところ。順に解決していこう。
2T overのdiskはそもそもdisklabelでは管理できないので、別の仕組みが必要。
diskまるごと使うので newfs /dev/rraid0d (whole disk) とすればいい気もするが、そもそも disk type 等の情報が保存できないので、これもできない。
こういう時NetBSDでは gpt と wedge を使う。
gpt で disklabel 以外の方法でパーティション情報を定義してやる。gpt(GUID)についてはこのへん参照 。
NetBSD では、
# gpt create raid0 # gpt add raid0 # gpt show raid0 start size index contents 0 1 PMBR 1 1 Pri GPT header 2 32 Pri GPT table 34 7814100093 1 GPT part - NetBSD UFS/UFS2 7814100127 32 Sec GPT table 7814100159 1 Sec GPT header
とすれば確保できる。gpt add で全領域をデフォルトでfilesystemとして確保される。
gpt show の結果は、34セクタ目から7814100093セクタ分がNetBSD用に確保されていることを示している。
(最初と最後にGPT headerがあるのはバックアップらしい)
gpt add しただけだと「GUIDパーティション情報をディスクに書いただけ」なのでまだ使えない。
このパーティション情報とブロックデバイスを紐付けるのが、dk (wedge) である。
# dkctl /dev/rraid0d addwedge dk0 34 7814100093 ffs
とすることで、「rraid0d の 34 セクタから 7814100093 セクタ分を、dk0 (/dev/dk0) に割当てる」ことができる。
ちゃんと disk type 情報等も保持してくれるので、newfs もできるようになる。あとは
# newfs /dev/rdk0 # mount /dev/dk0 /mnt
で、2T overなディスクでも問題なく使用可能となる。
gptパーティション情報は、disk を attach する時に自動的に見てくれて、一度でも addwedge されていれば disk attach 時に自動的に addwedge してくれる。
ので、一度 gpt を作って addwedge しておけば、次回起動時は手動で dkctl する必要な無い。
逆に、自動的に addwedge されるので、gpt を作りなおしたりする場合は delwedge 忘れ (dkctl /dev/rraid0d delwedge dk0) に注意。
次こそチューニング…
EOF