从Windows PC安全删除USB介质的背后原理是什么?[重复]


97

经常在匆忙中,我会自动从台式机或笔记本电脑的外部硬盘驱动器中拔出USB随身碟或USB电缆,而无需右键单击系统托盘中的安全删除图标并通过这种方式拔出。到目前为止,每次我“匆匆忙忙”时,都没有发生任何不幸的事情。

右键单击安全删除图标背后的原理是什么,如果不执行此操作,我真的会丢失USB介质上的信息吗?

编辑

如果USB介质在将其从计算机中拉出时仍在闪烁(而不是不闪烁),丢失此类信息的可能性是否会大大增加


5
@woliveirajr,这与重复项没有什么相似之处吗?一个是询问弹出问题,它指向CD ROM和Kindle,因为这是为了了解如果不安全地删除信息是否会丢失信息。很高兴犯错,但我看不到。
戴夫


2
@Simon:实际上,我想要的是superuser.com/questions/619076/…问题,但它被标记为与我的评论中链接的问题重复的问题。而从“奥古斯弗朗西斯”答案是你的问题
woliveirajr


1
尝试在安全删除图标上单击鼠标左键,以安全地删除设备,而不是右键单击。它更快。
djhurio

Answers:


104

是的,它可以,这与在使用设备(读取或写入)时卸下设备会发生什么有关。

插入USB驱动器后,您便可以自由控制PC来读写数据。其中一些已缓存。

通过不立即将信息写入USB设备,而是将其保留在PC的内存(RAM)中来进行缓存。如果要在写入此信息之前或在写入此信息时将USB驱动器从PC中拉出,最终将导致文件损坏。

但是,Windows会自动禁用USB设备上的缓存,除非您明确说要启用它。在大多数情况下,如果您没有从设备中写入或读取任何内容,则无需单击“安全删除硬件”按钮。

它在那里只是一种额外的安全级别,可防止您破坏自己的文件。

这样做会导致文件“正常”关闭,并保留数据,指针和文件大小指示符。当写入磁盘时,计算机并不总是“刷新”缓冲区,并且可能只写入了部分数据。使用正确的过程将确保数据和指针的状态良好。

资源


41
我想补充一点,虽然USB笔式驱动器默认禁用缓存,但众所周知人们会更改这些默认设置。因此,请不要在随机计算机上拉出任何驱动器。(更改它的原因是极大的速度提升)。
Hennes 2013年

我曾经这样浪费时间(但没有数据)。该文件从未移交给闪存驱动器,因为我很着急。不过,我想再也不会发生了,缓存不是很常见。
托马斯(Thomas)

发生这种情况时,我已经看到“延迟写入”错误。
TecBrat

5
我认为这不仅仅是缓存...如果驱动器正在使用中,Windows将积极拒绝安全删除。
Ben Voigt

5
如果它也提到Windows确保驱动器上当前没有文件打开的事实,我会给这个答案+1。许多过程都像explorer.exe在不知道驱动器的情况下对驱动器上的文件进行愚蠢的事情一样,并且最好在拔出它之前确保Tom Foolery不会发生任何事情。更不用说有些人喜欢做更多愚蠢的事情,例如直接在驱动器上打开Excel电子表格,然后忘记打开Excel。
菲尔(Phil)

45

第二个原因是,写入命令后,闪存驱动器需要在约0.25秒的时间内保持稳定的电源。这是一个基本的物理问题,由于某些写入的随机因素,可能会在逻辑0.72的状态下留下逻辑1位。修复很容易:只需重写一下,甚至几次。最终它会粘住。

如果您真的不走运,那么丢失的位将在文件系统表中并损坏,例如整个目录。


24
这很有趣-我可以从中获得更多参考资料的参考资料吗?
SqlRyan

有没有可用于检查目录是否已损坏的实用程序?
JFW

@JFW是的;只需打开闪存驱动器并浏览文件夹即可。如果缺少任何内容,或者给您类似“目录可能已损坏”之类的消息,则表明存在损坏(或至少从未清除脏位,这通常意味着存在损坏)。
AJMansfield

9
@SqlRyan,这是有关断电和写错误的影响的论文
SeanC 2013年

