RAID是一种使用磁盘驱动器的方法,它将一组磁盘驱动器用某种逻辑方式联系起来,作为一个逻辑磁盘驱动器来使用的.
比较常用的的RAID级别包括:
级别 | 说明 |
---|---|
RAID0 | 条带化,数据被拆分到多个驱动器中,但并没有数据镜像或校验信息 |
RAID1 | 镜像化,完全磁盘镜像,在独立的磁盘上创建数据的两份拷贝。这个级别提供最好的数据安全,但写速度慢,接代价最昂贵 |
RAID5 | 分布式奇偶校验,将奇偶校验信息分布在多个磁盘上,每个磁盘上的校验信息都通过其他磁盘上的数据来构建 |
RAID6 | 双分布式奇偶校验,和 RAID 5 相似但它有两个分布式奇偶校验。大多用在大数量的阵列中。我们最少需要4个驱动器,即使有2个驱动器发生故障,我们依然可以更换新的驱动器后重建数据。 |
RAID10 | 镜像+条带,RAID 10 可以被称为1 + 0或0 +1。它将做镜像+条带两个工作。在 RAID 10 中首先做镜像然后做条带。在 RAID 01 上首先做条带,然后做镜像。RAID 10 比 01 好。 |
madam命令是Linux下用于构建、管理和监控RAID阵列(也被称为md设备)的工具. 它的语法为
mdadm [模式] [设备] [选项]
其中模式有下面几个:
- –create
- 使用空闲设备创建新阵列,每个设备具有元数据快
- –assemble
- 将设备加入一个已经定义好的磁盘阵列
- –build
- 创建一个没有元数据块的磁盘阵列
- –manage
- 管理已经存储在阵列中的设备
- –misc
- 查询或修改磁盘阵列中相关设备的信息
- –grow
- 改变阵列中每个设备使用的容量或阵列中设备的数量
- –incremental
- 根据需要在阵列中添加/删除设备
- –monitor
- 监控一个或多个阵列,上报指定事件
我们可以通过 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信息保存到 /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阵列后,我们可以通过 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阵列。
我们通过 /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)
我们可以通过 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
我们可以通过 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这个级别是允许一块磁盘损坏而不造成数据损坏的。
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