如何在 Linux 上使用 mdadm 创建软件 RAID-1 阵列如何在 Linux 上使用 mdadm 创建软件 RAID-1 阵列如何在 Linux 上使用 mdadm 创建软件 RAID-1 阵列如何在 Linux 上使用 mdadm 创建软件 RAID-1 阵列
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Linux 上使用 mdadm 创建软件 RAID-1 阵列

独立磁盘冗余阵列 (RAID) 是一种存储技术,它将多个硬盘组合成一个逻辑单元,以提供容错和/或提高磁盘 I/O 性能。根据数据在磁盘阵列中的存储方式(例如,条带化、镜像、奇偶校验或其任意组合),定义了不同的 RAID 级别(例如,RAID-0、RAID-1、RAID-5 等)。 RAID 可以通过软件或硬件RAID 卡来实现。在现代 Linux 上,默认情况下可以使用基本的软件 RAID 功能。

在这篇文章中,我们将讨论 RAID-1 阵列(也称为镜像阵列)的软件设置,其中相同的数据被写入形成阵列的两个设备。虽然可以在单个物理硬盘驱动器上使用分区来实施 RAID-1(与其他 RAID 级别一样),但如果该单个硬盘驱动器发生故障,它就没有多大用处。事实上,这就是大多数 RAID 级别通常使用多个物理驱动器来提供冗余的原因。如果发生任何单个驱动器故障,虚拟 RAID 块设备应继续正常运行,不会出现任何问题,并允许我们更换故障驱动器,而不会造成大量生产停机,更重要的是,不会丢失数据。但是,它并不能取代在外部存储中保存定期系统备份的需要。

由于 RAID-1 阵列的实际存储容量(大小)是最小驱动器的大小,因此通常(如果不是总是)您会在 RAID-1 设置中找到两个相同的物理驱动器。

在 Linux 上安装 mdadm

我们将用来创建、组装、管理和监控软件 RAID-1 的工具称为 mdadm(multiple disks admin 的缩写)。在 Fedora、CentOS、RHEL 或 Arch Linux 等 Linux 发行版上,mdadm 默认可用。在基于 Debian 的发行版上,mdadm 可以与 aptitude 或 apt-get 一起安装。

Fedora、CentOS 或 RHEL:

由于 mdadm 已预先安装,您所要做的就是启动 RAID 监控服务,并将其配置为开机自动启动:


# systemctl start mdmonitor
# systemctl enable mdmonitor

对于 CentOS/RHEL 6 或更早版本,请改用以下命令:


# service mdmonitor start
# chkconfig mdmonitor on

Debian、Ubuntu 或 Linux Mint:

在 Debian 及其衍生版本上,mdadm 可以通过 aptitude 或 apt-get 进行安装:


# aptitude install mdadm

在 Ubuntu 上,系统会要求您配置 postfix MTA 以发送电子邮件通知(作为 RAID 监控的一部分)。您现在可以跳过它。

在 Debian 上,安装将以以下解释性消息开始,以帮助我们决定是否要在 RAID 阵列上安装根文件系统。我们需要在下一个屏幕上输入的内容将取决于此决定。仔细阅读:

由于我们不会将 RAID-1 用于根文件系统,因此我们将答案留空:

当询问我们是否要在每次启动期间自动启动(重新组装)阵列时,请选择是。请注意,稍后我们需要向 /etc/fstab 文件添加一个条目,以便在引导过程中也能正确安装阵列。

硬盘分区

现在是时候准备将在我们的阵列中使用的物理设备了。对于此设置,我插入了两个 8 GB USB 驱动器,它们在 dmesg 输出中被识别为 /dev/sdb 和 /dev/sdc:


# dmesg | less

[   60.014863] sd 3:0:0:0: [sdb] 15826944 512-byte logical blocks: (8.10 GB/7.54 GiB)
[   75.066466] sd 4:0:0:0: [sdc] 15826944 512-byte logical blocks: (8.10 GB/7.54 GiB)

我们将使用 fdisk 在每个磁盘上创建一个主分区,该分区将占据其整个大小。以下步骤展示了如何在 /dev/sdb 上执行此任务,并假设该驱动器尚未分区(否则,我们可以删除现有分区以从干净的磁盘开始):


# fdisk /dev/sdb

按 p 打印当前分区表:

(如果发现一个或多个分区,可以使用d选项删除它们。然后使用w选项应用更改)。

由于没有找到分区,我们将创建一个新的主分区[n]作为主分区[p],为其分配分区号=[1],然后指示其大小。您可以按 Enter 键接受建议的默认值,或输入您选择的值,如下图所示。

现在对 /dev/sdc 重复相同的过程。

如果我们有两个不同大小的驱动器,例如 750 GB 和 1 TB,我们应该在每个驱动器上创建一个 750 GB 的主分区,并将较大驱动器上的剩余空间用于其他目的,独立于 RAID 阵列。

创建 RAID-1 阵列

在每个驱动器上创建主分区后,请使用以下命令创建 RAID-1 阵列:


# mdadm -Cv /dev/md0 -l1 -n2 /dev/sdb1 /dev/sdc1

在哪里:

  • -Cv: 创建一个数组并生成详细输出。

  • /dev/md0:是数组的名称。

  • -l1(l 表示“级别”):表示这将是 RAID-1 阵列。

  • -n2:表示我们将向阵列添加两个分区,即/dev/sdb1和/dev/sdc1。

