不推出就拔掉外置驱动器会损坏它吗?

每个人至少都有过一次不推出就直接拔掉 U 盘的经历。这里说明当你跳过推出这一步时,你的数据和驱动器实际会发生什么。

你正赶时间。驱动器推不出来。你还是拔掉了线缆。我们都干过这事。

也许什么都没发生。也许你收到了那条恼人的“磁盘未正确推出”通知,但之后一切看起来都好好的。于是你开始怀疑,推出究竟是不是真有必要,还是只是那些在实践中无关紧要的谨慎习惯之一。

它有关紧要。但未必以你所预想的方式。

推出究竟做了什么

当你在 macOS 上推出一个驱动器时,系统会依次做三件事。

首先,它会刷新写入缓存。macOS 会先把最近写入的数据保留在内存中,然后才提交到驱动器。这能提升性能,但也意味着你“保存”了的数据可能还没真正写到磁盘上。推出会强制把所有缓存的数据写入。

其次,它会关闭所有文件句柄。每一个在驱动器上打开了文件的进程都会被通知释放它。这给了应用程序一个完成手头工作并干净地关闭文件的机会。

第三,它会卸载宗卷。该驱动器从文件系统树中被移除,操作系统不再承认它的存在。只有在这一步之后,物理断开才是安全的。

当你跳过推出、径直拔掉线缆时,你就同时跳过了这全部三个步骤。

真正的风险:写入缓存

写入缓存正是危险所在。包括 macOS 在内的现代操作系统不会立即把数据写入外置驱动器。出于性能原因,它们会把写入批量攒在一起,并定期刷新。

如果你拷贝一个文件,进度条走完了,那并不保证数据已经在驱动器上。系统可能从它自己的缓存确认了拷贝,而实际写入仍在排队。在那一刻断开,驱动器上的文件就可能不完整、损坏,或彻底丢失。

风险窗口长短不一。在拷贝小文件之后,它可能只有一两秒。在大量传输之后,可能是十秒甚至更久。没有任何视觉指示器告诉你缓存何时已被完全刷新。

那只用来读取的驱动器呢?

如果你连接了驱动器、打开了一些文件,却从未往里面保存任何东西,那么拔掉的风险会大幅下降。没有写入就意味着没有要刷新的写入缓存,也没有处于传输途中的文件。

但“从未往里面保存任何东西”比你想象的更难保证。你在访达中浏览过的任何文件夹,macOS 都会向其写入 .DS_Store 文件。聚焦会写入索引数据。一些应用程序会在它们访问的宗卷上创建临时文件或锁文件。

你可能并未明确保存任何东西,但 macOS 很可能写入了某些东西。

文件系统损坏

除了单个文件丢失之外,还有更广泛的文件系统损坏风险。

文件系统会维护一些内部结构:目录、分配表、日志条目。这些结构描述了每个文件在磁盘上的位置以及空间如何分配。当你写入一个文件时,文件系统会更新这些结构。如果你在更新途中断开,这些结构就可能落入不一致的状态。

HFS+ 使用日志记录,它会在做出更改之前先记录计划中的更改。如果断开中断了这个过程,文件系统可以重放日志,恢复到一致的状态。APFS 则采取了完全不同的做法,用写时复制取代日志记录。新数据总是先写入空闲空间,只有在写入完成后才更新指针。如果断开中断了这个过程,旧数据仍完好地保留在原始位置。无论用哪种文件系统,你都可能丢失正在写入的那个文件,但文件系统本身保持完好。

exFAT 和 FAT32 没有日志。在结构更新期间发生的断开可能让整个文件系统陷入损坏状态。文件可能消失、文件夹可能变得无法读取,或者驱动器可能彻底拒绝装载。

如果你的驱动器格式化为 exFAT(在 Mac 与 Windows 之间共用的驱动器上很常见),那么正确推出就更加重要了。

对驱动器的物理损坏

现代驱动器在硬件层面对突然断开的应对相当不错。SSD 没有活动部件,所以没有磁头碰撞的风险。机械硬盘在断电时会自动停泊其读/写磁头。

更大的物理隐患是接口。反复猛拽 USB 线缆会磨损驱动器和 Mac 两端的端口。USB-C 接口比较旧的 USB-A 更耐用,但也并非对磨损免疫。

反复的意外断开还可能影响 SSD 固件。驱动器的控制器在每次非正常关机后都必须执行恢复操作,这会增加写入周期和复杂性。

累积效应

单独一次意外断开不太可能造成灾难性损害。现代文件系统中的日志记录能应对它,而驱动器也是为承受它而设计的。

问题在于当它变成一种习惯时。每一次你跳过推出,你都在赌写入缓存是否为空、文件系统当时是否正在更新,以及你重新连接时一切是否会保持一致。

经过几十次乃至上百次不当断开,出问题的几率会上升。小的不一致会累积。文件会产生细微的损坏,直到你几周后试图打开它们时才暴露出来。

直接推出驱动器就好

安全的做法显而易见:始终推出。但人们之所以跳过它,并非因为懒惰。而是因为在 macOS 上推出失败得太频繁了。你试图推出,却被告知磁盘“正在使用”,而你不知道为什么,也不知道该怎么办。

Ejecta 从一开始就消除了人们跳过推出的理由。当你的驱动器无法推出时,它会明确告诉你是哪个进程在阻止它,并让你一键退出那个进程。整件事只需几秒钟,而不会变成一项研究课题。

正确推出你的驱动器是那些能预防罕见却痛苦的数据丢失的小习惯之一。让做正确的事变得容易,你就会每一次都去做。

如果你不想每次都动用终端,Ejecta 会准确告诉你是哪个进程在占用硬盘——只需在菜单栏中点击一下即可退出它。

立即购买 — $9.99