【多分ないまま <| 日記の目次へ |> 2014年9月中旬】
(続き)
#今日の記事、当初は番外としたけど、続き物に組み入れ。
一連の顛末からは少し離れ、データ移行の検討。
まず現状の整理。稼働中なのは2TB×4発のraidz1なので、実質データは6TB。作業に際して多少の削減は可能だが、手間と期間を考えると、まずはこのデータをまるっと移行することを考える。構成としてぱっと思いついたものを書き出してみる。
・2TB×4発のraidz1で実質6TB + バックアップ3TB×2 (現状維持)
・3TB×2発のmirrorを2セットで実質6TB (バックアップ無し)
・3TB×4発のraidz2で実質6TB (バックアップ無し)
・3TB×4発のraidz1で実質9TB + バックアップ4TB×2 (バックアップ足らない)
まず前提として、総容量を増やしたい気持ちはほぼ無い、というかむしろ増やしたくない(容量があればあるだけ使ってしまうので、バックアップの手間が増えるだけになってしまう)。また、現在手持ちの使用可能な玉は、現状バックアップ用としている3TB×1と、未開封の2TB×1、3TB×1。あと当然、移行が面倒かどうかも検討材料。
ただ、なかなか決定的な理由もなく、いまだ決められず悩み中…。
(続く)
(続き)
HDD交換の顛末の間に、現状の確認。かなり抜粋。
yua# atacontrol list | egrep 'ad[0-9]+' Slave: ad1 <INTEL SSDSA2M040G2GC/2CV102HD> SATA revision 2.x Master: ad4 <WDC WD20EARX-00PASB0/51.0AB51> SATA revision 2.x Master: ad6 <WDC WD20EZRX-00DC0B0/80.00A80> SATA revision 2.x Master: ad8 <WDC WD20EARS-00MVWB0/51.0AB51> SATA revision 2.x Master: ad10 <WDC WD20EARS-00MVWB0/51.0AB51> SATA revision 2.x yua# smartctl -a /dev/ad4 | egrep '(Hours|Rate)' 1 Raw_Read_Error_Rate 0x002f 200 200 051 Pre-fail Always - 0 7 Seek_Error_Rate 0x002e 200 200 000 Old_age Always - 0 9 Power_On_Hours 0x0032 064 064 000 Old_age Always - 26604 200 Multi_Zone_Error_Rate 0x0008 200 200 000 Old_age Offline - 4 yua# smartctl -a /dev/ad6 | egrep '(Hours|Rate)' 1 Raw_Read_Error_Rate 0x002f 100 253 051 Pre-fail Always - 0 7 Seek_Error_Rate 0x002e 200 200 000 Old_age Always - 0 9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 44 200 Multi_Zone_Error_Rate 0x0008 100 253 000 Old_age Offline - 0 yua# smartctl -a /dev/ad8 | egrep '(Hours|Rate)' 1 Raw_Read_Error_Rate 0x002f 199 199 051 Pre-fail Always - 2822 7 Seek_Error_Rate 0x002e 200 200 000 Old_age Always - 0 9 Power_On_Hours 0x0032 057 057 000 Old_age Always - 31664 200 Multi_Zone_Error_Rate 0x0008 192 183 000 Old_age Offline - 2332 yua# smartctl -a /dev/ad10 | egrep '(Hours|Rate)' 1 Raw_Read_Error_Rate 0x002f 200 200 051 Pre-fail Always - 63 7 Seek_Error_Rate 0x002e 200 200 000 Old_age Always - 0 9 Power_On_Hours 0x0032 057 057 000 Old_age Always - 31667 200 Multi_Zone_Error_Rate 0x0008 200 199 000 Old_age Offline - 109
ad8とad10が初期構築時から稼働しているHDDだが、ad8のエラー率が高いのが目立つ。これもういつ壊れてもおかしくなさそうだな。ad10もエラー数は1〜2桁低いけど稼働時間的には同じだから、もはやこの2台は寿命と考えたほうが良さそうかも。
で、今回の再構築中にエラー吐いたのはad4。smart上のエラー率はさらに低いけど、現にエラーを吐いたと言うことは何らかの前兆ではあるわけで、これ結局ad4,ad8,ad10全部(今回入れ換えたad6以外)「置き換えるべき」という結論になっちゃう?
さて、そうなると、いっそ3TB×4台で組み直してしまおうと言う案が現実的に。ZFSプールが健全であれば、現状(2TB×4台)のHDDを1台ずつ順に3TBに入れ換え、再構築、入れ換え、再構築と繰り返す手が使えるそうだが、今回はZFSプールが健全ではないのでたぶん無理。
となると、別途3TB×4のZFSプールを立ててデータ移行ということになるか。幸い、電源だけが死んでいる同筐体のサーバ(CPUは1ランク遅い)があるので、こちらの電源を復帰させて一時的に環境をミラーすれば、データ移行はネットワーク越しでいけそうかな。
ちなみにその予備機みたいなサーバ、実は元々は録画鯖はその旧機材で動いていて、これも2年くらい前に電源が壊れたときの抜け殻だったり。当初は電源だけ差し替えようと思ったんだけど予想以上に難儀しそうだったので、予備機として確保しておいた今の機材にHDD/SSDとPT2を繋ぎ替えたいきさつが。
まぁいずれにしろ、間違って開始してしまった再々構築が終わらないことには…orz。
(続く)
(続き)
…で結局、再構築完了は翌々日、9月9日の早朝。約40時間かかったという結果。まぁ再構築中に何本もTV録画はするし、その録画データの自動エンコード処理も走るし、また月曜を跨いだのでweeklyの処理も走るしで、余計な横槍が山のように入ったから時間が伸びたのは致し方なし。ファイル欠損も、件の1個だけで済んだ様子。
ただ、ファイル欠損があったためか、再構築終了後もアレイはDEGRADED状態からONLINE状態には戻らず、何らかの処理が求められている様子。
yua# zpool status pool: zpool0 state: DEGRADED status: One or more devices has experienced an error resulting in data corruption. Applications may be affected. action: Restore the file in question if possible. Otherwise restore the entire pool from backup. see: http://illumos.org/msg/ZFS-8000-8A scan: resilvered 1.70T in 40h37m with 1 errors on Tue Sep 9 06:22:24 2014 config: NAME STATE READ WRITE CKSUM zpool0 DEGRADED 1 0 0 raidz1-0 DEGRADED 1 0 0 ad4 ONLINE 1 0 0 replacing-1 OFFLINE 0 0 0 13108098191878684347 OFFLINE 0 0 0 was /dev/ad6/old ad6 ONLINE 0 0 0 ad8 ONLINE 0 0 0 ad10 ONLINE 0 0 0 errors: 1 data errors, use '-v' for a list
see:で出てくるURL先を読むと怖いことが書いてあるのだが、action:では欠損ファイルさえ何となればよいという指示が先にあるので、まぁそういうことなのだろう。ただ、こちらとしてはファイル欠損は了承済みなのだが、その先の手順が書いてなくて停滞中。ググってもなかなか情報に行き当たらず、とはいえ手探りで色々試すのも怖い…。
とりあえず試したこと。
何も変わらず。yua# zpool clear zpool0 ad6
あちゃー。再構築(resilver)がもう一回始まっちゃったよorz。前回実績により、再度2日休み確定だ…。yua# zpool online zpool0 ad6
(続く)
ことの起こりは1か月前に遡り。初期構築時(4年近く前)から使っていたata3(ad6)のHDD、WD20EARSがお亡くなりに。どうやらコントローラ側が逝ったか刺さってしまったようで、アクセスランプ点きっぱなし。
Aug 8 09:53:41 yua kernel: ata3: port is not ready (timeout 15000ms) tfd = 00000080 Aug 8 09:53:42 yua kernel: ata3: hardware reset timeout Aug 8 09:53:42 yua kernel: unknown: TIMEOUT - FLUSHCACHE48 retrying (1 retry left) Aug 8 09:54:06 yua kernel: ata3: port is not ready (timeout 15000ms) tfd = 00000080 Aug 8 09:54:06 yua kernel: ata3: hardware reset timeout Aug 8 09:54:06 yua kernel: unknown: TIMEOUT - FLUSHCACHE48 retrying (0 retries left) Aug 8 09:54:31 yua kernel: ata3: port is not ready (timeout 15000ms) tfd = 00000080 Aug 8 09:54:31 yua kernel: ata3: hardware reset timeout Aug 8 09:54:31 yua kernel: unknown: FAILURE - FLUSHCACHE48 timed out
ここからRAIDZ1が縮退(DEGRADED)運転に入るが、夏コミや帰省のバタバタなどで対応は遅れる。初期構築時から使っているHDDは稼働3年半を超えたので、いっそ3TB×4に組み替えてしまおうか、などとも悩み始めてしまうが、結局は移行手順が煩雑になるので断念し、今回は2TB×4の現行維持でいくことで決定。9月に入ってようやく交換用HDDを購入。
ということで、9月7日の午後、HDD入れ換え作業を開始。録画鯖としての機能は止めずに実施するため、できれば再構築中に録画が発生しない日程で作業をしたいところだが、今期は録画予約の無い曜日が無いため無理な相談。強行軍とする。
交換作業自体は、約3年前の記録に沿って実施。ただ、前回はHDDのコントローラは生きていたが、今回はコントローラが刺さっていた(アクセスランプが付きっぱなし)点が違い、はたして新しいHDDを無事認識してくれるか心配だったが、新HDDをattachした時点でバスがリセットされたようで、すんなり回復。
余談だが、ごそごそと作業準備をしていく途中、なぜか今回購入した以外の未開封の2TB HDDも発見されてしまう。記憶を遡っていくと、しばらく前に「HDDのread errorが出た(回復可能errorでDEGRADEまでは至らず)ので交換用HDDを手配はしたけど、交換前に他の理由で再起動したらerrorが消えちゃったので放置したことがあったなぁ」などと思い出す。HDDのLOTも約2年前だったので、記憶は定かじゃないけどその頃の話。放置期間が長いのが気になったけど、今回は古いほう優先ということで発掘したHDDを使用。
交換後は自動的に再構築(resilvering)が始まり、あとは進捗状況を時折確認。…で、25%くらい進んだところでエラー発生。ちなみにこれが、初代TeraStationから始まる自宅RAID歴10年近く、延べ10回前後は実施している再構築で、初めての再構築中のエラー遭遇だったり。
Sep 7 18:57:23 yua kernel: ad4: FAILURE - READ_DMA48 status=51<READY,DSC,ERROR> error=40<UNCORRECTABLE> LBA=3098392832 Sep 7 18:57:26 yua kernel: ad4: FAILURE - READ_DMA48 status=51<READY,DSC,ERROR> error=40<UNCORRECTABLE> LBA=3098392832
状況を確認すると破損ファイルはエンコード済の動画ファイル(「いつか天魔の黒ウサギ」のどれかの回)1個で、まぁ消えても痛くはないファイルだし、エラーが1回出た後は処理は進んでいる様子。そもそも概ねバックアップは取ってあるので、リストアと再構築が面倒臭いのを除けばほぼ実害は無いのだが、なるべく面倒にはなりたくない…。
ちなみにこの頃、モバマスの響子ちゃんドリフェスの最後の追い込みで走りつつ、再構築の進捗も気にしつつで、心配事が同時進行状態。
(続く)