Raid 管理
简介
虽然有一些关于 RAID 安装的文章(例如,参见 1、2、3 4、5),但本文旨在提供关于 RAID 管理的实用信息,无论使用的 RAID 类型或安装方法如何。
本文当然是使用 Linux 软件 RAID,名为 md,以控制进程命名,它由 mdadm
命令控制。
为了本示例的目的,我们将使用 setup-alpine
脚本(更具体地说是 setup-disk 脚本)在 /dev/sda 和 /dev/sdb 上创建一个 RAID 1 阵列,然后在安装后将 /dev/sdc 添加到阵列中。这将把它添加为热备盘,如果其他驱动器之一出现故障,它将被使用。或者,驱动器可以立即添加到 RAID 阵列(如可选步骤中所述)。无论您使用的是 RAID 1 还是 RAID 5,以及您是手动设置磁盘 还是使用 setup 脚本,本文中的说明都应该有效,除非另有说明。
在本示例中,/dev/sda、/dev/sdb 和 /dev/sdc 都是 VMware 机器上的虚拟 2GB 磁盘(它是虚拟机并不重要,相同的过程适用于具有更大尺寸物理磁盘的真实机器)。
在我们的示例中,所有磁盘在安装时都可用(存在),但是 /dev/sdc 可以在稍后添加。除了必须物理添加磁盘外,这对所描述的程序没有影响。
初始设置
使用 setup-alpine
安装,并将相关磁盘传递给 setup-disk(在我们的例子中是 sda sdb
),并使用安装方法 sys
。
这应该创建以下磁盘设置(在您的设置中会有所不同,因为值当然取决于驱动器大小)
md0 composed of /dev/sda1 and /dev/sdb1 ~100MB mounted as /boot md1 composed of /dev/sda2 and /dev/sdb2 ~512MB as /swap md2 composed of /dev/sda3 and /dev/sdb3 ~1400MB mounted as /
如您所见,我们在两个驱动器 /dev/sda 和 /dev/sdb 之间具有冗余。
回顾
运行 df -h
并观察到挂载的是 RAID 阵列,而不是像通常那样的磁盘分区。
要查看当前 RAID 分区的信息,请使用 query 选项
mdadm --query /dev/md0
或使用 detail 选项获取更多信息
mdadm --detail /dev/md1
在初始设置之后,如果您还没有添加第三个驱动器 (/dev/sdc),现在是时候关机并将其物理添加到机器中了。
向阵列添加设备
现在,让我们将 /dev/sdc 添加到 RAID 阵列。
复制分区表
首先,将分区表从现有驱动器复制到新驱动器。使用 dd 命令时要非常小心,并确保您是从正确的位置复制到正确的位置!
dd if=/dev/sda of=/dev/sdc bs=512 count=1
通过比较 sfdisk 的输出,确保这工作正常,它们应该相同
sfdisk --dump /dev/sda sfdisk --dump /dev/sdc
添加设备
现在将新磁盘的分区添加到相关的 RAID 阵列。请务必将正确的分区添加到正确的阵列!
mdadm /dev/md0 -a /dev/sdc1 mdadm /dev/md1 -a /dev/sdc2 mdadm /dev/md2 -a /dev/sdc3
如果命令成功,您应该看到类似 mdadm: added /dev/sdc1
的内容。 -a 标志用于 add(添加)。
现在看看 query 命令的输出与之前相比发生了什么变化
mdadm --query /dev/md0 mdadm --query /dev/md1 mdadm --query /dev/md2
您应该看到每个阵列中仍然有两个设备,加上现在我们有一个备用盘。备用盘是一个非活动设备,它是阵列的成员;只有当其他设备之一发生故障时,它才会被使用。如果这对您来说足够好了,那么您就完成了!
扩展阵列(可选)
否则,您可以采取可选步骤来添加“备用”设备,使其立即成为阵列的一部分。由于我们在示例中使用了 RAID 1,这实际上为我们提供了所有数据的另一个备份
mdadm --grow /dev/md0 -n 2
应该给您类似 mdamd: /dev/md0: no change requested
的内容。这是因为我们已经设置了 -n 2
(因此我们在阵列中使用 2 个设备)。显然,--grow 标志用于 grow(扩展)阵列并增加(或 减少)阵列中设备的数量。让我们增加值并将附加设备引入阵列
mdadm --grow /dev/md0 -n 3
如果成功,您应该看到类似 raid_disks for /dev/md0 set to 3
的内容。 -n 3 指定阵列中应该有三个活动设备。如果您添加更多设备并且不扩展阵列,仍然可以有额外的备用设备。
再次查看 mdadm --query /dev/md0
或 mdadm --detail /dev/md0
的输出,以确认它是否有效。如果您看到有关“spare rebuilding”(备用盘重建)的内容,请不要担心 - 这是正常的,一旦数据复制完成,它将被替换为“active sync”(活动同步)状态。
确保通过增加其他阵列的设备计数来将其他设备(分区)添加到阵列(否则它们将保持为备用盘,不会立即使用)
mdadm --grow /dev/md1 -n 3 mdadm --grow /dev/md2 -n 3
移除设备
要移除故障设备,请使用以下命令;请记住,您需要从相关的 RAID 阵列中移除故障驱动器(设备)的所有分区。在我们的示例中,我们将 /dev/sdb 的分区标记为故障并从阵列中移除它们
mdadm /dev/md0 -f /dev/sdb1 -r /dev/sdb1 mdadm /dev/md1 -f /dev/sdb2 -r /dev/sdb2 mdadm /dev/md2 -f /dev/sdb3 -r /dev/sdb3
检查 mdadm --detail /dev/md2
的输出,看看设备是如何标记为“removed”(已移除)的。 -f 标志用于将设备标记为 failed(故障),-r 用于从阵列中 remove(移除)设备。
要将移除的设备重新添加回来,请确保它已正确分区(如有必要,更换驱动器并从已知的良好驱动器复制分区表),然后只需再次添加它即可
mdadm /dev/md2 -a /dev/sdb3
(对其他分区重复适当的操作)。
更改设备计数(可选)
要完全从阵列中移除设备(假设您不打算稍后将其添加回来),请再次修改设备计数,这将从列表中移除它,使其不再显示为“removed”(已移除),我们又回到了阵列中的两个设备
mdadm --grow /dev/md0 -n 2 mdadm --grow /dev/md1 -n 2 mdadm --grow /dev/md2 -n 2
如果您确实需要重新添加磁盘,您需要将它们添加为备用盘(mdadm /dev/md0 -a /dev/sdb1
等),然后根据关于添加设备的部分,更改设备计数,如果您希望使设备处于活动状态。
清零超级块
如果您打算从阵列中取出一个磁盘并将其添加到另一个阵列中,例如在另一台机器上,清零超级块非常重要。清零超级块将防止 RAID 阵列对它应该构建哪个阵列感到困惑;将旧的超级块信息留在磁盘上意味着它将尝试读取此旧的超级块信息,这可能会导致各种各样的麻烦。因此,要从磁盘中移除超级块以便您可以在其他地方使用它,只需使用 --zero-superblock
选项。从上面的示例继续
mdadm --zero-superblock /dev/sdb1 mdadm --zero-superblock /dev/sdb2 mdadm --zero-superblock /dev/sdb3
驱动器 /dev/sdb 然后可以被移除并添加到另一个 RAID 阵列,而不会引起问题。
通用建议
在使用 RAID 阵列时,最佳实践是拥有比所需磁盘多一个的磁盘,并将其添加为备用盘。这立即提供某种形式的冗余。请记住,对于 RAID 1,您不能低于 2 个磁盘(好吧,您可以在一个磁盘上运行,称为降级模式,但最好不惜一切代价避免这种情况),而对于 RAID 5,您不能低于 3 个磁盘。简而言之,如果您正在使用 RAID,请配置一个备用设备。
磁盘要花钱,但是这些磁盘上的数据通常是无价的!
最好有一个测试环境来玩转 RAID,然后再在生产环境中实施它。最坏的情况,设置一个 VirtualBox 主机并运行 Alpine VM,并在生产系统之前使用它进行实验。