一、openEular欧拉系统组建RAID 10实验笔记 2023.12.23
1、准备4个新的虚拟硬盘作为组建RAID 10的基础。

2、使用mdadm命令创建RAID 10
其中,-C参数的作用是创建一个RAID阵列,-v参数用来显示创建阵列的过程,-a yes参数代表自动创建设备文件,-n参数后跟上你组阵列所用到的硬盘数目。设置好前面这些参数后,再加上每个硬盘的设备文件名称即可。
[root@openEular dev]# mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdc /dev/sdd /dev/sde /dev/sdf
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: size set to 10476544K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
3、将RAID 10阵列格式化,这边我将其格式化为ext4格式。
[root@openEular dev]# mkfs.ext4 /dev/md0
mke2fs 1.46.4 (18-Aug-2021)
Creating filesystem with 5238272 4k blocks and 1310720 inodes
Filesystem UUID: 0ac07849-26e1-4ac8-bc84-6ff78ebfcf16
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
4、查看/dev/md0磁盘阵列的详细信息
关键命令:
[root@openEular ~]# mdadm -D /dev/md0
如下图所示:

5、创建一个目录作为挂载点,并将硬盘设备挂载到此目录下。
[root@openEular ~]# mkdir myProject_2023
[root@openEular ~]# mount /dev/md0 myProject_2023
6、这里要注意!
如果仅仅是按照上面第5步这么做,则只是实现了临时挂载,当下次重启系统还需要再次挂载,这就很麻烦。因此这里我准备将挂载信息写进/etc/fstab中,以实现永久挂载。永久挂载,即要将挂载信息写进/etc/fstab中。之后我们可以通过mount -a命令,使系统按照从/etc/fstab文件中读取到的信息再重新进行一次挂载。
[root@openEular ~]# vi /etc/fstab

