RAID (独立冗余磁盘阵列)
raid 0 : 把多个硬盘合并为一个逻辑磁盘使用 (至少2块)
特点:读取数据快,但是一个盘坏了,整个数据就都坏了。不安全
raid 1:同时对两块盘进行操作。一块专门作为备份(至少两块)
特点: 读取数据慢,但是因为有个备份,所以安全。
raid 5:把多个硬盘合并成一个硬盘使用,但在读写时会建立奇偶校验信息在不同的盘(至少3块)
特点:只是一定程度上的提高了安全性,同时兼顾了速度
raid 10:就是raid 0和raid 1 的综合版本。即安全又有速度,但也有缺点,就是很费钱。
下面说一下怎么软件实现将设备块做成RAID
mdadm模式化的命令:
创建模式: -C
专用选项:
-l:级别
-n:设备个数
-a yes: 自动为其创建设备文件
-x:设置备用的设备
管理模式:
--add(-a)创建, --remove(-r) 移除, --fault(-f)模拟损坏
监控模式: -F
增长模式: -G
装配模式: -A
查看模式: -D 查看磁盘阵列的详细信息
RAID 0 的演示
下面演示一下创建一个4G的raid 0 。我为策略是用4个1GB的分区去创建。
1.首先添加一块硬盘。然后对其分区,并将其id指为fd
(1).我添加了一块硬盘8G的。/dev/sdb 还没有分区和格式化(这里用VMware更好做这次实验)
<span style="font-size:18px;">[root@localhost /]# fdisk -l
Disk /dev/sdb: 8589 MB, 8589934592 bytes, 16777216 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: 0x1f40229c
Device Boot Start End Blocks Id System
Disk /dev/sda: 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: 0x00079f53
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 616447 307200 83 Linux
/dev/sda2 616448 4810751 2097152 82 Linux swap / Solaris
/dev/sda3 4810752 41943039 18566144 83 Linux</span>
(2)。对/dev/sdb进行分区和更改id号
<span style="font-size:18px;">Command (m for help): t
Partition number (1,2,5-8, default 8): 8
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'</span>
就演示一下怎么改id号。按t然后按fd就好。最后分的区如下图
<span style="font-size:18px;"> Device Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 83 Linux
/dev/sdb2 2099200 16777215 7339008 5 Extended
/dev/sdb5 2101248 4198399 1048576 fd Linux raid autodetect
/dev/sdb6 4200448 6297599 1048576 fd Linux raid autodetect
/dev/sdb7 6299648 8396799 1048576 fd Linux raid autodetect
/dev/sdb8 8398848 10495999 1048576 fd Linux raid autodetect</span>
(3).分完区后w保存退出。使用读取一下刚才的分区
[root@localhost ~]# partprobe /dev/sdb
[root@localhost ~]# cat /proc/partitions
major minor #blocks name
8 0 20971520 sda
8 1 307200 sda1
8 2 2097152 sda2
8 3 18566144 sda3
8 16 8388608 sdb
8 17 1048576 sdb1
8 18 1 sdb2
8 21 1048576 sdb5
8 22 1048576 sdb6
8 23 1048576 sdb7
8 24 1048576 sdb8
11 0 4228096 sr0
2.创建一个raid 0
[root@localhost ~]# mdadm -C /dev/md0 -a yes -l 0 -n 4 /dev/sdb{5..8}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
解释一下上述的选项 -a 自动创建设备并回答yes . -l 指定创建级别为0 ,-n 设备数 /dev/sdb{5..8} 这些设备用来做raid 0
3.这就创建好了,就差格式化和挂载了,在/proc/mdstat 下记录着 本机的 raid 的详细信息
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid0]
md0 : active raid0 sdb8[3] sdb7[2] sdb6[1] sdb5[0]
4190208 blocks super 1.2 512k chunks
unused devices: <none>
4.这就格式化和挂载吧。
[root@localhost ~]# mkfs.xfs /dev/md0
meta-data=/dev/md0 isize=256 agcount=8, agsize=130944 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=1047552, imaxpct=25
= sunit=128 swidth=512 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]# ls /mnt
cdrom md rpm
[root@localhost ~]# mount /dev/md0 /mnt/md
RAID 1 的演示
其实都是一样的过程。这下1G的内容,raid 1 需要2块1G的硬盘
1.首先我又分了2个区出来(/dev/sdb9 /dev/sdb10)
2.开始创建!!!
[root@localhost ~]# mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sdb9 /dev/sdb10
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/md1 started.
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid0] [raid1]
md1 : active raid1 sdb10[1] sdb9[0]
1047552 blocks super 1.2 [2/2] [UU]
md0 : active raid0 sdb8[3] sdb7[2] sdb6[1] sdb5[0]
4190208 blocks super 1.2 512k chunks
最后发现有2个md设备了。开始格式化和挂载吧
使用fdisk就可以查看raid的情况了
Disk /dev/md0: 4290 MB, 4290772992 bytes, 8380416 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 524288 bytes / 2097152 bytes
Disk /dev/md1: 1072 MB, 1072693248 bytes, 2095104 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
下面使用管理命令模拟一个磁盘的损坏,演示raid 的各种特性
1.首先都给2个挂载点内复制进去一个文件
<span style="font-size:18px;">[root@localhost mnt]# cp /etc/fstab ./md
[root@localhost mnt]# cp /etc/fstab ./md1</span>
2.查看。都是可以正常访问的
3.使用查看raid命令查看详细的raid信息(mdadm -D /dev/md0)
[root@localhost mnt]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Tue Oct 25 18:03:05 2016
Raid Level : raid0
Array Size : 4190208 (4.00 GiB 4.29 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Tue Oct 25 18:03:05 2016
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Chunk Size : 512K
Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : 74d4d16c:3ca2180f:b94cb472:66f3c5e4
Events : 0
Number Major Minor RaidDevice State
0 8 21 0 active sync /dev/sdb5
1 8 22 1 active sync /dev/sdb6
2 8 23 2 active sync /dev/sdb7
3 8 24 3 active sync /dev/sdb8
4.模拟损坏一个(mdadm /dev/md0 -f /dev/sdb8),损坏哪个sdb8(只是模拟损坏,不是真坏了)
[root@localhost mnt]# mdadm /dev/md0 -f /dev/sdb8
mdadm: set /dev/sdb8 faulty in /dev/md0
5.发现不能打开原文件了(raid 0 的话模拟损坏会一直提示设备忙。不能真正的演示不能打开原文件。就假装打不开吧)
同样的过程看看/dev/md1的(cat /proc/mdstat)
[root@localhost mnt]# mdadm /dev/md1 -f /dev/sdb9
mdadm: set /dev/sdb9 faulty in /dev/md1
[root@localhost mnt]# clear
[root@localhost mnt]# cat /proc/mdstat
Personalities : [raid1] [raid0]
md0 : active raid0 sdb6[1] sdb8[3] sdb5[0] sdb7[2]
4190208 blocks super 1.2 512k chunks
md1 : active raid1 sdb10[1] sdb9[0](F)
1047552 blocks super 1.2 [2/1] [_U]
再看看详细信息(mdadm -D /dev/md1
)
[root@localhost mnt]# mdadm -D /dev/md1
/dev/md1:
Version : 1.2
Creation Time : Tue Oct 25 18:45:25 2016
Raid Level : raid1
Array Size : 1047552 (1023.17 MiB 1072.69 MB)
Used Dev Size : 1047552 (1023.17 MiB 1072.69 MB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Tue Oct 25 19:17:00 2016
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 1
Spare Devices : 0
Name : localhost.localdomain:1 (local to host localhost.localdomain)
UUID : bdaf75b2:caf00461:96b63007:7c517128
Events : 19
Number Major Minor RaidDevice State
0 0 0 0 removed
1 8 26 1 active sync /dev/sdb10
0 8 25 - faulty /dev/sdb9
坏掉没用的盘移除。(mdadm /dev/md1 -r /dev/sdb9)
[root@localhost md1]# mdadm /dev/md1 -r /dev/sdb9
mdadm: hot removed /dev/sdb9 from /dev/md1
再加上一块盘(mdadm /dev/md1 -a /dev/sdb9)
[root@localhost md1]# mdadm /dev/md1 -a /dev/sdb9
mdadm: added /dev/sdb9
[root@localhost md1]# cat /proc/mdstat
Personalities : [raid1] [raid0]
md0 : active raid0 sdb6[1] sdb8[3] sdb5[0] sdb7[2]
4190208 blocks super 1.2 512k chunks
md1 : active raid1 sdb9[2] sdb10[1]
1047552 blocks super 1.2 [2/1] [_U]
[=====>...............] recovery = 26.3% (276608/1047552) finish=0.0min speed=276608K/sec
通过查看/proc/mdstat看以看到,正在恢复数据中。
假如某阵列不想用了,可以通过mdadm --stop /dev/md0停止这个阵列。
再清除掉分区上的超级块信息(很重要)
可以使用3块盘。1块存数据。1块当镜像。1块备份(一旦有一个坏了就立马补上去)
mdadm -C /dev/mdN -n 2 -x 1 -l 1 /dev/devices{1..3}
将当前信息保存至配置文件。以便以后的启动
mdadm -D --scan > /etc/mdadm.conf
以后就可以使用 mdadm -A /dev/mdN启动了。
创建一个2G的raid 5需要使用 3个1G的。