RAID(独立冗余磁盘阵列)
raid 技术通过把多个硬盘设备组合成一个容量更大的, 安全性更好的磁盘阵列. 把数据切割成许多区段后分别放在不同的物理磁盘上, 然后利用分散读写技术来提升磁盘阵列整体的性能, 同时把多个重要数据的副本同步到不同的物理设备上, 从而起到了非常好的数据冗余备份效果. 缺点就是磁盘利用率低.
RAID 的分类
RAID 0 是最早出现的 RAID 模式, 即 Data Stripping 数据分条技术. RAID 0 是组建磁盘阵列中最简单的一种形式, 只需要 2 块以上的硬盘即可, 成本低, 可以提高整个磁盘的性能和吞吐量. RAID 0 没有提供冗余或错误修复能力, 但实现成本是最低的.
RAID 1 称为磁盘镜像, 原理是把一个磁盘的数据镜像到另一个磁盘上, 也就是说数据在写入一块磁盘的同时, 会在另一块闲置的磁盘上生成镜像文件, 在不影响性能情况下最大限度的保证系统的可靠性和可修复性上, 只要系统中任何一对镜像盘中至少有一块磁盘可以使用, 甚至可以在一半数量的硬盘出现问题时系统都可以正常运行, 当一块硬盘失效时, 系统会忽略该硬盘, 转而使用剩余的镜像盘读写数据, 具备很好的磁盘冗余能力. 虽然这样对数据来讲绝对安全, 但是成本也会明显增加, 磁盘利用率为 50%.
RAID 0+1 名称上我们便可以看出是 RAID0 与 RAID1 的结合体. 在我们单独使用 RAID 1 也会出现类似单独使用 RAID 0 那样的问题, 即在同一时间内只能向一块磁盘写入数据, 不能充分利用所有的资源. 为了解决这一问题, 我们可以在磁盘镜像中建立带区集. 因为这种配置方式综合了带区集和镜像的优势, 所以被称为 RAID 0+1. 把 RAID0 和 RAID1 技术结合起来, 数据除分布在多个盘上外, 每个盘都有其物理镜像盘, 提供全冗余能力, 允许一个以下磁盘故障, 而不影响数据可用性, 并具有快速读 / 写能力. RAID0+1 要在磁盘镜像中建立带区集至少 4 个硬盘. 也有一种叫法叫 raid10.
RAID5: 分布式奇偶校验的独立磁盘结构
它的奇偶校验码存在于所有磁盘上. RAID5 的读出效率很高, 写入效率一般, 块式的集体访问效率不错. 因为奇偶校验码在不同的磁盘上, 所以提高了可靠性. 但是它对数据传输的并行性解决不好, 而且控制器的设计也相当困难. 在 RAID 5 中有 "写损失", 即每一次写操作, 将产生四个实际的读 / 写操作, 其中两次读旧的数据及奇偶信息, 两次写新的数据及奇偶信息.
总结: raid0 大幅度提升了设备的读写性能, 但不具备容错能力. raid1 虽然十分注重数据安全, 但磁盘利用率太低. raid5 就是 raid0 和 raid5 的一种折中, 既提升了磁盘读写能力, 又有一定的容错能力, 成本也低. raid10 就是 raid0 和 raid1 的组合, 大幅度提升读写能力, 较强的容错能力, 成本也较高. 一般中小企业用 raid5, 大企业采用 raid10.
RAID5 卷搭建
首先为服务器添加 4 块硬盘
[[email protected] ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-Linux 2.23.2).
更改将停留在内存中, 直到您决定将更改写入磁盘.
使用写入命令前请三思.
Device does not contain a recognized partition table
使用磁盘标识符 0xb0813467 创建新的 DOS 磁盘标签.
命令(输入 m 获取帮助):n
- Partition type:
- p primary (0 primary, 0 extended, 4 free)
- e extended
- Select (default p):
- Using default response p
分区号 (1-4, 默认 1):
起始 扇区 (2048-41943039, 默认为 2048):
将使用默认值 2048
Last 扇区, + 扇区 or +size{K,M,G} (2048-41943039, 默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型, 大小设为 20 GiB
命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):fd #磁盘类型改为 raid
已将分区 "Linux" 的类型更改为 "Linux raid autodetect"
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:21.5 GB, 21474836480 字节, 41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑 / 物理):512 字节 / 512 字节
I/O 大小(最小 / 最佳):512 字节 / 512 字节
磁盘标签类型: dos
磁盘标识符: 0xb0813467
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 41943039 20970496 fd Linux raid autodetect
命令(输入 m 获取帮助):w
- The partition table has been altered!
- Calling ioctl() to re-read partition table.
正在同步磁盘.
其他三块也是一样!
[[email protected] ~]# fdisk -l | grep sd[b-e]
磁盘 /dev/sdb:21.5 GB, 21474836480 字节, 41943040 个扇区
/dev/sdb1 2048 41943039 20970496 fd Linux raid autodetect
磁盘 /dev/sdc:21.5 GB, 21474836480 字节, 41943040 个扇区
/dev/sdc1 2048 41943039 20970496 fd Linux raid autodetect
磁盘 /dev/sdd:21.5 GB, 21474836480 字节, 41943040 个扇区
/dev/sdd1 2048 41943039 20970496 fd Linux raid autodetect
磁盘 /dev/sde:21.5 GB, 21474836480 字节, 41943040 个扇区
- /dev/sde1 2048 41943039 20970496 fd Linux raid autodetect
- [[email protected] ~]# yum -y install mdadm
- # 安装 madam (madam 是 Linux 下的 raid 管理工具)
- [[email protected] ~]# mdadm -C /dev/md0 -ayes -l5 -n3 -x1 /dev/sd[b-e]1
- # 用 sdb1,sdc1,sdd1,sde1 四块磁盘其中 3 块创建 raid5, 名称为 md0, 另外一块作为热备份.
- mdadm: Defaulting to version 1.2 metadata
- mdadm: array /dev/md0 started.
命令参数:
-C --create 创建阵列;
-a --auto 同意创建设备, 如不加此参数时必须先使用 mknod 命令来创建一个 RAID 设备, 不过推荐使用 - a yes 参数一次性创建;
-l --level 阵列模式, 支持的阵列模式有 linear, raid0, raid1, raid4, raid5, raid6, raid10, multipath, faulty, container;
-n --raid-devices 阵列中活动磁盘的数目, 该数目加上备用磁盘的数目应该等于阵列中总的磁盘数目;
或者使用另一条命令
[[email protected] ~]# mdadm --create --auto=yes /dev/md0 --level=5 --raid-devices=4 --spare-devices=1 /dev/sd[b-e]1
命令参数:
- --create #表示要创建 raid
- --auto=yes /dev/md0 #新建立的软件磁盘阵列设备为 md0,md 序号可以为 0-9
- --level=5 #磁盘阵列的等级, 这里表示创建是的 raid5
- --raid-devices #添加作为磁盘阵列用的磁盘的块数
- --spare-devices #添加作为预备 (spare) 磁盘的块数
- /dev/sd[b-f]1 #磁盘阵列所使用的设备, 还可写成 / dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
- [[email protected] ~]# cat /proc/mdstat #查看 RAID 的配置文件
- Personalities : [raid6] [raid5] [raid4]
- md0 : active raid5 sdd1[4] sde1[3](S) sdc1[1] sdb1[0]
- 41908224 blocks super 1.2 level 5, 512k chunk, algorithm 2** [3/3] [UUU]**
- unused devices: <none>
- [[email protected] ~]# mdadm -D /dev/md0 #查看 RAID 配置文件详细信息
- /dev/md0:
- Version : 1.2
- Creation Time : Sun Jun 30 10:43:20 2019
- ** Raid Level : raid5** #阵列类型为 raid5
- ............ #省略部分内容
- Active Devices : 3 #活跃的磁盘数目
- Working Devices : 4 #所有的磁盘数目
- Failed Devices : 0 #故障的磁盘数目
- Spare Devices : 1 #热备份的磁盘数目
- ............ #省略部分内容
- Number Major Minor RaidDevice State
- 0 8 17 0 active sync /dev/sdb1
- 1 8 33 1 active sync /dev/sdc1
- 4 8 49 2 active sync /dev/sdd1
- 3 8 65 - spare /dev/sde1 #一块磁盘用于热备份
- [[email protected] ~]# echo 'DEVICE /dev/sd[b-e]1'>>/etc/mdadm.conf
- [[email protected] ~]# mdadm -Ds>>/etc/mdadm.conf
- # 添加 raid5 到 raid 配置文件并做修改
- [[email protected] ~]# cat /etc/mdadm.conf
- DEVICE /dev/sd[b-e]1
- ARRAY /dev/md0 metadata=1.2 spares=1 name=localhost:0 UUID=12345d9f:61e1d599:86226f6d:536d45c7
- [[email protected] ~]# mkfs.xfs /dev/md0
- # 格式化磁盘
- [[email protected]host ~]# mkdir /a
- [[email protected] ~]# mount /dev/md0 /a
- # 挂载磁盘
- [[email protected] ~]# df -hT #查看磁盘大小
- ............ #省略部分内容
- /dev/md0 xfs 40G 33M 40G 1% /a
- [[email protected] ~]# VIM /etc/fstab #编写文件开机自动挂载
- ............ #省略部分内容
- /dev/md0 /a xfs defaults 0 0
- [[email protected] ~]# cd /a
- [[email protected] a]# touch 123.txt 456.txt #创建测试文件
- [[email protected] a]# mdadm /dev/md0 -f /dev/sdb1 #模拟 sdb1 损坏
- mdadm: set /dev/sdb1 faulty in /dev/md0
- [[email protected] a]# mdadm -D /dev/md0 #查看 / dev/md0 详细信息
- ............ #省略部分内容
- Number Major Minor RaidDevice State
- 3 8 65 0 spare rebuilding /dev/sde1
- 1 8 33 1 active sync /dev/sdc1
- 4 8 49 2 active sync /dev/sdd1
- 0 8 17 - faulty /dev/sdb1
- [[email protected] a]# cat /proc/mdstat
- Personalities : [raid6] [raid5] [raid4]
- md0 : active raid5 sdd1[4] sde1[3] sdc1[1] sdb1[0](F)
- 41908224 blocks super 1.2 level 5, 512k chunk, algorithm 2 [**3/3] [UUU]**
- unused devices: <none>
- [[email protected] a]# ll #查看测试的文件
总用量 0
-rw-r--r--. 1 root root 0 6 月 30 11:06 123.txt
-rw-r--r--. 1 root root 0 6 月 30 11:06 456.txt
- [[email protected] a]# mdadm /dev/md0 -r /dev/sdb1 #移除已损坏的磁盘
- mdadm: hot removed /dev/sdb1 from /dev/md0
- [[email protected] a]# mdadm -D /dev/md0 #查看 / dev/md0 详细信息
- ............ #省略部分内容
- Number Major Minor RaidDevice State
- 3 8 65 0 active sync /dev/sde1
- 1 8 33 1 active sync /dev/sdc1
- 4 8 49 2 active sync /dev/sdd1
- [[email protected] a]# mdadm /dev/md0 -a /dev/sdb1 #添加一块硬盘
- mdadm: added /dev/sdb1
- [[email protected] a]# mdadm -D /dev/md0 #查看 / dev/md0 详细信息
- ............ #省略部分内容
- Number Major Minor RaidDevice State
- 3 8 65 0 active sync /dev/sde1
- 1 8 33 1 active sync /dev/sdc1
- 4 8 49 2 active sync /dev/sdd1
- 5 8 17 - spare /dev/sdb1
- [[email protected] a]# ll
总用量 0
-rw-r--r--. 1 root root 0 6 月 30 11:06 123.txt
-rw-r--r--. 1 root root 0 6 月 30 11:06 456.txt
注意: 在实际中 sdb1 已经是另一块完好的硬盘了. 不是说之前损坏的那块移除再添加就好了.
服务器再添加一块磁盘, 重启之后:
- [[email protected] a]# mdadm /dev/md0 -a /dev/sdf1
- mdadm: added /dev/sdf1
- [[email protected] a]# mdadm -D /dev/md0
- ............ #省略部分内容
- Number Major Minor RaidDevice State
- 3 8 65 0 active sync /dev/sde1
- 1 8 33 1 active sync /dev/sdc1
- 4 8 49 2 active sync /dev/sdd1
- 5 8 17 - spare /dev/sdb1
- 6 8 81 - spare /dev/sdf1
由于默认是添加成热备盘, 得把热备盘改为活动盘
- [[email protected] a]# mdadm /dev/md0 -G -n4
- #-n 用来指定 raid 中活动盘的数量. 最好保证要有足够的热备盘添加.
- [[email protected] a]# mdadm -D /dev/md0
- /dev/md0:
- Version : 1.2
- Creation Time : Sun Jun 30 10:43:20 2019
- Raid Level : raid5
- Array Size : 41908224 (39.97 GiB 42.91 GB) #磁盘容量已将发生变化
- Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
- Raid Devices : 4
- Total Devices : 5
- Persistence : Superblock is persistent
- Update Time : Sun Jun 30 11:22:00 2019
- State : clean #构建完成
- ............ #省略部分内容
- Number Major Minor RaidDevice State
- 3 8 65 0 active sync /dev/sde1
- 1 8 33 1 active sync /dev/sdc1
- 4 8 49 2 active sync /dev/sdd1
- 6 8 81 3 active sync /dev/sdf1
- 5 8 17 - spare /dev/sdb1
- #此时 raid 中已经由四块硬盘了
- [[email protected] a]# df -hT #查看之后, 容量并没有发生变化
- ............ #省略部分内容
- /dev/md0 xfs 40G 33M 40G 1% /a
- [[email protected] a]# resize2fs /dev/md0
- #(resizefx 适用于 ext3,ext4 等文件系统不适用于 xfs 文件系统)
- resize2fs 1.42.9 (28-Dec-2013)
resize2fs: Bad magic number in super-block 当尝试打开 /dev/md0 时
找不到有效的文件系统超级块.
- [[email protected] a]# xfs_growfs /dev/md0 #对文件系统进行扩容
- meta-data=/dev/md0 isize=512 agcount=16, agsize=654720 blks
- = sectsz=512 attr=2, projid32bit=1
- = crc=1 finobt=0 spinodes=0
- data = bsize=4096 blocks=10475520, imaxpct=25
- = sunit=128 swidth=256 blks
- naming =version 2 bsize=4096 ascii-ci=0 ftype=1
- log =internal bsize=4096 blocks=5120, version=2
- = sectsz=512 sunit=8 blks, lazy-count=1
- realtime =none extsz=4096 blocks=0, rtextents=0
- data blocks changed from 10475520 to 15715584
- [[email protected] a]# df -hT
文件系统 类型 容量 已用 可用 已用 % 挂载点
- ............ #省略部分内容
- /dev/md0 xfs 60G 33M 60G 1% /a
- # 再次查看容量已经发生变化
来源: http://www.bubuko.com/infodetail-3108791.html