如何在 Ubuntu 22.04 上使用 mdadm 管理 RAID 阵列

您所在的位置:网站首页 personalities怎么读的 如何在 Ubuntu 22.04 上使用 mdadm 管理 RAID 阵列

如何在 Ubuntu 22.04 上使用 mdadm 管理 RAID 阵列

2024-04-18 14:58| 来源: 网络整理| 查看: 265

如何在 Ubuntu 22.04 上使用 mdadm 管理 RAID 阵列 介绍

RAID 阵列通过将单个磁盘组合成特定配置的虚拟存储设备来提供更高的性能和冗余。在 Linux 中,mdadm 实用程序创建和管理软件 RAID 阵列。

在之前的指南中,我们介绍了如何在 Ubuntu 22.04 上使用 mdadm 创建 RAID 阵列。在本指南中,我们将演示如何在 Ubuntu 22.04 服务器上管理 RAID 阵列。

先决条件

要遵循本指南,您需要访问非根 sudo 用户。您可以按照我们的 Ubuntu 22.04 初始服务器设置指南设置合适的用户。

如前所述,本指南将涵盖 RAID 阵列管理。在开始本指南之前,请按照我们关于如何在 Ubuntu 22.04 上使用 mdadm 创建 RAID 阵列的指南来创建一个或多个阵列。本指南将假定您有一个或多个要操作的阵列。

信息:由于虚拟专用服务器上的 RAID 设置效率低下,我们不建议在 DigitalOcean droplets 上部署 RAID 设置。相对于裸机硬件上的设置,数据中心磁盘复制的效率使得 RAID 的优势可以忽略不计。本教程旨在成为传统 RAID 设置的参考。

查询RAID设备信息

正确管理的最基本要求之一是能够找到有关阵列的结构、组件设备和当前状态的信息。

有关 RAID 设备的详细信息,请将带有 -D 或 --detail 选项的 RAID 设备传递给 mdadm:

sudo mdadm -D /dev/md0

将显示有关阵列的重要信息:

Output/dev/md0: Version : 1.2 Creation Time : Thu Sep 29 17:07:10 2022 Raid Level : raid10 Array Size : 209582080 (199.87 GiB 214.61 GB) Used Dev Size : 104791040 (99.94 GiB 107.31 GB) Raid Devices : 4 Total Devices : 4 Persistence : Superblock is persistent Update Time : Thu Sep 29 17:08:24 2022 State : clean, resyncing Active Devices : 4 Working Devices : 4 Failed Devices : 0 Spare Devices : 0 Layout : near=2 Chunk Size : 512K Consistency Policy : resync Name : raid2:0 (local to host raid2) UUID : 8069bcc7:72e7b49f:fba1c780:560a85e0 Events : 35 Number Major Minor RaidDevice State 0 8 0 0 active sync set-A /dev/sda 1 8 16 1 active sync set-B /dev/sdb 2 8 32 2 active sync set-A /dev/sdc 3 8 48 3 active sync set-B /dev/sdd

输出显示 RAID 级别、阵列大小、各个部分的运行状况、阵列的 UUID 以及组件设备及其角色。

对于数组的简短细节,适合添加到 /dev/mdadm/mdadm.conf 文件中,您可以传入 --brief 或 - b 带有详细视图的标志:

sudo mdadm -Db /dev/md0 OutputARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=8069bcc7:72e7b49f:fba1c780:560a85e0

要快速获取 RAID 设备的人类可读摘要,请使用 -Q 选项对其进行查询:

sudo mdadm -Q /dev/md0 Output/dev/md0: 199.88GiB raid10 4 devices, 0 spares. Use mdadm --detail for more detail.

这可用于一目了然地查找有关 RAID 设备的关键信息。

获取有关组件设备的信息

您还可以使用 mdadm 查询单个组件设备。

-Q 选项与组件设备一起使用时,会告诉您它所属的数组及其作用:

sudo mdadm -Q /dev/sdc Output/dev/sdc: is not an md array /dev/sdc: device 2 in 4 device active raid10 /dev/md0. Use mdadm --examine for more detail.

您可以使用 -E 或 --examine 选项获取更多详细信息:

sudo mdadm -E /dev/sdc Output/dev/sdc: Magic : a92b4efc Version : 1.2 Feature Map : 0x0 Array UUID : 8069bcc7:72e7b49f:fba1c780:560a85e0 Name : RAID2204:0 (local to host RAID2204) Creation Time : Wed Oct 5 15:56:03 2022 Raid Level : raid10 Raid Devices : 4 Avail Dev Size : 209582080 sectors (99.94 GiB 107.31 GB) Array Size : 209582080 KiB (199.87 GiB 214.61 GB) Data Offset : 133120 sectors Super Offset : 8 sectors Unused Space : before=132968 sectors, after=0 sectors State : clean Device UUID : 027f74c5:6d488509:64844c7a:add75d88 Update Time : Wed Oct 5 16:13:57 2022 Bad Block Log : 512 entries available at offset 136 sectors Checksum : 98edf3ae - correct Events : 35 Layout : near=2 Chunk Size : 512K Device Role : Active device 2 Array State : AAAA ('A' == active, '.' == missing, 'R' == replacing)

