驚異的な柔軟性を誇る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作ってオフラインにすりゃいいんじゃね?。なるほど。
というわけで以下の手順でやってみたら出来ました。実際のログは後日別エントリで。
- ミラーになってるプール(以後tank)の片っぽのディスクをdetachする
- mkfile -nでファイルを適当な場所に作る。サイズはディスクより大きくなければならない
- detachしたディスク、新しいディスク、2.で作ったファイルでraid-zのプール(以後newtank)を作る。
- newtankに組み込んだファイルをすぐにオフラインにする。これを忘れるとファイルサイズがふくれてディスクがあふれる
- tankからnewtankにzfs send/zfs receiveを使ってデータを移す。コピーでもいいけど。
- tankをdestroyする。zfs destroy tank
- newtankを作るのに使ったファイルをディスクに置き換える。
- newtankをtankにrenameする。zpool export newtank; zpool import newtank tank
見ての通りいきなりミラーの片っぽを外すという手順から始まってますのでデータを移行する前に残ったディスクが飛んだら一巻の終わりです。そもそもかなり無理矢理なので全くおすすめできませんが、どうしてもというならこういう方法もある、ということで。
最近のコメント