linux中磁盘管理软RAID的实现原理是什么-创新互联
这篇文章将为大家详细讲解有关linux中磁盘管理软RAID的实现原理是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
创新互联是网站建设专家,致力于互联网品牌建设与网络营销,专业领域包括成都网站建设、网站建设、电商网站制作开发、微信小程序开发、微信营销、系统平台开发,与其他网站设计及系统开发公司不同,我们的整合解决方案结合了恒基网络品牌建设经验和互联网整合营销的理念,并将策略和执行紧密结合,且不断评估并优化我们的方案,为客户提供全方位的互联网品牌整合方案!1 什么是RAID
RAID全称是独立磁盘冗余阵列(Redundant Array of Independent Disks),基本思想是把多个磁盘组合起来,组合一个磁盘阵列组,使得性能大幅提高。
RAID分为几个不同的等级,各个不同的等级均在数据可靠性及读写性能做了不同的权衡。实际工作中根据自己的业务需求选择不同的RAID方案。
2 RAID的实现方式
外接式磁盘阵列:通过扩展卡提供适配能力内接式RAID:主板集成RAID控制器安装OS前在BIOS里配置软件RAID:通过OS实现
3 标准的RAID
3.1 RAID0
RAID0称为条带化存储,将数据分段存储在各个磁盘中,读写均可以并行处理,因此读写速率为单个磁盘的N倍,没有冗余功能,任何一个磁盘的损坏就会导致的数据不可用。
3.2 RAID1
RADI1是镜像存储,没有数据校验,数据被同等的写入到2个或者多个磁盘中,写入速度相对慢, 但是读取速度比较快。
3.3 RAID 4
RADI4在RAID1的基础上,N个盘用于数据存储,另外加入了1个磁盘作为校验盘。一共N+1个盘,任何一个盘坏掉也不影响数据的访问
3.4 RAID 5
RAID5在RAID4的基础上,由原来的一个盘来存储校验数据,改为每个盘都有数据和校验信息的。
4 混合RAID
4.1 RAID01
先组成RAID0,然后组成RAID1.
4.2 RAID10
先组成RAID1,然后组成RAID0
5 软RAID的实现
5.1 RAID5的实现
创建由三块硬盘组成的可用空间为2G的RAID5设备,要求其chunk大小为256k,文件系统为ext4,开机可自动挂载至/mydata目录
5.1.1 先看看我们的磁盘情况
[root@centos7 Bash]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 200G 0 disk ├─sda1 8:1 0 1G 0 part /boot ├─sda2 8:2 0 128G 0 part ├─sda3 8:3 0 48.8G 0 part / ├─sda4 8:4 0 512B 0 part └─sda5 8:5 0 19.5G 0 part /app sdb 8:16 0 100G 0 disk sdc 8:32 0 20G 0 disk sdd 8:48 0 20G 0 disk sde 8:64 0 20G 0 disk sdf 8:80 0 20G 0 disk sr0 11:0 1 8.1G 0 rom /run/media/root/CentOS 7 x86_64
这里我们使用sdb,sdc,sdd,每个盘创建一个主分区1G,构建RADI5.
5.1.2 根据实际情况分区
[root@centos7 Bash]$ fdisk /dev/sdb 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 0x93d380cf. Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): First sector (2048-209715199, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-209715199, default 209715199): +1G Partition 1 of type Linux and of size 1 GiB is set Command (m for help): t Selected partition 1 Hex code (type L to list all codes): fd Changed type of partition 'Linux' to 'Linux raid autodetect' Command (m for help): p Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x93d380cf Device Boot Start End Blocks Id System /dev/sdb1 2048 2099199 1048576 fd Linux raid autodetect Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@centos7 Bash]$ fdisk /dev/sdc 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 0xc56b90d8. Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): First sector (2048-41943039, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +1G Partition 1 of type Linux and of size 1 GiB is set Command (m for help): t Selected partition 1 Hex code (type L to list all codes): fd Changed type of partition 'Linux' to 'Linux raid autodetect' Command (m for help): p Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0xc56b90d8 Device Boot Start End Blocks Id System /dev/sdc1 2048 2099199 1048576 fd Linux raid autodetect Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@centos7 Bash]$ fdisk /dev/sdd 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 0x7e0900d8. Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): First sector (2048-41943039, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +1G Partition 1 of type Linux and of size 1 GiB is set Command (m for help): p Disk /dev/sdd: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x7e0900d8 Device Boot Start End Blocks Id System /dev/sdd1 2048 2099199 1048576 83 Linux Command (m for help): t Selected partition 1 Hex code (type L to list all codes): fd Changed type of partition 'Linux' to 'Linux raid autodetect' Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
5.1.3 创建raid
[root@centos7 Bash]$ mdadm -C /dev/md5 -a yes -l 5 -n 3 /dev/sd{b1,c1,d1} -c 256 # -C指定创建, -a yes 自动创建设备 , -l 设定level , -n 设定磁盘个数, -c chunk大小 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md5 started. [root@centos7 Bash]$ mdadm -Ds # 查看信息 ARRAY /dev/md5 metadata=1.2 name=centos7.magedu.com:5 UUID=2c8ae60d:a799fcb7:9008a046:ae6ea430 [root@centos7 Bash]$ mdadm -Ds >/etc/mdadm.conf # 将软raid信息写入到配置文件中去 [root@centos7 Bash]$ mkdir /mnt/md5 # 创建挂载点目录 [root@centos7 Bash]$ mkfs.ext4 /dev/md5 # 创建文件系统 mke2fs 1.42.9 (28-Dec-2013) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=64 blocks, Stripe width=128 blocks 131072 inodes, 523776 blocks 26188 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 8192 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@centos7 Bash]$ mount /dev/md5 /mnt/md5 # 挂载设备 [root@centos7 Bash]$ tail -n 1 /etc/mtab /dev/md5 /mnt/md5 ext4 rw,seclabel,relatime,stripe=128,data=ordered 0 0 # 查看挂载信息 [root@centos7 Bash]$ tail -n 1 /etc/mtab >>/etc/fstab #添加到fstab文件中,确保开机启动,这里建议使用uuid
5.1.4 验证raid
[root@centos7 md5]$ mdadm -D /dev/md5 #查看详细raid5详细信息,可以发现有3个都是working状态的 /dev/md5: Version : 1.2 Creation Time : Wed Dec 6 19:28:22 2017 Raid Level : raid5 Array Size : 2095104 (2046.00 MiB 2145.39 MB) Used Dev Size : 1047552 (1023.00 MiB 1072.69 MB) Raid Devices : 3 Total Devices : 3 Persistence : Superblock is persistent Update Time : Wed Dec 6 19:39:06 2017 State : clean Active Devices : 3 Working Devices : 3 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 256K Consistency Policy : resync Name : centos7.magedu.com:5 (local to host centos7.magedu.com) UUID : 2c8ae60d:a799fcb7:9008a046:ae6ea430 Events : 18 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 33 1 active sync /dev/sdc1 3 8 49 2 active sync /dev/sdd1 [root@centos7 md5]$ man mdadm [root@centos7 md5]$ mdadm /dev/md5 -f /dev/sdc1 # -f 设定指定设备故障, 将/dev/sdc1 这个盘标记失败, 看是否数据能访问,我这里使用-f标记失败,工作中可以根据硬盘指示灯判断磁盘状态 mdadm: set /dev/sdc1 faulty in /dev/md5 [root@centos7 md5]$ mdadm -D /dev/md5 #在次查看信息,发现工作的是2个, 一个失败的设备 /dev/md5: Version : 1.2 Creation Time : Wed Dec 6 19:28:22 2017 Raid Level : raid5 Array Size : 2095104 (2046.00 MiB 2145.39 MB) Used Dev Size : 1047552 (1023.00 MiB 1072.69 MB) Raid Devices : 3 Total Devices : 3 Persistence : Superblock is persistent Update Time : Wed Dec 6 19:41:08 2017 State : clean, degraded # 这里注意了。 我们的一个盘坏掉了。 raid5状态为降级使用了。 Active Devices : 2 Working Devices : 2 Failed Devices : 1 Spare Devices : 0 Layout : left-symmetric Chunk Size : 256K Consistency Policy : resync Name : centos7.magedu.com:5 (local to host centos7.magedu.com) UUID : 2c8ae60d:a799fcb7:9008a046:ae6ea430 Events : 20 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 - 0 0 1 removed 3 8 49 2 active sync /dev/sdd1 1 8 33 - faulty /dev/sdc1 [root@centos7 md5]$ cat a.txt # 发现我们的数据还是能访问的。没有问题。
5.1.5 替换设备
我这里是磁盘坏掉后的执行替换的, 完全可以多一个备用盘, 坏掉自动替换的。
[root@centos7 md5]$ mdadm /dev/md5 -a /dev/sde1 # 上面我们的sdc1数据损坏,我们需要更换新的磁盘来顶替他的位置。这里添加一个sde1的磁盘, fdisk操作这里省去了。 mdadm: added /dev/sde1 [root@centos7 md5]$ mdadm -Ds # 查看详细信息 ARRAY /dev/md5 metadata=1.2 name=centos7.magedu.com:5 UUID=2c8ae60d:a799fcb7:9008a046:ae6ea430 [root@centos7 md5]$ mdadm -D /dev/md5 # 查看详细信息 /dev/md5: Version : 1.2 Creation Time : Wed Dec 6 19:28:22 2017 Raid Level : raid5 Array Size : 2095104 (2046.00 MiB 2145.39 MB) Used Dev Size : 1047552 (1023.00 MiB 1072.69 MB) Raid Devices : 3 Total Devices : 4 Persistence : Superblock is persistent Update Time : Wed Dec 6 19:50:01 2017 State : clean # 状态恢复正常了。没有问题 Active Devices : 3 Working Devices : 3 Failed Devices : 1 Spare Devices : 0 Layout : left-symmetric Chunk Size : 256K Consistency Policy : resync Name : centos7.magedu.com:5 (local to host centos7.magedu.com) UUID : 2c8ae60d:a799fcb7:9008a046:ae6ea430 Events : 43 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 4 8 65 1 active sync /dev/sde1 3 8 49 2 active sync /dev/sdd1 1 8 33 - faulty /dev/sdc1 # 这个盘是坏掉的,我们已经加入了新的磁盘, 这个盘可以干掉了 [root@centos7 md5]$ man mdadm [root@centos7 md5]$ mdadm /dev/md5 --remove /dev/sdc1 # 这个盘我们从raid5中移除去。 mdadm: hot removed /dev/sdc1 from /dev/md5
5.1.6扩展raid
我们上面使用的是2+1构成的raid5,磁盘利用率为66%,如果我们想改成3+1 可以执行类似如下命令
[root@centos7 mnt]$ mkadm -G -r /dev/md5 -n 4 -a /dev/sdxx # 这里我就不测试了。使用/dev/sdxx代替一个设备。-G 是Grown增长的意思,-r 是resizefs的意思,
5.1.7 清空raid信息
[root@centos7 mnt]$ umount /dev/md5 # 卸载设备 [root@centos7 mnt]$ mdadm -S /dev/md5 # 停止raid5 mdadm: stopped /dev/md5 [root@centos7 mnt]$ sed -i '$d' /etc/fstab # 删除fstab中关于raid5挂载的行 [root@centos7 mnt]$ cat /etc/fstab # 确保fstab没有大问题 # # /etc/fstab # Created by anaconda on Tue Nov 7 16:07:01 2017 # # 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 # UUID=59ccea87-3c4e-4bbc-9e2f-3fadb1dcf2e6 / ext4 defaults 1 1 UUID=f4e867e8-bcde-43a2-adc7-c80b0948e85f /app ext4 noatime,usrquota,grpquota 1 2 UUID=1d6cbe88-ffb4-4adf-bacf-76be1fa75708 /boot ext4 defaults 1 2 #UUID=b2c064f5-1ee5-4b5c-9e75-ed41cb99c5aa swap swap defaults 0 0 #UUID=a0516c4f-40e6-4919-905a-8b44db12ff7b swap swap defaults,pri=0 0 0 #/dev/sdb2 /test ext4 rw,seclabel,relatime,data=ordered 0 0 #/dev/sdb1 /home xfs rw,seclabel,relatime,attr2,inode64,usrquota,grpquota 0 0 [root@centos7 mnt]$ rm -rf /etc/mdadm.conf # 删除raid默认配置文件
[root@centos7 mnt]$ mdadm --zero-superblock /dev/sd{b1,e1,d1,c1} # 清空设置上的超级块信息
5.2 RAID10的实现
raid10 ,6个分区,2个一组raid1,3组raid0
5.2.1 案例分析
分析下,我们创建一个raid10设置,2个设备组成一个raid1,6个设备2个一组可以组成3个raid1, 然后把3个raid1组成一个raid0即可
5.2.2 先创建6个设备
[root@centos7 mnt]$ lsblk # 就是使用fdisk 创建的设备, 具体这里就不写了。 最终使用lsblk显示,我们可以看到sdb1,sdb2,sdd1,sde1一共6个磁盘 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 200G 0 disk ├─sda1 8:1 0 1G 0 part /boot ├─sda2 8:2 0 128G 0 part ├─sda3 8:3 0 48.8G 0 part / ├─sda4 8:4 0 512B 0 part └─sda5 8:5 0 19.5G 0 part /app sdb 8:16 0 100G 0 disk ├─sdb1 8:17 0 1G 0 part └─sdb2 8:18 0 1G 0 part sdc 8:32 0 20G 0 disk ├─sdc1 8:33 0 1G 0 part └─sdc2 8:34 0 1G 0 part sdd 8:48 0 20G 0 disk └─sdd1 8:49 0 1G 0 part sde 8:64 0 20G 0 disk └─sde1 8:65 0 1G 0 part sdf 8:80 0 20G 0 disk sr0 11:0 1 8.1G 0 rom /run/media/root/CentOS 7 x86_64
5.2.3 创建raid
[root@centos7 mnt]$ mdadm -C /dev/md11 -a yes -l 1 -n 2 /dev/sd{b1,c1} # 创建第一个raid1 mdadm: /dev/sdb1 appears to be part of a raid array: level=raid5 devices=3 ctime=Wed Dec 6 19:28:22 2017 mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 mdadm: /dev/sdc1 appears to be part of a raid array: level=raid5 devices=3 ctime=Wed Dec 6 19:28:22 2017 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md11 started. [root@centos7 mnt]$ mdadm -C /dev/md12 -a yes -l 1 -n 2 /dev/sd{b2,c2} #创建第二个raid1 mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md12 started. [root@centos7 mnt]$ mdadm -C /dev/md13 -a yes -l 1 -n 2 /dev/sd{d1,e1} # 创建第三个raid1 mdadm: /dev/sdd1 appears to be part of a raid array: level=raid5 devices=3 ctime=Wed Dec 6 19:28:22 2017 mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 mdadm: /dev/sde1 appears to be part of a raid array: level=raid5 devices=3 ctime=Wed Dec 6 19:28:22 2017 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md13 started. [root@centos7 mnt]$ mdadm -C /dev/md10 -a yes -l 0 -n 3 /dev/md{11,12,13} # 将3个raid1 合并为一个raid0 mdadm: /dev/md11 appears to contain an ext2fs file system size=2095104K mtime=Wed Dec 6 19:29:45 2017 mdadm: /dev/md13 appears to contain an ext2fs file system size=2095104K mtime=Wed Dec 6 19:29:45 2017 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md10 started. [root@centos7 mnt]$ mkfs.ext mkfs.ext2 mkfs.ext3 mkfs.ext4 [root@centos7 mnt]$ mkfs.ext4 /dev/md10 # 创建文件系统 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=384 blocks 196224 inodes, 784896 blocks 39244 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=805306368 24 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 (16384 blocks): done Writing superblocks and filesystem accounting information: done [root@centos7 mnt]$ mdadm -Ds # 查看配置信息 ARRAY /dev/md11 metadata=1.2 name=centos7.magedu.com:11 UUID=0ce2cd6c:cd21fab6:3e65cfb5:64bd86f3 ARRAY /dev/md12 metadata=1.2 name=centos7.magedu.com:12 UUID=8af31dff:efab06ed:48e2613b:a599c774 ARRAY /dev/md13 metadata=1.2 name=centos7.magedu.com:13 UUID=a8c99d60:2d0c61e7:97a76809:9396c020 ARRAY /dev/md10 metadata=1.2 name=centos7.magedu.com:10 UUID=50b2fa58:4ce65d67:8c50c853:fa175a28 [root@centos7 mnt]$ mdadm -Ds >> /etc/mdadm.conf # 写配置文件到mdadm的配置文件中 [root@centos7 mnt]$ mkdir /mnt/md10 # 创建挂载目录 [root@centos7 mnt]$ mount /dev/md10 /mnt/md10 # 挂载文件系统 [root@centos7 mnt]$ tail -n 1 /etc/mtab # 查看mtab文件中的最后一行, 也就是我们的md10挂载信息 /dev/md10 /mnt/md10 ext4 rw,seclabel,relatime,stripe=384,data=ordered 0 0 [root@centos7 mnt]$ tail -n 1 /etc/mtab >> /etc/fstab #添加到开机启动
5.2.4 raid 清除工作
[root@centos7 mnt]$ umount /dev/md10 # 取消挂载 [root@centos7 mnt]$ rm -rf /etc/mdadm.conf # 删除mdadm的默认配置 [root@centos7 mnt]$ mdadm -S /dev/md10 # 停止raid0设置 mdadm: stopped /dev/md10 [root@centos7 mnt]$ mdadm -S /dev/md11 # 停止raid1设置 mdadm: stopped /dev/md11 [root@centos7 mnt]$ mdadm -S /dev/md12 # 停止radi1 设置 mdadm: stopped /dev/md12 [root@centos7 mnt]$ mdadm -S /dev/md13 # 停止raid 1 设置 mdadm: stopped /dev/md13 [root@centos7 mnt]$ sed -i '$d' /etc/fstab # 删除fstab的挂载 [root@centos7 mnt]$ cat /etc/fstab # 确保正确 # # /etc/fstab # Created by anaconda on Tue Nov 7 16:07:01 2017 # # 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 # UUID=59ccea87-3c4e-4bbc-9e2f-3fadb1dcf2e6 / ext4 defaults 1 1 UUID=f4e867e8-bcde-43a2-adc7-c80b0948e85f /app ext4 noatime,usrquota,grpquota 1 2 UUID=1d6cbe88-ffb4-4adf-bacf-76be1fa75708 /boot ext4 defaults 1 2 #UUID=b2c064f5-1ee5-4b5c-9e75-ed41cb99c5aa swap swap defaults 0 0 #UUID=a0516c4f-40e6-4919-905a-8b44db12ff7b swap swap defaults,pri=0 0 0 #/dev/sdb2 /test ext4 rw,seclabel,relatime,data=ordered 0 0 #/dev/sdb1 /home xfs rw,seclabel,relatime,attr2,inode64,usrquota,grpquota 0 0 [root@centos7 mnt]$ mdadm -D # 再次查看下mdadm信息,确保没有了 mdadm: No devices given. [root@centos7 mnt]$ mdadm --zero-superblock /dev/sd{b1,b2,c1,c2,d1,e1} # 请求md的元数据信息
关于“linux中磁盘管理软RAID的实现原理是什么”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
分享名称:linux中磁盘管理软RAID的实现原理是什么-创新互联
文章起源:http://pwwzsj.com/article/igodp.html