静岡のデータバックアップサーバ兼、DHCPサーバ(各vlan10個ぐらいに配っている)マシンのHDDが足りなくなり、しのぎしのぎ運用していたが、もう限界に来たのと、ストレージサーバを設置するということで、WDの1TB2本、Seagateの1TBを1本買ってきました。
メインマシンには、去年購入した750GBのSeagateのHDDがついており、これを新しいHDDに交換し、バックアップサーバに750GBのHDDを取り付けることにしました。
これで、バックアップ容量が750GBとなる予定です。
バックアップサーバにはFreeBSD7.1が入っており、zfsで運用しています。
zfsを使いたかったのは、スナップショットの作成ができるため、世代バックアップを行うことができるからです。
Solarisを使わなかったのは、私が単純に嫌いなのと、いろいろと作りこむとき面倒なので、FreeBSDにしました。
portsでいろいろといれれるし、configureオプションをかえれるので..
で、オンラインのまま、HDDを交換してみたので手順を書いてみます。
まず、新しいHDDを取り付けるのと、バスを変更したくなかったので、次のようにしました。
# zpool export bk1 # atacontrol list ATA channel 0: Master: no device present Slave: ad1 <ST3400832A/3.01> ATA/ATAPI revision 7 ATA channel 1: Master: no device present Slave: no device present ATA channel 2: Master: ad4 <Maxtor 6V300F0/VA111900> Serial ATA II Slave: no device present ATA channel 3: Master: no device present Slave: no device present ATA channel 4: Master: no device present Slave: no device present ATA channel 5: Master: no device present Slave: no device present # atacontrol detach ata2 # atacontrol list ATA channel 0: Master: no device present Slave: ad1 <ST3400832A/3.01> ATA/ATAPI revision 7 ATA channel 1: Master: no device present Slave: no device present ATA channel 2: Master: no device present Slave: no device present ATA channel 3: Master: no device present Slave: no device present ATA channel 4: Master: no device present Slave: no device present ATA channel 5: Master: no device present Slave: no device present
そして、ディスクの交換および取り付けをすると、自動的に認識してくれます。
dmesg をみれば、次のように検出しているので、atacontol list でも確認ができます。
ad4: 715404MB <Seagate ST3750330AS SD1A> at ata2-master SATA150 ad6: 286188MB <Maxtor 6V300F0 VA111900> at ata3-master SATA300
# atacontrol list ATA channel 0: Master: no device present Slave: ad1 <ST3400832A/3.01> ATA/ATAPI revision 7 ATA channel 1: Master: no device present Slave: no device present ATA channel 2: Master: ad4 <ST3750330AS/SD1A> Serial ATA v1.0 Slave: no device present ATA channel 3: Master: ad6 <Maxtor 6V300F0/VA111900> Serial ATA II Slave: no device present ATA channel 4: Master: no device present Slave: no device present ATA channel 5: Master: no device present Slave: no device present
ここまで正常に確認ができれば、あとは、zpoolのimportおよびattachをします。
今回、古いHDDは、ad6となっていますので、importした後に確認。
そして、新しく取り付けたHDDをattachします。
# zpool import -a # zpool status pool: bk1 state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM bk1 ONLINE 0 0 0 ad6s1 ONLINE 0 0 0 errors: No known data errors # zpool attach bk1 ad6s1 ad4
これで、ディスクを丸々使ってくれるようになります。
成功すると、次のような結果になります。
# zpool status pool: bk1 state: ONLINE status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scrub: resilver in progress, 0.00% done, 206h40m to go config: NAME STATE READ WRITE CKSUM bk1 ONLINE 0 0 0 mirror ONLINE 0 0 0 ad6s1 ONLINE 0 0 0 ad4 ONLINE 0 0 0
うーん。206時間もかかるよ。ママンorz
てことで、しばらく時間を置いて改めて試してみます。
# zpool status pool: bk1 state: ONLINE status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scrub: resilver in progress, 6.96% done, 3h39m to go config: NAME STATE READ WRITE CKSUM bk1 ONLINE 0 0 0 mirror ONLINE 0 0 0 ad6s1 ONLINE 0 0 0 ad4 ONLINE 0 0 0
では、どれぐらいの速度が出ているか、見てみましょう。
速度を調べるには、zfs iostat 1 および iostat 1を使ってみるとよいです。
zfs iostat は、ファイルシステム的に出ている速度、iostat は、デバイス的に出ている速度がわかります。
# zpool iostat 1 |grep -v s1 capacity operations bandwidth pool used avail read write read write bk1 274G 4.34G 803 65 18.5M 198K bk1 274G 4.34G 396 25 40.8M 37.4K bk1 274G 4.34G 379 21 39.3M 29.0K bk1 274G 4.34G 510 4 62.8M 25.5K bk1 274G 4.34G 437 3 53.9M 24.0K bk1 274G 4.34G 404 59 27.8M 62.4K bk1 274G 4.34G 354 16 35.5M 21.5K bk1 274G 4.34G 491 4 60.3M 29.5K bk1 274G 4.34G 506 3 62.2M 24.0K bk1 274G 4.34G 397 3 47.9M 19.0K
# iostat 1 tty ad1 ad6 ad4 cpu tin tout KB/t tps MB/s KB/t tps MB/s KB/t tps MB/s us ni sy in id 1 75 17.49 2 0.03 50.72 386 19.10 38.62 468 17.64 0 0 10 1 89 0 231 0.00 0 0.00 50.19 453 22.19 37.96 529 19.59 0 0 25 1 74 0 77 0.00 0 0.00 52.46 518 26.55 44.65 574 25.03 0 0 14 1 85 0 77 0.00 0 0.00 47.83 523 24.45 46.00 489 21.95 0 0 12 1 86 0 77 0.00 0 0.00 55.29 681 36.79 55.16 700 37.73 0 0 16 0 84 0 77 0.00 0 0.00 44.38 328 14.20 33.93 347 11.49 0 0 4 1 94 0 77 0.00 0 0.00 46.85 418 19.15 35.05 490 16.78 0 0 15 1 85 0 77 0.00 0 0.00 28.40 457 12.67 11.57 732 8.28 0 0 29 1 70 0 77 0.00 0 0.00 35.52 486 16.84 19.33 569 10.75 0 0 20 0 80
おおよそ、20-30MB/sぐらい出ていることがわかります。また、iostatは、物理デバイス単位でわかるため便利です。
ただ、Read/Writeが別々にわからないのですが、どうやれば取れるのかはちょっとわかりません。
manを見た限りでは見つけれなかった...
最後に、mirrorが終わった後に、古いHDDをdetachして、atacontrol で切り離しで切断すれば、再起動なしに作業が完了できるというわけです。
zfsでは、自動的にボリュームサイズが大きくなるため、交換作業が非常に楽になります。
mirrorしている場合、一番小さいディスクのサイズがボリュームサイズになりますが、小さいディスクが無くなれば、
そのセットの中で次に、一番小さいHDDのサイズにボリュームサイズが自動的に拡大されるはずなので、1本のディスクしかなければ、自動的にそのサイズになるという寸法です。てことで、zfsいいよ、zfs !
★ 2009.04.26 追記:
ということで、今朝の5時過ぎに終わったようです。
# zpool status pool: bk1 state: ONLINE scrub: resilver completed with 0 errors on Sun Apr 26 05:08:17 2009 config: NAME STATE READ WRITE CKSUM bk1 ONLINE 0 0 0 mirror ONLINE 0 0 0 ad6s1 ONLINE 0 0 0 ad4 ONLINE 0 0 0 errors: No known data errors
# zpool list NAME SIZE USED AVAIL CAP HEALTH ALTROOT bk1 278G 274G 4.34G 98% ONLINE -
現在、ad4が750GB、ad6が300GBの玉でミラーが完成した状態ですが、古い玉をdetachして見ましょう。
# zpool detach bk1 ad6s1 # zpool status pool: bk1 state: ONLINE scrub: resilver completed with 0 errors on Sun Apr 26 05:08:17 2009 config: NAME STATE READ WRITE CKSUM bk1 ONLINE 0 0 0 ad4 ONLINE 0 0 0 errors: No known data errors # zpool list NAME SIZE USED AVAIL CAP HEALTH ALTROOT bk1 698G 274G 424G 39% ONLINE -
こんな感じで大きくなりました。ボリュームが拡大されたので、次ミラーを作るときは、現在のより大きいディスクを取り付け、交換していくと、ボリュームを徐々に大きくしていくことができます。zfsの素敵なところです。
では、HDDを取り外してみたいと思います。
現在は次のように接続されているので、その一覧を取得します。
# atacontrol list ATA channel 0: Master: no device present Slave: ad1 <ST3400832A/3.01> ATA/ATAPI revision 7 ATA channel 1: Master: no device present Slave: no device present ATA channel 2: Master: ad4 <ST3750330AS/SD1A> Serial ATA v1.0 Slave: no device present ATA channel 3: Master: ad6 <Maxtor 6V300F0/VA111900> Serial ATA II Slave: no device present ATA channel 4: Master: no device present Slave: no device present ATA channel 5: Master: no device present Slave: no device present
では、detach して、また一覧を取得してみましょう。
# atacontrol detach ata3 subdisk6: detached ad6: detached # atacontrol list ATA channel 0: Master: no device present Slave: ad1 <ST3400832A/3.01> ATA/ATAPI revision 7 ATA channel 1: Master: no device present Slave: no device present ATA channel 2: Master: ad4 <ST3750330AS/SD1A> Serial ATA v1.0 Slave: no device present ATA channel 3: Master: no device present Slave: no device present ATA channel 4: Master: no device present Slave: no device present ATA channel 5: Master: no device present Slave: no device present
あとは、そのまま切断してもかまいません。
SATAはホットスワップに対応しているものを使用する必要がありますが、ほとんどの場合は何とかなってしまいます。
ただし、対応といっていないものもできてしまいますので、できたからといってご自身での責任をの上、作業を行ってください。
参考リンクとして、 atacontrolがあげられます。zfsについては、頭の中に資料があり、どっかで呼んだ記憶が無いので、有用な情報があればリンクをよろしくですw