[root@openEular ~]# mount -a
7、观察myProject_2023目录的总容量是否有变化:
[root@openEular ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 715M 12K 714M 1% /dev/shm
tmpfs 286M 8.3M 278M 3% /run
tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup
/dev/mapper/openeuler-root 20G 7.8G 11G 42% /
tmpfs 715M 0 715M 0% /tmp
/dev/sdb1 4.0G 179M 3.9G 5% /boot
tmpfs 143M 20K 143M 1% /run/user/42
tmpfs 143M 0 143M 0% /run/user/0
/dev/md0 20G 24K 19G 1% /root/myProject_2023
观察到,/root/myProject_2023总容量为20G。虽然我们四块硬盘加起来一共是40G,但是组建的磁盘阵列是RAID 10,所以有效总容量为20G。
二、磁盘阵列故障处理与修复操作
一般来说,当RAID里面的个别磁盘出现故障后,可以用mdadm命令对故障硬盘进行移除。
参数 | 作用 |
-a | 检查磁盘名称添加磁盘 |
-n | 指定设备数量 |
-l | 指定RAID级别 |
-C | 创建 |
-v | 显示过程 |
-f | 模拟设备损坏 |
-r | 移除设备 |
-Q | 查看摘要信息 |
-D | 查看详细信息 |
-S | 停止RAID磁盘阵列 |
1、模拟磁盘损坏
使用-f参数,以模拟磁盘损坏的现象。这里我选择让sde去模拟硬盘损坏。
[root@openEular ~]# mdadm -f /dev/md0 /dev/sde
mdadm: set /dev/sde faulty in /dev/md0
添加磁盘,模拟现实环境中发现坏盘后再增加新硬盘的操作。因为我做实验的平台是VMware,如果我要加一块新硬盘,则需要先关闭虚拟机。重新开机后,输入下面的命令,模拟现实中将新硬盘换上去后的操作。
[root@openEular ~]# mdadm -a /dev/md0 /dev/sde
mdadm: added /dev/sde
[root@openEular ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Dec 23 17:33:42 2023
Raid Level : raid10
Array Size : 20953088 (19.98 GiB 21.46 GB)
Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Sat Dec 23 19:44:12 2023
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Consistency Policy : resync
Name : openEular:0 (local to host openEular)
UUID : 10f499a1:47abe941:ca8b45ff:4083dda2
Events : 68
Number Major Minor RaidDevice State
0 8 32 0 active sync set-A /dev/sdc
1 8 48 1 active sync set-B /dev/sdd
4 8 64 2 active sync set-A /dev/sde
3 8 80 3 active sync set-B /dev/sdf
添加成功,RAID 10照常使用。
三、openEuler组建RAID 5+备份盘基础操作实验笔记
1、组建 RAID 5磁盘阵列+备份盘
命令如下,其中-n参数则是指明组建RAID 5需要用到的硬盘数,-l参数是指明要组建的RAID级别,-x参数则是代表有1块备份盘。
[root@openEular ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 10476544K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
2、查看磁盘阵列细节信息
[root@openEular ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Dec 23 22:41:26 2023
Raid Level : raid5
Array Size : 20953088 (19.98 GiB 21.46 GB)
Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Sat Dec 23 22:42:19 2023
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : openEular:0 (local to host openEular)
UUID : e98ba8e7:5251fdbb:64508616:cc0f579e
Events : 18
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
3 8 64 - spare /dev/sde
3、对磁盘阵列进行格式化
[root@openEular ~]# mkfs.ext4 /dev/md0
mke2fs 1.46.4 (18-Aug-2021)
Creating filesystem with 5238272 4k blocks and 1310720 inodes
Filesystem UUID: 52ee602b-32ac-4596-9981-d9ed070af83c
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
4、在root的家目录下创建一个文件夹作为挂载点,并进行永久挂载
[root@openEular ~]# mkdir ./mystorage
[root@openEular ~]# echo "/dev/md0 /root/mystorage ext4 defaults 0 0" >> /etc/fstab
[root@openEular ~]# mount -a
5、功能测试
测试当RAID 5 中的某个硬盘坏了,spare盘是否会自动顶替上去。笔者管理的机房中,有的存储设备就是采用RAID 5 +热备盘的,如果是单独组建RAID 5 那么最多坏一块盘,用RAID 5+热备盘的话,最多允许坏两块盘。
5.1 因为sde才是spare盘,所以这里随便挑了sdd来模拟硬盘故障。
[root@openEular ~]# mdadm /dev/md0 -f /dev/sdd
mdadm: set /dev/sdd faulty in /dev/md0
5.2 sdd故障后,sde作为spare盘马上顶上去承担工作,状态也由原来的spare变成active sync。
[root@openEular ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Dec 23 22:41:26 2023
Raid Level : raid5
Array Size : 20953088 (19.98 GiB 21.46 GB)
Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Sat Dec 23 23:06:11 2023
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 1
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : openEular:0 (local to host openEular)
UUID : e98ba8e7:5251fdbb:64508616:cc0f579e
Events : 40
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
3 8 64 2 active sync /dev/sde
4 8 48 - faulty /dev/sdd
5.3 如果RAID 5阵列出现坏盘后
spare盘会顶替原来坏盘的位置,并进行数据重建。当重建成功后可以将坏盘拔出来,然后关闭虚拟机,再添加一块新的硬盘。重启系统后先通过mdadm命令查看现在与ls命令对比查看相关信息,之后将新硬盘加入到RAID 5中。
在虚拟机环境下:
[root@openEular ~]# mdadm /dev/md0 -f /dev/sde ##用sde模拟硬盘故障
mdadm: set /dev/sde faulty in /dev/md0
[root@openEular ~]# mdadm /dev/md0 -r /dev/sde ##卸载硬盘sde
mdadm: hot removed /dev/sde from /dev/md0
[root@openEular ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Dec 23 22:41:26 2023
Raid Level : raid5
Array Size : 20953088 (19.98 GiB 21.46 GB)
Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Sun Dec 24 17:07:30 2023
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : openEular:0 (local to host openEular)
UUID : e98ba8e7:5251fdbb:64508616:cc0f579e
Events : 63
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
关机,然后换上一块新硬盘后再重启系统,并用ls命令查看相关信息,发现新加的硬盘被系统识别到的名字为sde:
[root@openEular ~]# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda3 /dev/sdb /dev/sdc /dev/sdd /dev/sde
[root@openEular ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Dec 23 22:41:26 2023
Raid Level : raid5
Array Size : 20953088 (19.98 GiB 21.46 GB)
Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Sat Dec 23 23:26:49 2023
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : openEular:0 (local to host openEular)
UUID : e98ba8e7:5251fdbb:64508616:cc0f579e
Events : 64
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
将新换上的硬盘sde加入到RAID 5中,作为RAID 5的热备盘:
[root@openEular ~]# mdadm /dev/md0 -a /dev/sde
mdadm: added /dev/sde
[root@openEular ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Dec 23 22:41:26 2023
Raid Level : raid5
Array Size : 20953088 (19.98 GiB 21.46 GB)
Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Sat Dec 23 23:29:22 2023
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : openEular:0 (local to host openEular)
UUID : e98ba8e7:5251fdbb:64508616:cc0f579e
Events : 65
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
3 8 64 - spare /dev/sde
6、测试RAID 5的性能
6.1 测试写入效率
[root@openEular ~]# dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
125000+0 records in
125000+0 records out
1024000000 bytes (1.0 GB, 977 MiB) copied, 0.504061 s, 2.0 GB/s
【备注】
(1)关于写入速度测试命令
其中/dev/zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。
[root@openEular ~]# time dd if=/dev/zero of=/root/mystorage/1GB.file bs=1M count=10000
10000+0 records in
10000+0 records out
10485760000 bytes (10 GB, 9.8 GiB) copied, 22.1772 s, 473 MB/s
real 0m22.224s
user 0m0.014s
sys 0m4.128s
(2)关于bs和count的设置值
关于dd命令,网上提供了一个常用得到最恰当的block size的方法—— 通过比较dd指令输出中所显示的命令执行时间(选时间最少的那个),即可确定系统最佳的block size大小。像下面这样反复测试,看哪一个时间比较少,判断出最适合的块大小。
但是在虚拟机上面做测试,感觉多种组合的写入速度都差不多…..
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
在实验中,发现关于dd命令的bs参数的单位是Byte。如果敲了bs=2048,就是告诉系统我们设定的块大小为2048Byte,即2KB。它等价于在命令行敲入bs=2K。如下所示,你会发现两种不同的输入方式,达成的结果都是一样的(参照高亮显示数据):
[root@openEular ~]# dd if=/dev/zero bs=2K count=500000 of=/root/1Gb.file
500000+0 records in
500000+0 records out
1024000000 bytes (1.0 GB, 977 MiB) copied, 0.723629 s, 1.4 GB/s
[root@openEular ~]# dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
500000+0 records in
500000+0 records out
1024000000 bytes (1.0 GB, 977 MiB) copied, 0.915566 s, 1.1 GB/s
[root@openEular ~]#
6.2 测试读取效率
测试磁盘读能力命令:time dd if=/dev/sdb1 of=/dev/null bs=8k
因为/dev/md0是一个物理分区,对它的读取会产生IO,/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以这个命令的IO只发生在/dev/md0上,也相当于测试磁盘的读能力。
[root@openEular ~]# time dd if=/dev/md0 of=/dev/null bs=8k
2619136+0 records in
2619136+0 records out
21455962112 bytes (21 GB, 20 GiB) copied, 10.4111 s, 2.1 GB/s
real 0m10.412s
user 0m0.200s
sys 0m9.774s