RaidZ2での障害？

# TL;DR

RAIDZ2で組んでいたNASストレージが環境を変えてからエラーを吐くようになった。
その修理の顛末

# 事の起こり

3TBx5台のHDDをZFS、RAIDZ2で組み上げたNASサーバをHDDケース+ノートPCという構成で運用していた。
HDDを追加したりしたいなーと思い、ノートPCから自作PC（+PCI接続のSATA拡張ボード）にHDDを移した。
すると5台のうち2台でエラーが出るといってきた。

```zsh:syslog
May  6 01:12:42 heteropoda kernel: [109551.991108] ata3.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen
May  6 01:12:42 heteropoda kernel: [109551.997990] ata3.00: failed command: WRITE DMA EXT
May  6 01:12:42 heteropoda kernel: [109552.002555] ata3.00: cmd 35/00:03:d8:39:68/00:00:36:00:00/e0 tag 7 dma 1536 out
May  6 01:12:42 heteropoda kernel: [109552.002555]          res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
May  6 01:12:42 heteropoda kernel: [109552.011631] ata3.00: status: { DRDY }
May  6 01:12:42 heteropoda kernel: [109552.014974] ata3: hard resetting link
May  6 01:12:42 heteropoda kernel: [109552.334564] ata3: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
May  6 01:12:42 heteropoda kernel: [109552.336507] ata3.00: configured for UDMA/33
May  6 01:12:42 heteropoda kernel: [109552.336520] ata3.00: device reported invalid CHS sector 0
May  6 01:12:42 heteropoda kernel: [109552.336544] sd 2:0:0:0: [sdc] tag#7 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
May  6 01:12:42 heteropoda kernel: [109552.336553] sd 2:0:0:0: [sdc] tag#7 Sense Key : Illegal Request [current] [descriptor] 
May  6 01:12:42 heteropoda kernel: [109552.336561] sd 2:0:0:0: [sdc] tag#7 Add. Sense: Unaligned write command
May  6 01:12:42 heteropoda kernel: [109552.336569] sd 2:0:0:0: [sdc] tag#7 CDB: Write(16) 8a 00 00 00 00 00 36 68 39 d8 00 00 00 03 00 00
May  6 01:12:42 heteropoda kernel: [109552.336575] blk_update_request: I/O error, dev sdc, sector 912800216
May  6 01:12:42 heteropoda kernel: [109552.341175] ata3: EH complete
#これは1台分のログだが、もう一台においても同様のログが出た
```

#HDDが死んでるのではないか
ここで私はHDDがクラッシュしたのかと思い、S.M.A.R.T.を確認。

```zsh:smartctl
ログは保存してなかったよ
```

が、エラーらしきログは出ていなかった。
そこで予備のHDDがあったため、該当するHDDを入れ替えてみた。
（HDDは ```/dev/disk/by-path/``` 以下を ```ls -la``` して見つける）

しかし、HDDを入れ替えても同様のエラーが発生した。
となると、HDDで問題が起きているのではなさそうだ。

#エラー箇所の考察
SATA通信時にエラーが起きている可能性が高い。
SATA通信にはPCIe x2接続のSATA10ポート増設ボードを使っている。
ただ、10ポートのうち3ポートはエラーが出ていないため、SATAボードとマザーボードの相性、といった問題は考えづらい。（しかしこの判断は間違いだった）
ここで構成についてより詳しく書くと、マザーボードにはPCI接続のSATA増設ボード刺さっており、その増設ボードからPCケースに付属しているSATAアダプタにSATAケーブルでつながっている。
PCケースにSATAアダプタがあるのはホットスワップ対応のケースであるためだ。

```text:ざっくりこんなかんじ
マザーボード <--(a)--> PCI-SATA増設ボード <--(b)--> SATAケーブル <--(c)--> PCケースのSATAアダプタ <--(d)--> HDD
```

同時にすべてのHDDがエラーになるわけではないので、上記でいう(a)が問題になっている可能性は低い（この判断は間違いである）
残るは(b),(c),(d)のいずれかになる。

#SATAケーブルが死んでいるのではないか
すぐできる検証として、SATAケーブルを別のものに変えてみた。
しかし依然としてエラーは出ていた。
となると
(b)　PCI-SATA増設ボードのコネクタが死んでる
(d)　PCケースのSATAアダプタが死んでる
のどちらかになる。

#SATA増設ボードが死んでいるのではないか
そこで(b)を潰すためにPCI-SATA増設ボードを買い替えてみる
→エラーは出続ける
ここで気づいたが、これまで出ていたポートと別のポートでも同様のエラーが出ている


#PCケースのSATAアダプタが死んでるのではないか
ここまで来てもう残りはPCケースのSATAが死んでいることで決定なので、HDDと増設ボードを直接ケーブルで繋いでみたが、だめ。
正直、もうエラーになりそうな箇所はもう見当たらないので、途方にくれていた。

#答えは意外なところからわかる
PCI-SATA増設ボードは玄人志向の製品だったので、半ばあきらめつつ、何か情報はないかとユーザBBSを見てみる。
すると全く同一ではないものの、ドライブが認識されなくなる、ブルースクリーンエラーが出る、といった現象が出ているらしい。
[特にこれ](https://www.kuroutoshikou.com/forum/topic/%E3%83%96%E3%83%AB%E3%83%BC%E3%83%90%E3%83%83%E3%82%AF/)。
そしてこのユーザはマザーボードのBIOSを上げると改善したというではないか。

これはどうやらマザーボードとの相性が悪かったのでは無いかと疑い始める。

#マザーボードを別のものに変える
マザーボードを交換したら正常に動作するようになった。
マザーボードの仕様としてPCI-Express x16 (内部はPCI-Express x1)
というのがあって、おそらくPCI-Expressの帯域がx1で足りなくなった場合にエラーが発生したとみられる
マザーボードを変えるのはなかなか勇気のいる決断だったが、正直遠回りした感は否めない。

#結論
パーツの互換性はきちんと確認しようという話だった。
しかしまあこんなにも自分の推論が当てずっぽうだとはなあ。。。