我が家のストレージサーバーをリプレイスしたら結構ハマった話
新しいサーバーを買った
我が家のストレージサーバーは、こちらとかこちらでも書いている、HP の MicroServer N36L です。
いただきもので構築してから 2 年半くらい動いていましたが、いよいよ天に召されてしまったようで、起動できなくなってしまいました。
しかし、このサーバーは我が家のメインサーバーでもあり、たくさんのデータが詰まっていて復活させなければなりません。
そこで、ヤフオクで壊れてしまったサーバーよりも世代が新しく、かつ中古価格がこなれてきた HP MicroServer Gen 8 をゲットしたのでした。今度は標準で iLO もついててよりサーバーっぽくなってます。
起動ができない
購入した MicroServer Gen 8 には、壊れてしまった N36L と同様 4 本の 3.5 インチベイ (SATA) がついており、それとは独立した SATA ポートが 1 基あり、それは DVD-ROM ドライブに繋がっています。
光学ドライブは不要なので、この DVD-ROM ドライブの代わりに起動用 SSD を接続することにしました。ついでに SSD も新しい SSD に交換します (現行 Intel 80GB から Crucial 120GB へ)。
というわけで、適当な Linux マシンを立ち上げ、ddrescue コマンドでディスクをコピーしました。
# ddrescue -v -f /dev/sdb /dev/sdcコピーしたディスクを MicroServer の DVD-ROM ドライブの代わりにつけようとしたら…あれ、電源コネクタが FDD 用で小さい…仕方ないので秋葉原で買った変換コネクタを挟んで、さらに SATA 用電源に変換して SSD に繋ぎました。
売り上げランキング: 25,946
ではいよいよ起動!と思ったら、起動できません。画面ではどうも OS が見つからないとか言っています。なんでだ?
こういうときは切り分け作業です。この切り分け方法がよくなく、よりハマってしまったのですが…。
まず、電源を切ってサーバーに装着されているすべてのディスクを外します。
3.5 インチの 4 ベイには、購入時に元々ついていた 2 本の HDD が装着されており、これもついでに外しました (これが事態を複雑にしました…)。
次に、ddrescue でコピーした「元の」SSD を装着して起動します。あっさり起動できた…ということは、コピー失敗?
ということで試しに、USB で新ディスクをつけて、zpool attach で mirror 化してみることに。
ディスクはちゃんと認識しましたが、attach ができない…。
$ iostat -En c4t4d0 Soft Errors: 0 Hard Errors: 0 Transport Errors: 0 Vendor: ATA Product: INTEL SSDSA2CW08 Revision: 0362 Serial No: Size: 80.03GB <80026361856 bytes> Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0 Illegal Request: 5 Predictive Failure Analysis: 0 Non-Aligned Writes: 0 c5t0d0 Soft Errors: 0 Hard Errors: 0 Transport Errors: 0 Vendor: CT120BX5 Product: 00SSD1 Revision: 8101 Serial No: *** Size: 120.03GB <120034123776 bytes> Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0 Illegal Request: 18 Predictive Failure Analysis: 0 Non-Aligned Writes: 0 $ sudo zpool attach rpool c4t4d0 c5t0d0 vdev verification failed: use -f to override the following errors: /dev/dsk/c5t0d0s1 is part of active ZFS pool rpool. Please see zpool(1M). Unable to build pool from specified devices: device already in use-f をつけても同じでした。
そこで、色々調べつつ fdisk やら何やらやってみましたが、どうにも上手く行かず (僕の知識が足りないだけな気もしますが)。USB との mirror はできないのかなぁ?でも SATA の 3.5 インチベイに SSD つけるマウンタは持っていないし…。
ここまで半日… zpool attach は諦めることにしました。
そんなわけで、もう一度 ddrescue でコピーし、今度はコピー先の新 SSD を装着して起動してみることに。
問題なく起動しました。やっぱりコピー失敗しただけなのか…?
問題なさそうなので、zpool autoexpand で使える領域を広げます。ZFS って便利だなぁ。
$ zpool get autoexpand rpool NAME PROPERTY VALUE SOURCE rpool autoexpand off default $ sudo zpool set autoexpand=on rpool $ zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT dpool - - - - - FAULTED - rpool 112G 15.0G 96.5G 13% 1.00x ONLINE -あっさり広がりました。念のため zpool scrub もかけて問題ないことを確認。
やっぱり起動できない
これでだいたい準備は整ったので、データ用の HDD を N36L から移して装着します。Gen 8 の電源を落として、3.5 インチベイに装着しました。
さあ起動!…またできない。また OS が見つからないとか言い出しています。どういうこと?
仕様だった
頑張って検索したところ、こんな記事ややこんな記事が…。
なんですと!どうも SATA コントローラーを AHCI にしていると 5 番目の SATA ポートである DVD-ROM ドライブからは起動できないとのこと。なんと…。
回避方法としては、Dynamic Smart Array B120i RAID にすることらしいのですが、元々 RAID-Z で組まれている HDD なので、それは不可。
もう少し調べると、SATA コントローラーを Legacy Mode にすることで Boot Priority を変更できるようになることがわかりました (参考)。
そこで、BIOS で Legacy Mode に変更して再起動したところ、SATA コントローラーが 2 つに増え、2 番目を優先することで 5 番目の SATA ポートから起動できるようになりました。
が、起動しない…正確に言うと、OS 起動開始直後に再起動が入ります。これもうわかんねーなー。
Solaris って素敵
結局、AHCI のホットスワップを使って起動することにしました。手順としては以下です。
- 3.5 インチベイから HDD を外して起動
- Solaris 11 が起動したら HDD を装着
- (たぶん cfgadm コマンドで認識させればよいけど面倒なので) init 6 で再起動
- iostat -En でデバイスが見えていることを確認
- zpool import
さて、次にこの zpool に入っていた zone の復活ですが、これも zoneadm -z ZONE_NAME attach であっさり復活。起動ももちろん問題なし。
起動して認識さえすれば、Solaris って便利で楽だなぁと思いました。
でも面倒なので、あまり電源切れて欲しくないサーバーになりました (サーバーなので当たり前ですが…)。