AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 943708
Accepted
vrms
vrms
Asked: 2017-08-07 16:57:21 +0800 CST2017-08-07 16:57:21 +0800 CST 2017-08-07 16:57:21 +0800 CST

btrfs/ZFS 是否会使 ECC RAM 过时?

  • 772

建议在服务器中使用ECC RAM ,以尽量减少/防止数据损坏。

如果您的服务器使用btrfs(或ZFS)作为文件系统(据说这两者都可以防止数据损坏),ECC RAM 会过时吗?

ram
  • 2 2 个回答
  • 1952 Views

2 个回答

  • Voted
  1. Best Answer
    ben-Nabiy Derush
    2017-08-08T07:25:46+08:002017-08-08T07:25:46+08:00

    我不确定 btrfs,但是 ZFS 和 ECC RAM 就像吐司和黄油……但是没有 ECC 的 ZFS 也像吐司和黄油。

    TL;DR- 将 ECC RAM 与 ZFS 一起使用是好的(因为使用 ECC RAM 通常是好的),但不将 ECC RAM 与 ZFS 一起使用不会对您造成伤害,因为 ZFS 就是那么好。不过,我不会说 ECC RAM 已经过时,因为除了文件系统存储之外,还有更多的事情要做。任何地方的错误都是不好的。ZFS 只是帮助限制文件系统中的错误。以下是如何/为什么...

    请参阅http://jrs-s.net/2015/02/03/will-zfs-and-non-ecc-ram-kill-your-data/并仔细阅读。感谢 Jim Salters 以下内容。

    如果该站点丢失,我将发布相关位:

    第一:ECC内存

    什么是 ECC 内存?这是个好主意吗?

    ECC 代表纠错校验和。简而言之,ECC RAM 是一种特殊的服务器级内存,可以检测和修复一些最常见的内存损坏。有关 ECC RAM 如何做到这一点的更多详细信息,以及它可以纠正和无法纠正的错误类型,请参见此处的兔子洞。

    现在我们知道了 ECC RAM 是什么,这是个好主意吗?绝对地。内存错误,无论是由于硬件故障还是宇宙辐射的影响(是的,真的)都是一回事。它们确实发生了。如果它发生在一个特别具有战略意义的地方,您将丢失数据。时期。这没有什么好争论的。

    第二:ZFS

    什么是 ZFS?这是个好主意吗?

    ZFS 是一个校验和文件系统。这意味着对于每个提交到存储的块,还会写入该块内容的强哈希(有点误导性的 AKA 校验和)。(验证哈希写在指向块本身的指针中,它也在指向自身的指针中进行校验和,依此类推。一直是海龟。兔子洞从这里开始。)

    这是一个好主意吗?绝对地。将 ZFS 校验和与冗余或奇偶校验相结合,现在您就拥有了一个自愈阵列。如果磁盘上的块损坏,下次读取它时,ZFS 将发现它不匹配其校验和并加载冗余副本(在镜像 vdev 或多副本存储的情况下)或重建奇偶校验副本(在RAIDZ vdevs 的情况),并假设该块的副本与其校验和匹配,它将默默地为您提供正确的副本,并针对第一个未通过的块记录校验和错误。

    ZFS 还支持清理,这将在下一节中变得重要。当您告诉 ZFS 清理存储时,它会读取它知道的每个块(包括冗余副本)并检查它们与它们的校验和。假设存在一个好的(通过的)副本,无论是冗余的还是从奇偶校验重建的,任何失败的块都会被好的块自动覆盖。定期清理是维护 ZFS 存储池以防止长期损坏的重要部分。

    情况/关注

    ZFS 和 non-ECC 是否比 not-ZFS 和 non-ECC 差?死亡磨砂怎么样?

    好的,很容易证明 RAM 中的翻转位意味着数据损坏:如果您将翻转的位写回磁盘,恭喜,您只是写入了错误的数据。没有什么可争论的。这里真正的问题不是 ECC 是否好用,而是非 ECC 是否在 ZFS 中特别成问题。通常抛出的场景是可怕的死亡磨砂。

    TL;DR 版本的场景:ZFS 位于具有非 ECC RAM 的系统上,该 RAM 有一个卡住位,其用户启动清理,并且由于内存损坏,好块无法通过校验和测试并被损坏的数据覆盖,因此立即谋杀了整个游泳池。据我所知,这个想法起源于 FreeNAS 论坛上一位名叫 Cyber​​jock 的非常多产的用户,他在 这里的这个帖子中进行了阐述。这是一个可怕的想法——如果本应保护系统安全的东西杀死了它怎么办?磨砂发疯了!不!

    问题是,所写的场景实际上没有意义。一方面,即使您在 RAM 中有一个特定的地址有一个卡住的位,您也不会让整个文件系统通过该地址运行。这不是内存管理的工作方式,如果它是内存管理的工作方式,您甚至无法启动系统:当它首先无法加载操作系统时,它会崩溃并严重烧毁。所以不,你可能会在这里和那里破坏一个块,但你不会通过一个粉碎机块一个宝贵的块来扭曲整个文件系统。

    但是我们这里便宜。假设您以这种方式只破坏了 5,000 个区块中的一个。那仍然是地狱般的。因此,让我们研究一下在清理期间由于 RAM 损坏而损坏某些数据的更合理的想法。让我们假设我们的 RAM 不仅不能 100% 正常工作,而且是非常邪恶的,并尝试其天真但热情的最佳方式来专门在清理期间杀死您的数据:

    首先,你读一个块。这个板块不错。将非常好的数据写入具有完全匹配校验和的非常好的磁盘。但是该块被读入邪恶的 RAM,并且邪恶的 RAM 翻转了一些位。也许这些位在数据本身中,或者这些位在校验和中。无论哪种方式,您的完美块现在似乎与它的校验和不匹配,并且由于我们正在清理,ZFS 将尝试实际修复磁盘上的“坏”块。哦哦!现在怎么办?

    接下来,您读取同一块的副本——该副本可能是冗余副本,或者可能是从奇偶校验重建的,具体取决于您的拓扑。冗余副本很容易可视化——您实际上将块的另一个副本存储在另一个磁盘上。现在,如果你的邪恶 RAM 不理会这个块,ZFS 将看到第二个副本与它的校验和匹配,因此它会用原来的相同数据覆盖第一个块——这里没有数据丢失,只是浪费了几个磁盘周期. 好的。但是,如果你的邪恶 RAM 在第二个副本中翻转了一点怎么办?由于它也不匹配校验和,因此 ZFS 不会覆盖任何内容。它为该块记录一个不可恢复的数据错误,并在磁盘上保留两个副本不变。没有数据被损坏。

    嗯,嗯。这听起来不是那么糟糕。那么,为了在清理期间用损坏的数据实际覆盖好数据,您的邪恶 RAM 需要做什么?嗯,首先它需要在它想要破坏的每个块的初始读取期间翻转一些位。然后,在第二次从奇偶校验或冗余读取块的副本时,它不仅需要翻转位,还需要以这样的方式翻转它们,从而获得哈希冲突。换句话说,随机位翻转是行不通的——您需要在数据中进行一些位翻转(在校验和中有或没有更多位翻转),这会将损坏的数据正确地散列到校验和中的值。默认情况下,ZFS 使用 256 位 SHA 验证哈希,这意味着单个位翻转有 2 ^ 256 分之一的机会为您提供现在匹配其校验和的损坏块。公平地说,我们在这里使用了邪恶的 RAM,所以它可能会做大量的实验,它会尝试翻转数据和校验和本身的位,并且它会对任何单个块进行多次。但是,这是 2^256 中 1 的倍数(也就是大约 10^77 中的 1)的机会,这仍然使得它几乎不可能真正发生……如果你的 RAM 是那么邪恶,无论你在使用它,它都会杀死你的数据ZFS 与否。

    回复:擦洗

    这里输入了一个关于数据丢失的有效问题。谨慎!

    但是,如果我不擦洗怎么办?

    好吧,如果您不擦洗,那么您的邪恶 RAM 将不得不等待您实际写入有问题的块,然后才能破坏它们。不过,幸运的是,您几乎整天都在写入存储……包括组织整个套件和 kaboodle 的元数据。第一次更新文件所在的目录时,BAM!搞定了!如果你停下来想一想,在这种邪恶的 RAM 场景中,ZFS 非常有用,因为你的 RAM 现在不仅需要邪恶,而且还需要足够亮以持续进行碰撞攻击。因此,如果您运行的非 ECC RAM 结果令人震惊,Lovecraftianishly 邪恶,ZFS 将减轻损害,而不是放大它。

    顺便说一句,如果您使用的是 ZFS 并且没有进行清理,那么您就是在为长期失败做好准备。如果您有磁盘损坏,则只要您确实拥有损坏块的冗余或奇偶校验副本,那么清理可以修复它,这是好的。一旦你破坏了给定块的所有副本,修复它为时已晚——它已经消失了。不要害怕擦洗。(好吧,也许在高需求时期对清理的性能影响有点警惕。但不要担心清理会杀死你的数据。)

    再次感谢 Jim Salters 发表这篇文章。

    • 4
  2. Sergei Krivonos
    2018-04-05T13:33:41+08:002018-04-05T13:33:41+08:00

    ECC是循环编码,类似于紧凑校验和,也可以纠正值。

    你需要两个ECC。否则,数据在写入之前通过内存传输时可能会损坏,ECC FS 接受损坏并以这种方式保护它。如果它在非 ECC FS HDD 上损坏,则 ECC 内存在加载时接受损坏的数据。无论如何,好的服务器只允许 ECC 内存。

    有关更多详细信息,请参阅https://en.wikipedia.org/wiki/Hamming_code#Hamming_codes_with_additional_parity_(SECDED)和https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction。

    假设它向字节添加了三个额外的位,并允许检测和修复最多两个错误位。

    正如您现在看到的,ECC 应用到 FS 和 RAM 是独立的。

    RAID6 还允许您将 ECC 与任何 FS 一起使用。

    • 0

相关问题

  • 将文件移动到 /dev/shm ramdisk 不会增加 RAM 使用率?

  • 为什么 Ubuntu 只显示 3GB 的 RAM?

  • 如何找出计算机系统具有的 RAM?[复制]

  • 在不重新启动服务器的情况下物理检查内存?

  • 如何检查我的 RAM 和硬盘驱动器是否有错误?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve