start

RAID-Z再構築中に更にHDDが脱落してプールがUNAVAILになったでござる(°ω°)

ところで俺のRAID-Zを見てくれ。こいつをどう思う?

[Decomo@Freyja ~]$ zpool status 
  pool: zdata
 state: UNAVAIL
status: One or more devices are faulted in response to IO failures.
action: Make sure the affected devices are connected, then run 'zpool clear'.
   see: http://illumos.org/msg/ZFS-8000-HC
  scan: resilvered 121G in 2h0m with 13047163 errors on Thu Sep 24 23:26:28 2015
config:

	NAME                       STATE     READ WRITE CKSUM
	zdata                      UNAVAIL     96     0     0
	  raidz1-0                 UNAVAIL    194     0     0
	    11774477246658925336   REMOVED      0     0     0  was /dev/ada0p1
	    ada1p1                 ONLINE       0     0     0
	    replacing-2            UNAVAIL      0     0     0
	      3139585788591315191  UNAVAIL      0     0     0  was /dev/gpt/data0-1a
	      ada2p1.nop           ONLINE       0     0     0
	  raidz1-1                 ONLINE       0     0     0
	    ada5p1                 ONLINE       0     0     0  block size: 512B configured, 4096B native
	    ada3p1                 ONLINE       0     0     0  block size: 512B configured, 4096B native
	    ada4p1                 ONLINE       0     0     0  block size: 512B configured, 4096B native
	logs
	  mirror-2                 ONLINE       0     0     0
	    ada10p4                ONLINE       0     0     0
	    ada15p4                ONLINE       0     0     0
	cache
	  ada10p5                  ONLINE       0     0     0

errors: 13047165 data errors, use '-v' for a list

すごく・・・UNAVAILです・・・。

RAID-Zを使い始めて早4年、遂にうちにも訪れてしまった、この恐怖の現象「RAIDリビルド中のHDD死亡お替わり」が。いつの間にかデグレってた事は何度かあったけど、UNAVAILは初めて見たよ……。幸いにもada0は脱落しただけで死んではおらず、SATAケーブル&電源抜き差しで無事復活というかresilveringなう(๑˃̵ᴗ˂̵)وなんですけども。心臓に悪いったらありゃしない。

それにしても、SATAコネクタの信頼性の低さはどうにかならないかなー。コンシューマ向けのHDD×7台でRAID組んでるのがそもそもの間違いではあるし、信頼性求めるならSAS使えって話でもあるけどさ、流石に家庭でSASはやり過ぎっつーかオーバースペックも良いとこでしょ。そんな金もないし。このあたりのイレギュラーさを差し引いても、SATAコネクタは緩み易過ぎると個人的には思う。もうちょっとガッチリとはまって欲しいもんだ。

とか何とか言ってるそばから、またada0が脱落してるし……。

無事リビルド完了(念のために言っておくと作業自体は随分前に終わってる。)

面白いログが取れたので記念ぱぴこ。

[Decomo@Freyja ~]$ zpool status zdata
  pool: zdata
 state: DEGRADED
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.
  scan: resilver in progress since Sat Sep 26 13:42:23 2015
        4.51T scanned out of 14.7T at 376M/s, 7h51m to go
        968G resilvered, 30.78% done
config:

	NAME                       STATE     READ WRITE CKSUM
	zdata                      DEGRADED     0     0     0
	  raidz1-0                 DEGRADED     0     0     0
	    ada12p1                ONLINE       0     0     0  (resilvering)
	    ada1p1                 ONLINE       0     0     0
	    replacing-2            DEGRADED     0     0  370K
	      3139585788591315191  UNAVAIL      0     0     0  was /dev/gpt/data0-1a
	      ada2p1               ONLINE       0     0     0  (resilvering)
	  raidz1-1                 ONLINE       0     0     0
	    ada5p1                 ONLINE       0     0     0  block size: 512B configured, 4096B native
	    ada3p1                 ONLINE       0     0     0  block size: 512B configured, 4096B native
	    ada4p1                 ONLINE       0     0     0  block size: 512B configured, 4096B native
	logs
	  mirror-2                 ONLINE       0     0     0
	    ada14p4                ONLINE       0     0     0
	    ada15p4                ONLINE       0     0     0
	cache
	  ada14p5                  ONLINE       0     0     0

errors: 4503902 data errors, use '-v' for a list

RAID-Zを構成するHDDが2台同時にリビルドされてた。流石ZFS、なかなか器用なことをしてくれる。これもブロック単位でチェックサムを持ってるお陰なのかしら?

