看似美好的东西,往往藏着陷阱。 收藏本站
登陆 / 注册 搜索

阅读:172   回复: 1

U盘到底能不能热插拔?安全弹出的意义?

[复制链接]
空谷幽兰 踏破虚空 2022-12-28 22:31 |显示全部楼层

从前车马很慢,书信很远,一生只够爱一个人,但是可以纳很多妾啊!

精华达人 主题破百 以坛为家 论坛元老 土豪会员 五周年纪念
我们写入文件时,为了提高写入性能,会在内存中存在一个缓冲区。有的系统,在提示文件拷贝结束后,缓冲区并没有清理,此时文件并没有落盘(没有真正写入设备),可能正在等待异步落盘。有的文件系统干脆就在文件系统正式关闭前(安全拔出,Linux Unmount 等),如果没有内存压力的情况下,干脆就不落盘来减少IO负载。

安全拔出的意义就是通知系统,这个设备对应的文件系统要关闭了,其对应的缓冲应立即落盘。Windows / Linux 都可以禁用写缓冲,Windows 可能新版本可能默认关闭了这个缓冲,所以文件没落盘导致数据丢失几率小了很多。

但是,这只是其一。

👩‍✈️‍🩴📷☠🤳



很多文件系统,例如NTFS,在正式关闭前,一些元数据都会标记为非安全状态,再次插入时会对元数据进行校验。如果元数据不对,导致发生奇怪的数据丢失也完全是有可能的。

而且很难保证冗长的系统代码中,哪里会出现未完成的异步操作。驱动层也可能会有异步操作,即便提示文件拷贝完成,落盘完成,也许会有trim,固件操作等,这些都因系统,硬件而异无法保证。

👈⛵🍏✡🐢‍这些行为和操作系统类型,版本关系非常密切,和U盘本身关系反倒可能更小一些。

我的建议是,请安全拔出,这是标准,安全,规范的操作,不然任何不可预料行为都可能发生。开发人员无法照顾到各种奇怪的非标准行为。也许冗余设计足够,你插拔1000次也没事,但出了事数据丢失,就只能后悔了。
上一篇
下一篇
帖子热度 182 ℃

明智桑 「初入古黑」 2022-12-28 22:31 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

七天不见‍‍,如隔一周
您需要登录后才可以回帖 登录 | 免费注册  

本版积分规则

快速回复 返回列表