此信息类似于对阵列设备使用 -D 选项时显示的信息,但侧重于组件设备与阵列的关系。

读取 /proc/mdstat 信息

有关服务器上每个组装阵列的详细信息,请查看 /proc/mdstat 文件。这通常是查找系统中活动阵列当前状态的最佳方式:

cat /proc/mdstat OutputPersonalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md0 : active raid10 sdd[3] sdc[2] sdb[1] sda[0] 209584128 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU] unused devices:

这里的输出非常密集,在少量空间中提供了大量信息:

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] . . .

Personalities 行描述了内核当前支持的不同 RAID 级别和配置。

以 md0 开头的行描述了 RAID 设备描述的开头。下面的缩进线也描述了这个设备:

. . . md0 : active raid10 sdd[3] sdc[2] sdb[1] sda[0] . . .

第一行说明阵列处于活动状态,没有故障,并配置为 RAID 10。之后,列出了用于构建阵列的组件设备。括号中的数字描述了设备在阵列中的当前角色。这会影响为设备提供的数据副本。

. . . 209584128 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU] . . .

本例中显示的第二行给出了虚拟设备提供的块数、元数据版本(本例中为 1.2)和数组的块大小。由于这是一个 RAID 10 阵列,它还包括有关阵列布局的信息。在此示例中,它已配置为在 near 布局中存储每个数据块的两个副本。

方括号中的最后一项均表示健康集中的当前可用设备。数字括号中的第一个数字表示健康阵列的大小,而第二个数字表示当前可用的设备数。其他括号是阵列健康状况的视觉指示,U 代表健康设备,_ 代表故障设备。

如果您的阵列当前正在组装或恢复,您可能会有另一行显示进度:

. . . [>....................] resync = 0.9% (2032768/209584128) finish=15.3min speed=225863K/sec . . .

这以多种不同方式描述了正在应用的操作和当前进度。它还提供当前速度和预计完成时间。

在清楚了解系统上当前运行的阵列后,您可以采取多种措施。

停止阵列

要停止阵列,第一步是卸载它。

使用 cd ~ 命令走出挂载的目录:

cd ~

然后卸载设备:

sudo umount /mnt/md0

您可以通过运行以下命令停止所有活动阵列:

sudo mdadm --stop --scan

如果要停止特定阵列,请将其传递给 mdadm --stop 命令:

sudo mdadm --stop /dev/md0

这将停止阵列。您必须重新组装阵列才能再次访问它。

启动数组

要启动配置文件或 /proc/mdstat 中定义的所有阵列,请运行以下命令:

sudo mdadm --assemble --scan

要启动一个特定的数组,您可以将它作为参数传递给 mdadm --assemble:

sudo mdadm --assemble /dev/md0

如果在配置文件中定义了数组,则此方法有效。

如果配置文件中缺少阵列的正确定义,仍然可以通过传入组件设备来启动阵列:

sudo mdadm --assemble /dev/md0 /dev/sda /dev/sdb /dev/sdc /dev/sdd

一旦阵列组装好,就可以像往常一样安装它:

sudo mount /dev/md0 /mnt/md0

现在可以在挂载点访问该阵列。

将备用设备添加到阵列

备用设备可以添加到任何提供冗余的阵列,例如 RAID 1、5、6 或 10。除非活动设备发生故障,否则阵列不会主动使用备用设备。发生这种情况时,阵列会将数据重新同步到备用驱动器,以将阵列修复到完全健康状态。不能将备件添加到非冗余阵列 (RAID 0),因为该阵列将无法在驱动器发生故障后幸存下来。

要添加备用设备,请将阵列和新设备传递给 mdadm --add 命令:

sudo mdadm /dev/md0 --add /dev/sde

如果阵列未处于降级状态,则新设备将作为备用设备添加。如果设备当前降级,重新同步操作将立即开始使用备用驱动器替换故障驱动器。

添加备用后,更新配置文件以反映新的设备方向:

sudo nano /etc/mdadm/mdadm.conf

删除或注释掉与您的数组定义相对应的当前行:

. . . # ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=d81c843b:4d96d9fc:5f3f499c:6ee99294

然后,附加您当前的配置:

sudo mdadm --detail --brief /dev/md0 | sudo tee -a /etc/mdadm/mdadm.conf

mdadm 实用程序将使用新信息来组装数组。

