cat_jiji
2014年2月19日 11時46分
お世話になります。
福島と申します。
Armadilo440,420でUSBメモリ(FAT32)に書き込みができない現象がでています。
※必ず書き込みできないわけでなく、正常なときもあります。
■環境
Armadillo440,420
2.6.26-at18
カーネルの変更は、
File systems ->
[*] Netwaork File Systems チェック
<*> CIFS support (advanced ...) チェック
です。
USBメモリは、FAT32 でフォーマットしています。
■書き込み手順
(1) USBメモリを上段に挿します。
(2) mount -t vfat /dev/sda1 /mnt/usb
(3) ファイルをUSB(mnt/usb)に作成(書き込み)
例.echo "123" >/mnt/usb/a などで複数個
(4) sync
(5) umount /mnt/usb
■USBメモリ確認
WindowsPCにUSBメモリを挿して、USB該当ドライブのプロパティの
ツール・エラーチェックを行なうと「デバイスに問題がある」となります。
umount しているので正常に書き込みそうなのですが。
それともUSBメモリは、マウント時 -o sync で同期モード でないといけない
のでしょうか。(-o sync のときは正常なようです。)
正しいUSBメモリの使用方法または、なにか対策など情報お持ちであれば、ご教示ください。
コメント
cat_jiji
福島です。
返信ありがとうございます。
umountを行なうことで正しく書き込まれること承知しました。
「書き込みできない」は、echo や cp, rm やプログラムからのopen,write,close
などすべて正常です。(正常なUSBメモリが前提です。)
しかし、umount後にUSBメモリをWindowsPCで見たところ書き込めていない状況です。
この状況は、
(a) ファイルが存在しない。
(b) ファイルが存在するが、中身がない。
です。
また、プロパティのエラーチェックを行なうと「デバイスに問題がある...」で
ファイル修復が行われます。
※FATが壊れているように思います。
windowsがエラーを出して、修復せずにarmadilloに挿すと、マウントできます。
fsckするとエラーを検出します。
また、書き込みすると
FAT: Filesystem panic (dev sda1)
fat_free_clusters: deleting FAT entry beyond EOF
File system has been set read-only
と出るときもありました。
※pdflush絡みかと思い、5分以上放置して、umount しても同じ状況と
なることがあります。
at_yashi
今まで usbメモリは数多く使っていますが、正常に umount された時にエラー
になる現象は見たことがないです。
- もし他の USBメモリが手元にあれば、そちらでも再現するか試して頂けますか?
- 差し障りなければ、メーカーと型番を教えて頂けますか?
> pdflush絡みかと思い、5分以上放置して、umount しても同じ状況となることがあります。
umount すると、論理的には USBメモリ内の情報が同期されるはずなのです
が...。挙動を聞くと、USBメモリ内のフラッシュメモリに情報が書き出されて
いない感じですね。
もしかして、USBメモリを引き抜かず、再度 mount すると、再現しなくなった
りしませんか? (USBメモリへの電源供給だけは継続させるという意味で)
cat_jiji
福島です。
他のUSBメモリ(他メーカ)を試してみます。
利用しているUSBメモリは、
バッファロー 2GB RUF2-K2G
4GB RUF2-K4GR
です。
>もしかして、USBメモリを引き抜かず、再度 mount すると、再現しなくなった
>りしませんか? (USBメモリへの電源供給だけは継続させるという意味で)
結果は書き出しできていません。
しかし、WindowsPCでのエラー状況が変わってきました。
プロパティのエラーチェックでは、「正常」となりますが、ファイルが書き込めて
いません。
たとえば、a,b,c と3つ書き込んでも WindowsPCでは、エラーチェックで正常、
a,c 2だけのファイルしか存在しない。
■他のUSBメモリを試しています。
IOデータやSILICON POWER、バッファローの古いタイプの512MB、
正常に書き込めています。
バッファロー RUF2-K2G でも古いタイプでは正常に書き込みできるようです。
(最近のRUF2-Kn 固有の不具合かとも思われます。)
挿入時のメッセージを調査して、USBメモリの違いなど追ってみて
再度、投稿します。
cat_jiji
福島です。
いくつかのUSBメモリで書き込みテストしてみました。
バッファローのUSBメモリファームが新しいバージョンで書き込みエラーとなるようです。
× バッファロー 2GB RUF2-K2G S/N:I20601 最近購入
× バッファロー 4GB RUF2-K4G S/N:I31201 最近購入
◎ バッファロー 2GB RUF2-K2G S/N:P00913 上2つより前に購入
◎ SONY 4GB USM4GR
◎ ELECOM 8GB MF-HTU3A08GBK
バッファロー・USBメモリ装着時のメッセージは以下のようになります。
バッファロー 2GB RUF2-K2G S/N:I20601
scsi 69:0:0:0: Direct-Access BUFFALO USB Flash Disk 4000 PQ: 0 ANSI: 4
バッファロー 4GB RUF2-K4GR S/N:I31201
scsi 68:0:0:0: Direct-Access BUFFALO USB Flash Disk 4000 PQ: 0 ANSI: 4
バッファロー 2GB RUF2-K2G S/N:P00913
scsi 66:0:0:0: Direct-Access BUFFALO USB Flash Disk 3.10 PQ: 0 ANSI: 0 CCS
■Armadillo220では書き込みが正常
A420で書き込みエラーとなったバッファローUSBメモリをA220、
2.6.12.3-a-15 で同じような書き込みテストを行なってみましたが、
正常に書き込みできています。
やはりドライバとの相性問題となるのでしょうか。
バッファローさんにも聞いてみようかと思います。
(「Linuxは対応していません。」で片付けられそうですが、 Mac対応となっているので
なんらかの情報を持っていそうですが。)
at_yashi
forks_yas
横から失礼します。
FORKS寺島と申します。
以前、Armadilloとは別のハードウェアですが、RUF2-K8Gとi.MX25xで同様の経験をした事があります。
読み出しは大丈夫なのですが書き込みをすると途中でエラーになる現象で、USBプロトコルアナライザで調べたところ、
OUTパケットに高頻度でCRCエラーが出ていて、回復出来なくなるとエラー終了するようでした。
他のUSBメモリではCRCエラーの頻度が少なくなったり、全くエラーが出なかったりとまちまちでした。
無論、RUF2-K8GをPCのUSBに繋いだ場合は正常に通信できていました(linuxです念のため)。
当時切り分けは出来ませんでしたが、i.MX25xのUSB-OTGコントローラかドライバに原因があると考えています。
以上、参考まで。
at_yashi
まだ物は入手していないのですが、2つ思いついたので。
- iram を変更すると、挙動が変ったりしますか?
- USBメモリではないのですが、他の USB デバイスでは、iram を変更すると
挙動が変ることがあります。
http://lists.atmark-techno.com/pipermail/armadillo/2011-December/007748…
- 2.6.35 を使うと、挙動が変ったりしますか?
(いつまでアルファなんだという話もありますが...)
↓を使うと、なにか変化ありますでしょうか?
http://armadillo.atmark-techno.com/dev/linux-2.6.35-at-alpha4-release
まだ入手できていないので、お願いする形になってしまいすみません。
もし時間があれば、お試し頂けると助かります。
cat_jiji
at_daisuke.sasaki
atu-k-1073
はじめまして。
少し、時間がたっていますが。
他のLinuxのシステムでも、同じバッファローの RUF2-K4GRで、似ている現象がありました。
ファイルに1行書き込んでSYNCコマンド発行してアンマウント後、USBメモリを抜き差しして、
内容を確認すると、ごくたまに最後の1行が書き込まれていませんでした。
USBメモリの中身を確認すると、書き込んだ行は正しく書き込まれていましたが、FAT32のディレクトリエントリの
ファイル容量やアクセスの日付などが更新されていませんでした。
USBアナライザで確認すると、最後にディレクトリエントリの情報がUSBに送られてACKが返信されていますので、
USB内部のコントローラとNANDフラッシュの間でデータ通信がうまくいっていないと予測されました。
試しにWindowsXPで同様に書き込みを行い、通信をUSBアナライザで確認すると、1個だけWindowsの方が
コマンドが多いのが分かりました。
それが、”PREVENT ALLOW MEDIUM REMOVAL”でした。
WindowsXPでは、このコマンドが最後に発行されていました。
このコマンドは、USBメモリが差し込まれると、LinuxでもWindowsでも"Prevent"=1としてコマンドは
発行されるのですが、アンマウント時に"Prevent"=0とするコマンドはWindowsXPでしか発行されていませんでした。
不具合のあったLinuxシステムでも、sg3_utilsパッケージをインストールして、
”sg_prevent -a /dev/sda1"などのコマンドをアンマウント直前に発行する事で、不具合が無くなりました。
armadilloでは、検証しておりませんが、参考になれば幸いです。
cat_jiji
atu-k-1073様
情報ありがとうございます。
さっそく、sg3_utiles/sg_prevent を Armadillo で実行してみました。
結果は、書き込みできませんでした。(壊れる)
ファイル書き込み、sync 、sg_prevent -a /dev/sda1、umount /dev/sda1
PCでUSBメモリをチェック すると壊れている状態です。
取り急ぎ、報告いたします。
最近テストしたUSBメモリ(無印)で壊れなかった物の Vendor ID が 13fe がありました。
また、ハギワラソリューションズの UDG4-2GDRJ と UDG4-2GDRJS も壊れませんでした。
cat_jiji
情報いただいた、sg3_utils のコマンドを変更してみました。
sg_sync を実行したところエラーが無くなりました。
操作は、ファイル書き込み、sync、sg_sync /dev/sda1 、umount /dev/sda1 、
PCでUSBメモリをチェックしました。
試験を2~3回繰り返すと発生したエラー状況が、今回の sg_syncの試験では
10回繰り返しても出ていません。
今後も試験を続けてみます。
USBメモリの型番は、バッファロー RUF2-K2G S/Nが Innnnn (アルファベットI始まり)
参考にしたURLは、
http://sg.danny.cz/sg/sg3_utils.html
http://blogs.msdn.com/b/jpwin/archive/2011/09/08/usb-mass-storage-and-c…
です。
さらに結果でましたら報告いたします。
atu-k-1073
at_yashi
2014年2月19日 14時06分
FAT32でも、umount が正しく行われていれば問題ないはずです。
umount
の前にsync
する必要もないですし、mount -o sync
も必要ありません。タイトルには「書き込みできない」とありますが、例に上げていただいたよう
に「echo などで書き込みできない」ということでしょうか? つまり、
echo
したファイルが windows から見えない?それとも、windows がエラーを出しているだけでしょうか? windows がエラー
を出した後、なにもせずに armadillo に差し直し、
mount
しなおすと、armadillo 側でもエラーがでますか?