top*_*ica 30 windows hard-drive filesystems data-integrity hardware-failure
硬盘的物理降级是否可能导致文件内容中的位“翻转”而操作系统“注意到”并在读取文件时告诉您它?例如,ASCII 文本文件(二进制 0111000 0)中的“p”是否可以更改为“q”(0111000 1),然后用户(我)能够打开文件并查看“q”而不知道发生了故障已经发生了?
我对与 FAT、NTFS 或 ReFS 相关的答案感兴趣......如果它有所作为。
我想知道操作系统是否保护我免受此影响,或者我是否应该检查我的数据在副本之间/随时间变化的不变性。
Gun*_*ohm 24
是的,有一种叫做位腐烂的东西。
但是不,它不会在你不注意的情况下影响你。
当驱动器将一个扇区写入盘片时,它不仅仅是以它们存储在 RAM 中的相同方式写入位 - 它使用编码来确保没有任何相同位的序列太长,并添加了 ECC 代码,使其能够修复影响几位的错误,并检测影响超过几位的错误。
当驱动器读取扇区时,它会检查这些 ECC 代码,并在必要和可能的情况下修复数据。接下来发生的事情取决于环境和驱动器的固件,这受驱动器名称的影响。
(这是作为“桌面”、“NAS/RAID”或“视频监控”驱动器出售的驱动器之间的主要区别之一。RAID 驱动器可以快速放弃并让控制器修复扇区以避免延迟用户端。桌面驱动器会一次又一次地重试,因为让用户等待几秒钟可能比告诉他们数据丢失要好。视频驱动器更重视恒定的数据速率而不是错误恢复,因为损坏的帧通常会获胜甚至不会被注意到。)
无论如何,驱动器将知道是否有位腐烂,通常会从中恢复,如果不能,它将告诉控制器,后者将告诉驱动程序,后者将告诉操作系统。然后,由操作系统向用户呈现此错误并对其采取行动。这就是为什么赛博纳德说
我自己从未目睹过任何一个错误,但我见过很多硬盘驱动器的整个扇区都出现故障。
驱动器会知道该扇区有问题,但它不知道哪些位出现故障。(一个失败的比特总是会被 ECC 捕获)。
请注意,CHKDSK,并自动修复文件系统,不涉及练习器数据中的文件。那些针对文件系统结构的损坏;就像目录条目和分配的块数之间的文件大小不同。NTFS 的自我修复功能将检测结构损坏并防止它们进一步影响您的数据,它们不会修复任何已经损坏的数据。
当然,数据可能会损坏还有其他原因。例如。控制器上的坏 RAM 可能会在数据发送到驱动器之前改变数据。在这种情况下,驱动器上的任何机制都不会检测或修复数据,这可能是文件系统结构损坏的原因之一。其他原因包括普通软件错误、写入磁盘时停电(尽管这是通过文件系统日志解决的)或错误的文件系统驱动程序(Linux 上的 NTFS 驱动程序在很长一段时间内默认为只读,因为 NTFS 被逆向工程,未记录) ,并且开发人员不信任他们自己的代码)。
我曾经遇到过这种情况,应用程序会将其所有文件保存到两个不同服务器的不同数据中心,以便在所有情况下保留数据的工作副本。几个月后,我们注意到在其中一个副本上,大约 0.1% 的所有文件与应用程序存储在其数据库中的 MD5 总和不匹配。原来是服务器和 SAN 之间的光纤电缆有问题。
这些其他原因是某些文件系统(如 ZFS)保留额外校验和信息以检测错误的原因。它们旨在保护您免受更多可能出错的事情的影响,而不仅仅是一点点腐烂。
cyb*_*ard 17
是的,硬盘驱动器可以而且确实会在没有操作系统警告的情况下降级。它被称为位腐烂。我自己从未目睹过任何一个错误,但我见过很多硬盘驱动器的整个扇区都出现故障。
Windows 没有对 NTFS 文件系统结构之外的文件内容进行内置保护。将 NTFS 视为一本书:它仅保护目录并验证内容是否匹配。但是,如果损坏位于页面中间,则无法提供保护。FAT什么都没有。硬盘驱动器在每个扇区的基础上采用 ECC 纠错,但驱动器不会告诉 Windows。某些文件类型专门使用 CRC、MD5 或 SHA 哈希来检测损坏,但它们不能修复任何问题。
即使这样,散列也只会告诉您存在问题,但它不知道错误所在的位置。
硬盘驱动器具有 SMART 功能,可监控硬盘驱动器的健康状况,但除非驱动器处于危险状态,否则 BIOS 不会警告您。最糟糕的是,默认情况下,您的 BIOS 中通常会禁用 SMART。您可以通过软件监控数字,但不同的驱动器有不同的问题。如果您有一堆重新定位的扇区,或者您的 ECC 错误不断增加。如果您每天有 100,000 个新的 ECC,这是一个不好的迹象。
许多文件类型没有防止位腐烂的保护。比如TXT和BMP,根本没有保护。Winrar 有一个可选选项可以将奇偶校验数据添加到存档中,这将使文件更大,但它可以检测(与添加的奇偶校验数据量成比例)并修复此类错误。
我知道的所有其他压缩程序都检测到错误,但对此无能为力。
最终,扇区中的错误将非常糟糕,ECC 无法纠正它,即使它是错误的,驱动器也会为您提供读取的内容。
您可以使用 QuickPar 或类似方法来创建奇偶校验数据文件,但据我所知,没有办法使其自动化。例如,当您必须手动更新奇偶校验时,您实际上自己更改了文件。您还可以拥有一组文件的奇偶校验数据,但您更改了 1 个文件,并且必须重新创建整个奇偶校验集。这对所有人来说都是一个真正令人头疼的问题,但文件数量很少。