在过去,我们能使用的硬盘容量不大,特别是个人电脑里。但在某些情况下会用到很大的储存空间,例如公司中存储着大量的客户信息,而这些磁盘想必就不够用了。其实有一中存储机制,称为磁盘阵列(RAID)。那么什么是RAID?
RAID:
RAID:『Redundant Arrays of Inexpensive Disks, RAID 』,英翻中的意思是:容错式廉价磁盘阵列。RAID 可以透过一个技术(软件或硬件),将多个较小的磁盘整合成为一个较大的磁盘装置;而这个较大的磁盘功能可不止是储存而已,他还具有数据保护的功能呢。整个 RAID 由于选择的等级(level) 不同,而使得整合后的磁盘具有不同的功能,基本常见的level 有这几种
RAID-0:
RAID -0:等量模式
这种模式如果使用相同型号与容量的磁盘来组成时,效果较佳。即至少两块磁盘。
当有数据要写入 RAID 时,资料会先被切割成符合小区块的大小,然后再依序一个一个的放置到不同的磁盘去。由于数据已经先被切割并且依序放置到不同的磁盘上面,因此每颗磁盘所负责的数据量都降低了!
它的优势是读写性能的提升,利用率达到了100%缺点是没有容错能力,有一个磁盘损坏,那么这个阵列失效了,文件就会都损坏。
RAID-1:
RAID-1 (镜像模式,):完整备份两块磁盘始终同步。
这种模式也是需要相同的磁盘容量的,最好是一模一样的磁盘如果是不同容量的磁盘组成RAID-1 时,那么总容量将以最小的那一颗磁盘为主!
当一份数据传送到RAID-1 之后会被分为两股,并分别写入到各个磁盘里头去。读性能提升,但写性能略有下降,有冗余能力,防止物理损坏。
RAID-5:
RAID-5:效能与数据备份的均衡考虑
RAID-5 至少需要三块以上的磁盘才能够组成这种类型的磁盘阵列。这种磁盘阵列的数据写入有点类似RAID-0 ,不过每个循环的写入过程中(striping),在每颗磁盘还加入一个同位检查数据这个数据会记录其他磁盘的备份数据, 用于当有磁盘损毁时的救援。
它的优势是读写性能的提升,有容错能力,允许最多一块磁盘的损坏。
另外,由于RAID 5 仅能支持一颗磁盘的损毁,所以还发展出另外一种等级,就是RAID 6 ,这个RAID 6 则使用两颗磁盘的容量作为parity 的储存,因此整体的磁盘容量就会少两颗,但是允许出错的磁盘数量就可以达到两颗了! 也就是在 RAID 6 的情况下,同时两颗磁盘损毁时,数据还是可以救回来!
RAID-10和RAID-01:
RAID-10和RAID-01:都是由RAID-0与RAID-1的组合,那么最少需要用到四块硬盘。优点就是RAID-0与RAID-1的组合。读写的性能提升。
区别于RAID-10是先由两两组合成RAID1,再由两个RAID1组合成RAID-0,
而RAID-01是先由两两组合成RAID0,再由两个RAID0组合成RAID-1
但是由于是不同的组合,稍微还是有点差别的,像RAID-01,如果disk a损坏那么左边的RAID0就用不了,就只剩下右边RAID0在工作,相当于一下就损失了两块硬盘。而RAID-10,如果是disk a损坏,那么就只有disk a不能使用,disk b还能继续使用,不影响。所以在实际中如果选择RAID-0和RAID-1的组合大部分会选择RAID-10这种。
对于RAID阵列的优点其实重点在于:
- 数据安全与可靠性:指的并非网络信息安全,而是当硬件(指磁盘) 损毁时,数据是否还能够安全的救援或使用之意;
- 读写效能:例如RAID 0 可以加强读写效能,让你的系统I/O 部分得以改善;
-
容量:可以让多颗磁盘组合起来,故单一文件系统可以有相当大的容量。
下面我们在虚拟中设定磁盘阵列RAID-10,
1.假设我们在虚拟机中添加了如下硬盘:
刚开始系统没经过重启是不识别的,这里有两种方式可以让系统识别新增加的磁盘。
1.重启虚拟机(在实际机器中重启机器)
2.用命令:这样在不重启的情况下就可识别磁盘。
这里我们可以看到已经识别了,多出了sdb.sdc,sdd,sde这四块盘下面我们就可以设置了。
2.设定前我们需先了解下mdadm这个命令,这个命令可实现软件RAID的实现。
mdadm:
命令语法格式:mdadm[mode] <raiddevice> [options] <component-devices>
常见模式:
创建: -C 装配 : -A 管理:-f , -r, -a
<raiddevice>: /dev/md#
<component-devices>: 任意块设备
-C: 创建模式
-n #: 使用#个块设备来创建此RAID
-l #:指明要创建的RAID的级别
-a {yes|no}:自动创建目标RAID设备的设备文件
-c CHUNK_SIZE: 指明块大小
-x #: 指明空闲盘的个数
-D:显示raid的详细信息;
mdadm -D /dev/md#
管理模式:
-f: 标记指定磁盘为损坏
-a: 添加磁盘
-r: 移除磁盘
观察md的状态:
cat /proc/mdstat
2.用mdadm创建并定义RAID的设备
[root@centos7 ~]#mdadm -C /dev/md0 -a yes -l 10 -n 4 /dev/sd{b,c,d,e} 注:这里创建的RAID名为md0
mdadm: largest drive (/dev/sde) exceeds size (20955136K) by more than 1%
Continue creating array? y 注:输入y就自动创建了
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@centos7 ~]#cat /proc/mdstat 注:我们通过观察md的状态可得知进度,同时也可以通过mdadm -D /dev/md0详细的信息
Personalities : [raid10]
md0 : active raid10 sde[3] sdd[2] sdc[1] sdb[0]
41910272 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
[===========>.........] resync = 59.3% (24873216/41910272) finish=1.3min speed=207256K/sec
unused devices: <none>
[root@centos7 ~]#mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Jun 22 21:11:48 2017
Raid Level : raid10
Array Size : 41910272 (39.97 GiB 42.92 GB)
Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Jun 22 21:15:17 2017
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Name : centos7.3.zj.com:0 (local to host centos7.3.zj.com)
UUID : 2d988da3:c46ab5c4:ae86d5db:43b3b96b
Events : 17
Number Major Minor RaidDevice State
0 8 16 0 active sync set-A /dev/sdb
1 8 32 1 active sync set-B /dev/sdc
2 8 48 2 active sync set-A /dev/sdd
3 8 64 3 active sync set-B /dev/sde
通过上面的命令,创建RAID可以说已经成功一大半了。下面就是对文件系统的格式化。
3.生成RAID的配置文件
[root@centos7 ~]#ll /etc/mdadm.conf 注:默认开始不存在
ls: cannot access /etc/mdadm.conf: No such file or directory
[root@centos7 ~]#mdadm -Ds /dev/md0 >/etc/mdadm.conf 注:导入生成
[root@centos7 ~]#ll /etc/mdadm.conf
-rw-r--r--. 1 root root 93 Jun 22 21:43 /etc/mdadm.conf
4.用文件系统对每个RAID设备进行格式化。
[root@centos7 ~]#mkfs.xfs /dev/md0 注:文件系统格式化默认生成下面信息,如需特别要求可加选项来指定对文件系统的要求。
meta-data=/dev/md0 isize=512 agcount=16, agsize=654720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=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 log bsize=4096 blocks=5120, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
5.用blkid命令查看生成好的md0等磁盘的文件系统格式及UUID,到这里基本就成功了,接下来就是挂载。
[root@centos7 ~]#blkid
/dev/sdb: UUID="2d988da3-c46a-b5c4-ae86-d5db43b3b96b" UUID_SUB="659aba42-0617-295d-c9a4-aa49bc59624d" LABEL="centos7.3.zj.com:0" TYPE="linux_raid_member"
/dev/sdc: UUID="2d988da3-c46a-b5c4-ae86-d5db43b3b96b" UUID_SUB="79c73d4a-0e1b-070e-849d-38416cbf91fe" LABEL="centos7.3.zj.com:0" TYPE="linux_raid_member"
/dev/sda1: UUID="637077c6-3003-40e0-8689-1556bb4fa00e" TYPE="xfs"
/dev/sda2: UUID="e8d7cbe2-0fd0-4355-b535-a7b54c3febd9" TYPE="xfs"
/dev/sda3: UUID="4ca027ad-66c8-4132-809f-9ef47aa068b8" TYPE="xfs"
/dev/sda5: UUID="52ceaf06-70a8-4ce2-9bea-e4be30b6af18" TYPE="swap"
/dev/sda6: UUID="3fb7ca42-0efc-4412-a8cc-40d98d83870b" TYPE="xfs"
/dev/sr0: UUID="2016-12-05-13-52-39-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/sde: UUID="2d988da3-c46a-b5c4-ae86-d5db43b3b96b" UUID_SUB="81532d29-9dbe-5769-0e87-07f293de4d96" LABEL="centos7.3.zj.com:0" TYPE="linux_raid_member"
/dev/md0: UUID="afdbce67-6209-4393-ab48-3f7881f0465c" TYPE="xfs"
/dev/sdd: UUID="2d988da3-c46a-b5c4-ae86-d5db43b3b96b" UUID_SUB="d9ae2865-8631-085d-bd34-a7cdb3a188d7" LABEL="centos7.3.zj.com:0" TYPE="linux_raid_member"
6.挂载RAID10,并进行文件测试。
[root@centos7 ~]#mkdir /mnt/raid10 注:在mnt下创建一个raid10的挂载点
[root@centos7 ~]#mount /dev/md0 /mnt/raid10 注:挂载
[root@centos7 ~]#df -h 注:用df查看是否挂载成功
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 100G 5.0G 95G 5% /
devtmpfs 474M 0 474M 0% /dev
tmpfs 489M 88K 489M 1% /dev/shm
tmpfs 489M 14M 476M 3% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda6 10G 37M 10G 1% /home
/dev/sda1 1014M 169M 846M 17% /boot
/dev/sda3 50G 63M 50G 1% /app
tmpfs 98M 24K 98M 1% /run/user/0
/dev/sr0 7.8G 7.8G 0 100% /run/media/root/CentOS 7 x86_64
/dev/md0 40G 33M 40G 1% /mnt/raid10
[root@centos7 ~]#cd /mnt/raid10 注:进入raid10进行文件的测试
[root@centos7 raid10]#dd if=dev/zero of=bigfile bs=1M count=1024
dd: failed to open ‘dev/zero’: No such file or directory
[root@centos7 raid10]#dd if=/dev/zero of=bigfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 1.82217 s, 589 MB/s
[root@centos7 raid10]#ll -h
total 1.0G
-rw-r--r--. 1 root root 1.0G Jun 22 22:03 bigfile
[root@centos7 raid10]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 100G 5.0G 95G 5% /
devtmpfs 474M 0 474M 0% /dev
tmpfs 489M 88K 489M 1% /dev/shm
tmpfs 489M 14M 476M 3% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda6 10G 37M 10G 1% /home
/dev/sda1 1014M 169M 846M 17% /boot
/dev/sda3 50G 63M 50G 1% /app
tmpfs 98M 24K 98M 1% /run/user/0
/dev/sr0 7.8G 7.8G 0 100% /run/media/root/CentOS 7 x86_64
/dev/md0 40G 1.1G 39G 3% /mnt/raid10 注:这里空间增加,说明raid10创建成功,可以使用了。
接下来要进行最后一步,就是写进fstab。
7.对md0的UUID写进etc下的fstab,为什么要写进fstab呢?因为/etc/fstab 文件负责配置Linux开机时自动挂载的分区。 磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新手动挂载。
UUID=e8d7cbe2-0fd0-4355-b535-a7b54c3febd9 / xfs defaults 0 0
UUID=4ca027ad-66c8-4132-809f-9ef47aa068b8 /app xfs defaults 0 0
UUID=637077c6-3003-40e0-8689-1556bb4fa00e /boot xfs defaults 0 0
UUID=52ceaf06-70a8-4ce2-9bea-e4be30b6af18 swap swap defaults 0 0
UUID=3fb7ca42-0efc-4412-a8cc-40d98d83870b /home xfs defaults 0 0
UUID=afdbce67-6209-4393-ab48-3f7881f0465c /mnt/md0 xfs defaults 0 0
注:按原有格式填写好。
到这里创建raid10就完成了。
拓展:对raid10增加一个备用磁盘防止意外某块磁盘损坏,备用磁盘自动替换。
1.在虚拟机下模拟增加一个磁盘
2.使用命令让系统识别
[root@centos7 ~]#echo '- - -' > /sys/class/scsi_host/host2/scan
[root@centos7 ~]#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 100G 0 part /
├─sda3 8:3 0 50G 0 part /app
├─sda4 8:4 0 1K 0 part
├─sda5 8:5 0 2G 0 part [SWAP]
└─sda6 8:6 0 10G 0 part /home
sdb 8:16 0 20G 0 disk
└─md0 9:0 0 40G 0 raid10 /mnt/raid10
sdc 8:32 0 30G 0 disk
└─md0 9:0 0 40G 0 raid10 /mnt/raid10
sdd 8:48 0 40G 0 disk
└─md0 9:0 0 40G 0 raid10 /mnt/raid10
sde 8:64 0 50G 0 disk
└─md0 9:0 0 40G 0 raid10 /mnt/raid10
sdf 8:80 0 20G 0 disk 注:这里以成功识别到
sr0 11:0 1 7.7G 0 rom /run/media/root/CentOS 7 x86_64
3.对raid10增加备用磁盘。
[root@centos7 ~]#mdadm /dev/md0 -a /dev/sdf
mdadm: added /dev/sdf
[root@centos7 ~]#mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Jun 22 21:11:48 2017
Raid Level : raid10
Array Size : 41910272 (39.97 GiB 42.92 GB)
Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 5
Persistence : Superblock is persistent
Update Time : Thu Jun 22 22:22:14 2017
State : clean
Active Devices : 4
Working Devices : 5
Failed Devices : 0
Spare Devices : 1
Layout : near=2
Chunk Size : 512K
Name : centos7.3.zj.com:0 (local to host centos7.3.zj.com)
UUID : 2d988da3:c46ab5c4:ae86d5db:43b3b96b
Events : 18
Number Major Minor RaidDevice State
0 8 16 0 active sync set-A /dev/sdb
1 8 32 1 active sync set-B /dev/sdc
2 8 48 2 active sync set-A /dev/sdd
3 8 64 3 active sync set-B /dev/sde
4 8 80 - spare /dev/sdf 注:已成功加入称为备用磁盘
4.模拟磁盘的损坏
[root@centos7 ~]#mdadm /dev/md0 -f /dev/sdb 注:用-f命令模拟sdb盘损坏
mdadm: set /dev/sdb faulty in /dev/md0
[root@centos7 ~]#mdadm -D /dev/md0 注:查看信息
/dev/md0:
Version : 1.2
Creation Time : Thu Jun 22 21:11:48 2017
Raid Level : raid10
Array Size : 41910272 (39.97 GiB 42.92 GB)
Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 5
Persistence : Superblock is persistent
Update Time : Thu Jun 22 22:27:07 2017
State : clean, degraded, recovering
Active Devices : 3
Working Devices : 4
Failed Devices : 1
Spare Devices : 1
Layout : near=2
Chunk Size : 512K
Rebuild Status : 22% complete 注:重建状态:完成22%
Name : centos7.3.zj.com:0 (local to host centos7.3.zj.com)
UUID : 2d988da3:c46ab5c4:ae86d5db:43b3b96b
Events : 23
Number Major Minor RaidDevice State
4 8 80 0 spare rebuilding /dev/sdf 注:这里自动把sdf盘替换为损坏的sdb盘
1 8 32 1 active sync set-B /dev/sdc
2 8 48 2 active sync set-A /dev/sdd
3 8 64 3 active sync set-B /dev/sde
0 8 16 - faulty /dev/sdb 注:损坏的sdb以替换下来,接下来我们就可以移除它了。
5.移除损坏的磁盘
[root@centos7 ~]#mdadm /dev/md0 -r /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md0
[root@centos7 ~]#mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Jun 22 21:11:48 2017
Raid Level : raid10
Array Size : 41910272 (39.97 GiB 42.92 GB)
Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Jun 22 22:36:56 2017
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Name : centos7.3.zj.com:0 (local to host centos7.3.zj.com)
UUID : 2d988da3:c46ab5c4:ae86d5db:43b3b96b
Events : 38
Number Major Minor RaidDevice State
4 8 80 0 active sync set-A /dev/sdf
1 8 32 1 active sync set-B /dev/sdc
2 8 48 2 active sync set-A /dev/sdd
3 8 64 3 active sync set-B /dev/sde
注:这里损坏的磁盘就移除了
6.进入raid10观察文件是否还在。
[root@centos7 ~]#cd /mnt/raid10
[root@centos7 raid10]#ll -h
total 1.0G
-rw-r--r--. 1 root root 1.0G Jun 22 22:03 bigfile 注:文件还在
现在我们就可以再加一块备用磁盘,以防意外。
到这里RAID以构建完成。
如有不足请多多指教。