1
@JFW:在Windows上,标准错误检查将尝试此操作。(在每个驱动器的属性窗口中找到)。// @ AJMansfield:由于断电而导致的闪存损坏无法正常工作。脏位可能在最后一次写入时已被清除,以合理的0.023结尾,而另一个(元数据)位以0.59结尾,需要重写。这不是每个部门的财产。(无论如何,Flash都无法在扇区基础上工作,太
细粒度了

21

几乎没有人意识到闪存驱动器下发生的所有事情。与在一个步骤中擦除并覆盖一个扇区的硬盘驱动器不同,闪存驱动器可以比执行擦除周期快得多的速度将数据写入空白的528字节页。另外,由于每个擦除控制电路将消耗相当数量的硅,所以闪存芯片通常没有用于每一页的单独电路,而是每个“块”具有一个电路,其中每个块包含数百或数千页。这意味着每次将不同的数据写入一个扇区时,都会将其写入以前的空白区域,并且将旧副本以某种方式标记为“过期”。在某个时候,闪存将执行“垃圾收集”循环,在该循环中,闪存将识别出一个包含大部分过期页面的区块,将所有未过期的页面从该块复制到另一个有空间的块,然后擦除该块。由于此类操作可能非常缓慢,因此某些驱动器将尝试在可能的情况下,在其他任何情况下都执行它们。驱动器在执行此类清理操作时不会告诉计算机,因为计算机通常不会在意。“陷阱”是,如果计算机不让驱动器知道它即将断电,则驱动器将无法知道何时可以安全地执行此类清理。因为计算机通常不会在乎。“陷阱”是,如果计算机不让驱动器知道它即将断电,则驱动器将无法知道何时可以安全地执行此类清理。因为计算机通常不会在乎。“陷阱”是,如果计算机不让驱动器知道它即将断电,则驱动器将无法知道何时可以安全地执行此类清理。

请注意,尽管设计了高质量的闪存驱动器,以确保在擦除旧副本之前总能完全写入新的数据副本,并确保它们始终能够找出每个块的哪个副本应被认为是最新的,而不是全部。闪存驱动器设计非常完美。在没有任何电源故障通知的情况下,一种被设计为100%证明数据丢失或不一致的算法的速度可能至少是满足宽松约束条件的速度的两倍。添加一个硬件掉电通知,该通知将在仍然有足够的能量完成一次或两次闪存写入操作时跳闸,以减少时间损失,但是使掉电通知100%可靠可能会很棘手,并且并非所有的实现都是完美的。


528字节?你是512吗?
Alvin Wong

1
@AlvinWong:页面为528字节。写入512字节的扇区不仅需要存储其中的数据,还需要指明数据所属的扇区。在任何时候,驱动器都容易知道“到目前为止,我已收到5,271,591,371个写入请求,下一个将使用块57的第15页。” 如果它接收到写数据的512个字节扇区147的请求,则块57的15页将接收这些数据的512个字节加上它们表示的5,271,591,372nd写入请求的指示,这是到扇区147
supercat

如果系统收到读取扇区147的请求,则磁盘上可能有许多页面保存扇区147,但是(没有另一个写入扇区147的请求),它们中的任何一个序列号都不会高于5,271,591,372;因此,框57的第15页将被识别为该扇区的“当前”版本,而任何编号较低的副本将被识别为已过时。请注意,从理论上讲,系统可以通过扫描所有页面以查找哪一个页面拥有最新版本来响应“读取扇区147”请求,但这将非常缓慢。
2013年

通常,系统将使用一些相当有趣的数据结构将所有内容的最新表保存在闪存中,并指示自该表以来可能已在闪存中写入了哪些物理页面的指示器最近更新。如果硬件设计使得即使断开电源,任何尝试进行的页面写入都将使用存储的能量完全完成,那么驱动器写入的页面显示“第5,271,591,372个写入请求是扇区147,这是其数据”,这一事实将得到解决。被视为更新该页面。
2013年

8

Windows本身会告诉您,如果使用某些设置(默认设置),则无需使用“安全删除硬件”选项。

