Skip to the content.

この辺詳しい方には当たり前な情報科も知れませんが、備忘録もかねて。。。

dev/(st0/nst0)でIOエラーが発生する場合に確認すべきこと

先日から、st0/nst0でバックアップを取得する際に、IOエラーが発生するという問題が発生していました。具体的には、タイムアウトや、512KBのブロックを転送できないというエラーが発生していましたが、 dmseg や他のログには目立った出力はなく、原因がわからずに困っていました。 唯一分かるのは、デバイスは始めは正常に動いているように見え、突然エラーが発生するということでした。

確認すべきこと

今回の事例で何が問題だったのか簡単に説明します。
今回はSASで接続されたテープデバイスをSASカード経由でアクセスしていました。様々調べていくと、RAIDカードはテープドライブで利用できないとする海外記事が複数見つかる一方で、国内記事ではRAIDカードを用いてセットアップを完了している例もあり、どちらの情報が正しいのか決定づけられずにいました。
しかし結果から言うとどちらの情報も正しかったと言えることが分かりました。今回利用していたSASカードは、コントローラに LSI 9267-8i が利用されており、これは所謂IR(Integrated RAID)モードのみで動作するコントローラだったのです。LSI社製のHBAには、IT(Initiator Target)モードとIRモードの2つのモードがあり、IRモードはRAIDカードとして動作し、ITモードはHBAとして動作します。RAIDカードとして動作するIRモードでは、 64KB までのブロックサイズしかサポートしていないため、 512KB のブロックサイズを転送することができなかったのです。その結果、IOエラーが発生していたのでした。

なので、確認すべきは以下の2点です。

また、これ以外にもテープヘッドの汚れやテープの劣化なども原因として考えられるので、それらも確認しておくと良いかもしれないです。

原因把握に時間がかかった要因

今回の問題の原因を特定するのにはそれなりの時間がかかりました。やはりなまじ始めに正常に動いているように見えると、OSやソフトウェアの設定、一時的な問題を疑ってしまいがちです。ですが下手に勘に頼ったり片っ端から設定値を変更して問題を複雑化するよりも、まずはログの確認となるべく詳細な状況を取得するための診断ツールを利用することが重要だと感じました。一度HBAのファームウェアが問題と分かると解決策もすぐ見つけることができたため、確信を早い段階で得られるように経験を積まねばな・・・という気持ちになりました。 なお、今回の問題はDebian/CentOS Stream/Windowsのそれぞれで確認しましたが、いずれも同様の症状で、「512KBのブロック転送に失敗している」という状況を突き止めるログはそうそう簡単には出てくるような状態ではありませんでした。
もしどこかの誰かが困ってたときにこの記事が参考になれば幸いです。