一、RAID
磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“价格便宜具有冗余能力的磁盘阵列”之意。原理是利用数组方式来作磁盘组,配合数据分散排列的设计,提升数据的安全性。磁盘阵列是由很多价格较便宜的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。磁盘阵列还能利用同位检查(Parity Check)的观念,在数组中任一颗硬盘故障时,仍可读出数据,在数据重构时,将数据经计算后重新置入新硬盘中。
1. 优点:
a) 提高读取与存储的速度
b) 增加容错功能。
Raid5整体容量计算方法:
整体容量 = (n -1)/n * n * 单块磁盘容量 = (n -1) * 单块磁盘容量
Linux下软RAID操作
主设备号在/usr/include/linux/major.h中定义的
案例:创建一个RAID5,其放置Oracle数据库文件。
1. 硬件准备:至少3块磁盘
a) 准备好4块磁盘,将其分区,分区类型为fd
2. 使用mdadm命令生成Raid设备文件
a) mdadm几种主要模式:
i. Assemble:将以前定义的raid加入到当前的raid
ii. Build: 创建一个新的raid,没有superblocks
iii. Create: 创建一个新的raid,带有superblocks
iv. Manage:管理阵列,比如add或remove
b) OPTIONS
i. -A, --assemble 加入以前定义的阵列
ii. -B, --build
iii. -C, --create 创建一个新的阵列
iv. -Q, --query:查看一个device
v. -D, --detail:查看设备的详细的信息
# mdadm -C /dev/md5 --level=5 --raid-devices=3 /dev/sd[bcd]1 --spare-devices=1 /dev/sde1 �Cv
3.对Raid5进行分区及格式化
# fdisk /dev/md5
/dev/md5p1 /dev/md5p2
# mkfs.ext4 /dev/md5p1
# mkfs.ext4 /dev/md5p2
3. 挂载使用
# mount /dev/md5p1 /root/d1
4. 写入配置文件,使其永久生效:
# echo DEVICE /dev/sd[bcde]1 > /etc/mdadm.conf
# mdadm --detail --scan >> /etc/mdadm.conf
删除备用磁盘:
# mdadm /dev/md5 --remove /dev/sde
一块普通的磁盘一般都要分区格式化进行使用,但在Raid中,可以直接将裸盘进行使用。
不分区建立Raid实验:
创建Raid
# mdadm -C /dev/md5 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd --spare-devices=1 /dev/sde --verbose
等价于:
# mdadm -Cv /dev/md5 -l5 -n3 /dev/sd[bcd] -x1 /dev/sde
查看Raid状态
# cat /proc/mdstat
# mdadm -D /dev/md5
格式化
# mkfs.ext4 /dev/md5
挂载使用:
# mount /dev/md5 /mnt
[root@StudyServer mnt]# cp -ax /app/* .
生成Raid的配置文件:
# echo DEVICE /dev/sd[bcde] > /etc/mdadm.conf
# mdadm --detail --scan >> /etc/mdadm.conf
停止Raid
# umount /mnt
# mdadm --stop /dev/md5
重新启动Raid
# mdadm -As /dev/md5
模拟故障
# mdadm /dev/md5 --fail /dev/sdc #搞坏掉一块磁盘:/dev/sdc
查看状态
# mdadm -D /dev/md5
…………………………………………
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
3 8 64 1 spare rebuilding /dev/sde
4 8 48 2 active sync /dev/sdd
1 8 32 - faulty spare /dev/sdc
# watch cat /proc/mdstat
再弄坏一块磁盘
# mdadm /dev/md5 --fail /dev/sde
可以查看Raid的运行状态,发现仍然可以正常提供服务。
从阵列中移除坏掉的磁盘
# mdadm /dev/md5 --remove /dev/sdc
# mdadm /dev/md5 --remove /dev/sde
重新添加磁盘到阵列
# mdadm /dev/md5 --add /dev/sdc
# mdadm /dev/md5 --add /dev/sde
查看Raid状态
cat /proc/mdstat Sun Nov 17 06:48:39 2013
Personalities : [raid6] [raid5] [raid4]
md5 : active raid5 sde[5](S) sdc[3] sdb[0] sdd[4]
4191232 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]
[===========>.........] recovery = 57.6% (1209736/2095616) finish=0.5min speed=27003K/sec
l (Physical Volumn,PV)物理卷
l 处于LVM最底层,可以是物理硬盘或分区
l (Volume Group,VG)卷组
l 建立在PV之上,可以含有一个到多个PV,将一组物理卷收集为一个管理单元
l LV(Logical Volume)逻辑卷
l 建立在VG之上,相当于原来分区的概念,不过大小可以动态改变
PV管理相关命令
l pvdisplay显示PV属性
l pvscan 在系统所有硬盘上查找PV
l pvcreate创建PV(在PV上初始化VGDA)
l pvdata显示PV上的VGDA信息
l pvchange改变PV属性
动态添加一块新的磁盘
# echo "scsi add-single-device 2 0 5 0" > /proc/scsi/scsi
# echo "scsi add-single-device 2 0 6 0" > /proc/scsi/scsi
分区磁盘
# fdisk /dev/sdf #分区时注意将其分区类型设为8e
l 建立LVM类型的分区(8e)
因为要生成一个PV,不需要将其格式化
创建PV
# pvcreate /dev/sdf1
# pvcreate /dev/sdg1
显示PV
# pvdisplay /dev/sdf1
LVM的VG管理相关命令
l vgdisplay显示VG卷组属性
l vgscan查找系统现有VG卷组
l vgcreate创建VG卷组(在VG上初始化VGDA)
l vgdata显示VG卷组上的VGDA信息
创建VG
# vgcreate MyVg /dev/sdf1 /dev/sdg1
显示VG
# vgdisplay
LV管理相关命令
l lvdisplay显示LV卷组属性
l lvscran查找系统现有LV卷组
l lvcreate创建LV卷组(在LV上初始化LVDA)
l lvdata显示LV卷组上的LVDA信息
l lvchange改变LV卷组属性
创建LV
# lvcreate -L 3G -n oracledata_lv MyVg
格式化LV
# mkfs.ext4 /dev/MyVg/oracledata_lv
挂载使用
# mount /dev/MyVg/oracledata_lv /root/mylv
永久挂载
在/etc/fstab中添加挂载项
为逻辑卷扩容
扩容之前先测容量
# df �Chl
扩容
# lvextend -L +6G /dev/mapper/MyVg-oracledata_lv
查看容量
# lvdisplay /dev/mapper/MyVg-oracledata_lv #容量已变
# df �Chl #容量未变
更新文件系统
# resize2fs /dev/mapper/MyVg-oracledata_lv
再查看容量
# df �Chl #已变
成功扩容