快速拆卸与更好的性能

Windows允许您优化USB设备以快速移除或提高性能。默认情况下,Windows优化了USB设备以快速移除。您可以从设备管理器访问此设置-打开“开始”菜单,键入“设备管理器”,然后按Enter启动它。

展开“设备管理器”中的“磁盘驱动器”部分,右键单击您的设备,然后选择“属性”。

在“属性”窗口中选择“策略”选项卡。您会注意到Windows表示您可以安全地断开USB设备的连接,而无需使用“安全删除硬件”通知图标,因此这意味着您可以拔出USB设备而无需安全地删除它,对吗?没那么快。

数据损坏的危险

上面显示的Windows对话框具有误导性。如果在将USB设备写入数据时(例如,将文件移至其中或将文件保存至其中)拔出USB设备,则可能导致数据损坏。无论使用哪种选项,都应在拔下USB设备之前确保未使用它-一些USB记忆棒上的指示灯可能会在使用时闪烁。

但是,即使USB设备似乎没有在使用中,也可能仍在使用中。后台程序可能正在写入驱动器-因此,如果拔下驱动器,则可能导致数据损坏。如果您的USB记忆棒似乎没有在使用中,则可以拔出它,而不会发生任何数据损坏-但是,为了安全起见,使用“安全删除硬件”选项仍然是一个好主意。当您弹出设备时,Windows会告诉您何时可以安全删除–确保所有程序都已完成。写缓存

如果选择“更好的性能”选项,则Windows将缓存数据,而不是立即将其写入USB设备。这将提高设备的性能-但是,如果不使用“安全删除硬件”选项而拔出USB设备,则很可能会发生数据损坏。如果启用了缓存,则Windows不会立即将数据写入USB设备-即使数据似乎已经写入设备并且关闭了所有文件进度对话框,数据也可能只是缓存在您的系统上。

当您弹出设备时,Windows会将写缓存刷新到磁盘上,确保在可以安全删除驱动器时通知您所有必要的更改。最终,无论使用哪种选项,都应使用“安全删除硬件”图标并退出设备,然后再拔出它。您也可以在“计算机”窗口中右键单击它,然后选择“弹出”。Windows会告诉您何时可以安全删除设备,从而消除数据损坏的任何更改。

注意 此建议不仅适用于Windows –如果使用的是Linux,则在拔下USB设备之前,也应在文件管理器中使用“弹出”选项。Mac OS X也是如此。


2
在Linux命令行中,您也可以使用umount /path/to/device。:D
贾斯汀·皮尔斯

1
@JustinPearce与截然不同eject /dev/ice
CVn 2013年

1
@AugustusFrancis感谢您提到此“问题”不仅适用于Windows,而且也会影响其他OS。
西蒙(Simon)

1
哇。这个答案很不错,只有7分。目前,排名第一的是103点,全部与辅助缓存功能有关,默认情况下,该功能甚至没有启用。接下来的两个答案目前分别为45分和21分,它们充其量只是推测性的,它们在谈论硬件实现细节时并未参考任何来源或文档来支持其主张。有时,我有点担心超级用户的状态...
Zero3 '17

8

无法安全删除设备会导致幻像设备保留在Windows中。通常这不是一个直接的问题,但是一旦您积累了数百个幻像设备,事情就会开始出错。

编辑说明: 简而言之,幻像设备是指已安装驱动程序但不再连接到USB端口的设备。Windows会跟踪已安装的设备,但是由于尚未“安全地删除”设备,因此仍为该USB端口加载了驱动程序。这可能会导致各种问题,从插入闪存驱动器时分配新的驱动器号到导致视频游戏检测到不存在的控制器,等等。当您从Windows安全地删除设备时,您不仅要确保它不再写入数据,还告诉Windows从该USB端口卸载驱动程序。快速拔出驱动器不仅有数据损坏的风险,而且有可能制造出Windows不能很好处理的幻像设备。

默认情况下,Windows在“设备管理器”中不显示幻影设备,这就是为什么大多数人不熟悉该概念的原因。要手动找到这些设备,请以管理员身份运行Command Prompt,然后输入set devmgr_show_nonpresent_devices=1。这将允许设备管理器显示当前会话的幻像设备。