增加阵列中有源设备的数量

可以通过增加组件中有源设备的数量来增加阵列。确切的过程稍微取决于您使用的 RAID 级别。

使用 RAID 1 或 10

首先将新设备添加为备用设备,如上一节所示:

sudo mdadm /dev/md0 --add /dev/sde

找出阵列中 RAID 设备的当前数量:

sudo mdadm --detail /dev/md0 Output/dev/md0: Version : 1.2 Creation Time : Wed Aug 10 15:29:26 2016 Raid Level : raid1 Array Size : 104792064 (99.94 GiB 107.31 GB) Used Dev Size : 104792064 (99.94 GiB 107.31 GB) Raid Devices : 2 Total Devices : 3 Persistence : Superblock is persistent . . .

在此示例中,阵列配置为主动使用两个设备。然而,它确实表明,由于有备用设备,阵列可用的设备总数为三个。

现在,重新配置阵列以具有额外的活动设备。备件将用于满足额外的驱动器需求。请记住在此命令中替换您的目标 raid 设备数。在这里,我们将具有 2 个设备的 raid 1 增加到 3。如果您在具有 4 个设备的 raid 10 中,并且有额外的驱动器,请将其增加到 5:

sudo mdadm --grow --raid-devices=3 /dev/md0

阵列将开始重新配置一个额外的活动磁盘。要查看同步数据的进度,请运行以下命令:

cat /proc/mdstat

该过程完成后,您可以继续使用该设备。

使用 RAID 5 或 6

首先将新设备添加为备用设备,如上一节所示:

sudo mdadm /dev/md0 --add /dev/sde

找出阵列中 RAID 设备的当前数量:

sudo mdadm --detail /dev/md0 Output/dev/md0: Version : 1.2 Creation Time : Wed Oct 5 18:38:51 2022 Raid Level : raid5 Array Size : 209584128 (199.88 GiB 214.61 GB) Used Dev Size : 104792064 (99.94 GiB 107.31 GB) Raid Devices : 3 Total Devices : 4 Persistence : Superblock is persistent . . .

在此示例中,阵列配置为主动使用三个设备,并且由于添加了备用设备,阵列可用的设备总数为四个。

现在,重新配置阵列以具有额外的活动设备。备件将用于满足额外的驱动器需求。在扩展 RAID 5 或 RAID 6 阵列时,包含一个名为 --backup-file 的附加选项很重要。这将指向阵列外的一个位置,其中将存储包含关键信息的备份文件:

注意:备份文件在此过程中只使用很短但很关键的时间,之后会自动删除。因为需要它的时间很短,您可能永远不会在磁盘上看到该文件,但如果出现问题,它可以用来重建阵列。如果您想了解更多信息,这篇文章有一些额外的信息。

sudo mdadm --grow --raid-devices=4 --backup-file=/root/md0_grow.bak /dev/md0

以下输出表明临界区将被备份:

Outputmdadm: Need to backup 3072K of critical section..

阵列将开始重新配置一个额外的活动磁盘。要查看同步数据的进度,请运行:

cat /proc/mdstat

在此过程完成后,您可以继续使用该设备。

重塑完成后,您需要扩展阵列上的文件系统以利用额外空间:

sudo resize2fs /dev/md0

您的阵列现在将拥有与其容量相匹配的文件系统。

使用 RAID 0

RAID 0 阵列不能有备用驱动器,因为备用驱动器没有机会重建损坏的 RAID 0 阵列。您必须在扩大阵列的同时添加新设备。

首先,找出阵列中当前 RAID 设备的数量:

