Armadilloフォーラム

Armadilo440,420でUSBメモリ(FAT32)に書き込みができない現象

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メモリの使用方法または、なにか対策など情報お持ちであれば、ご教示ください。

コメント

FAT32でも、umount が正しく行われていれば問題ないはずです。
umountの前に sync する必要もないですし、
mount -o sync も必要ありません。

タイトルには「書き込みできない」とありますが、例に上げていただいたよう
に「echo などで書き込みできない」ということでしょうか? つまり、
echo したファイルが windows から見えない?

それとも、windows がエラーを出しているだけでしょうか? windows がエラー
を出した後、なにもせずに armadillo に差し直し、mount しな
おすと、armadillo 側でもエラーがでますか?

福島です。
返信ありがとうございます。

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 しても同じ状況と
なることがあります。

今まで usbメモリは数多く使っていますが、正常に umount された時にエラー
になる現象は見たことがないです。

- もし他の USBメモリが手元にあれば、そちらでも再現するか試して頂けますか?
- 差し障りなければ、メーカーと型番を教えて頂けますか?

> pdflush絡みかと思い、5分以上放置して、umount しても同じ状況となることがあります。

umount すると、論理的には USBメモリ内の情報が同期されるはずなのです
が...。挙動を聞くと、USBメモリ内のフラッシュメモリに情報が書き出されて
いない感じですね。

もしかして、USBメモリを引き抜かず、再度 mount すると、再現しなくなった
りしませんか? (USBメモリへの電源供給だけは継続させるという意味で)

福島です。

他の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メモリの違いなど追ってみて
再度、投稿します。

福島です。

いくつかの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対応となっているので
なんらかの情報を持っていそうですが。)

ありがとうございます。

こちらでも購入できるものがあるか探してみます。
もし入手できたら、また情報共有させてください。

横から失礼します。
FORKS寺島と申します。

以前、Armadilloとは別のハードウェアですが、RUF2-K8Gとi.MX25xで同様の経験をした事があります。
読み出しは大丈夫なのですが書き込みをすると途中でエラーになる現象で、USBプロトコルアナライザで調べたところ、
OUTパケットに高頻度でCRCエラーが出ていて、回復出来なくなるとエラー終了するようでした。
他のUSBメモリではCRCエラーの頻度が少なくなったり、全くエラーが出なかったりとまちまちでした。
無論、RUF2-K8GをPCのUSBに繋いだ場合は正常に通信できていました(linuxです念のため)。
当時切り分けは出来ませんでしたが、i.MX25xのUSB-OTGコントローラかドライバに原因があると考えています。

以上、参考まで。

まだ物は入手していないのですが、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

まだ入手できていないので、お願いする形になってしまいすみません。
もし時間があれば、お試し頂けると助かります。

福島です。

FORKS寺島様、情報ありがとうございます。

バッファロー問い合わせ回答
やはり、Linuxは対応していないことで、情報も無いとのこと。
製品差についてもWebページ以外の情報は非公開とのことでした。

at_yashi様、試験方法ありがとうございます。
2.6.35を利用してみましたが、同じ状況でした。
(バッファローの新しい型番のUSBメモリだけがだめでした。)
iram変更はまだ試していません。(試験後報告します。)

取り急ぎ、報告いたします。

at_daisuke.sasaki

2014年3月6日 21時52分

佐々木大輔です。

弊社でも「バッファロー 4GB RUF2-K4GR」を購入しました。

動作確認を実施したところ、同様の現象が再現しましたので、
問題の解析を行いたいと思います。

はじめまして。

少し、時間がたっていますが。

他の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では、検証しておりませんが、参考になれば幸いです。

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 も壊れませんでした。

情報いただいた、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…
です。

さらに結果でましたら報告いたします。

こんにちは

こちらで確認したUSBメモリはバッファローRUF2-K4GRで、”どっちもUSB”というメモリです。
S/Nは同じでアルファベットの"アイ”から始まって数字5桁のものでした。

私の場合は、Disk Investigatorと呼ばれるソフトウエアで、USBメモリの中身を読みだしてデータエリア上はデータが
書き込まれており、ディレクトリエントリが変わっていない事を確認しました。

プロトコルアナライザは、TeledyeLecroyのMercuryT2です。

以上、ご参考まで。