web-dev-qa-db-ja.com

HTCデバイスのアンマウントには永遠に時間がかかります

これを Android SE に投稿する必要があるかどうかわからない。これは、Android OSに直接関係しているとは思わないからです。私のシステムでは手動でmountおよびumount/etc/fstabにこれらのオプションがあるHTCデバイス:

UUID=3465-3762 /mnt/htc auto gid=100,umask=002,noauto,user,rw,exec 0 0

これは、SDカード上の少量のデータを変更する場合は問題なく機能しますが、たとえば、別のデバイスからFLACでエンコードされたいくつかの音楽アルバム-SDカードのマウント解除には永遠に時間がかかるようです:

$ time umount /mnt/htc/
real    1m17.195s
user    0m0.000s
sys     0m0.237s

この時間は、変更されたデータの量に比例しますか?とにかくそれをアンマウントするのにこれほど長い時間がかかるべきですか?

5
user13742

これは、カーネルがデバイスへの書き込みのバッファリングを含む多くのバッファリングを行うことと関係があります。

発行した場合:

cp large_file /mnt/htc/

cpは、データのwriteを終了するとすぐに戻りますが、(合理的に「遅い」デバイス/接続の場合)そのデータが実際に書き込まれるかなり前に返されます。 (cpまたはそれ自体を使用するツールがfsyncまたは同様の呼び出しを発行して、実際のデータがドライブにヒットするのを待機しない限り、一部のグラフィカルファイルマネージャーはこれを実行しますが、一部のツールには、それらがヒットするかどうかを制御するために使用できるオプションがあります。)

unmountは、データが失われないように、デバイスを「デタッチ」する前に書き込みバッファーをフラッシュします。カーネルが大量のデータをバッファリングし、実際の書き込みが遅い場合は、時間がかかる可能性があります。

コピーとsysstatを実行している間、ターミナルでiostat 2unmountの一部)のようなものを実行しようとすると、ポイントunmountが戻るまで書き込みI/Oが表示されます。

6
Mat