mdadm 命令:软RAID管理
侧边栏壁纸
  • 累计撰写 146 篇文章
  • 累计收到 2 条评论

mdadm 命令:软RAID管理

soulio
2024-09-21 / 0 评论 / 7 阅读 / 正在检测是否收录...

一、命令简介

mdadm​ 是 Linux 下用于管理软件 RAID 设备的工具,可以创建、管理和监控软件 RAID 阵列。

创建 RAID 需要多个环节,多个命令搭配使用:

  1. gdisk​ ​命令创建格式为 Linux RAID​ ​的磁盘分区
  2. mdadm​ ​命令将多个 Linux RAID​ ​分区创建为 软RAID分区
  3. mkfs​ ​命令将 软RAID分区​ ​格式化为 ext4​ ​或其他文件系统
  4. 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 ​配置文件

每一项的含义:

  1. 文件系统 (fs_spec​):这一列指定要挂载的设备或远程文件系统。它可以是实际的设备名(如 /dev/sda1​),LABEL,UUID,或者是网络文件系统的地址(如 192.168.1.1:/share​)。
  2. 挂载点 (fs_file​):这一列指定文件系统应该挂载到哪个目录下。
  3. 文件系统类型 (fs_vfstype​):这一列指定了设备的文件系统类型,如 ext4​、xfs​、nfs ​等。
  4. 挂载选项 (fs_mntops​):这一列指定了挂载时使用的选项,比如 ro​(只读)、rw​(读写)、exec​(执行权限)、noexec​(禁止执行)、auto​(启动时自动挂载)、noauto​(启动时不自动挂载)等。
  5. 转储频率 (fs_freq​):这一列指定了文件系统应该被 dump ​命令备份的频率,0 意味着从不备份,1 意味着每天备份,2 意味着每两天备份一次,以此类推。
  6. 检查顺序 (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

海报

正在生成.....

评论 (0)

取消