Ubuntu 22.04系统下mdadm管理RAID阵列完全指南

介绍

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

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

先决条件

要按照这个指南,您需要访问一个非root的sudo用户。您可以按照我们的Ubuntu 22.04初始服务器设置指南来设置一个适当的用户。

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

信息:由于虚拟私有服务器上RAID设置的效率低下,我们不建议在Silicon Cloud droplets上部署RAID设置。数据中心磁盘复制的效率使得RAID的好处相对于裸金属硬件而言微不足道。本教程旨在成为传统RAID设置的参考。

查询有关RAID设备的信息

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

要获取有关RAID设备的详细信息,请使用mdadm命令中的-D或–detail选项,传递RAID设备。

  1. sudo mdadm -D /dev/md0

将会显示有关数组的重要信息。

/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标志以详情视图传递。

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

为了快速获得可读的RAID设备摘要,请使用-Q选项来查询它。

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

这可以用来一目了然地查找关于RAID设备的重要信息。

获取有关组件设备的信息

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

当与组件设备一起使用时,-Q选项将告诉您它所属的数组以及其角色。

  1. sudo mdadm -Q /dev/sdc
/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”选项获得更详细的信息。

  1. sudo mdadm -E /dev/sdc

检查RAID设备详细信息

以下是使用mdadm命令显示的RAID设备详细信息:

/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

输出结果:

