卸载 HTC 设备需要永远

5 unmounting block-device

不确定是否应该在Android SE上发布此内容,因为我认为这与 Android 操作系统没有直接关系。在我的系统上,我手动mountumount我的 HTC 设备使用以下选项/etc/fstab

UUID=3465-3762 /mnt/htc auto gid=100,umask=002,noauto,user,rw,exec 0 0
Run Code Online (Sandbox Code Playgroud)

这在修改 SD 卡上的少量数据时工作正常,但是每当我从另一台设备复制例如几个以 FLAC 编码的音乐专辑时 - 卸载 SD 卡似乎需要永远:

$ time umount /mnt/htc/
real    1m17.195s
user    0m0.000s
sys     0m0.237s
Run Code Online (Sandbox Code Playgroud)

这个时间和修改的数据量成正比吗?无论如何都要花这么长时间才能卸载它吗?

Mat*_*Mat 6

这与内核进行大量缓冲有关,包括缓冲对设备的写入。

如果您发出:

cp large_file /mnt/htc/
Run Code Online (Sandbox Code Playgroud)

cp将在完成write数据后立即返回,但是(对于合理的“慢”设备/连接)在实际写入数据之前很久。(除非cp您使用的工具本身出现问题fsync或类似的调用以等待实际数据到达驱动器 - 一些图形文件管理器会这样做,一些工具可以使用选项来控制它们是否这样做。)

unmount在“分离”设备之前刷新写入缓冲区,这样您就不会丢失数据。如果内核缓冲了大量数据,则可能需要很多时间,而实际写入速度很慢。

尝试在执行复制和 的同时在终端中运行类似iostat 2(的一部分sysstatunmount,您应该看到写入 I/O,直到该点unmount返回。