硬盘的物理性能下降是否可能导致文件内容中的位“翻转”,而操作系统在读取文件时却“没有注意到”并通知您?例如,ASCII 文本文件中的“p”(二进制 01110000)更改为 'q'(01110001),然后用户(我)能够打开文件并看到“q”,而不会意识到发生了故障?
我对与 FAT、NTFS 或 ReFS 相关的答案感兴趣...如果有区别的话。
我想知道操作系统是否能保护我免受这种影响,或者我是否应该检查我的数据在副本之间/随时间推移的不变性。
答案1
是的,有一种东西叫比特腐烂。
但不,它不会对您造成任何影响。
当驱动器将扇区写入盘片时,它不仅仅是以与存储在 RAM 中相同的方式写入位 - 它还使用编码来确保相同位的序列不会太长,并且它会添加 ECC 代码,这使其能够修复影响几个位的错误,并检测影响多个位的错误。
当驱动器读取扇区时,它会检查这些 ECC 代码,并在必要时修复数据。接下来发生的事情取决于驱动器的情况和固件,这受驱动器的指定影响。
- 如果某个扇区可读取且没有 ECC 问题,则将其传递给操作系统
- 如果可以轻松修复某个扇区,则可以将修复后的版本写入磁盘,读回并进行验证,以确定错误是随机错误(宇宙射线......)还是介质存在系统错误
- 如果驱动器确定介质有错误,它会重新分配扇区
- 如果某个扇区在多次尝试读取后仍无法读取或更正,在指定为 RAID 驱动器的驱动器上,驱动器将放弃,重新分配扇区,并告诉控制器出现了问题。它依靠 RAID 控制器从其他 RAID 成员重建扇区,并将其写回故障驱动器,然后将其存储在希望没有问题的重新分配的扇区中。
- 如果无法读取或更正某个扇区桌面驱动器,驱动器将进行更多次尝试来读取它。根据驱动器的质量,这可能涉及重新定位磁头、检查是否有任何位在重复读取时翻转、检查哪些位最弱,以及其他一些事情。如果任何这些尝试成功,驱动器将重新分配扇区并写回修复的数据。
(这是作为“台式机”、“NAS/RAID”或“视频监控”出售的驱动器之间的主要区别之一。RAID 驱动器可以快速放弃并让控制器修复扇区以避免用户端的延迟。台式机驱动器将一次又一次重试,因为让用户等待几秒钟可能比告诉他们数据丢失要好。而视频驱动器更看重恒定数据速率而不是错误恢复,因为损坏的帧通常不会被注意到。)
无论如何,驱动器会知道是否存在位衰减,通常会从中恢复,如果无法恢复,它会告诉控制器,控制器又会告诉驱动程序,驱动程序又会告诉操作系统。然后,操作系统会向用户显示此错误并采取行动。这就是为什么 cybernard 说
我自己从未见过单个位错误,但是我见过很多硬盘整个扇区都出现故障。
驱动器会知道扇区出了问题,但不知道哪些位出现了故障。(单个位的故障总会被 ECC 捕获)。
请注意,chkdsk 和自动修复文件系统不能解决数据修复问题之内文件。这些修复针对的是文件系统结构内的损坏;例如文件大小在目录条目和分配的块数之间有所不同。NTFS 的自我修复功能将检测结构损坏并防止它们进一步影响您的数据,它们不会修复任何已损坏的数据。
当然,数据损坏还有其他原因。例如,控制器上的坏 RAM 可能会在数据发送到驱动器之前就改变数据。在这种情况下,驱动器上的任何机制都不会检测或修复数据,这可能是文件系统结构损坏的原因之一。其他原因包括普通的软件错误、写入磁盘时断电(尽管这可以通过文件系统日志解决)或坏的文件系统驱动程序(Linux 上的 NTFS 驱动程序长期以来默认为只读,因为 NTFS 是逆向工程,没有文档记录,而且开发人员不信任自己的代码)。
我曾经遇到过这种情况,应用程序会将其所有文件保存到不同数据中心的两个不同服务器中,以便在任何情况下都能保留一份可用的数据副本。几个月后,我们注意到,在其中一个副本中,大约 0.1% 的文件与应用程序存储在其数据库中的 MD5 和不匹配。原来是服务器和 SAN 之间的光纤电缆出现故障。
这些其他原因就是为什么某些文件系统(如 ZFS)会保留额外的校验和信息来检测错误。它们旨在保护您免受更多可能出错的东西的影响,而不仅仅是位腐烂。
答案2
是的,硬盘确实会降级,而操作系统不会发出任何警告。这被称为位腐烂。我自己从未见过单个位错误,但我见过很多硬盘整个扇区都发生故障。
除了 NTFS 文件系统的结构之外,Windows 没有内置对文件内容的保护。将 NTFS 想象成一本书:它只保护目录并验证内容是否匹配。但是,如果损坏发生在页面中间,它就不提供任何保护。FAT 没有。硬盘驱动器在每个扇区上采用 ECC 纠错,但驱动器不会告诉 Windows。某些文件类型专门具有 CRC、MD5 或 SHA 哈希来检测损坏,但它们没有使固定任何事物。
即使如此,哈希也只能告诉您存在问题,但它不知道错误位于何处。
硬盘有 SMART 功能,可以监控硬盘的运行状况,但除非硬盘已到危险边缘,否则 BIOS 不会发出警告。最糟糕的是,BIOS 中通常默认禁用 SMART。您可以通过软件监控这些数字,但不同的硬盘有不同的问题。如果您有大量重新定位的扇区,或者 ECC 错误不断增加。如果您每天有 100,000 个新的 ECC,这是一个不好的迹象。
许多文件类型没有保护措施位腐烂. 比如 TXT 和 BMP,它们根本没有任何保护。Winrar 有一个可选选项,可以将奇偶校验数据添加到存档中,这会使文件变大,但它可以检测(与添加的奇偶校验数据量成比例)并修复此类错误。
我所知道的所有其他压缩程序都能检测到错误,但却无能为力。
最终,某个扇区中的错误会非常严重以致 ECC 无法纠正它,即使是错误的,驱动器也会返回它读取的内容。
您可以使用 QuickPar 或类似工具来创建奇偶校验数据文件,但据我所知,没有办法自动完成。例如,当您必须手动更新奇偶校验时,您实际上会自己更改文件。您还可以拥有一组文件的奇偶校验数据,但如果您更改 1 个文件,则必须重新创建整个奇偶校验集。这对所有文件来说都是一个真正的难题,但文件数量很少。
答案3
是的,这是可能的。Windows 只是软件。软件是计算机要遵循的一系列指令。
想想另一种类型的一系列说明:一本书。如果这些说明写在书架上的书中,而没有人愿意打开书阅读这些说明,那么这些说明能起到什么作用呢?
正如那些书面说明需要人阅读并开始遵循说明一样,计算机软件也需要硬件来执行才能发挥作用。即使一本书中的说明写得非常准确,但如果一个人决定阅读说明但随后错误地执行它们,这也无法防止问题发生。同样,软件无法阻止硬件做坏事。因此,损坏的硬件在物理上可以胜过任何软件的功能,包括 Microsoft Windows。
现在,ReFS 的设计意图可能是让软件存储有关数据的详细信息,然后让软件稍后比较这些详细信息。一个简单的概念是“校验和”,其中软件添加某些值并确保这些值与预期结果相匹配。当硬件实现该软件时,某些不良结果可能能够被检测到。这甚至很有可能奏效。但是,由于理论上可能存在的潜在问题数量基本上是无限的,因此不能保证软件一定会检测到每一个问题。(请记住,软件是一系列提前创建的指令。)
FAT 的功能特别少。FAT12 是为软盘设计的,而 FAT16 是为 4GB 以下的系统设计的(尽管 Microsoft 的大多数 FAT16 实现往往无法在 2GB 以上运行)。如果没有 VFAT 扩展,它们都不支持长度超过 11 个字符的文件名(其中一些字符位于称为“扩展”的部分中)。FAT 只是为存储数据而设计的,当时存储数据的能力是一个需要成年人学习的新概念。当 FAT 被认为是一项“前沿”技术时,计算机技术还不够普及和复杂,人们不必担心高级功能。
NTFS 增加了对更多功能的支持,其中最值得注意的是,操作系统能够轻松跟踪用户权限。NTFS 有不同的版本。例如,Moab 指出,Windows Server 2008 增加了对自我修复 NTFS,这可能会检测到一些东西。不过,该功能是 Windows Server 2008 的新功能,因此 Windows XP(或 Windows Server 2003 或更早版本)根本不支持它。即便如此,查看功能列表,似乎这涉及一些元数据,可帮助操作系统注意到严重到无法安装磁盘的问题,或影响操作系统内核的磁盘其他关键区域。看起来并不是每个文件中的每个数据都会受到这一特定功能的影响。
此类操作系统的软件极不可能注意到这些事情,除非它们对操作系统完成任务造成明显问题。可能有一些例外,例如操作系统检查磁盘的部分(CheckDsk/ChkDsk/ScanDisk/ScanDskW,取决于操作系统),但即使是它们,它们能够检测到的内容也相当有限,主要是因为文件系统不会存储大量用于磁盘检查的数据。
(RAID5 可能更容易检测到此类情况,因为每个位都有一个奇偶校验位,这将有助于发现异常。即便如此,也需要由 RAID 实现来运行检查以发现问题。如果问题发生在磁盘上未被积极使用的部分,则问题可能会一直被忽视,直到有人尝试开始使用该数据。)
在近代,比特数越多,意味着小概率事件(如“千万分之一”的概率)越有可能对事物产生影响。公众还了解到“宇宙射线”,它可能对事物产生微小影响。由于比特在较新的设备中被塞得如此紧密,表示比特的物理要求更小,因此即使是微小的影响也更有可能扰乱比特的识别方式。ReFS 有一些旨在帮助检测它们的功能。 维基百科关于 ReFS 的文章将其称为“自动完整性检查”。由于这被描述为该文件系统的一个显著特点,因此这些功能可能比 NTFS 更完善(当然也比 FAT 更完善,因为 FAT 本质上比较简单,因此几乎没有这些功能)。