当您在未卸载的情况下拔下 USB 驱动器时,您的操作系统会警告您此类操作对您的设备有多么可怕(我在 OSX 上)。
我通常会遵循建议,在拔下电源之前先卸载,但这种情况发生了很多次(数千次),在我的任务结束时,我刚刚拔掉了(高清存储、手机等)的电源,但我从未注意到我的设备上有损坏的数据。
我很幸运吗?还是这个烦人的警告可以忽略?
答案1
要么您很幸运从未遇到过数据损坏,要么您很不幸从未注意到您的数据已损坏。
当您执行应写入磁盘的操作时,大多数操作系统都会将写入操作放入队列中。它们会不时刷新队列。(我在这里称之为队列,但实际上操作可以无序执行,操作系统会在速度更快时执行此操作并给出相同的最终结果。)这可以使写入操作快得多,因为系统会在没有更好的事情可做时尝试执行它们,并且因为它可以智能地对它们进行分组。
如果您在所有内容写入之前拔下设备,您可能会错过最新数据。更糟糕的是,如果操作系统一直在无序执行操作,您可能会使设备处于不一致的状态,并丢失最新数据以外的数据。
一些操作系统对可移动设备采用更保守(但更慢)的模式,以减少在卸载设备之前拔出设备所带来的风险。
添加:
无序执行操作有时不仅仅是速度问题。廉价闪存介质(不会在硬件级别进行扇区重新分配)对您可以写入任何给定扇区的次数有限制。如果您天真地在发生更改时写入所有更改,这可能会杀死包含(V)FAT 文件系统(可移动驱动器的最常见情况)上的文件分配表或典型现代文件系统上的日志的扇区。(参见例如sync
Linux 内核邮件列表中的讨论) 这里,每次写入文件时不更新 FAT 或日志不仅可以大大提高性能,而且对硬件的使用寿命也有好处。
直到最近,Linux 只提供了sync
(在发生更改时写入所有更改)和async
(在方便时写入)之间的选择。最近的版本引入了flush
FAT 文件系统的选项,该选项介于两者之间(磁盘变为非活动状态时立即刷新所有延迟写入);它在 Ubuntu 10.04 中默认启用。
另一方面,卸载可移动驱动器可确保没有应用程序打开文件。如果您在拔出电源之前没有卸载,您将无法注意到是否有未保存的数据,直到为时已晚。在文件打开时卸载还会增加损坏的可能性,无论是在文件系统级别(操作系统可能已将某些操作排队,直到文件关闭)还是在应用程序级别(例如,如果应用程序放置了一个锁定文件,它将不会被删除)。
答案2
您面临的主要风险是延迟写入。由于各种原因,系统并不总是在收到指示时将数据写入磁盘,而是将其保存在内存中。当您卸载它时,它会确保将所有内容写入磁盘(并确保它当前未被使用)。您可能知道您是否正在写入磁盘,但您可能没有意识到您的操作系统尚未写入您之前告诉它写入的所有内容。
此操作的频率取决于您的系统以及您对 USB 驱动器的操作。如果卸载通常很慢,并且您可以听到驱动器发出的写入噪音,那么您可能应该继续卸载。但是,如果卸载总是即时完成,那么请随意跳过此步骤,风险自负。
答案3
我认为没有人解决过读取和写入访问的问题。如果您没有将任何内容复制到闪存驱动器,或者没有打开文件进行写入,那么删除它可能很安全——如果我只将文件从闪存驱动器复制到我的计算机,我通常不会花时间卸载它。但如果我要将文件复制到闪存驱动器,那么我会采取 eatra 步骤——是的,我曾经因为在写入后过早删除闪存驱动器而导致文件损坏。
答案4
在大多数情况下,不系安全带开车是安全的。但当出现问题时,你会感谢自己系了安全带。
是的。虽然大多数情况下,直接移除 USB 驱动器而不卸载它是安全的,但绝对不建议这么做。