タグ: はてなダイアリーからの移行記事 (17ページ目 (18ページ中))
最近、CrystalMark DiskInfoでHDDの温度を見たときに、結構高めになっているマシン(ケースはATXで、CPUは古めのAthron XP)があった。搭載しているHDDは2台で、いずれも古めのIDEドライブ(MaxtorのDiamondMax16と、HGSTのDeskstar 7K250)ということもあったが、それぞれ43度と44度になっており、多少暖房が効いている部屋といえども、ほとんどアイドルしているだけなので、これは温度高めかなと思っていた。
で、筐体を調べてみたら…安いBTOなPCだったせいか、ケースファンが付いてなくて、結局、ファンといえば、CPUファンと電源のファンだけが回っている状態で、CPUやチップセットの熱が筐体に溜まっているんだろうなぁと想像して、余ってたケースファン(2000rpm/9cm)を装着してみた。
取り付け作業を終えて、しばらくして測ってみたところ、それぞれ31度、37度まで温度が下がっていることが確認できた。
HDDの温度とMTBFの関係については、HDDベンダーは相関関係があると言っていたような気がするが、大規模にHDDを使っているGoogleは相関関係が見られなかったと言っていたような気がする。そんな対立はあるが、とりあえず、温度を下げておいて悪いことはなさそうだと思っている。
HDD自体にファンを付けるパーツも売っているが、ケースファンでがんばるのも手だなと思った。
SeagateのBarracuda 7200.11シリーズのファームウェアバグが報じられてはいるが、Seagate本社でのfirmwareのリリースはうまくいっていないようだ。Barracudaシリーズとか、DiamondMaxシリーズとか、シリーズ毎にファームウェアをリリースするつもりのようだが、最初にリリースされたファームウェアがvalidationのためってことでダウンロードできなくなっていた。
Firmware Update for ST3500320AS, ST3640330AS, ST3750330AS, ST31000340AS:
http://seagate.custkb.com/seagate/crm/selfservice/search.jsp?DocId=207951
Note: This file has been temporarily taken offline as of Jan 19, 2008 8PM CST for validation.
きっと、早々にダウンロードしたユーザで何かが起こったから、再度のvalidationをやっているんだろうなぁ(遠い目)
なんとなく、validation後に新ファームウェアがリリースされそうな予感がするし、ファームウェアがダウンロードできなくなっているのもあるし、とりあえずは、突然死するリスクを抱えながら、様子を見るしかなさそうだ。
しかし、サービスプロバイダとかレンタルサーバ屋さんで膨大な数のSeagate製HDDを使っていたりすると…ファームウェアアップデートの手間だけでも気が遠くなるなぁ。RAIDカード越しにファームウェアを適用するのはできなさそう(Barracuda ES.2のファームウェアアップデートツールは無理っぽかった)だから、きっと、アップデート専用PCでも用意して、それにつないでアップデートすることになるんじゃないかと。そしたら、ホットスワップなケースに入っていたら多少は楽だろうけど、サーバ止めて、HDDを引っこ抜いて…ってやってるとすごい手間じゃなかろうか。
久しぶりに3wareのナレッジベースを見てみたら、ちょっと困ったことが書いてあった。
The Seagate SATA-2 Seagate Barracuda ES.2 family drives (NS) must have firmware AN05 or newer in order to be compatible with the 9690SA controller. Seagate firmware AN05 is newer than firmware SN05.
こりゃ、Seagate Barracuda ES.2で使われているファームウェアにバグがあった感じだなぁ(遠い目)。確か、Barracuda ES.2って、社内のどこかで見た記憶が…(涙)とりあえず、ファームウェアが入ったISOファイルの名前でググってみたら、Adaptecのサイトにも似たようなことが書いてあった。
Known Issues with Seagate Barracuda ES.2 SATA II Disk Drives
The array keeps failing drives. The controller error log shows continuous “aborted command” messages when using Seagate Barracuda ES.2 SATA II drives (models: ST31000340NS, ST3750330NS, or ST3500320NS). Is this a known issue with those drives?
症状としては、断続的にHDD側で受け取ったコマンドの処理をを中断してしまい、RAIDカードがHDD側の対応をドライブが逝ったと判断してしまうって感じだろうか。
渦中のSeagateのサポートコミュニティを見てみると、アナウンスが出てた。
アナウンスのスレッドの書き込みから張られてたリンクを辿ると、こんなことも書いてあった。
Welcome, Seagate hard drive owners. A number of Seagate hard drives from the following families may fail when the host system is powered on:
Barracuda 7200.11
DiamondMax 22
Barracuda ES.2 SATA
SV35
Once a drive has failed, the data is inaccessible to users. Seagate has isolated this issue to a firmware bug affecting drives from these families manufactured through December 2008. Please use the following tools and instructions to determine if you have one of the affected products. If you do, we recommend that you update the firmware on the disk drive.
個人的には、Barracuda ES.2 SATAのファームウェアがバグってるのは痛い(…痛すぎる…)ことではあるけれど、Seagate的には、ファームウェアバグを抱えてるラインナップに「DiamondMax 22」とか「Barracuda 7200.11」が含まれているってのが、強烈に痛いんじゃないだろうか。「Barracuda 7200.11」って、アキバでもよく見かけたドライブだし、いろんなメーカーのPCに密かに入ってるような気がするし。しかも、一回、ダメになると、そのHDDのデータにアクセスできなくなるってのも深刻かも。
とりあえず、Firmware Recommendations for Seagate Drivesに載っていた対象製品リストを貼ってみたりして。
- Barracuda 7200.11
ST31000340AS
ST31000640AS
ST3750330AS
ST3750630AS
ST3640330AS
ST3640630AS
ST3500320AS
ST3500620AS
ST3500820AS
ST31500341AS
ST31000333AS
ST3640323AS
ST3640623AS
ST3320613AS
ST3320813AS
ST3160813AS
- Barracuda ES.2 SATA
ST31000340NS
ST3750330NS
ST3500320NS
ST3250310NS
- DiamondMax 22
STM31000340AS
STM31000640AS
STM3750330AS
STM3750630AS
STM3500320AS
STM3500620AS
STM3500820AS
STM31000334AS
STM3320614AS
STM3160813AS
しかし、MaxtorのDiamondMaxってBarracudaとファームウェアを共通化してあったんだなぁ。まぁ、当然だといえば当然か(汗)
3wareのRAIDカード「9650SE」に刺さっているSATAドライブのSMART情報が見られることがわかった。使ったOSはCentOS 5.2(x86_64)。なんとなく、RAIDカードの向こうにあるドライブのSMART情報って見えないような気がしていたんだけども。
で、SMART情報をチラ見するのに使うのはsmartctl。
普通のIDEドライブ(PATA)が刺さってるLinuxマシンだと、こんな感じでSMART情報が見られる(ま、ドライブがSMARTに対応していることが前提だけど)
smartctl -a /dev/sda
コマンドを実行すると情報がずらずらと出てくる。IDEドライブなんだから、なんとなく/dev/hdaのような気がするけど、コマンドの確認を使ったマシンがsdaになっていた。
で、余談だけど、IDEドライブがなんで/dev/sdaで見えるのか、ってことを調べてみたら、こちらに書いてあった。なるほどねぇ。
もとい。SATAドライブでSMART情報を見ようとすると、「-d ata」を付けてみたらってアドバイスされる。
In Linux, SATA disks accessed via libata are only supported by smartmontools for kernel versions 2.6.15 and above. Try an additional ‘-d ata’ argument.
そんなわけで、「-d ata」を付けると、普通にSMART情報がずらっと取得できる。
smartctl -d ata -a /dev/sda
で、3wareの9650SEに刺さっているSATAドライブの場合は、「-d」で指定するデバイス名が3wareになる。加えて、3wareのカードに刺さっているディスクは複数なので、どのポートに刺さってるドライブのSMART情報を見るかって番号を必要になる。例えば、9650SE上の0番ポートに刺さってるドライブを参照したい場合は
-d 3ware,0
って感じになると。
普通のドライブであれば「/dev/sda」とか指定していたデバイスの指定のところに、「/dev/twa0」を指定すると、晴れてSMART情報が参照できた。9650SEを複数枚刺していると、「/dev/twa1」とか「/dev/twa2」とか増えていくのかもしれない。で、結局、9650SEの0番目のポートに刺さってるSATAドライブのSMARTは、以下のようなコマンドで見られた。
smartctl -d 3ware,0 -a /dev/twa0
ま、SMART情報が見られたところで、温度とか再割り当てセクタの数など、いくつか項目しか理解できないけど、見られないよりはマシかな…ということで。
雑用に使うためにWindowsサーバを構築することにした。社内に転がってるパーツをかき集めてたら、ITE製IT8211を搭載したATAカードが落ちてたので、流用することにした。
Windowsをインストールした後、IT8211のカードのドライバを探しにITEのサイト(http://www.ite.com.tw)に行ってみたが、さっぱりドライバをダウンロードできそうなページが見つからず。。。ダメもとで、ITEのページにある検索窓に「IT8211」とか入れてみたら、製品紹介が出てきて…そのページからドライバへのリンクが張られてた。てか、わかりにくすぎるんじゃないか、このナビゲーション(汗)
で、ドライバを入手して適用してみたら、デバイスマネージャに「SCSIとRAIDコントローラ」ってのが出現し、その中に「ITE IT8211 ATA/ATAPI Controller」ってのが追加されてた。SCSIでもRAIDコントローラでもないんですけど、これ…。
ちょっと調べてみたところ、IT8211にRAID機能を載せたとおぼしきIT8212ってチップがあるようなので(IT8211がIT8212からRAID機能を省いたサブセット版なのかもなぁ)、その辺とドライバを共通化してるのかもしれないなぁと思いつつ、ま、実用上は関係ないかと思いきや、早速、CrystalDiskInfoでSMART情報が見られなくて…後悔。
なんかサーバが重いなぁと思って、show processlistで見てみると、MySQLが「unauthenticated user」で溢れていた。netstatで見てみても、MySQLのポートがこれまでにないくらいESTABLISHEDであふれかえっていて、結局、「unauthenticated user」からのアクセスが、コネクションを使い切って、…あー(涙)という状況になった。
とりあえず、何らかの対処をしないと困るので、とりあえず、MySQLを再起動してみたが、解決せず。さらに、Webサーバも再起動してみたし、OSも再起動してみたが、やっぱり解決せず。で、「unauthenticated user」でGoogle先生に聞いてみたところ、MySQLがアクセスしてくるクライアントのIPアドレスのDNSの逆引きをやっているらしく、逆引きができないときに「unauthenticated user」が溢れるという事象が起こるらしかった。
そこで、MySQLが動いているマシンの/etc/hostsファイルを編集して、アクセスしてくるマシンの名前解決ができるようにしたら、「unauthenticated user」にお引き取りいただくことに成功して、再び平和が訪れた。
しかし。「unauthenticated user」が溢れることになるトリガーがよくわからない。特にMySQL周辺の設定を変更したわけでもないのだが、突然、溢れ出したように見えた。
あと、MySQLがなんでDNSの逆引きをやってるかがわからないので調べてみた。MySQLの権限テーブルでアクセス元を制限できるけど、その制限の指定にホスト名が使える(…そういえば、localhostとか使ってるなぁ…)背景には、MySQLがアクセスしてきてるクライアントのIPを逆引きしているということがあるらしい。なるほどなぁ…。
とあるサーバが応答しなくなったので、某所のデータセンターに行ってみた。すると、サーバのコンソールは一連のブートシーケンスらしきものが表示されていて、ファイルシステムがおかしいぞー的なエラーメッセージが出力された状態で止まっていた。
止まっていたサーバは、かなり前に構築されたサーバであるため、カーネルが古いせいか、kernel panicを起こすことがある。おそらくは、kernel panicして自動的に再起動して、再起動時のfsckで、修復が必要なエラーが検出されて止まっていたといった感じだろうか(…よくわからん…)
そんなわけで、、、冷や汗をかきながら、fsckをやってみた。といっても、fsckからinodeを見せられて、「修復しますか?」って聞かれたところで、「y」を押す以外のことはできるはずもなく、ただ、ひたすら「y」を連射。すると、リペアが完了した、みたいなメッセージが出力されて再起動。
…起動した。
お仕事日記と言いながら、年末年始は結局何もしなかったので(汗)とりあえず、日記を。
年末年始は実家に帰省した。せっかく、香川に帰ったんだから…ということで、釜揚げうどんを食べに「長田 in 香の香」に行ってきた。
駐車場は、讃岐うどんを食べに来ている県外ナンバーの車であふれかえっていて、行列は店の外までつながっていた。まぁ、香川県の人は、こんなに並んでるうどん屋を見かけると撤退しそうではあるが、久しぶりなので、意地と根性で並んでみた。
で、家族と一緒に行ったので、「たらいうどん」にしてみた。ただ、たらいうどん(大)だと、12玉入っているらしく、さすがにそれは多いだろうということになったが、たらいうどん(小)だと、6玉。ちょっと少ない。というわけで、たらいうどん(小)と釜揚げうどん(大)を頼んでみたら、たらいうどんに一緒に入れてくれるとのこと。
やっぱり、いりこの効いたつけダシはさいこー!あっという間にたらいは空になってしまった。で、勢い余って、最後にダシだけいただいてしまったが、このダシをアテに日本酒が飲めてしまうんじゃないかとちょっと思った。
DRBDを使っていて、うっかりスプリットブレインになっちゃった時に、リカバリー方法を間違えるとややこしいことになるような気がした(どっちをマスターにするかを間違えると、スレーブでマスターを上書きしてデータのロストとか起きたりしそう)ので、ちょっと試しにスプリットブレイン状態を作ってリカバリーしてみた。
使ったDRBDは8.3.0。インターネットを探してみると、DRBDが動いている状態でネットワークを引っこ抜くとスプリットブレインが発生すると書いてあるサイトもあったので、試しにL2スイッチの電源を落としてみた。そしたら、お互いに「WFConnection」(接続待ち)状態に遷移した。一方、マスター側は「Primary」状態なので、そのままマウントして、アプリケーションからいじってたりしたけれど影響はなかったみたいだ。で、ネットワークを再接続すれば、切断前のPrimary/Secondaryの関係性を維持したまま、「Primary」から「Secondary」への同期が始まった。で、同期が完了すると、「Connection」状態に戻った。
結局、ネットワークがダウンするだけでは、スプリットブレインは発生しないようだ。とりあえず、運用中にLANケーブルが引っこ抜ける的な障害が起こった場合は、LANケーブルを刺し直せば自動で対応してくれそうだ。
次に、意図的にスプリットブレインを作ることにした。L2スイッチを落とすところまでは同じだが、ネットワークが切れていることをいいことに、スレーブ側のマシンを「Primary」状態にしてみた。その後、L2スイッチの電源を入れる。これによって、お互いが「Primary」になっていることを検出するので、スプリットブレインとして、お互いが「StandAlone」に落ちる。ただ、もともと「Primary」になっていたマスター側は、StandAloneになっても「Primary」なので、マウントは可能っぽい。ただ、同期が取られないだけのようだ。dmesgでログを確認すると、以下のようなログが出力されていた。
drbd0: drbd_sync_handshake:
drbd0: self 6ABCC0B39EEBC9D5:03B0E55FA3B63131:38D5407DCCBC17FE:1C2D0C92A346572F
drbd0: peer 705B58F4947E0C9C:03B0E55FA3B63130:38D5407DCCBC17FE:1C2D0C92A346572F
drbd0: uuid_compare()=100 by rule 9
drbd0: Split-Brain detected, manually solved. Sync from this node
さて、両方のノードが「StandAlone」になったときにどう復旧するか。「drbdadm」にはいくつもコマンドオプションがあるので、いろいろ試してみたが、同期を取ってくれない。。。
そんなわけで、DRBDのマニュアルを探してみたら、「Manual split brain recovery」って項目があった。
DRBD detects split brain at the time connectivity becomes available again and the peer nodes exchange the initial DRBD protocol handshake. If DRBD detects that both nodes are (or were at some point, while disconnected) in the primary role, it immediately tears down the replication connection.
DRBDは、コネクティビティが復活した時や、同期相手とDRBD Protocolによるハンドシェイクを行う時にスプリットブレインを検出する。DRBDが両方のノードがPrimary(role)になっている(もしくは、接続が切れている、どこかの時点でPrimaryになっていた)場合、レプリケーションの接続をすぐに切断する。
After split brain has been detected, one node will always have the resource in a StandAlone connection state. The other might either also be in the StandAlone state (if both nodes detected the split brain simultaneously), or in WFConnection (if the peer tore down the connection before the other node had a chance to detect split brain).
スプリットブレインを検出した後では、一方のノードはずっと「StandAlone」になっていて、両方のノードが同時にスプリットブレインを検出していれば、もう一方のノードも「StandAlone」になっているかもしれないし、もう一つのノードがスプリットブレインを検出する前にコネクションを落としていれば、「WFConnection」になっているかもしれない。
At this point, unless you configured DRBD to automatically recover from split brain, you must manually intervene by selecting one node whose modifications will be discarded (this node is referred to as the split brain victim). This intervention is made with the following commands:
DRBDを自動的にスプリットブレインから復旧するように設定していなければ、こうなった時に、どっちのノードの変更を破棄するかを選択して、手動で介入する必要がある。この介入は、このコマンドで行われる。
と。
マスターとなる側では以下のコマンドを実行するらしい。
drbdadm connect resource
スレーブとなる側(つまり、変更点があっても破棄される側)では、以下のコマンドを実行するらしい。
drbdadm secondary resource
drbdadm — –discard-my-data connect resource
…というわけで、やってみたら、無事にConnection状態に戻った。