Personalities : [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: <none>

这里的输出非常紧凑,用很小的空间提供了大量信息。

/proc/mdstat是Linux系统中的一个文件,提供了关于软件RAID(独立磁盘冗余阵列)设备的信息。

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阵列,它还包括有关阵列布局的信息。在此示例中,已配置为在相邻布局中存储每个数据块的两个副本。

方括号内的最后两个项目分别代表一组目前可用设备中的最新项目。数字方括号中的第一个数字表示一组健康阵列的大小,而第二个数字表示目前可用的设备数量。其他方括号则是对阵列健康状况的可视化指示,其中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中定义的所有阵列,请运行以下命令:

  1. sudo mdadm –assemble –scan

要启动特定的阵列,您可以将其作为参数传递给mdadm –assemble。

  1. sudo mdadm –assemble /dev/md0

如果阵列在配置文件中已定义,则此方法适用。

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

  1. sudo mdadm –assemble /dev/md0 /dev/sda /dev/sdb /dev/sdc /dev/sdd

一旦阵列装配完成,可以像往常一样进行挂载。

  1. sudo mount /dev/md0 /mnt/md0

这个阵列现在可以在挂载点上访问。

在一个阵列中添加备用设备

可以向任何具有冗余功能的阵列中添加备用设备,比如RAID 1、5、6或10。除非某个活动设备发生故障,否则备用设备将不会被阵列主动使用。当此情况发生时,阵列将重新同步数据到备用驱动器,以修复阵列并使其完好无损。不能将备用设备添加到非冗余阵列(RAID 0)中,因为该阵列无法在驱动器故障时存活下来。

要添加备用设备,将阵列和新设备传递给mdadm –add命令。

  1. sudo mdadm /dev/md0 –add /dev/sde

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

在你添加备用设备之后,更新配置文件以反映你的新设备配置。

  1. sudo nano /etc/mdadm/mdadm.conf

删除或注释掉与你的阵列定义对应的当前行。

/etc/mdadm/mdadm.conf 是mdadm的配置文件。

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

然后,将您当前的配置添加到其中。

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

新的信息将被mdadm实用工具用来组装阵列。

增加阵列中活动设备的数量

在组装中增加活动设备的数量可以扩展阵列。具体步骤会稍微依赖您使用的RAID级别。

使用RAID 1或10

从上一节中演示的方式开始,将新设备添加为备用设备。

  1. sudo mdadm /dev/md0 –add /dev/sde

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

  1. sudo mdadm –detail /dev/md0
输出

/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个设备。如果您的RAID 10有4个设备,并且有额外的驱动器,请将其增加到5个。

  1. sudo mdadm –grow –raid-devices=3 /dev/md0

 

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

  1. cat /proc/mdstat

 

在流程完成之前,您可以继续使用该设备。

使用RAID 5或6

在最后一节所示的情况下,首先将新设备添加为备用设备。

  1. sudo mdadm /dev/md0 –add /dev/sde

 

查找阵列中当前的RAID设备数量。

  1. sudo mdadm –detail /dev/md0

 

输出

/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的额外选项。这将指向一个位置,在阵列外的地方存储一个包含关键信息的备份文件。

注意:

备份文件仅在此过程的一个非常短暂但关键的时间内使用,之后将自动删除。由于需要的时间很短,您可能永远不会在硬盘上看到该文件,但如果出现问题,可以使用它来重新构建阵列。如果您想了解更多信息,请参阅本帖子。

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

 

以下的输出表明关键部分会被备份。

输出

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

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

  1. cat /proc/mdstat

 

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

在重新调整完成后,您需要扩展阵列的文件系统以利用额外的空间。

  1. sudo resize2fs /dev/md0

 

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

使用RAID 0

RAID 0阵列无法有备用驱动器,因为备用驱动器无法重建损坏的RAID 0阵列。您必须在扩展阵列的同时添加新设备。

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

  1. sudo mdadm –detail /dev/md0

 

输出

/dev/md0: 版本 : 1.2 创建时间 : 2020年8月10日 19:17:14 RAID级别 : raid0 阵列大小 : 209584128 (199.88 GiB 214.61 GB) RAID设备 : 2 总设备数 : 2 持久性 : 超级块是持久的 . . .

现在,你可以在添加新驱动器的同时增加RAID设备的数量。

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

 

你将收到输出,提示数组已更改为RAID 4。

输出

mdadm: /dev/md0的级别已更改为raid4 mdadm: 已添加/dev/sdc

这是正常且预期的情况。当数据重新分配到所有现有磁盘上时,阵列将会恢复为RAID 0。

你可以查看行动的进展。

  1. cat /proc/mdstat

 

一旦同步完成,调整文件系统的大小以利用额外的空间。

  1. sudo resize2fs /dev/md0

 

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

从阵列中移除一个设备

有时候,如果RAID阵列出现故障或者需要更换硬盘,就需要移除其中的一块驱动器。

要移除设备,首先必须在阵列中将其标记为”已失效”。你可以使用mdadm –detail命令来检查是否有设备失效。

  1. sudo mdadm –detail /dev/md0

 

输出

/dev/md0: 版本 : 1.2 创建时间 : 2020年8月10日 21:42:12 RAID级别 : raid5 阵列大小 : 209584128 (199.88 GiB 214.61 GB) 已使用设备大小 : 104792064 (99.94 GiB 107.31 GB) RAID设备 : 3 总设备数 : 3 持久性 : 超级块是持久的 更新时间 : 2020年8月11日 14:10:43 状态 : clean, degraded 活动设备 : 2 工作设备 : 2 故障设备 : 1 备用设备 : 0 布局 : left-symmetric 块大小 : 64K 名称 : mdadmwrite:0 (本地到主机 mdadmwrite) UUID : bf7a711b:b3aa9440:40d2c12e:79824706 事件 : 144 编号 主设备号 次设备号 RAID设备 状态 0 0 0 0 已移除 1 8 0 1 活动同步 /dev/sda 2 8 16 2 活动同步 /dev/sdb 0 8 32 – 故障 /dev/sdc

这些突出显示的行都表示一个驱动器不再工作。例如,在这个输出中/dev/sdc表明这个驱动器是有问题的。

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

  1. sudo mdadm /dev/md0 –fail /dev/sdc

 

输出

mdadm: 在/dev/md0中将/dev/sdc设置为故障

如果您查看mdadm –detail的输出,您会发现设备现在被标记为故障。

一旦设备失败,您可以使用mdadm –remove命令从阵列中移除它。

  1. sudo mdadm /dev/md0 –remove /dev/sdc

 

输出

mdadm: 已从/dev/md0中热移除/dev/sdc

您可以使用相同的mdadm –add命令替换为新的驱动器,就像您用来添加备用驱动器一样。

  1. sudo mdadm /dev/md0 –add /dev/sdd

 

输出

mdadm: 已添加/dev/sdd

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

删除一个数组

要销毁RAID阵列及其中的所有数据,首先需要按照停止阵列的步骤进行操作。

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

  1. cd ~

然后卸载文件系统。

sudo umount /mnt/md0

接下来,停止阵列。

  1. sudo mdadm –stop /dev/md0

然后,使用–remove命令来删除指定的RAID设备上的阵列本身。

  1. sudo mdadm –remove /dev/md0

一旦删除了阵列本身,需要对每个组件设备使用mdadm –zero-superblock命令。这将擦除md超级块,即由mdadm用于组装和管理组件设备作为阵列的标头。如果仍然存在,当尝试将磁盘重新用于其他目的时可能会引起问题。

要确认阵列中的超级块是否存在,请查看lsblk –fs输出中的FSTYPE列。

  1. lsblk –fs
输出
NAME 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都是阵列的一部分,仍然被标示为这样。

使用以下命令去除标签。

  1. sudo mdadm –zero-superblock /dev/sda /dev/sdb /dev/sdc

接下来,请确保您将/etc/fstab文件中对阵列的任何引用删除或注释掉。您可以在开头添加井号符号#来实现这一点。

  1. sudo nano /etc/fstab
/etc/fstab 文件内容如下:
. . .
# /dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0

当你完成时,保存并关闭文件。

从/etc/mdadm/mdadm.conf文件中删除或注释掉对阵列的任何引用。

  1. nano /etc/mdadm/mdadm.conf
/etc/mdadm/mdadm.conf文件内容如下:
# ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=bf7a711b:b3aa9440:40d2c12e:79824706 

完成后请保存并关闭文件。

然后更新initramfs。

  1. sudo update-initramfs -u

这将从早期启动环境中移除设备。

结论

一旦你了解Linux的mdadm实用程序使用的约定和可以找到信息的位置,它可以帮助管理阵列。这个指南并非详尽无遗,但旨在介绍可能需要在日常工作中执行的一些管理任务。

一旦你熟练使用mdadm创建和管理RAID阵列,你可以探索许多不同的方向。像LVM这样的卷管理层与RAID紧密集成,使你能够灵活地将空间划分为逻辑卷。要了解更多信息,请查阅我们的《LVM概念介绍教程》。

同样,常用的LUKS和dm-crypt加密技术可用于在写入文件系统之前对RAID设备进行加密。Linux允许将所有这些技术一起使用,以提升存储能力。

bannerAds