很可能有太多的幻影设备无法轻易用手将它们全部移除。 GhostBuster是一种轻量级的GUI,旨在轻松显示和删除幻像设备。

参考:https : //windowssecrets.com/newsletter/how-to-prevent-and-remove-phantom-devices/


我从来没有遇到过“幻影设备”这个词,谢谢您将它带到桌上。.可以这么说:)
Simon

直到前一天,当我的一个朋友发布了这个漂亮的小GUI时,我才听说过它们。馗嫁妹
acarbonaro

是否有可能在您的回答中解释更多有关“幻像设备效果”的信息,因为没有人提到过这一点。如果您不介意,以防万一您答案中的链接消失了。
西蒙(Simon)

希望我已经添加了足够的信息,但是如果您认为需要更多信息,我会很乐意添加任何必要的信息。
acarbonaro 2013年

很高兴我能帮上忙!
acarbonaro

6

通常,当计算机正在向USB驱动器写入数据时,如果不安全地将其拔出,则可能会损坏文件系统。

FAT32

然后,当您拥有使用Windows默认设置的FAT32磁盘时,Windows将不会缓存写入内容,因此您可以在未写入驱动器时将其拉出。

但是,可以通过启用写缓存来提高FAT32性能。但是,您必须安全地卸下驱动器,否则,并非所有数据都将写入磁盘。

在此处输入图片说明

NTFS

而且,当您使用NTFS时,由于它是日记文件系统,因此无法通过拉出驱动器破坏文件系统。但是,这样做会丢失或损坏文件。

至少从NTFS的角度来看,意外删除不会导致损坏。无论何时将驱动器从计算机中拔出,文件系统数据结构都将保持完整(或至少可以从更改日志中修复)。因此,从文件系统的角度来看,答案是“继续进行,随时随地拉动驱动器!”

由于NTFS是日记文件系统,因此它可以自动修复用于跟踪文件的内部数据结构,因此驱动器本身在逻辑上保持一致。该文件已正确设置为最终大小,并且其目录条目已正确链接。但是您写入该文件的数据呢?它从来没有做到。

即使NTFS健壮并且可以从意外删除中恢复,但健壮性不会扩展到丢失数据的内部一致性。

- 雷蒙·陈Raymond Chen)


我经常(感激!)经常遇到NTFS损坏案件。
免费咨询

3

您是否曾经注意到,有时“安全地”弹出USB闪存盘会花费几秒钟的时间,直到您被告知可以安全删除它为止?并且在此期间,磁盘持续闪烁其活动指示灯?

我确实经常看到这种情况,并且这足以表明我不必冒险抽出磁盘,即使当我偶尔意外抽出磁盘似乎永远不会丢失任何数据时也是如此。

有关可能发生的情况的更多背景信息:

可能的磁盘损坏。

其他人已经很好地解释了它们,特别是supercat的一个对闪存驱动器非常重要。

可能的程序问题。

这是在磁盘上打开文件的程序未做好充分准备的情况,以处理无法突然访问文件的情况。然后,这些程序可能会崩溃或冻结,具体取决于它们的开发水平。

因此,通过使用“安全地删除硬件”命令,您将在操作系统中启动一个进程,要求这些程序放开磁盘。一旦所有程序放开(如果释放),系统将提示您现在可以安全断开磁盘连接。

但是,如果正在运行的某个程序不会释放磁盘,那么系统也会提示您,然后您可以选择关闭该程序,以使其停止使用磁盘,从而防止磁盘上的两个数据损坏和计算机上的程序问题。

有关缓存和磁盘损坏的更多背景

存储文件的磁盘就像带有索引的库一样工作。挑战在于索引需要与其包含的书籍(文件)保持同步。当您在磁盘上添加/删除文件时,其索引(即目录)也需要更新。所有这些操作分几个步骤进行,将磁盘拉出中间会导致磁盘结构损坏(要识别并修复磁盘结构,可以使用诸如“ chkdisk”之类的工具)。

