我需要家用电脑来执行简单的备份任务(只需 Linux 上的 cronjob,它每天运行一次):
- 将文件从我的生产服务器(在数据中心,它是具有 Xeons 和 ECC RAM 等的优质服务器)下载到这台家用计算机,验证校验和。
- 将其刻录到 DVD-RW(稍后我会为此购买蓝光驱动器,稍后(不确定,现在价格对我来说太大)我会购买磁带驱动器并将备份写入 LTO 磁带)。
- 刻录后,读取磁盘,并再次验证校验和。
执行该任务(冷备份服务器)时使用非 ECC RAM 是否安全?
因为我打算使用可重写磁盘,所以在出现错误时可以自由地重复操作,所以如果有一天我需要在这个操作上花费更多时间,这对我来说是可以接受的解决方案。
但我不确定,文件验证能否拯救我免于内存错误?...
那么,我是否需要为该任务购买单独的带有 ECC RAM 的服务器,或者我可以使用我的旧家用电脑(没有 ECC 的 RAM),而根本不用花钱?... [我可以购买服务器,我明白,现在都很便宜,但如果可能的话,我宁愿不花钱,而且它会消耗更多能源,浪费我的时间在管理上,我需要在我的房间里为它找到空间。]
答案1
为此,您不需要 ECC 内存。您需要的是端到端的数据完整性验证。
如果您同时使用 ECC 内存并进行端到端完整性检查,那么 ECC 内存将成为数据传输所经过的多个中间存储之一。所有这些中间存储都将被端到端检查覆盖,因此 ECC 内存未发现的任何损坏都将被视为与链中其他地方发生的损坏相同。
如果您使用 ECC 内存且没有端到端完整性检查,那么 ECC 内存可以帮您避免一些原本无法检测到的损坏。但缺乏端到端完整性意味着损坏可能发生在沿途的其他位置。如果损坏发生在 ECC 内存以外的其他位置,那么 ECC 内存就无能为力了。
因此,ECC 内存对于您所需的数据完整性检查来说既不充分也不必要。这就是为什么我一开始就说您不需要它。
进行端到端完整性检查的一种方法是在服务器上生成 ISO 映像并存储校验和(MD5 就足够了,因为它可以防止由于随机位翻转而导致的数据损坏,而不是防止恶意活动)。
将映像写入最终存储后,接收机器将从最终存储中读回数据并计算校验和,然后将其发送回服务器进行验证。务必通过从最终媒体中读回数据来计算校验和,因为如果不这样做,就无法实现端到端的完整性。
如果服务器上的校验和比较检测到损坏,则必须重新开始备份。如果需要频繁进行额外备份,那么您可以开始调查链的哪个部分导致损坏,并研究如何提高该部分的可靠性。此时将内存从非 ECC 升级为 ECC 可能是一个可行的解决方案。
这样,数据完整性就不再需要 ECC 内存,但它可能会提高整个链的性能。
答案2
从统计学上讲,在任何情况下,使用非 ECC 内存都是安全的。我购买 ECC 内存是为了当我的内存耗尽时,我不必彻夜难眠,想知道这是我的错还是真的无法避免。
防止损坏的成本很高。早期检测软件/方法和组织良好、经过测试的备份解决方案比为每台服务器配备 ECC 内存(其中 n>1)便宜得多。考虑到无论 ECC 内存如何,您都应该拥有这些。但是,ECC 内存对于保障您的安全来说非常便宜 - 无论您要面对的是您的老板还是您自己的想法。
答案3
如果您的 md5 是在生产服务器上完成的,那么它是完全安全的,因为任何错误都会被您最后的校验和验证捕获。
内存不是唯一可以修改数据的元素:网络传输和 DVD/磁盘也可能引入错误。
端到端校验和将捕获每个错误(但不会纠正它)。
答案4
文件验证可以拯救我免于内存错误吗?
文件验证是一个好主意,但它无法弥补内存错误,因为如果出现内存错误,操作系统就会崩溃或挂起。