使用mdadm设置RAID
目录
RAID简介
RAID是一种使用磁盘驱动器的方法,它将一组磁盘驱动器用某种逻辑方式联系起来,作为一个逻辑磁盘驱动器来使用的.
比较常用的的RAID级别包括:
级别 | 说明 |
---|---|
RAID0 | 条带化,数据被拆分到多个驱动器中,但并没有数据镜像或校验信息 |
RAID1 | 镜像化,完全磁盘镜像,在独立的磁盘上创建数据的两份拷贝。这个级别提供最好的数据安全,但写速度慢,接代价最昂贵 |
RAID5 | 分布式奇偶校验,将奇偶校验信息分布在多个磁盘上,每个磁盘上的校验信息都通过其他磁盘上的数据来构建 |
RAID6 | 双分布式奇偶校验,和 RAID 5 相似但它有两个分布式奇偶校验。大多用在大数量的阵列中。我们最少需要4个驱动器,即使有2个驱动器发生故障,我们依然可以更换新的驱动器后重建数据。 |
RAID10 | 镜像+条带,RAID 10 可以被称为1 + 0或0 +1。它将做镜像+条带两个工作。在 RAID 10 中首先做镜像然后做条带。在 RAID 01 上首先做条带,然后做镜像。RAID 10 比 01 好。 |
mdadm: RAID设置工具
madam命令是Linux下用于构建、管理和监控RAID阵列(也被称为md设备)的工具. 它的语法为
mdadm [模式] [设备] [选项]
其中模式有下面几个:
- --create
- 使用空闲设备创建新阵列,每个设备具有元数据快
- --assemble
- 将设备加入一个已经定义好的磁盘阵列
- --build
- 创建一个没有元数据块的磁盘阵列
- --manage
- 管理已经存储在阵列中的设备
- --misc
- 查询或修改磁盘阵列中相关设备的信息
- --grow
- 改变阵列中每个设备使用的容量或阵列中设备的数量
- --incremental
- 根据需要在阵列中添加/删除设备
- --monitor
- 监控一个或多个阵列,上报指定事件
mdadm操作说明
创建RAID阵列
我们可以通过 mdadm
命令来创建软件RAID,比如下面命令可以创建一个RAID5
sudo mdadm --create /dev/md0 -a yes -l 5 -n 3 /dev/sdb /dev/sdc /dev/sdd
其中
- --create /dev/md0
- 创建一个新RAID,名字叫做
/dev/md0
- -a yes
- 自动在/dev/下创建对应的RAID阵列设备
- -l 5
- 指定RAID级别为5
- -n 3
- 指定硬盘数量。表示用三块硬盘来创建RAID5,分别为
/dev/sdb
,/dev/sdc
,/dev/sdd
我们会发现 /dev
下出现了一个名为 md0 的设备
ls -l /dev/md0
brw-rw----. 1 root disk 9, 0 Sep 11 09:40 /dev/md0
自动启用RAID
在创建好RAID以后,可以将RAID信息保存到 /etc/mdadm.conf
文件中,这样在下次操作系统重新启动时,系统会自动加载这个文件来启用RAID
sudo mdadm -D --scan >/etc/mdadm.conf cat /etc/mdadm.conf
ARRAY /dev/md0 metadata=1.2 name=MiWiFi-R3-srv:0 UUID=ece6c656:c9999ff6:9d17c0ec:08a0e3af
查看RAID阵列信息
创建好RAID阵列后,我们可以通过 mdadm --misc
模式来查看刚创建好的RAID的详细信息
mdadm --misc --detail /dev/md0
/dev/md0: Version : 1.2 Creation Time : Tue Sep 11 09:40:45 2018 Raid Level : raid5 Array Size : 16758784 (15.98 GiB 17.16 GB) Used Dev Size : 8379392 (7.99 GiB 8.58 GB) Raid Devices : 3 Total Devices : 3 Persistence : Superblock is persistent Update Time : Tue Sep 11 10:03:35 2018 State : clean Active Devices : 3 Working Devices : 3 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 512K Consistency Policy : resync Name : MiWiFi-R3-srv:0 (local to host MiWiFi-R3-srv) UUID : ece6c656:c9999ff6:9d17c0ec:08a0e3af Events : 18 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc 3 8 48 2 active sync /dev/sdd
或者我们也可以通过 /proc/mdstat
文件来查看RAID的简洁信息
cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd[3] sdc[1] sdb[0]
16758784 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
使用RAID阵列
在创建好RAID阵列后,我们就不能直接操作组成阵列的磁盘了,否则会损坏刚创建好的RAID阵列。
我们通过 /dev/md0
这个设备来进行文件格式化和挂载
set -x exec 2>&1 mkfs.xfs -f /dev/md0 mount /dev/md0 /mnt mount |grep md0
+ mkfs.xfs -f /dev/md0 meta-data=/dev/md0 isize=512 agcount=16, agsize=261760 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=4188160, imaxpct=25 = sunit=128 swidth=256 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=8 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 + mount /dev/md0 /mnt + mount + grep md0 /dev/md0 on /mnt type xfs (rw,relatime,seclabel,attr2,inode64,sunit=1024,swidth=2048,noquota)
关闭RAID
我们可以通过 mdadm --misc
模式来关闭RAID。这会释放所有资源
在关闭RAID之前需要先卸载RAID:
sudo umount /mnt
然后关闭RAID
sudo mdadm --misc --stop /dev/md0
关闭RAID后,我们可以通过 mdadm --misc --zero-superblock
来清空磁盘中RAID阵列的超级块信息。
清空就能够正常使用这些磁盘了
mdadm --misc --zero-superblock /dev/sdb mdadm --misc --zero-superblock /dev/sdc mdadm --misc --zero-superblock /dev/sdd
模拟RAID故障
我们可以通过 mdadm --manage /dev/md0 --fail
来将某块磁盘设置成故障状态
sudo mdadm /dev/md0 -f /dev/sdd 2>&1
mdadm: set /dev/sdd faulty in /dev/md0
然后我们再来查一下这个RAID的信息
sudo mdadm --misc --detail /dev/md0
/dev/md0: Version : 1.2 Creation Time : Tue Sep 11 10:32:21 2018 Raid Level : raid5 Array Size : 16758784 (15.98 GiB 17.16 GB) Used Dev Size : 8379392 (7.99 GiB 8.58 GB) Raid Devices : 3 Total Devices : 3 Persistence : Superblock is persistent Update Time : Tue Sep 11 10:35:12 2018 State : clean, degraded Active Devices : 2 Working Devices : 2 Failed Devices : 1 Spare Devices : 0 Layout : left-symmetric Chunk Size : 512K Consistency Policy : resync Name : MiWiFi-R3-srv:0 (local to host MiWiFi-R3-srv) UUID : c031d0c9:998a4e86:5cf90e71:52b229cd Events : 20 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc - 0 0 2 removed 3 8 48 - faulty /dev/sdd
你会发现 /dev/sdd
的状态现在变成了 faulty
, 但是RAID5这个级别是允许一块磁盘损坏而不造成数据损坏的。
移除RAID阵列中的磁盘
sudo mdadm --manage /dev/md0 --remove /dev/sdd
更换新磁盘
set -x exec 2>&1 sudo mdadm --manage /dev/md0 --add /dev/sdd sudo mdadm --misc --detail /dev/md0
+ sudo mdadm --manage /dev/md0 --add /dev/sdd mdadm: added /dev/sdd + sudo mdadm --misc --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Tue Sep 11 10:32:21 2018 Raid Level : raid5 Array Size : 16758784 (15.98 GiB 17.16 GB) Used Dev Size : 8379392 (7.99 GiB 8.58 GB) Raid Devices : 3 Total Devices : 3 Persistence : Superblock is persistent Update Time : Tue Sep 11 10:40:41 2018 State : clean, degraded Active Devices : 2 Working Devices : 3 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 512K Consistency Policy : resync Name : MiWiFi-R3-srv:0 (local to host MiWiFi-R3-srv) UUID : c031d0c9:998a4e86:5cf90e71:52b229cd Events : 22 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc - 0 0 2 removed 3 8 48 - spare /dev/sdd