vine-users ML アーカイブ



[vine-users:076066] USB接続の FAT32ファイルシステムの HDDを安全に扱いたい

  • From: Seiichirou Babasaki <mindgear@xxxxxxxxxxxx>
  • Subject: [vine-users:076066] USB接続の FAT32ファイルシステムの HDDを安全に扱いたい
  • Date: Tue, 6 Feb 2007 13:39:25 +0900
馬場崎です。
なんとなく自分でエラーの再現性のようなものが掴めてきたので投稿することに
しました。


様々な場面で FAT32 と VFAT のファイルシステムを扱う事は多いと思います。
私も何かの拍子に機器がエラーを起こして使えなくなり、Windows上で scandisk を
使ったりLinux上でfsck かけてからまた接続、という事を繰り返しておりました。
これまでは単に「エラーが発生することもあるだろう」程度に思っていたのですが
どうも何か規則性のようなものがあるように感じてきました。

先に USB 接続のシリコンデバイスについて書きますが、きちんとフォーマットが
出来ていればファイルシステムが FAT32 だろうと ext3 だろうと、ほとんどエラー
らしいエラーに遭遇しません。

それからレスキュー目的で所有している裸のHDDをUSB接続出来るアダプタ、
例えば RC-SPCGA3 という安価なものを所有していますが、これについても
ファイルシステムに関わらず、ハードウェアに障害さえなければ不思議に思うことは
ありません。

問題が発生するのはケースタイプの USB-HDD の、それも100GBを越えるような
大容量の製品で顕著です。私の所有しているものでは
・3.5 タイプの「鎌蔵」 <- 60GB程度のHDDを収納
・I/Oデータ社の250GB製品 HDH-U250S-SQ
・(恵安)自作本舗の2.5タイプ(メディア再生機能付)
                 JHMP-2500S <- 100GBのHDD収納
……この三つで、FAT32フォーマット*のパーティションをマウントして使用して
いるととてもエラーが発生しやすいように感じています。
(*ロングファイルネームを使いますからVFATでもあると思います)

エラー発生時の dmesg にはたいてい次のように記録されます

 sd 16:0:0:0: rejecting I/O to device being removed
 ...(同じ内容が繰り返し続くだけ)...
 sd 16:0:0:0: rejecting I/O to device being removed

そうしたディスクを接続したときのメッセージは次のようになっていまして、
 SCSI device sdb: 195371568 512-byte hdwr sectors (100030 MB)
 sdb: test WP failed, assume Write Enabled
 sdb: assuming drive cache: write through
 SCSI device sdb: 195371568 512-byte hdwr sectors (100030 MB)
 sdb: test WP failed, assume Write Enabled
 sdb: assuming drive cache: write through
  sdb: sdb1 sdb2
 sd 16:0:0:0: Attached scsi disk sdb
 sd 16:0:0:0: Attached scsi generic sg1 type 0
 usb-storage: device scan complete
……一つ気になるのは 「test WP failed」ぐらいですが、残念ながら何か
顕著な差異を見付けるには至っていません。

マウントの方法については、root で mount 、 pmount 、 nautilusから
マウント、あるいはユーザーでもマウントしたりしましたが、今一つ
規則性が見えません。「エラーが起きる時は起きる」という程度です。
読み取りよりは書き込みの方がエラーが起きやすいのですが、読み取りでも
エラーが起きないわけではありません。小さいファイルよりは大きなファイルの
方がエラーが起きやすいのですが、ものすごく小さいファイルでも起きる時は
起きます。2.5インチタイプのものはUSBからのパワーだけでなく付属ACアダプタ
での使用と比べてみましたが、どちらでも起きる時は起きるので、やはり
はっきりとした差異が見えません。WindowsMe、WindowsXP、それからLinuxで
それぞれFDISKを使ってフォーマットをかけて比べてみたのですがどれも
同じようにエラーが起きます。(Meは修正FDISKで、XPはディスク管理等で)
ハード面では接続するUSBケーブルを高品位なものに変えたり、極力短いものに
してみたり、HDDそのものを交換してみたりしましたが、変化らしいものが
見えず、やはり「起きる時は起きる」としか表現できないのです。

Googleを使って今さらながら FAT32とVFATについて文書を読んでみたのですが
それらファイルシステムのサイズやファイル数の制限事項が今回のような
エラーの発生と関係があるようには思えませんでした。

逆に、ほとんど無視してよい程エラーが起きない条件も少し分かっています。
その一つは「FAT32を使わない」事です。同じハードディスクに
別パーティションを切ってEXT3ファイルシステムを作って使用すると、
何の心配も要らなくなる程エラーが起きません。先に紹介した3種類全てで
同じように安定します。
もう一つは「Windowsから使用する」場合です。接続するPCが異なってしまうので
同じ条件にはなりませんが、WinMeとWinXPでファイルのコピー・削除・リネーム
検索・作成、特に目立ったエラーは起きません。

目的としているのは FAT32を安定してマウントする事なのですが、同じ
ハードウェアでファイルシステムがEXT3なら安定し、または接続先OSが
Windowsならば安定するようなので、何かこうしたケースタイプの
USB-HDDに使用されているチップについても考えるべきなのかな、と
思っているところです。
そうすると、udev や、 /etc/modprobe.d/ 以下の blacklist 等で
対応できないかとか、mount のオプションに解決策が見えないかと考えている
所ですが、参考にする文献に行きあたらずに止まっている次第です。

それから、他のLinuxを試行する環境を持っていないのでそちら方面が
テストできていません。
「VineLinux4.0」で「USB 2.0」接続で、
「USB-HDD」の「大容量のもの」で「FAT32」ファイルシステムで
フォーマットされたものを「マウント」して使用すると高い頻度で
「エラーが発生してケーブルを抜くしかなくなる」というものです。

コマンドや mount オプションの違いがエラー発生の違いになればもう少し
分かり良いのですが、とにかくどれもこれも条件が満たされていると
「起きる時は起きる」という地雷のような状態です。かなり精神的に
きつい事になっています。ともかくいまの所は、特別用がなければ FAT32
を使わないようにするか、USBメモリの方を使うようにしています。


-- 
__/__/__/__/__/__/__/__/__/__/
 ZON or MaruArt. 
>> Babasaki Seiichirou (Jap)
E-Mail mindgear@xxxxxxxxxxxx
Zaurus      zon@xxxxxxxxxxxx
__/__/__/__/__/__/__/__/__/__/