文章中实例都是基于CentOS7
软件磁盘阵列(SoftwareRAID)
磁盘阵列全名(Redundant Arrays of inexpensive Disks,RAID),中文意思独立冗余磁盘阵列。RAID通过技术(软件或硬件)将多个小的磁盘整合成一个较大的磁盘设备,这个较大的磁盘不止有数据存储功能,还具有数据保护功能,根据选择RAID选择的级别不同,而使得整合后的磁盘具有不同的功能,常见的level有以下几种
RAID0(等量模式,stripe):性能较佳
这种模式使用相同型号与容量的磁盘来组成,效果最好,RAID0会先将磁盘切出等量的数据块(chunk,一般为4KB~1MB),然后当一个文件要写入RAID时,该文件会根据chunk的大小切割好,之后再依序存放到各个磁盘里面去,由于每个磁盘会交错的存放数据,因此当你的数据要写入RAID时,数据会被等量的放置在各个磁盘上面。举例来说,如果你有两块磁盘组成的RAID0,当有100MB数据需要写入时,每个磁盘各被分配到50MB的存储量。
在组成RAID0时,每块磁盘(DiskA与DiskB)都会先被分隔成为小数据块(chunk),当有数据写入RAID时,数据先被切割成符合小数据块的大小,然后依序一个一个的放置到不同的磁盘中,由于数据已经先被切割并且依序放置到不同的磁盘上面,因此每块磁盘所负责的数据量就降低了。照这样的情况来看,***越多块的磁盘组成RAID0性能会越好,因为每块负责的数据量就更低了。这样数据可以分散让多块磁盘来存储,当然性能也变得更好。此外,磁盘容量也变大了,因为每块磁盘的容量最终会相加成为RAID0的容量。只是在这种情况下,你必须自行负担数据损坏的风险,由于数据被分割成适合每块磁盘分区大小的块,再依次存储到每个磁盘中,如果有一块磁盘损坏了,那么文件数据将缺少一块,此时这个文件就损坏了,因此***RAID0只要有一块磁盘损坏,数据将会遗失无法读取。
RAID1(镜像模式,mirror):完整备份
RAID5
RAID1+0,RAID0+1
RAID的优点
- 数据安全与可靠性:指的并非网络信息安全,而是当硬件(磁盘)损坏时,数据是否还能够安全的恢复或使用。
- 读写性能:如RAID0加强读写信息,让系统I/O部分得到改善。
- 容量:可以让多块磁盘组合起来,故单一文件系统可以有相当大的容量。
实战创建RAID
- 在虚拟机上添加两块各1G的SCSI磁盘。
- 安装mdadm
[root@localhost scripts]# yum install -y mdadm
mdadm(multiple devices admin)是一个用于创建、管理、监控RAID设备的工具,它使用linux中的md驱动。mdadm程序是一个独立的程序,能完成所有软件RAID的管理功能。
模式名称 | 主要功能 |
---|---|
Assemble | 加入一个以前定义的陈列 |
Build | 创建一个没有超级块的阵列 |
create | 创建一个新的阵列,每个设备具有超级块 |
Manage | 管理阵列(添加或删除) |
Misc | 允许单独对陈列中的某个设备进行操作 |
Fllow or Minitor | 监控RAID的状态 |
Grow | 改变RAID的容量或陈列中的设备数目 |
创建RAID0
通过shell脚本对磁盘(/dev/sdb,/dev/sdc)进行分区
#disklist.conf文件内容
/dev/sdb /dev/sdc
#fdiskscript.sh
ls disklist.conf > /dev/null
if [ $? -ne 0 ];then
echo '请确认当前目录下存在disklist.conf文件,文件内容为磁盘名称【/dev/sda /dev/sdb等,多个磁盘通过空格进行分隔】'
fi
disklist=`cat disklist.conf` #读取disklist.conf中配置的磁盘名称
for diskname in $disklist;
do
#fd表示改变磁盘分区类型为fd Linux raid auto
fdisk $diskname << EOF
n
t
fd
w
EOF
done
脚本执行完成后,会产生以下的运行结果
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x782ce4e2.
Command (m for help): Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): Using default response p
Partition number (1-4, default 1): First sector (2048-2097151, default 2048): Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): Using default value 2097151
Partition 1 of type Linux and of size 1023 MiB is set
Command (m for help): Selected partition 1
Hex code (type L to list all codes): Changed type of partition 'Linux' to 'Linux raid autodetect'
Command (m for help): The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xdf60b6b3.
Command (m for help): Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): Using default response p
Partition number (1-4, default 1): First sector (2048-2097151, default 2048): Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): Using default value 2097151
Partition 1 of type Linux and of size 1023 MiB is set
Command (m for help): Selected partition 1
Hex code (type L to list all codes): Changed type of partition 'Linux' to 'Linux raid autodetect'
Command (m for help): The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
#创建RAID0
[root@localhost scripts]# mdadm -C /dev/md0 -l 0 -n 2 /dev/sd[b,c]1
# -C,--create表示创建RAID,
# -l,--level表示创建RAID的级别
# -n,--raid-devices表示raid设备的个数
# /dev/sd[b,c]1 表示使用的磁盘
# /dev/md0 表示创建的RAID的名称
查看RAID0情况
[root@localhost scripts]# cat /proc/mdstat
Personalities : [raid0]
md0 : active raid0 sdc1[1] sdb1[0]
2091008 blocks super 1.2 512k chunks
格式化RAID0
#mkfs.ext4创建ext4的文件系统
[root@localhost scripts]# mkfs.ext4 /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
130816 inodes, 522752 blocks
26137 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8176 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
建立挂载点并挂载
#创建挂载目录
[root@localhost mnt]# mkdir raid0
[root@localhost raid0]# pwd
/mnt/raid0
#将raid0挂载到/mnt/raid0
[root@localhost raid0]# mount /dev/md0 /mnt/raid0
#查看挂载情况
[root@localhost raid0]# df -TH
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 11G 1.7G 9.1G 16% /
devtmpfs devtmpfs 1.4G 0 1.4G 0% /dev
tmpfs tmpfs 1.4G 0 1.4G 0% /dev/shm
tmpfs tmpfs 1.4G 11M 1.4G 1% /run
tmpfs tmpfs 1.4G 0 1.4G 0% /sys/fs/cgroup
/dev/sda2 xfs 1.1G 149M 915M 14% /boot
/dev/mapper/centos-home xfs 5.4G 34M 5.4G 1% /home
tmpfs tmpfs 279M 0 279M 0% /run/user/0
**/dev/md0 ext4 2.1G 6.3M 2.0G 1% /mnt/raid0**
修改配置/etc/fstab,实现开机启动
#
# /etc/fstab
# Created by anaconda on Fri Dec 11 17:49:49 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=21e378c9-09e4-41d9-8ce7-c2bf7ac2295c /boot xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
**/dev/md0 /mnt/raid0 ext4 defaults 0 0**
创建RAID1
同raid0,修改-l参数为【1】
#创建RAID1
[root@localhost scripts]# mdadm -C /dev/md0 -l 1 -n 2 /dev/sd[b,c]1
创建RAID5
通过上述创建RAID0中磁盘分区的脚本进行磁盘分区(/dev/sdb,/dev/sdc,/dev/sdd,/dev/sde)
[root@localhost ~]# mdadm --create /dev/md5 --level=5 --raid-devices=3 --spare-devices=1 /dev/sd[b-e]
[root@localhost ~]# mdadm --detail /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Sat Dec 19 10:13:03 2020
Raid Level : raid5
Array Size : 2093056 (2044.00 MiB 2143.29 MB)
Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Sat Dec 19 10:13:09 2020
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : localhost.localdomain:5 (local to host localhost.localdomain)
UUID : 51d44079:03062529:9923d9b2:3efb743b
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
创建RAID1+0或RAID0+1
#--auto=yes为默认参数,可以不设置
[root@localhost ~]# mdadm -C /dev/md4 --auto=yes -l 10 -n 4 /dev/sd[b-e]
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1] [raid10]
md4 : active raid10 sde[3] sdd[2] sdc[1] sdb[0]
2093056 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
[===================>.] resync = 96.8% (2027648/2093056) finish=0.0min speed=225294K/sec
unused devices: <none>
删除RAID方法
- 先取消挂载好的raid:
[root@localhost scripts]# umount /dev/md0
- 停止RAID设备:
[root@localhost raid0]# mdadm -S /dev/md0
- 删除raid里的所有硬盘:
mdadm --misc --zero-superblock /dev/sdb,mdadm --misc --zero-superblock /dev/sdc
- 删除配置文件:rm -f /etc/mdadm.conf
- 如果之前将raid相关信息写入了/etc/fstab配置文件中,还需vim /etc/fstab,将raid相关的内容删除即可.
查看RAID信息方法
#-D,--detail查看md设备的信息
[root@localhost ~]# mdadm --detail /dev/md4
/dev/md4:
Version : 1.2
Creation Time : Sat Dec 19 09:27:41 2020
Raid Level : raid10
Array Size : 2093056 (2044.00 MiB 2143.29 MB)
Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Sat Dec 19 09:27:51 2020
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Consistency Policy : resync
Name : localhost.localdomain:4 (local to host localhost.localdomain)
UUID : 19f1ce5e:f2eafe09:09e406f8:635de44e
Events : 17
Number Major Minor RaidDevice State
0 8 16 0 active sync set-A /dev/sdb
1 8 32 1 active sync set-B /dev/sdc
2 8 48 2 active sync set-A /dev/sdd
3 8 64 3 active sync set-B /dev/sde
管理RAID
mdadm --manage 管理RAID
- –add 将后面的设备添加至md设备
- –remove 将后面的设备从md中移除
- –fail将后面的设备设置成为出错的状态
***添加磁盘 --add ***
[root@localhost ~]# mdadm --manage /dev/md5 --add /dev/sdf
mdadm: added /dev/sdf
[root@localhost ~]# mdadm --detail /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Sat Dec 19 10:13:03 2020
Raid Level : raid5
Array Size : 2093056 (2044.00 MiB 2143.29 MB)
Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
Raid Devices : 3
Total Devices : 5
Persistence : Superblock is persistent
Update Time : Sat Dec 19 10:14:27 2020
State : clean
Active Devices : 3
Working Devices : 5
Failed Devices : 0
Spare Devices : 2
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : localhost.localdomain:5 (local to host localhost.localdomain)
UUID : 51d44079:03062529:9923d9b2:3efb743b
Events : 19
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
5 8 80 - spare /dev/sdf
***移除磁盘 --remove ***
[root@localhost ~]# mdadm --manage /dev/md5 --remove /dev/sdf
mdadm: hot removed /dev/sdf from /dev/md5
[root@localhost ~]# mdadm --detail /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Sat Dec 19 10:13:03 2020
Raid Level : raid5
Array Size : 2093056 (2044.00 MiB 2143.29 MB)
Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Sat Dec 19 10:18:04 2020
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : localhost.localdomain:5 (local to host localhost.localdomain)
UUID : 51d44079:03062529:9923d9b2:3efb743b
Events : 20
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