Raspberry pi に接続していた USB HDD が調子悪いので色々と対応してみた(未解決)
Raspberry pi でサーバ運用を始めて約 2 年。
どうにも最近 Raspberry pi に接続している USB HDD の調子がイマイチだったので、 その対応を行なった。
ただし、未解決。。。
ここでは、その対応の記録を残す。
症状と作業内容
不調の症状は以下。
「HDD のファイルを Read すると、不定期に iowait が増大し、最悪数秒程度止まる。」
ちなみに usb hdd は、 バスパワーではなく AC アダプタ付きの USB HDDケースを使ったもの。
なので「電流が足らない」ということではないはず。
念の為、 Type-A -> Type-C のケーブルを使っていたが、 3A 対応の Type-C -> Type-C のケーブルに交換してみても、現象は改善せず。
とりあえず hdd 自体の不調と考えて、
- 別の hdd にコピーして繋げなおす
時間がかかりつつも、なんとか全データをコピー。
が、まだ何か調子が悪い。
hdd を交換してもまだ調子が悪いとなると、hdd 側の原因とは考え難い。
- 試しに、交換した元の hdd を windows に接続して HD Tune でテスト
すると、特に問題なく動作することを確認。
であれば、 hdd 自体の問題ではなく raspberry 側の問題の可能性が高い。
で、よくよく Raspberry pi の状態を観察すると、 HDD に何もアクセスしていないのに、 数秒毎に HDD のアクセス LED が点滅することが判った。
- まずは、どんなアクセスなのかを調べるために iostat -h 1 で確認
すると、 4,5 秒ごとに 2MB 程度の書き込みがあることが判った。
次に、何のプロセスがアクセスしているのか?を調べる。
- lsof で HDD にアクセスしているプロセスを確認する
しかし、なにも表示されず。
lsof だとタイミング的に確認できていないのかも?
- そこで auditd で hdd へのアクセスを監視
が、やはり何も表示されず。
どういうことや?と思いつつ、
- 今度は fatrace でアクセスを監視
が、これでもアクセスしているログが取れない。
さっぱり意味不明。
fatrace はカーネルレベルのファイルアクセストレースするものなので、 「これでアクセスログが取れないってどういうことだ?」と思いつつ、ならば、と
- HDD を mount する際に readonly でマウントしてみた
すると、流石に HDD への write アクセスは無くなった。
とはいえ、これでは使いものにならないので、他の方法を考える。
- HDD のファイル・ディレクトリパーミッションを全て -w で書き込み権限を外してみる。
が、これでも書き込みアクセスは止まらない。
マウントレベルで readonly にすると書き込みアクセスが止まるが、 ファイルシステムのパーミッションレベルで readonly にしても書き込みアクセスが止まらない。
ここまでの状況から、 ファイルシステムの外部からの書き込みではなく、 ファイルシステム内部のレベルで書き込みが行なわているのではないか? と予想。
現状 hdd は ext4 でフォーマットしてある。 この ext4 が何らかの影響しているのではないかと予想。
- そこで、HDD のフォーマットを xfs にしてみる。
しかし、定期的な書き込みは無くなったものの、読み込みで固まる症状は改善せず。。。
どうも、細切れでファイル read すると発生しやすいように感じるが、 これ以上の追求は今はムリっぽいので、残念ながらここまでとする。。。