2008年4月20日日曜日

(FreeBSD) 1GBのCFをATAに接続したら、timeout waiting to issue command / error issuing READ_DMA command

CF (Compact Flash)を、ATA HDDとして接続できる変換アダプタがあるんですけど、それを使って、1GBのCFを接続して、FreeBSD 7.0-RELEASEを起動したら、こんなエラーメッセージが表示され、結局、CFにアクセスできませんでした。

ad2: 967MB <CF 1GB 20061215> at ata1-master WDMA2
ad2: timeout waiting to issue command
ad2: error issuing READ_DMA command
ad2: FAILURE - READ_DMA timed out LBA=1981725
ad2: timeout waiting to issue command
ad2: error issuing READ_DMA command
ad2: timeout waiting to issue command
ad2: error issuing READ_DMA command
ad2: timeout waiting to issue command
ad2: error issuing READ_DMA command
ad2: timeout waiting to issue command
ad2: error issuing READ_DMA command
(しばらく続く)

ちなみに、1GBのCFの代わりに、64MBのCFを接続した場合は、

ad2: FAILURE - SETFEATURES SET TRANSFER MODE status=51<READY,DSC,ERROR> error=4<ABORTED>
ad2: 61MB <SanDisk SDCFB-64 Vdg 1.21> at ata1-master BIOSPIO

となって、いったんエラーは出るものの、一応認識されて、アクセスできました。
BIOSPIOってのが、なんとなく遅そうなイメージがありますが…



昔から、「ノートパソコンなどでHDD関係のエラーが出たときはsafe modeで」、なんていう話があったので、なんとなく、boot loaderのメニューでsafe modeにしたら、1GBのCFを接続したときでも、今度はエラーにならずに、アクセスできました。



こんな感じで認識されてます。

# dmesg | grep ata
atapci0: <Intel ICH UDMA66 controller> port 0x1f0-0x1f7,0x3f6,0x170-0x177,0x376,0x2000-0x200f at device 31.1 on pci0
ata0: <ATA channel 0> on atapci0
ata0: [ITHREAD]
ata1: <ATA channel 1> on atapci0
ata1: [ITHREAD]
ad0: 117246MB <Maxtor 4R120L0 RAMB1TU0> at ata0-master PIO4
ad2: 967MB <CF 1GB 20061215> at ata1-master PIO4

ネットで検索してみると、こんな情報を見つけました。

http://www.bramschoenmakers.nl/node/85
Installing FreeBSD on a Compact Flash card

これによれば、

FreeBSD 6.2を2GBのCFにインストールしようとすると、



ad2: timeout waiting to issue command
error issuing READ_DMA command ad2



というようなエラーがでるので、boot loaderのメニューで、promptへ抜けてから



set hw.ata.ata_dma=0



すればよい。インストール完了後には、/boot/loader.confに



hw.ata.ata_dma=0



と書いておけばよい。

とのことでした。



これと同じ症状みたいですね。



CFの容量によって、ATAのコマンドに対する反応が微妙に異なるのでしょうか。しかし、なんにしても、FreeBSDのataドライバの出来がちょっと悪い、っていう気もします。





今現在、HDDで動かしているFreeBSD 7.0-RELEASEを、必要最小限なファイルだけ、1GBのCFへコピーして、CFだけで動かそうと思って、あれこれやってたんです。



コピーするときは、CFとHDDの両方を接続しているんですが、上記のことをやってしまいますと、HDDのほうまで、PIO4という遅そうなモードになってしまいます。



これは、カーネルがブートした後で、「atacontrol mode」コマンドでモード変更できます。



「atacontrol mode ad0」のようにして、ドライブごとに、現在のモードを確認できます。

# atacontrol mode ad0
current mode = PIO4



# atacontrol mode ad2
current mode = PIO4

今、ad0がHDD、ad2がCFなので、ad0だけ変更するには、こんな感じです。

# atacontrol mode ad0 UDMA66
current mode = UDMA66

これで、なんとなく体感的にもキビキビ動くようになった感じがします。



UDMA66以外にもいろんなモードを指定できるので、詳しくはman atacontrolで確認を。

atacontrolコマンドのマニュアル



0 件のコメント:

コメントを投稿