raid设备
raid
一、raid概念
独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks),简称磁盘阵列。其基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘。根据选择的版本不同,RAID比单颗硬盘有以下一个或多个方面的好处:增强数据集成度,增强容错功能,增加处理量或容量。另外,磁盘阵列对于计算机来说,看起来就像一个单独的硬盘或逻辑存储单元。分为RAID-0,RAID-1,RAID-5,RAID-6,RAID-7,RAID-01,RAID-10,RAID-50,RAID-60。
其中,RAID0、RAID1、RAID5、RAID10和RAID01是五种最常见的方案。
二、raid的几种常用方案
2.1 raid0
RAID 0亦称为条带卷(striping)。它将两个以上的磁盘并联起来,成为一个大容量的磁盘。在存放数据时,分段后分散存储在这些磁盘中,因为读写时都可以并行处理,所以在所有的级别中,RAID 0的速度是最快的。但是RAID 0既没有冗余功能,也不具备容错能力,如果一个磁盘(物理)损坏,所有数据都会丢失。
如图所示:
2.2 raid1
RAID0技术虽然提高了存储设备的IO读写速度,但RAID0中数据是被分开存放的,也就是说其中任何一块硬盘出现问题都会破坏数据完整性。因此追求数据安全性的时候就不应该使用RAID0,而是使用RAID1。
raid1 是将两组以上的N个磁盘相互作镜像,在一些多线程操作系统中能有很好的读取速度,理论上读取速度等于硬盘数量的倍数,与RAID 0相同。另外写入速度有微小的降低。只要一个磁盘正常即可维持运作,可靠性最高。其原理为在主硬盘上存放数据的同时也在镜像硬盘上写一样的数据。当主硬盘(物理)损坏时,镜像硬盘则代替主硬盘的工作。因为有镜像硬盘做数据备份,所以RAID 1的数据安全性在所有的RAID级别上来说是最好的。
但是raid1方案的磁盘利用率理论上只有50%,是所有raid方案中磁盘利用率最低的一个。
如图所示
2.3 raid5
RAID 5是一种储存性能、数据安全和存储成本兼顾的存储解决方案。
RAID 5至少需要三个硬盘,RAID 5不是对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,可以利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。
2.4 raid 6
与RAID 5相比,RAID 6增加第二个独立的奇偶校验信息块。两个独立的奇偶系统使用不同的算法,数据的可靠性非常高,任意两块磁盘同时失效时不会影响数据完整性。
2.5 raid 10
RAID10是对RAID1+RAID0的一个"组合体"。
RAID10的最大好处就是对数据价值进行了保障。
如图所示,raid10是先对磁盘进行raid1分组,形成镜像,保障数据安全,再对已经分好组的raid1 进行raid0方案的组合,提升磁盘读写性能
2.6 raid 01
raid01与raid10相反,是将磁盘先进行raid0的方案组合,再进行raid1组合。
如果RAID0组中的一块磁盘坏了,对于这一个RAID0组来说,它已经失效了,并不是还可以从该组中的另一块磁盘中读取一半数据。
也就是说,RAID01只要坏了一块盘后,该RAID0组就失效,IO的压力就只在另一个RAID0组上,这很容易导致这一个raid0组也损坏磁盘,只要这时再坏一块盘,所有数据就丢失了。
所以RAID01基本无人使用,太不安全。
2.7 raid 50
多块磁盘先实现RAID5,再组合成RAID0
由于RAID 50是以RAID 5为基础,而RAID 5至少需要3颗硬盘,因此要以多组RAID 5构成RAID 50,至少需要6颗硬盘。
补充链接raid数据安全
三、软件raid的实现
RAID设备可命名为/dev/md0、/dev/md1、/dev/md2、/dev/md3等
3.1 mdadm命令
mdadm - manage MD devices aka Linux Software RAID
mdadm [mode] <raiddevice> [options] <component-devices>
【创建模式】
-C:创建(create a new array)
-l:指定raid级别(Set RAID level,0,1,5,10)
-c:指定chunk大小(Specify chunk size of kibibytes,default 512KB)
-a:检测设备名称(--auto=yes),yes表示自动创建设备文件/dev/mdN
-n:指定设备数量(--raid-devices:Specify the number of active devices in the array)
-x:指定备用设备数量(--spare-devices:Specify the number of spare (eXtra) devices in the initial array)
-v:显示过程
-f:强制行为
-r:移除设备(remove listed devices)
-S:停止阵列(--stop:deactivate array, releasing all resources)
-A:装配阵列,将停止状态的阵列重新启动起来
【监控模式】
-Q:查看摘要信息(query)
-D:查看详细信息(Print details of one or more md devices)
mdadm -D --scan >/etc/mdadm.conf,以后可以直接mdadm -A进行装配这些阵列
【管理模式】
mdadm --manage /dev/md[0-9] [--add 设备名] [--remove 设备名] [--fail 设备名]
--manage :mdadm使用manage模式,此模式下可以做--add/--remove/--fail/--replace动作
-add :将后面列出的设备加入到这个md
--remove :将后面列出的设备从md中移除,相当于硬件raid的拔出动作
--fail :将后面列出的设备设定为错误状态,即人为损坏,损坏后该设备放在raid中已经是无意义状态的
3.2 实现raid10
3.2.1 创建分区
首先需在虚拟机中创建4块磁盘设备,如果是以分区做实验,在用fdisk分区时注意要将分区表示符改为raid。
fdisk /dev/sdb # 在sdb这块磁盘上划分2G分区实验raid
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.
Command (m for help): n
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-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +2G
Partition 1 of type Linux and of size 2 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: 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: 0x1d3bcd2a
Device Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 fd Linux raid autodetect
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
# 同理,sdc、sdd、sde也同样操作,因为我们前边学过文件系统和mbr分区,所以我们直接利用dd命令将sdb磁盘上的前512字节直接复制进入其他三块磁盘的头部即可。
dd if=/dev/sdb of=/dev/sdc bs=1 count=512
dd if=/dev/sdb of=/dev/sdd bs=1 count=512
dd if=/dev/sdb of=/dev/sde bs=1 count=512
# 这样一共四块磁盘,每块磁盘都划出2G的分区。
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 50G 0 part /
├─sda3 8:3 0 30G 0 part /data
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 4G 0 part [SWAP]
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 2G 0 part
sdc 8:32 0 40G 0 disk
└─sdc1 8:33 0 2G 0 part
sdd 8:48 0 60G 0 disk
└─sdd1 8:49 0 2G 0 part
sde 8:64 0 80G 0 disk
└─sde1 8:65 0 2G 0 part
sr0 11:0 1 8.8G 0 rom /run/media/root/CentOS 7 x86_64
3.2.2 使用mdadm创建raid10
mdadm -C /dev/md0 -n 4 -l 10 -a yes /dev/sd{b,c,d,e}1 # -C 表示创建md0的raid阵列卡;-n 4 表示由四块磁盘组成;-l 10表示组成raid10方案;-a yes 表示自动创建设备文件;最后再加上4块设备。
mdadm -C /dev/md0 -n 4 -l 10 -a yes /dev/sd{b,c,d,e}1
mdadm: /dev/sdb1 appears to contain an ext2fs file system
size=10485760K mtime=Tue Dec 18 17:17:11 2018
mdadm: /dev/sdc1 appears to contain an ext2fs file system
size=5242880K mtime=Thu Jan 1 08:00:00 1970
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
# /dev/md0 raid10创建完成
查看/dev/md0 的信息:
mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Dec 19 16:26:49 2018
Raid Level : raid10
Array Size : 4188160 (3.99 GiB 4.29 GB) # 总空间
Used Dev Size : 2094080 (2045.00 MiB 2144.34 MB) # 可用空间
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Wed Dec 19 16:27:09 2018
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K # chunk可理解为block,大小可以通过-c选项设置
Consistency Policy : resync
Name : CentOS7.songtai:0 (local to host CentOS7.songtai)
UUID : d73acb7a:969432a5:eb51cbdc:af034d4c
Events : 17
Number Major Minor RaidDevice State
0 8 17 0 active sync set-A /dev/sdb1
1 8 33 1 active sync set-B /dev/sdc1
2 8 49 2 active sync set-A /dev/sdd1
3 8 65 3 active sync set-B /dev/sde1
cat /proc/mdstat # raid10 创建好后,存储于内存中的md信息
Personalities : [raid10]
md0 : active raid10 sde1[3] sdd1[2] sdc1[1] sdb1[0]
4188160 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
unused devices: <none>
再通过lsblk -f
和 blkid
查看设备号
3.2.3 给md0创建文件系统
mke2fs -t ext4 /dev/md0
3.2.4 挂载md0
mount /dev/md0 /data/md0mnt/`
df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda2 xfs 50G 4.0G 47G 8% /
/dev/sda1 xfs 1014M 219M 796M 22% /boot
/dev/sda3 xfs 30G 64M 30G 1% /data
/dev/md0 ext4 3.9G 16M 3.7G 1% /data/md0mnt
# 如果要开机自动挂载md0,修改/etc/fstab 文件
四、练习
1:创建一个可用空间为1G的RAID1设备,文件系统为ext4,有一个空闲盘,开机可自动挂载至/backup目录
2:创建由三块硬盘组成的可用空间为2G的RAID5设备,要求其chunk大小为256k,文件系统为ext4,开机可自动挂载至/mydata目录