前回のzfs環境構築に続いてzpoolへのディスクの追加について
いくつか注意点があったのでまとめてみた。
以下のコマンドで基本的な操作が行える。
- ディスク構成の確認
# zpool status
- プールの作成# zpool create [zpool name] [device name]
- ディスクの追加
# zpool add [zpool name] [device name]
- プールの削除
# zpool destroy [zpool name] [device name]
とてもシンプルで分かりやすい。
洗練されていますね。
ということで、自分のMicroServerにもディスクを追加してみた。
[email protected]:/# zpool create storage0 sda sdb
あっけなく終了。簡単過ぎる。
だが、ここに罠があった。
今回zpoolに追加したHDDはWesternDigital製のWD30EZRX(3TB)でした。
最近のHDDは大容量化のオフセットとして1ブロックあたりのサイズを大きくしているので、
それに合わせてフォーマットしてあげないと著しくパフォーマンスが落ちます。
※ AFT(Advanced Format Technology) ってやつですね。
なので、AFTなディスクをzpoolする際には以下のような引数を加えてあげるとフワフワっと
ブロックの開始位置とブロックサイズをしてくれます。
- プールの作成(AFTなディスクの時)
[email protected]:/# zpool create -o ashift=12 storage0 sda sdb
引数の有無でどれだけパフォーマンスの差が出るのか、試しに dd コマンドでベンチマークしてみました。
- 引数なし(ブロックサイズ512Byte)
[email protected]:~# zdb -C storage0 | grep ashift
ashift: 9
ashift: 9 ※ ashift: 9はブロックサイズ512Byte
[email protected]:~#[email protected]:~# dd if=/dev/zero of=hogehoge bs=1M count=10000
10000+0 records in
10000+0 records out
10485760000 bytes (10 GB) copied, 220.772 s, 47.5 MB/s
- 引数あり
[email protected]:~# dd if=/dev/zero of=hogehoge bs=1M count=10000
10000+0 records in
10000+0 records out
10485760000 bytes (10 GB) copied, 61.0622 s, 172 MB/s
開始位置とブロックサイズ適切にするだけで3倍速くなりました。
せっかく良いハードウェアを買ってもソフトウェア側の処理で最大限のパフォーマンスを
発揮できないと言う可哀想な自体は避けたいですね。