ということを実験してみた。
ZFSのストレージプールは、デバイスを適当にAddしていくだけで容量が増えていく。
ではミラーリングで作られたプールはどうなの?
ミラーリングのストレージプールを用意する
Solaris10で実験、ZFSのバージョンは 10 ね。
まずは "mkfile" コマンドで 512MB と、1024MB のファイルを それぞれ2つずつ作成。
$mkfile 512m /zdev/512M-1
・・・
・・・
ファイルがそろった。
$find /zdev -type f | xargs du -h
512M /zdev/512M-1
512M /zdev/512M-2
1.0G /zdev/1024M-1
1.0G /zdev/1024M-2
512M /zdev/512M-1
512M /zdev/512M-2
1.0G /zdev/1024M-1
1.0G /zdev/1024M-2
では 512MB のほうを使ってZFSストレージプールを作成しよう。もちろん "mirror" オプションを忘れずに。
$zpool create m512 mirror /zdev/512M-1 /zdev/512M-2
$zpool status m512
プール: m512
状態: ONLINE
スクラブ: 何も要求されませんでした
構成:
NAME STATE READ WRITE CKSUM
m512 ONLINE 0 0 0
mirror ONLINE 0 0 0
/zdev/512M-1 ONLINE 0 0 0
/zdev/512M-2 ONLINE 0 0 0
エラー: 既知のデータエラーはありません
$zfs list m512
NAME USED AVAIL REFER MOUNTPOINT
m512 89.5K 472M 1K /m512
プール: m512
状態: ONLINE
スクラブ: 何も要求されませんでした
構成:
NAME STATE READ WRITE CKSUM
m512 ONLINE 0 0 0
mirror ONLINE 0 0 0
/zdev/512M-1 ONLINE 0 0 0
/zdev/512M-2 ONLINE 0 0 0
エラー: 既知のデータエラーはありません
$zfs list m512
NAME USED AVAIL REFER MOUNTPOINT
m512 89.5K 472M 1K /m512
m512 という 472MBのプールができました、ちょっと減るのはメタ情報領域がいるから。
ちなみにZpool名の初めの文字には 0-9 が使えない、デバイスの最低サイズは64MBから。
ミラーリング拡張方法の説明
デバイスとして 512MBのファイルが2つ使われているストレージプールに対して、中身のデバイスを 1024MBのファイル2つに 置き換えてしまうという作戦。
ZFSストレージプールでは、既存ものと同一か、より容量が大きいものであればデバイスの置き換えが可能なのだ。そして置き換えで発生した余剰サイズは無駄にならない、再計算されちゃんと最大容量が使用される。
デバイスを順繰りに置き換えていく
では リプレースしてみよう。
まずは 512MB のうち1つを 1024MB に置き換え。
$zpool replace m512 /zdev/512M-1 /zdev/1024M-1
$zpool status m512
プール: m512
状態: ONLINE
スクラブ: Mon Apr ** **:**:** 2009
上で 0 エラーが発生した 0h0m のあとの resilver completed構成:
NAME STATE READ WRITE CKSUM
m512 ONLINE 0 0 0
mirror ONLINE 0 0 0
replacing ONLINE 0 0 0
/zdev/512M-1 ONLINE 0 0 0
/zdev/1024M-1 ONLINE 0 0 0
/zdev/512M-2 ONLINE 0 0 0
エラー: 既知のデータエラーはありません
$zpool status m512
プール: m512
状態: ONLINE
スクラブ: Mon Apr ** **:**:** 2009
上で 0 エラーが発生した 0h0m のあとの resilver completed構成:
NAME STATE READ WRITE CKSUM
m512 ONLINE 0 0 0
mirror ONLINE 0 0 0
replacing ONLINE 0 0 0
/zdev/512M-1 ONLINE 0 0 0
/zdev/1024M-1 ONLINE 0 0 0
/zdev/512M-2 ONLINE 0 0 0
エラー: 既知のデータエラーはありません
リプレースというステータスを経て、めでたく置き換わる。所要時間はZFS上のファイル容量に比例するかな。
$zpool status m512
プール: m512
状態: ONLINE
スクラブ: Mon Apr ** **:**:** 2009
上で 0 エラーが発生した 0h0m のあとの resilver completed構成:
NAME STATE READ WRITE CKSUM
m512 ONLINE 0 0 0
mirror ONLINE 0 0 0
/zdev/1024M-1 ONLINE 0 0 0
/zdev/512M-2 ONLINE 0 0 0
エラー: 既知のデータエラーはありません
$zfs list m512
NAME USED AVAIL REFER MOUNTPOINT
m512 106K 472M 18K /m512
プール: m512
状態: ONLINE
スクラブ: Mon Apr ** **:**:** 2009
上で 0 エラーが発生した 0h0m のあとの resilver completed構成:
NAME STATE READ WRITE CKSUM
m512 ONLINE 0 0 0
mirror ONLINE 0 0 0
/zdev/1024M-1 ONLINE 0 0 0
/zdev/512M-2 ONLINE 0 0 0
エラー: 既知のデータエラーはありません
$zfs list m512
NAME USED AVAIL REFER MOUNTPOINT
m512 106K 472M 18K /m512
OK、この状態でサイズが拡張しないのはミラーとして当然な。
ではもう一丁。
$zpool status m512
プール: m512
状態: ONLINE
スクラブ: Mon Apr ** **:**:** 2009
上で 0 エラーが発生した 0h0m のあとの resilver completed構成:
NAME STATE READ WRITE CKSUM
m512 ONLINE 0 0 0
mirror ONLINE 0 0 0
/zdev/1024M-1 ONLINE 0 0 0
/zdev/1024M-2 ONLINE 0 0 0
エラー: 既知のデータエラーはありません
プール: m512
状態: ONLINE
スクラブ: Mon Apr ** **:**:** 2009
上で 0 エラーが発生した 0h0m のあとの resilver completed構成:
NAME STATE READ WRITE CKSUM
m512 ONLINE 0 0 0
mirror ONLINE 0 0 0
/zdev/1024M-1 ONLINE 0 0 0
/zdev/1024M-2 ONLINE 0 0 0
エラー: 既知のデータエラーはありません
と、完全にミラーリングのデバイスを置き換えることに成功。ここまで完全Online、ファイルアクセスの停止は無し。
サイズを確認しよう 1
512MB 2つで組んだミラーは、生まれ変わるまでもなく今や1024MB 2つとなった。もちろん間にデグレード状態も挟まないぞ。
さあZFSのサイズを確認しよう
$zfs list m512
NAME USED AVAIL REFER MOUNTPOINT
m512 106K 472M 18K /m512
NAME USED AVAIL REFER MOUNTPOINT
m512 106K 472M 18K /m512
あれー? 変わってないや。
ミラーは拡張できないの?いやそうでもない、次でやりかたを。
サイズを確認しよう 2
この状態からサイズ拡張をさせるには、確認できた手順で2通りある。※サーバの再起動はしてないので未確認
■エクスポート&インポート
$zpool export m512
$zpool import -d /zdev/ m512
$zpool import -d /zdev/ m512
これはまあ確実だ、もともとZFSではサイズなんて後から付いてくるものだから。
■もう一度デバイス操作
$zpool replace m512 /zdev/1024M-1 /zdev/1024M-3
この例では1024MBファイルの3つ目をつくってデバイスの置き換えをもう一度やっている、これでサイズの再計算がおこなわれるのか、使用可能サイズが拡張される。
ミラー中の片割れをデタッチ&アタッチでもいいかもしれない。
どちらかをやったあとにサイズを確認しよう。
$zfs list m512
NAME USED AVAIL REFER MOUNTPOINT
m512 112K 984M 18K /m512
NAME USED AVAIL REFER MOUNTPOINT
m512 112K 984M 18K /m512
ほら拡張している。
おわりに
なんでこの実験をしたかということを少し。
社内向けファイルサーバとしてZFSが使える環境を考えたのがきっかけ。容量の追加によるストレージ拡張は社内共用サーバとしてよく課題に上げられるので、それをZFSが楽にしてくれないかと考えた。
Solaris+ZFS は CIFS をサポートしているので、ADサーバがある環境には容易に突っ込むことができるだろう。ミラーであれば構築時にいろいろ融通がきくうえ、拡張が自由となればさぞ柔軟性も高かろう。
(※ZFSのiSCSIも面白いんだが、拡張に不向き)
弾さえ用意すれば幾らでも容量を拡張してくれるファイルサーバって素敵やん?
ただ、Solarisを運用する気になるか、という点では敷居がちょっと高いのかな。マニュアル充実なので、まとまった時間さえとれればと思いますが。