但是,始终保持目录为最新状态需要大量的编写和时间。因此,如果您将100个文件写入磁盘,则操作系统(例如Windows)不会写入每个文件,而后再更新(通常是相同的)目录,而是通过首先将100个文件的数据写入磁盘来优化此操作。 ,然后一次性写入更新后的目录。

这种优化使复制(和删除)文件的速度大大加快,现代操作系统往往会尽可能延迟目录的更新,以进一步提高计算机的速度。

即,操作系统仅在其本地内存(RAM或内部硬盘,通常比USB连接还快)中保留正确的目录。这就是其他人所说的缓存:将数据保存在单独的位置以加快访问速度。

但是,如果整个计算机都掉电了怎么办?好了,即使那样,它仍然有方法可以在再次打开电源后立即从中恢复,从而保持目录完整(例如,使用“新闻发布”)。当然,这只有在重新通电后仍然保留了其目录已缓存的磁盘的情况下才有效(通常是这种情况,因此这里无需担心)。

但是,如果您仅删除磁盘并且不让操作系统将其缓存的目录写回到磁盘,那么所有这些保护措施都将无效。

因此,您向操作系统(及其运行的程序)宣布要删除磁盘。此过程也称为“卸载”,导致将所有缓存的数据写入磁盘,然后停止对磁盘的进一步访问。


1

Flash只能写一个,不能写零。它能够擦除整个块(将其设置为零)。因为大多数闪存媒体都使用Wear Leveling,所以它仅将一个块添加到“待删除”列表中,而使用另一个块。只要无需执行其他任何操作,您USB介质上的控制器就会开始擦除“待删除”列表中的块。在擦除块时插入电源可能会使它们处于不确定状态。


如果这是答案,则表明您永远无法安全地卸下USB驱动器,因为损耗平衡​​是由驱动器的控制器而不是操作系统来完成的。
CVn 2013年

但是弹出和卸载之间是有区别的。在某些操作系统(Mac OS X)中,可以卸下驱动器但不能弹出驱动器。如果弹出存储棒,则设备将关闭,因此您将无法再次安装它。
frog32 2013年

此级别上的所有内容都应该是事务性的-直到实际删除该块后,该块才会从“待删除”队列中删除。它的状态不会是不确定的-如果系统没有完成擦除,则应该在下一次(从块的开头)开始拾取。
GalacticCowboy

@GalacticCowboy:驱动器本来应该是事务性的,但并非所有实现都同样可靠。如果写操作是可靠的事务处理,那么使擦除操作(需要更长的时间)也很健壮的事务也不太难,但是可能很难确保在写操作期间不会断电,也不会导致读操作像写的那样99%的时间,但偶尔会显示为空白。也许可以将此类事件的发生率降低到流星撞击板子之下的可能性以下,但是很难完全消除它。
2013年

@supercat-这并没有改变我的意思,但是-如果驱动器在擦除过程中断电,则队列将不会被修改,而该块稍后将被擦除。是的,如果在重写队列时断电,是的,可能会导致问题,但是正如您在回答中所指出的那样,写入速度明显更快(因此中断的可能性较小)。仍然并非没有可能,只是您可能无需担心的任何事情。
GalacticCowboy

1

从Windows PC安全删除USB介质的背后原理是什么?

此功能适用于可移动媒体。也就是说,可以在任何给定时刻断开通过USB,FireWire等连接的媒体。

访问驱动器以按要求将每条数据写入该驱动器将给驱动器带来更多负担,这将降低性能并增加磨损。为了提高性能并减少磨损,Windows可以缓存数据以便一次写入一堆数据。这就像将旅程推迟到镇的另一端,直到您有足够的差事去做,使旅途变得值得。

缓存的问题是,如果在发出写入请求的时间与Windows将缓存“清空”到磁盘(实际上是执行写入)的时间之间恰好拔出了驱动器,则该数据将不会被写入。这导致数据丢失,甚至可能损坏。

通过“弹出”可移动卷,您告诉Windows刷新缓存并写入其等待的任何数据。这样,您可以确保安全拔出驱动器。

