FreeBSD10.3: Buffalo IFC-ATS2P2 SATA HDD接続問題

P3B-F で FreeBSD10サーバーを構築中。

サーバーと言っても、主目的はバックアップメールサーバーで、ほぼ待機中のはずなのでハイパフォーマンスは不要。安定して動作することが最優先。

P3B-F マザーボード に Pentium III 700MHz と 1GB メモリをインストールして運用するつもりなのですが、適当なIDE HDD がない。P3B-F のオンボードIDEは ATA33 なので今となっては力不足。250GB のSATA HDDをつなげれば容量は十分ですがマザーボードには接続ポートがない。ということで、Windows2000で使っていた PCI SATA/ATA133 拡張ボードを使うことにしました。ボードは、Buffalo の IFC-ATS2P2。ボードの上には、VIA VT6421A が載っています。

VIA VT6421A搭載 buffalo IFC-ATS2P2 PCIカード

VT6421A チップは FreeBSD8.2/8.3 でSSDにトライした時、非常にトラブったSATAカード。SSDと相性が悪かったけど HDDの場合はどう?もし、ドライバーの問題なら、OSが10に更新されているから、もう解決しているでしょう。我が家ではIDE HDD でFreeBSD  サーバーを構築する機会が多いものの、SATA HDD のサーバーを何台も構築しており SATA HDD の不安はありません。ただあれ以来、SSD で FreeBSD サーバーを組む機会は無し。

ところが、、、、、Panic は起こさないものの、プロセスが死んだり、SATA Status エラーが 頻発します。

CAM status: ATA Status Error

しかも特定のドライブで出やすいため、最初は HDD の不良セクターだと推測して対策しようとしていました。

別のハードウェアを使って切り分けて行くと、どうも高負荷になればマザーボードは関係なくVT6421とSATA接続されている HDDのモデルどれでも何らかの不具合が発生することがわかりました。高負荷状態を作るためには、バックグランドでBoincを動かしながら、/usr/src で make buildworld を行っています。

/var/log/messages には次のようなメッセージが記録されています。

P3B-F

pid 46513 (c++), uid 0: exited on signal 11 (core dumped)

7VTXE

pid 1975 (c++), uid 0: exited on signal 11 (core dumped)

ビルド中に「Stack dump」が発生し、make が異常終了。しかし、この後、再び make buildworld を行うと、続きの作業が続行されます。(しかし、結局は別の場所で、同じ症状で落ちる。)

「ATA Status Error」は、SATA接続された HDD をアクセスする時だけで、IFC-ATS2P2 とATA133接続されている IDE HDDでは起きません。

c++  -O2 -pipe -I/usr/src/lib/clang/libclangast/../../../contrib/llvm/include -I/usr/src/lib/clang/libclangast/../../../contrib/llvm/tools/clang/include -I/usr/src/lib/clang/libclangast/../../../contrib/llvm/tools/clang/lib/AST -I. -I/usr/src/lib/clang/libclangast/../../../contrib/llvm/../../lib/clang/include -DLLVM_ON_UNIX -DLLVM_ON_FREEBSD -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -DNDEBUG -fno-strict-aliasing -DLLVM_DEFAULT_TARGET_TRIPLE=\"i386-unknown-freebsd10.3\" -DLLVM_HOST_TRIPLE=\"i386-unknown-freebsd10.3\" -DDEFAULT_SYSROOT=\"/usr/obj/usr/src/tmp\" -I/usr/obj/usr/src/tmp/legacy/usr/include  -fno-exceptions -fno-rtti -c /usr/src/lib/clang/libclangast/../../../contrib/llvm/tools/clang/lib/AST/TemplateName.cpp -o TemplateName.o
Stack dump:
0.	Program arguments: /usr/bin/c++ -cc1 -triple i386-unknown-freebsd10.3 -emit-obj -disable-free -disable-llvm-verifier -main-file-name TemplateName.cpp -mrelocation-model static -mdisable-fp-elim -relaxed-aliasing -masFreeBSD clang version 3.4.1 (tags/RELEASE_34/dot1-final 208032) 20140512
Target: i386-unknown-freebsd10.3
Thread model: posix
c++: note: diagnostic msg: PLEASE submit a bug report to https://bugs.freebsd.org/submit/ and include the crash backtrace, preprocessed source, and associated run script.
c++: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
c++: note: diagnostic msg: /tmp/TemplateName-01077a.cpp
c++: note: diagnostic msg: /tmp/TemplateName-01077a.sh
c++: note: diagnostic msg: 

********************
*** Error code 254

Stop.
make[4]: stopped in /usr/src/lib/clang/libclangast
*** Error code 1

Stop.
make[3]: stopped in /usr/src/lib/clang
*** Error code 1

Stop.
make[2]: stopped in /usr/src
*** Error code 1

Stop.
make[1]: stopped in /usr/src
*** Error code 1

Stop.
make: stopped in /usr/src

以前の結論では、VT6421 と SSD の相性が悪いとしましたが、これは間違いで、VT6421用のシリアルドライバーの完成度が低いか、OS側で何かコマンドが必要のようです。簡単に言うと、VT6421 に接続されているSATA HDD や SSD に高負荷を掛けては駄目ってことのようです。とはいえ、SATA HDD を使わざるを得ないので、前回と同様 /home あたりにマウントして本番前に試してみたいと考えているところです。

