linux软件磁盘阵列命令 - mdadm
首页 计算机相关 linux命令 linux软件磁盘阵列命令 - mdadm
linux环境下可以用mdadm来创建软件磁盘阵列[root@study ~]# mdadm --detail /dev/md0
[root@study ~]# mdadm --create /dev/md[0-9] --auto=yes --level=[015] --chunk=NK \
> --raid-devices=N --spare-devices=N /dev/sdx /dev/hdx...
选项与参数:
--create :为创建 RAID 的选项;
--auto=yes :决定创建后面接的软件磁盘阵列设备,亦即 /dev/md0, /dev/md1...
--chunk=Nk :决定这个设备的 chunk 大小,也可以当成 stripe 大小,一般是 64K 或 512K。
--raid-devices=N :使用几个磁盘 (partition) 作为磁盘阵列的设备
--spare-devices=N :使用几个磁盘作为备用 (spare) 设备
--level=[015] :设置这组磁盘阵列的等级。支持很多,不过建议只要用 0, 1, 5 即可
--detail :后面所接的那个磁盘阵列设备的详细信息
上面的语法中,最后面会接许多的设备文件名,这些设备文件名可以是整颗磁盘,例如
/dev/sdb , 也可以是分区,例如 /dev/sdb1 之类。不过,这些设备文件名的总数必须要等于 -
-raid-devices 与 --spare-devices 的个数总和才行![root@192 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 17G 0 part /
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
sdd 8:48 0 20G 0 disk
sde 8:64 0 20G 0 disk
我们拿sdb,sdc,sdd,sde四颗磁盘来做试验,做成raid-5。mdadm --create /dev/md0 --auto=yes --level=5 --chunk=256K \
--raid-devices=3 --spare-devices=1 /dev/sd{b,c,d,e}
创建磁盘阵列需要一定时间,想要确定好了没可以查看 /proc/mdstat 文件#完成了23.8%
[root@192 ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd[4] sde[3](S) sdc[1] sdb[0]
41908224 blocks super 1.2 level 5, 256k chunk, algorithm 2 [3/2] [UU_]
[====>................] recovery = 23.8% (5004800/20954112) finish=1.2min speed=208533K/sec
unused devices:
#代表已经完成
[root@192 ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd[4] sde[3](S) sdc[1] sdb[0]
41908224 blocks super 1.2 level 5, 256k chunk, algorithm 2 [3/3] [UUU]
unused devices:
查看磁盘阵列信息[root@192 ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Jun 1 06:42:45
Raid Level : raid5
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Fri Jun 1 06:44:30
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 256K
Consistency Policy : unknown
Name : 192.168.1.202:0 (local to host 192.168.1.202)
UUID : d0e84e96:3ede039a:15ad3b1c:6b5642b6
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
我们用了4颗硬盘,其中1颗为备用,另外3颗工作,但是由于是raid-5,3颗中有1颗来记录同位检查码,所以可用的存储空间为2颗磁盘的容量(40G)。
接下来格式化磁盘和挂载
1.srtipe (chunk) 容量为 256K,所以 su=256k
2.共有 3 颗组成 RAID5 ,因此容量少一颗,所以 sw=2!
3.由上面两项计算出数据宽度为: 256K*2=512k[root@192 ~]# mkfs.xfs -f -d su=256k,sw=2 -r extsize=512k /dev/md0
meta-data=/dev/md0 isize=512 agcount=16, agsize=654784 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=10476544, imaxpct=25
= sunit=64 swidth=128 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=5120, version=2
= sectsz=512 sunit=64 blks, lazy-count=1
realtime =none extsz=524288 blocks=0, rtextents=0[root@192 ~]# mkdir /var/raid
[root@192 ~]# mount /dev/md0 /var/raid
模拟下磁盘坏了一颗的情况,先来看下指令[root@study ~]# mdadm --manage /dev/md[0-9] [--add 设备] [--remove 设备] [--fail 设备]
选项与参数:
--add :会将后面的设备加入到这个 md 中!
--remove :会将后面的设备由这个 md 中移除
--fail :会将后面的设备设置成为出错的状态
现在我们先拷贝一些数据到刚才挂载的目录,让2颗磁盘里都有数据,然后让/dev/sdb磁盘坏掉,那么由于我们有一颗备用磁盘/dev/sde,所以系统会自动帮助我们重建。cp -a /var/log/* /var/raid/
dd if=/dev/zero of=/var/raid/tmp.txt bs=1M count=100
[root@192 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
...
/dev/md0 40G 137M 40G 1% /var/raid[root@192 ~]# mdadm --manage /dev/md0 --fail /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
[root@192 ~]# mdadm --detail /dev/md0
/dev/md0:
...
Number Major Minor RaidDevice State
3 8 64 0 spare rebuilding /dev/sde
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
0 8 16 - faulty /dev/sdb
当我们模拟指定sdb为坏的磁盘后,立马查看磁盘阵列信息,会发现 spare rebuilding /dev/sde 证明正在重建,而/dev/sdb 则标记为 faulty。过一段时间后,spare rebuilding 就会变为 active sync 证明重建完成,里面的数据完好无缺,但是此时已经没有备用磁盘了。接下来我们应该把坏的磁盘拿掉,换成一颗新的磁盘来作为备用磁盘。#从磁盘阵列里移除sdb。
mdadm --manage /dev/md0 --remove /dev/sdb
#然后请手动拔掉这颗磁盘
#重新插上一颗新的磁盘
#然后加入新的磁盘到磁盘阵列
mdadm --manage /dev/md0 --add /dev/sdb[root@192 ~]# mdadm --detail /dev/md0
/dev/md0:
...
Number Major Minor RaidDevice State
3 8 64 0 active sync /dev/sde
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
5 8 16 - spare /dev/sdb
开机自动挂载raid[root@192 raid]# blkid | grep md0
/dev/md0: UUID="de561eff-0d3e-41b4-a74d-693512691aa7" TYPE="xfs"
#在这个文件里加上一行
[root@192 /]# vim /etc/fstab
UUID=de561eff-0d3e-41b4-a74d-693512691aa7 /var/raid xfs defaults 0 0
#卸载
[root@192 /]# umount /dev/md0
#表明卸载成功,里面没有任何数据。
[root@192 /]# ll /var/raid/
total 0
#通过配置文件自动挂载来测试开机挂载是否生效。
[root@192 /]# mount -a
#又有数据了,证明配置文件正确。
[root@192 /]# ll /var/raid/
total 104064
drwxr-xr-x. 2 root root 176 May 30 anaconda
drwx------. 2 root root 23 May 30 audit
-rw-r--r--. 1 root root 7840 Jun 1 06:29 boot.log
-rw-------. 1 root utmp 0 May 24 08:40 btmp
-rw-------. 1 root utmp 0 May 30 btmp-0524
drwxr-xr-x. 2 chrony chrony 6 Nov 14 chrony
-rw-------. 1 root root 6376 Jun 1 07:01 cron
-rw-------. 1 root root 3790 May 24 08:40 cron-0524
-rw-------. 1 root root 7865 May 28 03:22 cron-0528
...
除非你未来就是要使用这颗 software RAID (/dev/md0) ,否则最好将这个 /dev/md0 关闭! 因为他毕竟是我们在这个测试机上面的练习用的!为什么要关掉他呢?因为这个 /dev/md0 其实还是使用到我们系统的磁盘分区,如果你只是将 /dev/md0 卸载,然后忘记将 RAID 关闭, 结果就是....未来你在重新分区 /dev/sdx时可能会出现一些莫名的错误状况啦![root@192 /]# umount /dev/md0
#删除这一行
[root@192 /]# vim /etc/fstab
UUID=de561eff-0d3e-41b4-a74d-693512691aa7 /var/raid xfs defaults 0 0
#先覆盖掉 RAID 的 metadata 以及 XFS 的 superblock,才关闭 /dev/md0
[root@study ~]# dd if=/dev/zero of=/dev/md0 bs=1M count=50
[root@192 /]# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
[root@192 /]# dd if=/dev/zero of=/dev/sdb bs=1M count=10
[root@192 /]# dd if=/dev/zero of=/dev/sdc bs=1M count=10
[root@192 /]# dd if=/dev/zero of=/dev/sdd bs=1M count=10
[root@192 /]# dd if=/dev/zero of=/dev/sde bs=1M count=10
#确实不存在任何磁盘阵列设备
[root@192 /]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
unused devices:
为啥上面会有数个 dd 的指令啊?这是因为 RAID 的相关数据其
实也会存一份在磁盘当中,因此,如果你只是将配置文件移除, 同时关闭了 RAID,但是分区并没有重新规划过,那么重新开机过后,系统还是会将这颗磁盘阵列创建起来,只是名称可能会变成 /dev/md127! 因此,移除掉 Software RAID 时,上述的 dd 指令不要忘
记!但是dd指令很危险,一定不能指定到系统盘,要不然就GG了。