Ubuntu会损坏USB驱动器吗?

每当我使用Nautilus卸载一个USB驱动器并将其插入Windows机器时,我会收到一个需要修复驱动器的警告。
(与此截图中的消息相同)
在使用Windows工作的10多年里,我从未遇到过损坏或损坏的USB驱动器,但在过去两年中,我的三个USB驱动器变得无法使用,所以我无法证明,但很明显这与Ubuntu的(卸载)行为有关。
一个朋友告诉我可以使用udisks和sync来防止这种损害,但我希望这不是2016年挂载驱动器的方法。

1我会尝试两个测试来确定根本原因:1)在Ubuntu中卸载前,在shell中调用sync能否防止错误出现?(不太可能)2)尝试一次只写入一个文件,然后卸载,检查该文件是否可以在Windows上读取,并且内容是最新的,尽管看到了这个警告。第2)点表明问题很可能是由于Windows对某些非真实问题说“我们发现错误”而导致的。 - arielf
3别相信别人告诉你Linux不会损坏你的驱动器。它是可以的。在Ubuntu 15上,仅仅进行文件复制然后重启,我一直都会得到类似于chkdsk的错误,像这样:第2阶段:检查文件名链接... 发现了"<0x32,0x1e63>"的损坏基本文件结构 ...排队等待离线修复。 在目录"\ <0x5,0x5>"的索引"$I30"中发现了一个不必要的链接($FILE_NAME: ???) ...排队等待离线修复。 在目录"$I30"的索引"\??\D:\found.000"中找不到文件"<0x32,0x1e63>"的索引条目 ...排队等待离线修复。 - user541686
1更不用说,这甚至不是在一个闪存驱动器上,而是在我的主要固态硬盘上。一块全新的固态硬盘。而且每次在文件复制之后我没有添加大量额外的输入/输出操作时,都会发生这种情况。换句话说,Linux对NTFS的实现确实存在问题,尽管它的粉丝们可能会否认并避免相信这一点。 - user541686
12这是一个NTFS文件系统吗?还是FAT32?你能稳定地复现它吗? - Braiam
我注意到,如果你在弹出/卸载USB后等待几秒钟(比如15秒),然后再拔出它,就不会遇到这个问题。似乎即使在卸载后立即显示为“已弹出”,实际上它仍然在忙碌中。 - Tracy LF
2使用Shell命令挂载驱动器有什么问题吗?¯\(o_o)/¯ - ulidtko
1我在另一方面也有同样的行为 - 我必须在Linux下“修复”USB,因为Windows会使它们损坏。 - MatthewRock
1你是在卸载驱动器还是直接拔出来?如果你正确地卸载它,那么所有待处理的写操作应该会被执行并且磁盘缓冲区会被刷新。如果你只是直接拔出驱动器,那么我不奇怪你会遇到文件系统损坏的问题。 - TMN
不不不!这是一个用Windows 7 Service Pack 2开始的Windows骗局项目,现在已经在Windows 8上投入使用:它的工作原理如下。 任何访问外部(不仅限于Windows拥有的驱动器 - 可以是USB或iscsi驱动器(硬盘、存储卡))的东西,如果被Microsoft所未拥有的东西访问过,将会触发各种可怕的警告,并最终告诉你要格式化驱动器(当然是在读取/复制之前)! 下次可以试试在Unix、Macintosh或其他Linux发行版上操作(结果也是一样 - 没有任何抱怨!!) 小心微软的激进营销!:-((( - Ken Mollerup
@Mehrdad,Linux NTFS实现在写入方面一直以来都是实验性的。NTFS的主要问题是其封闭的规范,意味着微软并没有提供有关如何实现NTFS的详细信息。这不是Linux的错,而是微软的选择。关于当前Linux中的NTFS实现,有很多不同的选择。其中一些可能在写入方面存在问题,或者在你当前的系统中已经过时。在Debian上查看这里以获取一个列表。我猜在Ubuntu等其他地方也会有类似的选择。 - Frédéric
@KenMollerup:没有提供任何链接或技术细节,为什么有人应该相信你所说的话,请告诉我们原因。 - user541686
@Frédéric:这是Linux的错,也是微软的选择。你不能破坏用户数据,然后把责任推给别人,说是因为他们的软件闭源。此外,我相信微软确实与其“合作伙伴”(那些制作分区管理器等软件的公司)分享了NTFS的详细信息,只是他们不会免费提供,但对于像Canonical这样的商业公司来说,尝试这条路似乎并不是不可行的。最后,你又怎么知道当前逆向工程规范的不完整性是问题的根源呢?在我看来,这似乎是一个完全无关的错误。 - user541686
继续在 聊天室 中进行。 - Frédéric
@Mehrdad 我有两个USB闪存盘,在Windows尝试将它们用于备份时,当我试图恢复我的邮件时,显示可用空间为0字节!16GB的金士顿DataTraveler和一个无品牌的8GB闪存盘都没有剩余空间了。无论如何都无法使它们恢复正常! - Ken Mollerup
相关链接:https://askubuntu.com/questions/955565/does-persistence-kills-usb-sticks - JinSnow
8个回答

不用担心,Ubuntu不会损坏你的USB驱动器。但我们不使用文档不完整的FAT32、FAT16或NTFS文件系统的位标志。在Windows上,当我们没有正确卸载驱动器或发生I/O错误时,这些标志表示可能损坏的文件系统。
这些位标志位于FAT分区表的保留条目中。根据2004年微软内部文件的说法,这些位标志的目的是:
ClnShutBitMask: 如果位为1,则卷是“干净”的。可以挂载该卷进行访问。如果位为0,则卷是“脏”的,表示在先前的挂载操作期间,FAT文件系统驱动程序无法正确卸载该卷。应扫描卷内容以查找文件系统元数据的任何损坏。
HrdErrBitMask: 如果此位为1,则未遇到磁盘读/写错误。 如果此位为0,则文件系统驱动程序实现在上次挂载卷时遇到了磁盘I/O错误,这表明某些扇区可能已经损坏。应使用进行表面分析的磁盘修复工具扫描卷内容,以寻找新的坏扇区。
几年前与内核文件系统开发人员进行了一些讨论,以解决这个问题,但我无法跟进结果。显然,它没有出现在最近的内核中。
由于只涉及一个位标志,而且通常我们的数据应该是完好无损的,我们可以忽略Windows在之前在Ubuntu中使用过的那些驱动器上发出的警告。

3我在实际安全卸载驱动器时从未遇到过这些错误 - 你确定这些位的支持确实缺失吗? - Thomas Ward
5@ThomasW。这些位很难懂,但我在我的工作场所的Windows 7上使用Ubuntu格式化的USB驱动器时偶尔会出现这些错误。到目前为止,我还没有看到任何有用的模式。唯一能说的是我总是正确卸载/弹出驱动器。测试不容易,因为家里没有Windows,在工作中没有Ubuntu。 - Takkat
标题是错误的。 - MatthewRock
@MatthewRock:好了吗? - Takkat
是的,这样更好。 - MatthewRock
这个答案似乎更有帮助。 - xji
每当我遇到问题时,我只需使用GParted检查和修复驱动器——通常会显示“正在移除脏位”,我想这指的就是上述情况。这些问题通常发生在那些固执地拒绝卸载的愚蠢的Windows机器上,或者需要使用“安全移除驱动器”选项的较新的USB驱动器。 - Wilf

这主要是Windows的问题。它认为自己是世界上唯一的操作系统,如果检测到它不理解的东西,就会表现出异常。
仅仅因为Windows说你必须修复驱动器,并不意味着它是真的。
我使用Ubuntu的任何驱动器都会收到Windows的这个消息,我只是说“不”,它们在Windows下工作得很好。
简而言之,驱动器没有问题,只是有些东西在上面Windows无法理解,它的反应就是摧毁它。
不要“修复”驱动器,它会在不告诉你的情况下格式化它,你将失去驱动器上的所有数据。

41修复不会格式化,修复将分配的数据保存到一个文件夹中。对我来说,似乎Ubuntu没有正确完成写入过程。 - jan6352781
10大多数USB驱动器都是FAT32格式的,这是由微软开发的,那为什么只有Windows系统才会“不理解”某些东西呢? - jan6352781
6
  1. 过去几年里,我几乎每天都跳过了修复工作,结果导致文件和USB驱动器损坏。
- jan6352781
5@jan6352781 (2)。然而,当您将hlt x86指令作为USB驱动器Ubuntu的第一个字节时,任何其他GNU/Linux也是如此,不会认为这是一个错误,而Windows至少XP会说驱动器已损坏并需要格式化。请注意,驱动器的前512个字节由442个较低字节的引导加载程序和72个较高字节的分区表组成。因此,只需更改USB闪存驱动器的第一个字节即可将引导加载程序更改为自定义引导加载程序(不随操作系统或第三方软件提供)。 - Sergey Kanaev
4是的,Windows 10格式化了我的EXT4 Lubuntu分区,因为它位于FAT分区之前。当FAT分区在前面时,就没有问题了... - Fabby
19-1 因为这是毫无根据和错误的。我曾经亲眼见过Ubuntu 15损坏我的NTFS卷(是的,我知道你不会相信我,但我亲眼见过,并且在自己相信之前至少连续重现了3-4次),即使我明确同步了所有缓冲区,这种情况仍然发生。我同意@jan6352781的观点,我也怀疑这是由于写入过程未完成造成的,而且我仍然这样认为。实际上,如果你在写入后等待足够长的时间再重新启动Ubuntu,它就能正常工作。我们没有理由相信Windows有问题,而有充分的理由相信是Ubuntu的问题。 - user541686
4@Mehrdad,我不明白Ubuntu有什麼錯誤,因為你沒有讓驅動器上的寫入完成“毫無根據和錯誤”。 這是錯誤的,因為由於Windows與其他操作系統之間缺乏兼容性,該警告出現在Windows中是正確的。 我理解你的觀點,但你的措辭選擇(尤其是“毫無根據”,你可以看到許多人同意)非常差。 - Mark Kirby
评论不适合进行长时间的讨论;此对话已被移至聊天室 - Seth
7修复驱动器并不会格式化它。它运行的是 chkdsk。它对磁盘的格式化程度不比 fsck 对磁盘的格式化程度多。 - Journeyman Geek
17这整个回答只是一个关于Windows的抱怨,没有任何证据支持(除了个人经验)。 - Millie Smith

正如您在评论中建议的那样,这可能与Ubuntu在您移除闪存驱动器之前未完成写入过程有关。在复制过程中,Ubuntu将文件写入RAM,并在复制对话框关闭后在后台将这些文件从缓冲区写入USB驱动器。有另一个答案表明,对于内存较大的计算机,这可能是一个问题,但很可能是在后台写入完成之前您就已经移除了驱动器。当您弹出驱动器时,这会强制将缓冲区写入磁盘,但很难判断写入是否真正完成。在较新版本(至少是15.10,可能是15.04)中有一个弹出窗口旨在解决此问题--在一段时间后(通常很短),会出现一个紫色警报,表示写入完成后可以安全地移除[驱动器]。
这可能是你朋友建议同步的原因。在终端中运行sync命令会强制将所有缓冲数据写入磁盘,并且只有在写入完成后才会返回(参见this answer)。请参考this answer以了解一个能帮助你确定是否真正存在这个问题的实用工具。

每当我在14.04版(Linux Mint KDE版本)或者我的15.10版Kubuntu机器上拔出USB驱动器时,都会弹出一个窗口。关于15.04版我不太确定,但我认为应该也是这样的。 - Jon Bentley
1这个图形用户界面真的不明显吗?我在终端中已经使用了很长时间的“eject”,如果我刚刚复制了一个大文件,它返回之前会有明显的延迟。 - Izkata
1在纯净的Ubuntu 14.04上,当你在Nautilus中点击弹出符号时,它会立即消失。然而,与内部驱动器不同,完全卸载(即写入完成)后,USB驱动器会从侧边栏完全消失,因此在USB驱动器正在写入但看起来已经弹出之间存在一定的时间。 - alex_d

我见过很多USB驱动器,尤其是带有FAT文件系统的闪存(SD等)卡在使用Ubuntu和Ubuntu衍生发行版时容易损坏。几个月的日常使用中,这几乎是一个经常发生的情况。
如果是硬件问题,那么用ext3(或4)格式化分区不应该有所帮助,但ext3/4使文件系统几乎无懈可击。(ext2也在我试用了几个月后出现了损坏;据说写入较少,因此对于闪存驱动器寿命更长,主要是因为没有日志)。
因此,Ubuntu本身不会对USB驱动器造成物理损害,但我仍然不完全信任它处理FAT文件系统的能力。
我认为可以通过以下方式最好地避免文件系统损坏:
  • 在将USB驱动器拔下之前,永远不要只是直接拔掉它,而是先卸载/取消挂载/弹出。即使驱动器当前没有在写入任何内容(如果有指示灯,则不会闪烁),即使您已经执行了同步操作,文件系统仍然可能存在问题。
  • 在卸载/弹出后至少等待几秒钟再拔下它。似乎即使在卸载后,驱动器的活动指示灯有时也会继续闪烁一段时间。其他用户像这个人说它可能会持续一分钟。
  • 不要仅仅依赖于同步操作,像这个人那样会导致文件损坏。

相关链接(一般性):


这与任何操作系统都没有太大关系。这是一个文件系统错误,在大多数情况下表明驱动器未正确卸载(用户错误)。这并不是绝对的损坏指示,它仅表示可能存在损坏的可能性。如果存在损坏,则通常仅限于最后写入的文件。在这种情况下,Windows的“修复”命令会扫描标记为“已占用”但未分配给任何文件的扇区,然后将这些碎片分配给新文件。
如果您在写入时只是拔出驱动器而没有先卸载它(在Windows中,“弹出”执行卸载),也会导致此错误在Windows上创建。
看到此消息意味着驱动器未正确卸载。
您可以自行验证文件系统是否真的受到损坏,或者只是误报:如果运行“修复”后出现一个名为“found000”的新文件夹,并带有其中的一些文件,则意味着确实存在未完成的写入被中断。您的一些数据已经丢失,这是一个问题。

我使用了几年的Ubuntu和Windows双系统,当我以正确的方式卸载驱动器时,在Windows中总是会出现错误消息,但我的USB驱动器从未出错。在Windows 10中,你可以关闭这个弹出的错误消息。

enter image description here


几乎没有任何操作系统能够损坏USB驱动器,在正常格式化(非快速格式化)之后,不应该留下任何迹象表明该驱动器曾经与Ubuntu一起使用过。
使用"H2testw"或"USB Flash Drive Tester"检查驱动器-坏扇区可能是许多奇怪错误的源头。

4这个问题表述得不太好,但它的意思是“文件系统”,而不是“闪存ROM”。 - wizzwizz4
看起来OP可能是指实际的USB驱动器损坏,他们说:“我从来没有过损坏或损坏的USB驱动器,但在过去两年中,我的三个USB驱动器变得无法使用”。如果他们只是指损坏,他们可能会说损坏,而不是“无法使用”@wizzwizz4 - Xen2050
3@Xen2050,然而其他所有的答案和评论线程,包括jan6352781所暗示或陈述的,都表明文件系统是问题所在,而“损坏的设备”只是它们无法正常工作的推论。 - wizzwizz4
@wizzwizz4 嗯,在Mark Kirby的回答中,原帖评论说:“3. 过去几年里,我几乎每天都跳过修复,结果导致文件和USB驱动器受损。” 我猜这只是来自可能已经损坏的旧驱动器,无论是否使用Windows,但原帖作者仍然这样说。 - Xen2050
@Xen2050 或者OP是指那个旧信息“设备已损坏。是否要让Windows修复?”(改述),有时当不同的dll处理问题时会出现这个信息。(我自己也遇到过,尽管我不确定最后一句是否正确。) - wizzwizz4
我并不是说这个答案是错的,也没有给它投反对票(实际上我还点了赞),只是在提供一些其他人,包括问题提出者,所使用的问题解释方面的见解。 - wizzwizz4
@wizzwizz4 这可能是真的。不幸的是,这个问题(就像大多数问题一样;-))并不十分清楚。(我也给这个问题点了赞,以为只有我们一个人,但现在是+4和-2) - Xen2050
哦,是的,微软的Windows确实有很多问题:比如当你开始复制一个大文件到一个(足够大)的USB闪存驱动器时,它会自动启动备份整个硬盘上的所有内容!这肯定会摧毁任何容量小于所需的USB设备! - Ken Mollerup

我不能确定驱动器是否“损坏”,也许是,也许不是。但作为一个可以说:“在使用Windows工作了10多年的人...”,我可以告诉你,如果你正在运行Windows 10,那可能是你新问题的来源。我在第一天使用10时遇到了一个新问题:在10中,会为外部驱动器创建一个数据库(可能是索引数据库,我不记得了)。如果该数据库与驱动器不匹配,它将告诉您驱动器已损坏,有时您可以忽略此警告,有时则不行(见轶事)。运行“修复”将修复数据库。
轶事:
我不记得在哪里找到这些信息,但当我移动我的音乐文件夹时,我发现了它。它抱怨驱动器损坏,而不仅仅是抱怨它正在寻找的文件夹不再存在。在我运行修复之前,Ubuntu上出现了新位置,Windows 10上出现了旧位置...但所有文件都无法在10上打开。运行“修复”后,音乐文件夹的新位置出现在Windows中,旧文件夹消失了,并且在Windows上正常工作。
运行“同步”也不是一个坏主意。