いろいろ検索してみると、VT6421 の SATA は FreeBSD では問題大ありのようです。

https://forums.freebsd.org/threads/9191/

では、SATA I HDD なら問題ないが、SATA II HDD は SATA I 互換モードに設定せよと書かれていました。
しかし、それは無理でしょう。Jumper があるかどうか HDD次第ですし。

カーネルチューニングで対応する(ことが可能なら)と、それはそれで、OSにリモート更新を掛けるとトラブるから手の届かないところに置くサーバーは、GENERICカーネルで運用したいところ。

更に、調査をおこなってゆくと、「stack dump」は、SATAコントローラには依存せず、「make buildworld」で発生しているユーザーがかなり多いということ。
ということは、「ATA Status Error」と「stack dump」は別の現象かも。

/usr/src の make はサーバーに負荷を与えるために実行しているだけですので、いつもいつも必要ということではありませんが、FreeBSD10.x には pkg コマンドでは更新できず /usr/src が必要なパッケージもあるためディスク容量に余裕があるなら入れておくべきでしょう。

実際、VT6421A の PATA接続 HDD を /usr にマウントし make buildworld を行ってみると、、、、、やっぱり 別の場所で stack dump が発生して落ちました。

c++  -O2 -pipe -I/usr/src/lib/clang/libclangsema/../../../contrib/llvm/include -I/usr/src/lib/clang/libclangsema/../../../contrib/llvm/tools/clang/include -I/usr/src/lib/clang/libclangsema/../../../contrib/llvm/tools/clang/lib/Sema -I. -I/usr/src/lib/clang/libclangsema/../../../contrib/llvm/../../lib/clang/include -DLLVM_ON_UNIX -DLLVM_ON_FREEBSD -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -DNDEBUG -fno-strict-aliasing -DLLVM_DEFAULT_TARGET_TRIPLE=\"i386-unknown-freebsd10.3\" -DLLVM_HOST_TRIPLE=\"i386-unknown-freebsd10.3\" -DDEFAULT_SYSROOT=\"/usr/obj/usr/src/tmp\" -I/usr/obj/usr/src/tmp/legacy/usr/include  -fno-exceptions -fno-rtti -c /usr/src/lib/clang/libclangsema/../../../contrib/llvm/tools/clang/lib/Sema/SemaLookup.cpp -o SemaLookup.o
Stack dump:
0.	Program arguments: /usr/bin/c++ -cc1 -triple i386-unknown-freebsd10.3 -emit-obj -disable-free -disable-llvm-verifier -main-file-name SemaLookup.cpp -mrelocation-model static -mdisable-fp-elim -relaxed-aliasing -masm-verbose -mconstructor-aliases -target-cpu i486 -coverage-file /usr/obj/usr/src/tmp/usr/src/lib/clang/libclangsema/SemaLookup.o -resource-dir /usr/bin/../lib/clang/3.4.1 -D LLVM_ON_UNIX -D LLVM_ON_FREEBSD -D __STDC_LIMIT_MACROS -D __STDC_CONSTANT_MACROS -D NDEBUG -D LLVM_DEFAULT_TARGET_TRIPLE="i386-unknown-freebsd10.3" -D LLVM_HOST_TRIPLE="i386-unknown-freebsd10.3" -D DEFAULT_SYSROOT="/usr/obj/usr/src/tmp" -I /usr/src/lib/clang/libclangsema/../../../contrib/llvm/include -I /usr/src/lib/clang/libclangsema/../../../contrib/llvm/tools/clang/include -I /usr/sFreeBSD clang version 3.4.1 (tags/RELEASE_34/dot1-final 208032) 20140512
Target: i386-unknown-freebsd10.3
Thread model: posix
c++: note: diagnostic msg: PLEASE submit a bug report to https://bugs.freebsd.org/submit/ and include the crash backtrace, preprocessed source, and associated run script.
c++: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
c++: note: diagnostic msg: /tmp/SemaLookup-b5702c.cpp
c++: note: diagnostic msg: /tmp/SemaLookup-b5702c.sh
c++: note: diagnostic msg: 

********************
*** Error code 254

Stop.
make[4]: stopped in /usr/src/lib/clang/libclangsema
*** Error code 1

Stop.
make[3]: stopped in /usr/src/lib/clang
*** Error code 1

Stop.
make[2]: stopped in /usr/src
*** Error code 1

Stop.
make[1]: stopped in /usr/src
*** Error code 1

Stop.
make: stopped in /usr/src

ATA Status Error に関しては、PATA側では出力されておらず SATA HDD を / や /usr にマウントしなければ大丈夫のようです。

VT6421 以外のチップを使っている3,000円以下の PCI接続のSATAカードがあれば試してみたいところですが、残念ながら今のところそういうカードを見つけるに至っていません。

2024/08/07 追記

約8年が経過し、再び VT6421A SATA拡張ボードを試す機会がありました。

問題は解決されているもよう。

コメントを残す