sudo mdadm --detail /dev/md0 Output/dev/md0: Version : 1.2 Creation Time : Wed Aug 10 19:17:14 2020 Raid Level : raid0 Array Size : 209584128 (199.88 GiB 214.61 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent . . .

您现在可以在添加新驱动器的同一操作中增加 RAID 设备的数量:

sudo mdadm --grow /dev/md0 --raid-devices=3 --add /dev/sdc

您将收到指示阵列已更改为 RAID 4 的输出:

Outputmdadm: level of /dev/md0 changed to raid4 mdadm: added /dev/sdc

这是正常的,也是意料之中的。当数据重新分配到所有现有磁盘后,阵列将转换回 RAID 0。

您可以查看操作的进度:

cat /proc/mdstat

同步完成后,调整文件系统的大小以使用额外的空间:

sudo resize2fs /dev/md0

您的阵列现在将拥有与其容量相匹配的文件系统。

从阵列中删除设备

如果出现故障或需要更换磁盘,有时需要从 RAID 阵列中移除驱动器。

对于要删除的设备,必须首先在数组中将其标记为“失败”。您可以使用 mdadm --detail 检查是否有失败的设备:

sudo mdadm --detail /dev/md0 Output/dev/md0: Version : 1.2 Creation Time : Wed Aug 10 21:42:12 2020 Raid Level : raid5 Array Size : 209584128 (199.88 GiB 214.61 GB) Used Dev Size : 104792064 (99.94 GiB 107.31 GB) Raid Devices : 3 Total Devices : 3 Persistence : Superblock is persistent Update Time : Thu Aug 11 14:10:43 2020 State : clean, degraded Active Devices : 2 Working Devices : 2 Failed Devices : 1 Spare Devices : 0 Layout : left-symmetric Chunk Size : 64K Name : mdadmwrite:0 (local to host mdadmwrite) UUID : bf7a711b:b3aa9440:40d2c12e:79824706 Events : 144 Number Major Minor RaidDevice State 0 0 0 0 removed 1 8 0 1 active sync /dev/sda 2 8 16 2 active sync /dev/sdb 0 8 32 - faulty /dev/sdc

突出显示的行都表示驱动器不再运行。例如,此输出中的 /dev/sdc 显示驱动器出现故障。

如果您需要移除没有问题的驱动器,您可以使用 --fail 选项手动将其标记为失败:

sudo mdadm /dev/md0 --fail /dev/sdc Outputmdadm: set /dev/sdc faulty in /dev/md0

如果查看 mdadm --detail 的输出,您会注意到设备现在被标记为故障。

一旦设备出现故障,您可以使用 mdadm --remove 将其从阵列中删除:

sudo mdadm /dev/md0 --remove /dev/sdc Outputmdadm: hot removed /dev/sdc from /dev/md0

然后,您可以使用与添加备用驱动器相同的 mdadm --add 命令将其替换为新驱动器:

sudo mdadm /dev/md0 --add /dev/sdd Outputmdadm: added /dev/sdd

阵列将通过将数据复制到新驱动器来开始恢复。

删除数组

要销毁阵列(包括其中包含的所有数据),请按照用于停止阵列的过程开始。

使用以下命令走出挂载的目录:

cd ~

然后卸载文件系统:

sudo umount /mnt/md0

接下来,停止阵列:

sudo mdadm --stop /dev/md0

然后,使用针对 RAID 设备的 --remove 命令删除阵列本身:

sudo mdadm --remove /dev/md0

删除阵列本身后,在每个组件设备上使用 mdadm --zero-superblock。这将擦除 md 超级块,这是 mdadm 用来将组件设备组装和管理为数组的一部分的标头。如果这仍然存在,则在尝试将磁盘重新用于其他目的时可能会导致问题。

查看 lsblk --fs 输出中的 FSTYPE 列以确认数组中存在超级块:

lsblk --fs OutputNAME FSTYPE LABEL UUID MOUNTPOINT … sda linux_raid_member mdadmwrite:0 bf7a711b-b3aa-9440-40d2-c12e79824706 sdb linux_raid_member mdadmwrite:0 bf7a711b-b3aa-9440-40d2-c12e79824706 sdc linux_raid_member mdadmwrite:0 bf7a711b-b3aa-9440-40d2-c12e79824706 sdd vda ├─vda1 ext4 DOROOT 4f8b85db-8c11-422b-83c4-c74195f67b91 / └─vda15

在此示例中,/dev/sda、/dev/sdb 和 /dev/sdc 都是数组的一部分,并且仍被标记像这样。

使用以下命令删除标签:

sudo mdadm --zero-superblock /dev/sda /dev/sdb /dev/sdc

接下来,确保删除或注释掉 /etc/fstab 文件中对数组的任何引用。您可以通过在开头添加主题标签符号 # 来执行此操作:

sudo nano /etc/fstab . . . # /dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0

完成后保存并关闭文件。

从 /etc/mdadm/mdadm.conf 文件中删除或注释掉对数组的任何引用:

nano /etc/mdadm/mdadm.conf # ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=bf7a711b:b3aa9440:40d2c12e:79824706

完成后保存并关闭文件。

然后更新 initramfs:

sudo update-initramfs -u

这将从早期引导环境中删除设备。

结论

一旦您了解了 Linux 的 mdadm 实用程序使用的约定以及可以找到信息的位置,它就可以帮助您管理数组。本指南并不详尽,但旨在介绍您可能需要在日常工作中执行的一些管理任务。

一旦您熟悉了使用 mdadm 创建和管理 RAID 阵列,接下来您可以探索许多不同的方向。 LVM 等卷管理层与 RAID 紧密集成,允许您将空间灵活地划分为逻辑卷。要了解更多信息,请查看我们的 LVM 概念简介教程。

同样,LUKS 和 dm-crypt 加密通常用于在写入文件系统之前加密 RAID 设备。 Linux 允许结合使用所有这些技术来增强您的存储能力。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3