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
[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.
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>
[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
其实都是一样的过程。这下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>
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/sdb84.模拟损坏一个(mdadm /dev/md0 -f /dev/sdb8),损坏哪个sdb8(只是模拟损坏,不是真坏了)
[root@localhost mnt]# mdadm /dev/md0 -f /dev/sdb8 mdadm: set /dev/sdb8 faulty in /dev/md05.发现不能打开原文件了(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停止这个阵列。
再清除掉分区上的超级块信息(很重要) mdadm --zero-superblock /dev/sdb[1-3,5]
可以使用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的。