これを 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
この時間は、変更されたデータの量に比例しますか?とにかくそれをアンマウントするのにこれほど長い時間がかかるべきですか?
これは、カーネルがデバイスへの書き込みのバッファリングを含む多くのバッファリングを行うことと関係があります。
発行した場合:
cp large_file /mnt/htc/
cp
は、データのwrite
を終了するとすぐに戻りますが、(合理的に「遅い」デバイス/接続の場合)そのデータが実際に書き込まれるかなり前に返されます。 (cp
またはそれ自体を使用するツールがfsync
または同様の呼び出しを発行して、実際のデータがドライブにヒットするのを待機しない限り、一部のグラフィカルファイルマネージャーはこれを実行しますが、一部のツールには、それらがヒットするかどうかを制御するために使用できるオプションがあります。)
unmount
は、データが失われないように、デバイスを「デタッチ」する前に書き込みバッファーをフラッシュします。カーネルが大量のデータをバッファリングし、実際の書き込みが遅い場合は、時間がかかる可能性があります。
コピーとsysstat
を実行している間、ターミナルでiostat 2
(unmount
の一部)のようなものを実行しようとすると、ポイントunmount
が戻るまで書き込みI/Oが表示されます。