经常在匆忙中,我会自动从台式机或笔记本电脑的外部硬盘驱动器中拔出USB随身碟或USB电缆,而无需右键单击系统托盘中的安全删除图标并通过这种方式拔出。到目前为止,每次我“匆匆忙忙”时,都没有发生任何不幸的事情。

这主要是因为微软并不愚蠢(这里不要争论……)他们知道人们不喜欢做额外的工作。因此,当您首次将可移动媒体插入系统时,Windows为它安装驱动程序时,它所做的部分配置就是将其设置为“快速删除”。

设备管理器驱动器属性”对话框的“ 策略”选项卡中,根据驱动器的类型,可以选择将驱动器配置为快速移除或性能更好,或者启用或禁用写缓存。

启用写缓存或选择更好的性能将导致Windows将写请求排队,这将提高性能并减少磨损,但同时也增加了数据丢失的机会,并且需要在删除卷之前弹出该卷。禁用写缓存或选择快速删除会导致Windows立即将所有内容写入磁盘,这会降低性能并增加磨损,但可以简单地将驱动器拉出。

由于Windows默认将可移动媒体默认为快速删除,因此大多数人很少会遇到仅拔出而不先弹出的问题。


下面的屏幕快照显示了各种介质的默认驱动器策略。有几点有趣的注意事项。

内部硬盘驱动器设置为使用写缓存(图1)。这是有道理的,因为假定驱动器是永久性固定装置,因此在写请求和缓存刷新之间的短时间内,它通常不会变得不可用。

USB闪存驱动器已设置为可快速拔出(图2)。这也是有道理的,因为它使轻松删除它变得很方便。

USB存储卡已配置为可快速移除(图3)。这是合乎逻辑的,因为它与USB闪存驱动器(或任何其他USB驱动器)本质上没有什么不同。有趣的是,内部存储卡读取器也设置为快速拆卸(图4)。读者本身内置到笔记本电脑,因此始终存在,但所以它默认为快速去除可以被删除,。(对于软盘驱动器是相同的;没有缓存,因为可以删除驱动器中的磁盘。)

更加有趣的是外部USB硬盘驱动器(图5)和iPod mini(图6),其中有一点旋转的硬盘驱动器。这些是实际的硬盘驱动器,而不是闪存驱动器,但是由于它们是可移动的,因此它们仍默认为快速删除。同样,这是有道理的,因为可以在将数据写入磁盘之前将其拔出。

如果不执行此操作,我真的会丢失USB介质上的信息吗?

如果usb介质在从计算机中拉出时仍在闪烁(而不是不闪烁),丢失此类信息的可能性是否会大大增加?

是。问题是,即使将驱动器设置为快速拆卸,也无法确保立即拔出它是安全的。仅因为Windows立即执行写操作,并不意味着它们立即发生。

大多数可移动介质(例如闪存驱动器和存储卡)比硬盘驱动器慢得多。因此,即使Windows 会在请求后立即启动写入操作,通常也要花一些时间才能实际写入数据。即使写/复制/等 显示写进度消失的对话框,驱动器可能仍在写片刻,如果它有自己的驱动器活动LED,您可以看到此信息。立即删除媒体是不安全的。观察LED,等待其完全停止闪烁。


为了更加安全,您可以使用Sync之类的程序让Windows刷新缓存。本质上,它与使用安全弹出功能完全相同,但是如果您在桌面上创建快捷方式以使用可移动驱动器的特定驱动器字母来运行它,则可能会更加方便。它将节省大约5-10秒,这听起来并不多,但是在HCI中,这是一个巨大的障碍。更好的是,它仅刷新缓存,而实际上不弹出驱动器。因此,如果您突然想起自己忘记做的事情,该驱动器仍可安装并可以使用。这使它变得更加有用,因为您甚至可以为其分配一个热键,以便可以刷新缓存并使其安全地通过按键来拔出。


图1:内部硬盘策略

内部硬盘政策

图2:USB闪存驱动器策略

USB闪存驱动器策略

图3:内部存储卡读取器策略

内部存储卡读取器策略

图4:USB存储卡读取器策略

USB存储卡读取器策略

图5:外部硬盘策略

外部硬碟政策

图6:iPod(迷你)硬盘

iPod mini硬盘政策

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.