一、命令简介
mdadm
是 Linux 下用于管理软件 RAID 设备的工具,可以创建、管理和监控软件 RAID 阵列。
创建 RAID 需要多个环节,多个命令搭配使用:
-
gdisk
命令创建格式为Linux RAID
的磁盘分区 -
mdadm
命令将多个Linux RAID
分区创建为软RAID分区
-
mkfs
命令将软RAID分区
格式化为ext4
或其他文件系统 -
mount
命令将文件系统挂载到目录树
二、命令参数
mdadm [选项] [device]
创建 RAID 阵列的选项
-
--create /dev/md#
: 创建一个新的 RAID 设备。 -
--level=#
: 指定 RAID 级别(例如,0、1、5、6、10)。 -
--raid-devices=#
: 指定 RAID 阵列中活动设备的数量。 -
--spare-devices=#
: 指定备用设备的数量。 -
--chunk=#
: 设置 RAID 块大小(默认为 512KB)。
管理现有 RAID 阵列的选项
-
--add
: 添加一个设备到 RAID 阵列。 -
--remove
: 从 RAID 阵列中移除一个设备。 -
--fail
: 标记一个设备为失败。 -
--replace
: 用新设备替换失败的设备。 -
--grow
: 改变 RAID 阵列的某些方面,如大小或模式。
监控和组装 RAID 阵列的选项
-
--monitor
: 启动或停止监控模式。 -
--assemble
: 组装一个已存在的 RAID 阵列。 -
--scan
: 扫描配置文件或 /proc/mdstat 以查找 RAID 阵列。
输出和配置文件选项
-
--detail
: 显示 RAID 阵列的详细信息。 -
--examine
: 检查磁盘的超级块以获取 RAID 信息。 -
--config
: 指定配置文件。 -
--scan
: 将发现的阵列信息添加到配置文件中。
其他选项
-
--stop
: 停止 RAID 阵列。 -
--readonly
: 将阵列设置为只读。 -
--write-mostly
: 将设备设置为“主要写入”,通常用于热备。 -
--mail
: 设置接收警报的电子邮件地址。 -
--delay
: 设置警报的延迟时间。
三、命令示例
mdadm
是用于管理 Linux 软件 RAID 的命令行工具。以下是一些常见的 mdadm
示例:
1. 创建 RAID 阵列
创建 RAID5 示例
sudo mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sd[b-d]1
-
/dev/md0
:新创建的 RAID 设备。 -
--level=5
:指定 RAID 级别为 RAID 5。 -
--raid-devices=3
:使用三个设备。 -
/dev/sd[b-d]1
:使用/dev/sdb1
,/dev/sdc1
,/dev/sdd1
作为阵列成员。
创建 RAID1 示例
sudo mdadm --create --verbose /dev/md1 --level=1 --raid-devices=2 /dev/sdb2 /dev/sdc2
-
/dev/md0
:新创建的 RAID 设备:md1。 -
--level=1
:指定 RAID 级别为 RAID 1。 -
--raid-devices=2
:使用两个设备。 -
/dev/sdb2 /dev/sdc2
:使用/dev/sdb2
,/dev/sdc2
作为阵列成员。
2. 查看 RAID 阵列状态
cat /proc/mdstat
- 显示所有当前活跃的 RAID 阵列及其状态。
或者使用:
sudo mdadm --detail /dev/md0
- 显示指定阵列
/dev/md0
的详细信息。
3. 停止和移除 RAID 阵列
停止一个 RAID 阵列:
sudo mdadm --stop /dev/md0
删除 RAID 阵列:
sudo mdadm --remove /dev/md0
4. 添加新磁盘到现有 RAID 阵列
例如,要向现有 RAID 5 阵列中添加新的磁盘:
sudo mdadm --add /dev/md0 /dev/sde
5. 从 RAID 阵列中移除磁盘
移除一个磁盘之前,先将其标记为故障:
sudo mdadm --fail /dev/md0 /dev/sdc
然后移除该磁盘:
sudo mdadm --remove /dev/md0 /dev/sdc
6. 监控 RAID 阵列
设置 mdadm
在 RAID 阵列出现问题时发邮件通知:
sudo mdadm --monitor [email protected] --delay=300 --scan
-
[email protected]
:设置邮件接收者。 -
--delay=300
:每 300 秒检查一次。
7. 保存 RAID 阵列配置
为了在重启后自动重新组装 RAID 阵列,使用以下命令保存当前 RAID 配置:
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
然后更新 initramfs:
sudo update-initramfs -u
这些示例可以帮助你更好地管理和操作 RAID 阵列,具体操作视需求而定。
四、零基础RAID教程
零基础创建软 RAID 的过程
第一步:gdisk 新建磁盘分区
使用 gdisk 硬盘设备
命令新建磁盘分区,分区类型为 Linux RAID
%sudo gdisk /dev/sdc #1.gdisk命令对磁盘/dev/sdc进行分区管理
Command (? for help): n #2.输入n创建分区
Partition number (1-128, default 1): #3.回车(默认分区号)
First sector (34-3907029134, default = 2048) or {+-}size{KMGTP}: #4.回车(默认起点)
Last sector (2048-3907029134, default = 3907029134) or {+-}size{KMGTP}: #5.回车(默认终点)
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): fd00 #6.fd00(Linux RAID 类型)
Changed type of partition to 'Linux RAID'
Command (? for help): w #7.保存修改输入w(不想保存则输入q)
第二步:mdadm 创建软 RAID
创建 RAID1
sudo mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdc1 /dev/sdd1
含义:
sudo mdadm #mdadm需要超级权限
--create #创建RAID
/dev/md1 #mdx是RAID的设备名,可以起名范围为/dev/md0 到 /dev/md127
--level=1 #类型为RAID1。level=0则表示类型为RAID0,其他RAID类推。
--raid-devices=2 #表明RAID由2块硬盘(此处硬盘=硬盘分区)组成
/dev/sdc1 /dev/sdd1 #组成RAID的硬盘(硬盘分区)列表
➕ 拓展:应到知道
1.新创建的 RAID 会自动装配。
2.使用 lsblk
也可以看到所有已经创建的&正常运行的 RAID 设备,以下是我在自己主机上创建的 RAID 设备:
soulio%k455l:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 931.5G 0 disk
├─sdb1 8:17 0 800G 0 part
│ └─md1 9:1 0 799.9G 0 raid1 /mnt/raid1
└─sdb2 8:18 0 120G 0 part /mnt/hd1
sdd 8:48 0 931.5G 0 disk
├─sdd1 8:49 0 800G 0 part
│ └─md1 9:1 0 799.9G 0 raid1 /mnt/raid1
└─sdd2 8:50 0 120G 0 part /media/soulio/a7b11035-b3e4-47f6-9df2-b973314
sde 8:64 0 1.8T 0 disk
└─sde1 8:65 0 1.8T 0 part
└─md127 9:127 0 1.8T 0 raid1 /mnt/raid2T
sdf 8:80 0 1.8T 0 disk
└─sdf1 8:81 0 1.8T 0 part
└─md127 9:127 0 1.8T 0 raid1 /mnt/raid2T
➕ 拓展:关于命名
mdx 这样的名字不便于记忆,你可以将
/dev/mdx
替换为/dev/md/自定义名
,例如/dev/md/RAID1-2T
。
这是我的命名:当初还是太保守了,
2T
没有RAID1-2T
的分辨率高,但还是比mdx
好用。sudo mdadm --create /dev/md/2T --level=1 --raid-devices=2 /dev/sdc1 /dev/sdd1
自定义名字的本质:符号链接。
soulio@k455l:~% ls -l /dev/md/ 总计 0 lrwxrwxrwx 1 root root 6 5月 15 16:30 1 -> ../md1 lrwxrwxrwx 1 root root 8 5月 15 16:30 2T -> ../md127
查看 RAID 设备的详细信息
使用 mdadm 的
--detail
选项查看软 RAID 详细信息,可简写为-D
mdadm --detail [RAID设备名]
例如
~% sudo mdadm -D /dev/md/2T /dev/md/2T: Version : 1.2 Creation Time : Sun Apr 7 11:45:07 2024 Raid Level : raid1 #RAID1 Array Size : 1953381440 (1862.89 GiB 2000.26 GB) #容量 Used Dev Size : 1953381440 (1862.89 GiB 2000.26 GB) Raid Devices : 2 #组成RAID的磁盘数量 Total Devices : 2 Persistence : Superblock is persistent Intent Bitmap : Internal Update Time : Sun Apr 7 18:51:54 2024 State : clean, resyncing #状态 Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Consistency Policy : bitmap Resync Status : 90% complete #首次同步需要数个小时,与磁盘的速度和容量有关 Name : k455l:2T (local to host k455l) UUID : af486467:ad28f90a:b8060fab:b8060fab Events : 5169 Number Major Minor RaidDevice State 0 8 33 0 active sync /dev/sdc1 1 8 49 1 active sync /dev/sdd1
➕ 拓展:我这个 2T 的 RAID 首次同步大概要花费 8 小时,以下是同步完成后
-D
的输出% sudo mdadm -D /dev/md/2T /dev/md/2T: Version : 1.2 Creation Time : Sun Apr 7 11:45:07 2024 Raid Level : raid1 Array Size : 1953381440 (1862.89 GiB 2000.26 GB) Used Dev Size : 1953381440 (1862.89 GiB 2000.26 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Intent Bitmap : Internal Update Time : Sun Apr 7 23:07:41 2024 State : clean #状态 Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Consistency Policy : bitmap Name : k455l:2T (local to host k455l) UUID : af486467:ad28f90a:b8060fab:b8060fab Events : 5980 Number Major Minor RaidDevice State 0 8 33 0 active sync /dev/sdc1 1 8 49 1 active sync /dev/sdd1
🔔 为了确保下次开机能够自动加载 RAID
,需将 RAID
信息保存到配置文件 /etc/mdadm.conf
mdadm -D --scan > /etc/mdadm.conf
第三步:mkfs 创建文件系统
此时的 RAID
相当于一块新的硬盘分区,与普通硬盘分区一样:需要使用 mkfs
命令将 RAID设备
创建(格式化)为可用的文件系统并挂载到目录树才能被我们使用。
格式化命令很简单
sudo mkfs.[文件系统格式] [RAID设备名]
以我的 RAID
为例
#1.输入命令
$ sudo mkfs.ext4 /dev/md/2T
#2.什么都不要做,等待输出完毕即可。
mke2fs 1.46.5 (30-Dec-2021)
创建含有 488345360 个块(每块 4k)和 122093568 个 inode 的文件系统
文件系统 UUID:4e82ff0c-2060-43f2-8846-db1bc53c9298
超级块的备份存储于下列块:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
正在分配组表: 完成
正在写入 inode表: 完成
创建日志(262144 个块): 完成
写入超级块和文件系统账户统计信息: 已完成
#到此名为/dev/md/2T的RAID设备就成功被格式化为ext4格式了
第四步:mount 把文件系统挂载到目录树
1.在配置文件 /etc/fstab 中添加新文件系统的挂载信息
以我的 RAID 为例,你的 RAID 可能是 /dev/mdx
,可以使用 lsblk
命令再次确认 RAID 名字。
/dev/md/2T /mnt/raid2T ext4 defaults 0 0
🔔 理解和正确配置 /etc/fstab
对于系统管理来说非常重要!
📕 简单介绍每一项的含义,通常只需要根据自己的情况修改前三项的内容。
/dev/md/2T /mnt/raid2T ext4 defaults 0 0
/etc/fstab
配置文件
每一项的含义:
- 文件系统 (
fs_spec
):这一列指定要挂载的设备或远程文件系统。它可以是实际的设备名(如/dev/sda1
),LABEL,UUID,或者是网络文件系统的地址(如192.168.1.1:/share
)。 - 挂载点 (
fs_file
):这一列指定文件系统应该挂载到哪个目录下。 - 文件系统类型 (
fs_vfstype
):这一列指定了设备的文件系统类型,如ext4
、xfs
、nfs
等。 - 挂载选项 (
fs_mntops
):这一列指定了挂载时使用的选项,比如ro
(只读)、rw
(读写)、exec
(执行权限)、noexec
(禁止执行)、auto
(启动时自动挂载)、noauto
(启动时不自动挂载)等。 - 转储频率 (
fs_freq
):这一列指定了文件系统应该被dump
命令备份的频率,0 意味着从不备份,1 意味着每天备份,2 意味着每两天备份一次,以此类推。 - 检查顺序 (
fs_passno
):这一列指定了文件系统在系统启动时应该被fsck
检查的顺序。根文件系统(/
)的检查顺序是 1,其他文件系统是 2 或更高,0 表示不检查。
例如,一个/etc/fstab
文件中的一行可能看起来像这样:
UUID=2435c6df-0f08-4c2a-8d1f-318355d5e4e2 / ext4 defaults 0 1
这表示:
- 使用 UUID 标识的分区(
2435c6df-0f08-4c2a-8d1f-318355d5e4e2
)会被挂载到根目录(/
)。 - 文件系统类型是
ext4
。 - 使用默认的挂载选项(
defaults
包括读写权限、执行权限等)。 - 不需要定期备份(
fs_freq
为 0)。 - 在启动时首先检查该文件系统(
fs_passno
为 1)。
理解和正确配置 /etc/fstab
对于系统管理来说非常重要,因为错误的配置可能导致系统无法正常启动或者数据丢失。
2.mount 挂载
使用 mount -a
命令挂载 /etc/fstab
配置文件中的文件系统
mount -a
使用 lsblk
命令观察已经挂载的文件系统
$ lsblk
sdc 8:32 0 1.8T 0 disk
└─sdc1 8:33 0 1.8T 0 part
└─md127 9:127 0 1.8T 0 raid1 /mnt/raid2T
sdd 8:48 0 1.8T 0 disk
└─sdd1 8:49 0 1.8T 0 part
└─md127 9:127 0 1.8T 0 raid1 /mnt/raid2T
必须使用 update-initramfs -u
命令更新 initramfs
,否则下次开机时 RAID 无法正确装配。
update-initramfs -u
到此一个 软RAID
便被成功创建,并挂载到文件树使用。此例子中的挂载点为 /mnt/raid2T
,可以往该挂载点写入信息。
第五步:管理软 RAID
参考命令示例
使用 sudo mdadm --detail --scan
命令扫描主机上所有的 RAID,参考目录第三章节(命令示例)完成管理。
注意事项
- 在使用
mdadm
命令时,请谨慎操作以避免意外删除数据或破坏阵列配置。 - 在操作软件 RAID 阵列时,了解每个选项和参数的含义非常重要,以免造成数据丢失或损坏。
参考:利用 mdadm 工具构建 RAID 0/1/5/6/10 磁盘阵列实战(超详细)
本文共 1973 个字数,平均阅读时长 ≈ 5分钟
评论 (0)