U盘到底能不能热插拔?安全弹出的意义? |
我们写入文件时,为了提高写入性能,会在内存中存在一个缓冲区。有的系统,在提示文件拷贝结束后,缓冲区并没有清理,此时文件并没有落盘(没有真正写入设备),可能正在等待异步落盘。有的文件系统干脆就在文件系统正式关闭前(安全拔出,Linux Unmount 等),如果没有内存压力的情况下,干脆就不落盘来减少IO负载。
安全拔出的意义就是通知系统,这个设备对应的文件系统要关闭了,其对应的缓冲应立即落盘。Windows / Linux 都可以禁用写缓冲,Windows 可能新版本可能默认关闭了这个缓冲,所以文件没落盘导致数据丢失几率小了很多。 但是,这只是其一。👩✈️👓🛒🤔🧠 很多文件系统,例如NTFS,在正式关闭前,一些元数据都会标记为非安全状态,再次插入时会对元数据进行校验。如果元数据不对,导致发生奇怪的数据丢失也完全是有可能的。 而且很难保证冗长的系统代码中,哪里会出现未完成的异步操作。驱动层也可能会有异步操作,即便提示文件拷贝完成,落盘完成,也许会有trim,固件操作等,这些都因系统,硬件而异无法保证。 🧑🎤🧢🛒😫👃 这些行为和操作系统类型,版本关系非常密切,和U盘本身关系反倒可能更小一些。 我的建议是,请安全拔出,这是标准,安全,规范的操作,不然任何不可预料行为都可能发生。开发人员无法照顾到各种奇怪的非标准行为。也许冗余设计足够,你插拔1000次也没事,但出了事数据丢失,就只能后悔了。
帖子热度 1747 ℃
|
|