![]()
家庭服务器存储着备份、照片和一些数据库;这些数据我们可丢不起。但我们是否曾停下来质疑过,我们的配置真的对得起我们这份信任吗?现实情况是,在大多数家庭配置中,即使是损坏的文件也可能被保存、备份并当作真实文件对待,因为在数据被永久写入之前,没有任何机制去检查数据有没有变化。解决方案始于 ECC 内存,而大多数家庭服务器恰恰忽略了它。
有些损坏不留痕迹
为什么损坏的文件并不总是触发错误
随机的计算机错误相当常见,可能是内存总线上的电气干扰、DRAM 单元老化、制造缺陷或者 CPU 降压过度这类不起眼的原因引起的。事实上,宇宙辐射也可能导致文件损坏。不过,在这份清单中,它是最不常见的因素。
在许多情况下,一个翻转的比特几秒后就被覆盖了,不会造成任何危害。然而,你真正该警惕的是那种损坏数据——它待在内存里,还没被发现就已经写进磁盘了。磁盘上那份错误的副本就成了你唯一的副本,而文件系统和操作系统都不会检测到这一变化。之后,当你需要该文件时,你可能会看到图像中缺失的像素或数据库中不正确的值。这种损坏还可能让你在需要用的时候解压不了归档文件。
这比崩溃更糟糕,因为崩溃会立即发出问题信号,而静默损坏则可能不被察觉。
ECC能发现你发现不了的问题
ECC如何检测并纠正内存错误
纠错码(ECC)顾名思义。ECC内存会在数据旁边额外存储校验位。内存控制器需要这些校验位,以便在错误值被移动或保存之前检测并纠正单比特错误。标准内存没有检测或纠正这些错误的机制,不管给什么值它就存什么,哪怕值是错的。
ECC能让服务器免受停机和数据出错带来的损失。然而,在家用服务器上,因为日常使用中偶尔出点错也能容忍,或者因为加ECC要多花钱,它常常被跳过。
你需要选择合适的硬件来为家用服务器添加ECC,因为并非所有消费级主板都支持它。对于AM5主板,支持情况参差不齐,有些甚至插上ECC内存都开不了机。在英特尔的主流台式机芯片上,几乎完全不支持。不过,有两条靠谱的路子:
在常规 DDR5 上,有一项片上 ECC 功能,这属于 DRAM 内部保护,而非具备端到端报告能力的完整系统级 ECC。只要硬件支持 ECC,ECC 内存本身并不比标准内存贵多少。
光靠 ECC 还不够
其他有助于保护您数据的工具
ECC 很擅长捕捉内存错误,但已经存在磁盘上的文件怎么办,那就是另一回事了。这方面就需要 ZFS 或 Btrfs 文件系统了。它们会为每个数据块保留一个校验和。每次读取该块时,都会用校验和来核对数据。一旦出现不匹配,文件系统就能发现,这比 ext4 或 NTFS 能提供的保护要多得多。
然而,知道问题的存在并不意味着它能自动修复。你得先有一个完好的副本,自动修复才能起作用。因此,如果你没有备份,校验和也只能管一半的事。
擦洗同样不可或缺。擦洗会定期读取存储的数据,并将其与校验和进行核对。这样就能在你真正需要某个文件之前,早早发现数据损坏。如果你怀疑是内存出了问题,像MemTest86或Memtest86+这样的工具也必不可少。这两个工具都会对内存进行数小时的测试,看它会不会报错。
哪些场景需要 ECC
认为每台家庭服务器都必须上 ECC,这其实是个误解。你是否需要它,取决于你一旦出问题会损失什么。
如果服务器上存着家庭照片、个人文档、其他机器的备份或者数据库,那 ECC 就是比较便宜的办法,能消除一类风险。
然而,它不该是防止数据损坏的全部方案,因为一旦内存错误超出了它的作用范围——也就是在到达存储设备之前——它就不管用了。更全面的防护措施还包括冗余存储、真正的备份以及不间断电源(UPS)。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.