上面的命令相当于:


# mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1

或者,如果您想添加备用设备以便将来更换故障磁盘,可以将 --spare-devices=1 /dev/sdd1 添加到上述命令中。

如果提示您要继续创建数组,请回答y,然后按 Enter:

您可以使用以下命令检查进度:


# cat /proc/mdstat

获取有关 RAID 阵列的更多信息的另一种方法(在组装过程中和过程完成后)是:


# mdadm --query /dev/md0
# mdadm --detail /dev/md0 (or mdadm -D /dev/md0)

在“mdadm -D”提供的信息中,最有用的可能是显示阵列状态的信息。 活动状态表示当前正在发生 I/O 活动。其他可能的状态包括干净(所有 I/O 活动已完成)、降级(其中一个设备出现故障或丢失)、重新同步(系统正在从非正常关机(例如断电)中恢复)或恢复(已将新驱动器添加到阵列中,并且正在将数据从另一个驱动器复制到该驱动器上),仅举出最常见的状态。

格式化并挂载 RAID 阵列

下一步是格式化(在本例中使用 ext4)数组:


# mkfs.ext4 /dev/md0

现在让我们安装阵列,并验证它是否已正确安装:


# mount /dev/md0 /mnt
# mount

监控 RAID 阵列

mdadm 工具内置了 RAID 监控功能。当 mdadm 设置为守护进程运行时(我们的 RAID 设置就是这种情况),它会定期轮询现有 RAID 阵列,并通过电子邮件通知或 syslog 日志记录检测到的任何事件。或者,它还可以配置为在检测到任何严重错误时调用应急命令(例如重试或删除磁盘)。

默认情况下,mdadm 扫描所有现有分区和 MD 阵列,并将检测到的任何事件记录到 /var/log/syslog。或者,您可以在位于 /etc/mdadm/mdadm.conf(基于 Debian)或 /etc/mdadm.conf(基于 Red Hat)的 mdadm.conf 中指定要扫描的设备和 RAID 阵列,格式如下。如果 mdadm.conf 不存在,请创建一个。


DEVICE /dev/sd[bcde]1 /dev/sd[ab]1

ARRAY /dev/md0 devices=/dev/sdb1,/dev/sdc1
ARRAY /dev/md1 devices=/dev/sdd1,/dev/sde1
.....

# optional email address to notify events
MAILADDR [email 

修改mdadm配置后,重新启动mdadm守护进程:

在 Debian、Ubuntu 或 Linux Mint 上:


# service mdadm restart

在 Fedora 15 或 CentOS/RHEL 7 及更高版本上:


# systemctl restart mdmonitor

在 Fedora 14 或 CentOS/RHEL 6 及更早版本上:


# service mdmonitor restart

自动挂载 RAID 阵列

现在我们将在 /etc/fstab 中添加一个条目,以在启动期间自动将阵列挂载到 /mnt 中(您可以指定任何其他挂载点):


# echo "/dev/md0 /mnt ext4 defaults 0 2" >> /etc/fstab

为了验证挂载是否正常,我们现在卸载阵列,重新启动 mdadm,然后重新挂载。我们可以看到 /dev/md0 已经根据我们刚刚添加到 /etc/fstab 的条目进行了挂载:


# umount /mnt
# service mdadm restart  (on Debian, Ubuntu or Linux Mint)
or systemctl restart mdmonitor (on Fedora, CentOS/RHEL7)
or service mdmonitor restart (on CentOS/RHEL6)
# mount -a

现在我们准备通过 /mnt 挂载点访问 RAID 阵列。为了测试数组,我们将 /etc/passwd 文件(任何其他文件都可以)复制到 /mnt 中:

在 Debian 上,我们需要通过在 /etc/default/mdadm 文件中将 AUTOSTART 变量设置为 true 来告诉 mdadm 守护进程在引导期间自动启动 RAID 阵列:


AUTOSTART=true

模拟驱动器故障

我们将模拟一个有故障的驱动器并使用以下命令将其删除。请注意,在现实生活场景中,无需首先将设备标记为有故障,因为在发生故障时它已经处于该状态。

首先,卸载阵列:


# umount /mnt

现在,请注意 mdadm -D /dev/md0 的输出如何指示执行以下每个命令后的更改。


# mdadm /dev/md0 --fail /dev/sdb1 #Marks /dev/sdb1 as faulty
# mdadm --remove /dev/md0 /dev/sdb1 #Removes /dev/sdb1 from the array

之后,当您有新的驱动器需要更换时,请再次重新添加驱动器:


# mdadm /dev/md0 --add /dev/sdb1

然后立即开始将数据重建到 /dev/sdb1 上:

请注意,上述详细步骤适用于具有热插拔磁盘的系统。如果您没有此类技术,您还必须停止当前阵列,并首先关闭系统才能更换部件:


# mdadm --stop /dev/md0
# shutdown -h now

然后添加新驱动器并重新组装阵列:


# mdadm /dev/md0 --add /dev/sdb1
# mdadm --assemble /dev/md0 /dev/sdb1 /dev/sdc1

希望这可以帮助。

©2015-2025 艾丽卡 support@alaica.com