不确定是否应该将其发布在安卓SE因为我不认为这与 Android 操作系统有直接关系。在我的系统上,我手动mount
将umount
我的 HTC 设备设置为以下选项/etc/fstab
:
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
这个时间与修改的数据量成正比吗?无论如何都要花这么长时间才能卸载它吗?
答案1
这与内核执行大量缓冲有关,包括缓冲对设备的写入。
如果您发出:
cp large_file /mnt/htc/
cp
将在完成数据后立即返回write
,但(对于相当“慢”的设备/连接)早在数据实际写入之前。 (除非cp
您使用的工具本身发出fsync
或类似的调用来等待实际数据到达驱动器 - 某些图形文件管理器会执行此操作,某些工具具有可用于控制它们是否执行的选项。)
unmount
在“分离”设备之前刷新写入缓冲区,这样您就不会丢失数据。如果内核缓冲大量数据,则可能会花费大量时间,并且实际写入速度很慢。
在执行复制和操作时,尝试在终端中运行类似iostat 2
(部分)的操作,您应该看到写入 I/O,直到该点返回。sysstat
unmount
unmount