FreeBSDの環境そのままにCPU代えたらIllegal instructionでまくり

ASRock C2750D4Iは8コアAtom C2750搭載でSATAポートが12個もある、正にファイルサーバにうってつけのマザボである。Mini-ITXながら通常サイズのDDR3 DIMMが4本刺さり、やろうと思えば16GBモジュール×4で64GBものメモリが積めるのも素晴らしい。これまた大食漢のZFSにおあつらえ向きの仕様で、加えてIPMIでリモートで電源ON/OFFやBIOSがいじれたりして、刺さる人には刺さりまくりの素敵ママンだ。流石は変態紳士ASRock。

発売当初から目は付けていたものの、4万後半という値段に手が出せないまま円安と増税の影響で更に値上がりし、もう買えない…と諦めかけていたその時!偶然、JMC DirectでB級品が35000円弱で売られているのを見つけてしまったので光速でポッチッチ。

家鯖のFreeBSD 10.1-RELEASE環境はそのままに、早速Z77A-GD65 + Xeon E3-1260Lと入れ替えてみたところ、難なく動いた。

……と思ったのも束の間、portsで入れたソフトが軒並みIllegal instructionで落ちまくる!CPUTYPE?=nativeでコンパイルしたバイナリなので、Avotonじゃ実行できない命令が生成されてるんだろう。SandyBridgeからのグレードダウンとはいえ、同時期のCPUで実行できないほどのアグレッシブなコードを吐くclang先輩マジぱねっす。C2750用にビルドし直そうとしても、これまた軒並みIllegal instructionで落ちまくり。ツールチェイン、お前らもか……。たかがgmakeですら超最適化してくれるclang先輩マジ(ry

怪しそうなportsを片っ端からリビルドしたり、gdbで落ちてるライブラリを探ったり、どうしても分からん時はpackagesに逃げたりして何とか再構築できた。最適化ビルドも考えものだな…。少なくともカーネルを再構築する時は、無難な最適化オプションにしないと泣きを見そう……。そのためのCPUTYPE?なんだろうし(?付きの方はカーネル構築時には適用されないらしい)。

1年以上放置してたWindows Updateが全然進まない件→解決

(2016-04-19 追記)
多くの方にご参照頂いているようなので、自分が行った手順を完結にまとめておきます。

  1. Windows 7のシステム更新準備ツールを実行(約半日)
  2. Windows Updateエージェントを最新バージョンに更新(時間失念。多分そこまで掛かってない)
  3. 再度Windows 7のシステム更新準備ツールを実行(2〜3時間)
  4. Windows Updateを実行(全部入れるのに約半日)
    • いきなり全てを入れると時間かかるし失敗した時の精神的ダメージが計り知れないので、数個ずつ適用していく。
    • .NET Framework系の更新は特に時間がかかる傾向にあるので、時間に余裕がある時に行った方が無難です。

自分のマシンがしょぼいという点を差し引いても、兎に角時間がかかるので辛抱強く取り組むしかありません。

仮想マシン上のWindows 7 (64bit)のWindows Updateを1年ぶり位にやってみたら全然進まないでやんの。更新件数は113件程とそこそこあり、ホストが貧弱Avoton Atomとはいえ、半日放置しても「更新プログラムをダウンロードしています」が0%からピクリともしないのは流石におかしい。一番ボトルネックになりそうなストレージは仮にもSSDだし。

止むなく一旦キャンセル→再起動からの再実行してみたら、今度は最初の「更新プログラムを確認しています」から進まなくなった\(^o^)/

それから色々やってみて、何とか無事更新が出来たが、超絶時間がかかった。取りあえず、効果があったと思われるのは以下のもの。

システム更新準備ツールを実行し(これが超時間食いで終了まで半日くらい掛かった)、Windows Updateエージェントを最新にして、もう一度システム更新準備ツールを実行(今度は2〜3時間で終了)した所、うちの環境では問題が解決した。それでも最初のWindows Updateが完了するまでは更に数時間かかったけど…。

 初めてこの画面を拝むまで半日!

BITSのトラブルシューティングやWindows Updateのキャッシュのクリアは然程意味がなさそうに思えた。特にキャッシュのクリアは意味がないどころか、逆に悪影響な気がした。どちらも何の根拠もない私見なので悪しからず。

しっかし、何もしてないのにOSの最重要コンポーネントがおかしくなるのは止めてもらいたいもんだね。Windows Updateがぶっ壊れるだけならまだいいが、ぶっ壊れた結果、関連のバックグラウンドタスクがCPUとメモリをバカ食いするのが頂けない。CPUを常時25%のメモリ2GB超を持ってくんだから、貧弱マシンにゃ辛いのよ(それでWindows Updateの不具合に気付いたのだけども)。最近頻発してるらしいし、どうしちゃったのゲイツ。

まぁ、1年も更新を怠るなって話ではあるが…。

C#のstring.Trim()は全角スペースまで削って下さりやがる

C#のstringクラスにあるTrim()メソッドは、C#の三大便利関数の1つと言って良いくらい便利な関数だ。

言わずもがな、文字列の先頭と末尾に付随する空白を削除してくれる関数であるが、空白って一体なんなのよというと「Unicodeが定める空白文字」である。従って、Trim()は文字列の前後からUnicodeが定める空白文字を削除する関数という事になる。(更に言うと.NET Frameworkのバージョンによって細部の挙動が違う。詳細はMSDNを参照の事。)

んじゃんじゃUnicodeの空白文字ってなんぞ?というと、C#的にはChar.IsWhiteSpace(letter) == trueとなる文字である。詳細はUnicodeの規格書なりWikipediaなりを見て頂くとして、true判定になる文字には半角スペース(U+0020)やタブ文字(U+0009)は然ることながら、全角スペース(U+3000)も含まれるのだ。つまりTrim()を使うと全角スペースも奇麗さっぱりなくなっちゃう。なんというか、C/C++の非WIDE文字な文字列操作に慣れている身からすると、直感とは異なる挙動なわけ。

今回はこれにハマった。削られちゃマズい全角スペースが見事になくなってて、Trim()の挙動を初めて知ったという(´・ω・`)

回避策は引数ありバージョンのTrim()で、全角スペースを除いた空白文字配列を渡すしかない模様。↓こんな感じで拡張メソッド化しておくと便利に使えるよ(`・ω・´)

public static class MyStringAdditions
{
    static char[] WhiteSpaceDelimiters = new char[] {
        '\u0009',  // CHARACTER TABULATION
        '\u000A',  // LINE FEED
        '\u000B',  // LINE TABULATION
        '\u000C',  // FORM FEED
        '\u000D',  // CARRIAGE RETURN
        '\u0020',  // SPACE
        '\u00A0',  // NO-BREAK SPACE
        '\u2000',  // EN QUAD
        '\u2001',  // EM QUAD
        '\u2002',  // EN SPACE
        '\u2003',  // EM SPACE
        '\u2004',  // THREE-PER-EM SPACE
        '\u2005',  // FOUR-PER-EM SPACE
        '\u2006',  // SIX-PER-EM SPACE
        '\u2007',  // FIGURE SPACE
        '\u2008',  // PUNCTUATION SPACE
        '\u2009',  // THIN SPACE
        '\u200A',  // HAIR SPACE
        '\u200B',  // ZERO WIDTH SPACE
//      '\u3000',  // IDEOGRAPHIC SPACE -- これが所謂全角スペース
        '\uFEFF' // ZERO WIDTH NO-BREAK SPACE
    };
 
    public static string TrimWithoutZenkakuSpace(this string str)
    {
        string s = str.Trim(WhiteSpaceDelimiters);
        return s;
    }
}

この件とは直接関係ないけど、TrimStartTrimEndなんてメソッドもあったんだね。取り除きたい文字の配列を渡すと、対象文字列の先頭もしくは末尾から除去してくれる。Trimの分割バージョンみたいなやつ、というよりもTrimTrimStartTrimEndの合体技と言った方がいいか。覚えといて損は無さそう。

TOSHIBA MQ01ABB200R購入

家鯖のHDDが手狭になってきたので、東芝の2.5インチで2TBなHDD、MQ01ABB200のリファービッシュ品MQ01ABB200Rを購入した。

モノ自体は傷・汚れはなく、至って普通のバルクHDDという感じ。RMAで送られてくる如何にもなリファービッシュ品とは雲泥の差だ。ベンチマークとS.M.A.R.T.なんぞ載せてみる。USB 3.0変換なので参考程度に。

一応、リファービッシュ版専用のファームが書かれているようだが、モデル名が違うだけな気がする。AY000Uというファームバージョンも同一みたいだし。

ついでに、WD DLGDIAGで検査したあとのS.M.A.R.T.も載せてみる。

うむ、温度、使用時間、ロードイン時間がそれなりに変化しただけだな。尚、検査は無事に通過した。

あ、そうそう、念のため書いておくけど、このHDDは15mm厚なんで要注意。Seagate以外からも9.5mm厚の2TBが出て欲しいんだがなー。

  • start.txt
  • 最終更新: 2022-07-27 15:26
  • by Decomo