2010年05月25日(Tue)

ZFSでミラーのプールをRAID-Zに変更する

驚異的な柔軟性を誇るZFSと言えど、さすがにプールの構成の変更には制約があります。

  • 既存のプールにディスクを追加して容量を増やす
  • 単一ディスクで構成されたプールにディスクを追加してミラーにする
  • ミラープールからディスクを取り除いて非冗長プールにする
  • ミラープールにディスクを追加して3方向ミラーにする

ということはできますが

  • ミラープールをRAID-Zに変更する
  • RAID-ZをRAID-Z2に変更する
  • 3本組のRAID-Zを4本組のRAID-Zに変更する
  • これらの逆

はできません。つまり、既存のプールの容量を増やしかつ冗長性を持たせておくには、最低でもディスク2本をミラーにしてプールに追加する必要があります。

そうはいってもパーソナルユースではできるだけ出費は抑えたい。ミラー構成にディスクを1本だけ追加してRAID-Zに移行できれば容量が1.5倍にできるのでこれを何とか実現したいと考えました。

最初考えたのは、ディスク2本だけで最初からデグレード状態のRAID-Zが作れないか、ということですがこれはどうも無理っぽい。しかし、公式のMLで同じ質問をした人がいて、回答がついていました。 曰く、sparse file作ってそれ使ってRAID-Z作ってオフラインにすりゃいいんじゃね?。なるほど。

というわけで以下の手順でやってみたら出来ました。実際のログは後日別エントリで。

  1. ミラーになってるプール(以後tank)の片っぽのディスクをdetachする
  2. mkfile -nでファイルを適当な場所に作る。サイズはディスクより大きくなければならない
  3. detachしたディスク、新しいディスク、2.で作ったファイルでraid-zのプール(以後newtank)を作る。
  4. newtankに組み込んだファイルをすぐにオフラインにする。これを忘れるとファイルサイズがふくれてディスクがあふれる
  5. tankからnewtankにzfs send/zfs receiveを使ってデータを移す。コピーでもいいけど。
  6. tankをdestroyする。zfs destroy tank
  7. newtankを作るのに使ったファイルをディスクに置き換える。
  8. newtankをtankにrenameする。zpool export newtank; zpool import newtank tank

見ての通りいきなりミラーの片っぽを外すという手順から始まってますのでデータを移行する前に残ったディスクが飛んだら一巻の終わりです。そもそもかなり無理矢理なので全くおすすめできませんが、どうしてもというならこういう方法もある、ということで。


タグ

www.flickr.com
This is a Flickr badge showing public items from suzukis tagged with japan. Make your own badge here.

最近の話題 RSS feed

最近のコメント

メール("no-spam."を削除してください)