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
    • 最新
    • 标签
主页 / server / 问题 / 752016
Accepted
Michael Graff
Michael Graff
Asked: 2016-01-27 21:28:12 +0800 CST2016-01-27 21:28:12 +0800 CST 2016-01-27 21:28:12 +0800 CST

为什么需要初始化 raid 10 设备?

  • 772

在将linux软件raid设备创建为raid10设备时,我很困惑为什么必须对其进行初始化。同样的问题也适用于raid1 或raid0,真的。

最终,大多数人会在其上放置某种文件系统,并且该文件系统不应假定磁盘数据的任何状态。每次写入都会影响 raid10 或 raid1 设置中的两个磁盘,其中 N 个镜像被写入其中。最初初始化 raid10 应该没有任何理由,因为它会随着时间的推移而发生。

我可以理解为什么对于有奇偶校验要求的 raid5/6 设置,但即便如此,这似乎也可以懒惰地完成。

只是为了让人们感觉更好吗?

linux
  • 5 5 个回答
  • 5573 Views

5 个回答

  • Voted
  1. Torinthiel
    2016-01-28T03:33:47+08:002016-01-28T03:33:47+08:00

    Raid 1 作为一个镜像,依赖于镜像中的所有磁盘都是彼此的精确副本。拿你的随机硬盘和另一个随机硬盘,你可能有不同的数据,因此违反了这个假设。这就是需要初始化的原因。它只是将第一个驱动器的内容复制给其他驱动器。请注意,在某些情况下,您可以不初始化驱动器而侥幸 - 通常新出厂的设备已经到处都是零,因此您可以简单地忽略这一点。该mdadm选项--assume-clean会执行此操作,但会警告您:

       --assume-clean
    

    告诉 mdadm 该数组已经存在并且已知是干净的。它在尝试从重大故障中恢复时很有用,因为您可以确定除非您实际写入阵列,否则不会影响任何数据。如果您想避免初始重新同步,也可以在创建 RAID1 或 RAID10 时使用它,但是这种做法——虽然通常是安全的——不推荐。仅当您真正知道自己在做什么时才使用它。

    如果您不这样做,则驱动器之间存在差异,并且已读取,不知道驱动器将读取什么。使用文件系统应该很安全(但请注意下面),因为很可能您会在从该设备读取任何内容之前进行编写,然后您就清楚了。

    请注意,至少 Linuxmdadm会在后台初始化数组。您可以在第一秒愉快地在其上创建 FS。在初始化完成之前,性能会受到影响,但仅此而已。

    但:

    a) 在做mkfs一些实用程序时,检查该驱动器上是否已经有东西。虽然这只涉及驱动器的几个知名区域,但它会在您写入任何内容之前读取,从而使您处于危险之中。

    b) 如果您对阵列进行定期重新同步,RAID 设备对您的 FS 一无所知。它只是从每个设备中读取每个块并进行比较。而且,如果您没有使用写时复制 FS(例如 ZFS 或 BTRFS)并且从不填满您的 FS,那么从 FS 的角度来看,块保持未初始化多年是完全合理的。

    为什么要与 RAID1 设备重新同步?

    出于同样的原因,您与 RAID5 设备或任何其他级别(RAID0 除外)重新同步。它读取所有数据并比较/验证 RAID 校验和(在 RAID 5 或 6 中)。如果有一点被以任何方式翻转(因为 HD 内存自发翻转,因为你和你的 5 个邻居的手机只是不小心干扰了这个特定的盘片区域,无论如何)它会检测到不一致,但不能帮你。如果,OTOH,其中一个硬盘驱动器将简单地报告“我无法读取该块”,这更有可能是驱动器故障,您只是早期检测到故障,并减少了您在降级模式下运行的时间(从驱动器故障,而不是从您注意到它时开始)。如果一个驱动器出现故障,Raid 将无济于事,一个月后,如果您不这样做,另一个驱动器将出现故障

    RAID10

    现在,对于 RAID10,上述所有条件都成立。毕竟 RAID10 只是一种巧妙的方式来告诉“我将我的两个 RAID1 设备放在一个 RAID0 对中”。

    警告:

    这都是未定义的行为。为什么我在 Linux 上进行了检查,使用mdadm其他软件 RAID 实现的行为可能会有所不同。我使用的其他版本的 Linux 内核和/或mdadm工具也可能表现不同。

    • 7
  2. Michael Hampton
    2016-01-27T21:40:52+08:002016-01-27T21:40:52+08:00

    请记住,RAID 1 是镜像,而 RAID 10 是镜像条带。

    问题是,每个镜像中的哪个磁盘上的数据有效?在新创建的阵列中,这是未知的,因为磁盘可能有不同的数据。

    还要记住 RAID 在非常低的级别上运行;它对文件系统或磁盘上可能存储的任何数据一无所知。甚至可能没有文件系统在使用。

    因此,这些阵列中的初始化包括将每个镜像中一个磁盘的数据按原样复制到另一个磁盘。

    这也意味着数组从创建的那一刻起就可以安全使用,并且可以在后台进行初始化;大多数 RAID 控制器(和 Linux mdraid)都有这个选项,或者自动执行。

    • 5
  3. Best Answer
    Simon Richter
    2016-01-28T02:04:27+08:002016-01-28T02:04:27+08:00

    需要初始同步,因为镜像之间的任何差异都会在定期检查期间显示为错误。

    你应该定期检查。

    • 2
  4. HBruijn
    2016-01-27T22:04:25+08:002016-01-27T22:04:25+08:00

    简单地说,因为从一开始就不期望两个新磁盘成为彼此的完美镜像副本。

    他们需要变成彼此的完美副本。

    此外,初始化还包括使用有关阵列配置的信息来设置元数据超级块。

    /proc/mdstat 文件应该告诉您设备已经启动,镜像正在重建,以及重建完成的 ETA。使用空闲 I/O 带宽完成重建。因此,您的系统应该仍然可以响应,尽管您的磁盘 LED 也会显示大量活动。

    重建过程是透明的,因此即使镜像当前正在重建中,您也可以实际使用该设备。

    • 1
  5. Phil Karn
    2020-08-28T02:31:48+08:002020-08-28T02:31:48+08:00

    如果您使用 Linux LVM 创建一个 RAID 1(或 10)文件系统,您将立即加载数据,以下是您可以避免许多不必要的初始化 I/O 的方法。

    首先创建一个普通的线性(非 RAID)文件系统并用您的数据加载它。然后使用lvconvert将其转换为 RAID 文件系统。镜像设备将使用您已加载的文件系统数据进行初始化,因此唯一“不必要的”I/O 将是复制已加载文件系统中未分配的块时。这比首先将每个块从一个未初始化的设备复制到另一个设备然后将数据写入两个设备要好。通过序列化这两个操作(加载文件系统,然后创建镜像),您还将允许磁盘执行顺序 I/O,这比写入仍在初始化的 RAID 镜像对时发生的随机搜索要快得多。

    • 0

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

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

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve