11.Linux磁盘管理——lvm,raid
7. 逻辑卷 lvm
7.1 为何要用 lvm
- 当刚开始安装 Linux 系统时,往往不能确定每个分区
使用的空间大小,只能凭经验分配不科学;- 如果分区设置的过大,就浪费了磁盘空间;
- 如果分区设置的过小,就会导致空间不够;
- 如何希望分配的空间过大或过小,都能动态调整,则
需要使用到 LVM 逻辑卷;
7.2 什么是 lvm
- LVM 是 Logical Volume Manager 逻辑卷管理的简
写,它是对磁盘分区管理的一种机制; - LVM 优点:
- LVM 可以创建和管理逻辑卷,而不是直接使用物理
硬盘。 - LVM 可以弹性的管理逻辑卷的扩大缩小,操作简
单,而不损坏已存储的数据; - LVM 可以随意将新的硬盘添加到 LVM ,以直接扩展
已经存在的逻辑卷。
- LVM 可以创建和管理逻辑卷,而不是直接使用物理
- LVM 缺点:
- LVM 如果有一个磁盘损坏,整个 lvm 都坏了, lvm
只有动态扩展作用 - 解决办法:用 RAID + LVM = 既有冗余又有动态扩
展;
- LVM 如果有一个磁盘损坏,整个 lvm 都坏了, lvm
7.3 lvm相关术语
- 物理卷(PV):将常规的磁盘通过 pvcreate 命令对其
进行初始化,形成了物理卷。(面粉) - 卷组(VG):把多个物理卷组成一个逻辑的整体,这样
卷组的大小就是多个盘之和。(大面团) - 逻辑卷(LV):从卷组中划分需要的空间大小出来,用
户仅需对其格式化然后即可挂载使用。(切成馒头) - 基本单元(PE):分配的逻辑大小的最小单元,默认
4MB,假设分配100MB的空间,则需要创建25个PE
7.4 lvm配置实践
7.4.1 环境与思路
- 准备三块物理磁盘,建议在虚拟机关闭状态添加,以便更好的实验;
- 1.创建物理卷,将普通磁盘转换为物理卷
- 2.创建卷组, 将物理卷加入到卷组中
- 3.在卷组中划分逻辑卷,然后挂载使用
7.4.2 创建物理卷
1.将磁盘转换为物理卷,并加入 pv
[root@linux-node1 ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully
created.
2.检查 pv 创建情况
[root@linux-node1 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb lvm2 --- 1.00g 1.00g
7.4.3 创建卷组
1.创建名为 datavg 的卷组,然后将物理卷加入进卷组
[root@linux-node1 ~]# vgcreate datavg /dev/sdb
Volume group "datavg" successfully created
2.检查卷组(发现存在一个PV卷)
[root@linux-node1 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
datavg 1 0 0 wz--n- 1020.00m 1020.00m
7.4.4 创建逻辑卷
1.分配 datavg 逻辑卷, -n 指定逻辑卷名称, -L 指定逻
辑卷大小;
#1.分配100M空间给lv1逻辑卷
[root@linux-node1 ~]# lvcreate -L 100M -n lv1 datavg
Logical volume "datalv1" created.
2.检查逻辑卷
[root@linux-node1 ~]# lvscan
ACTIVE '/dev/datavg/lv1' [100.00
MiB] inherit
7.4.5 挂载使用
1.格式化逻辑卷
[root@linux-node1 ~]# mkfs.xfs
/dev/datavg/lv1
2.创建目录并挂载
[root@linux-node1 ~]# mkdir /lv1
[root@linux-node1 ~]# mount /dev/datavg/lv1
/lv1/
[root@linux-node1 ~]# df -h
Filesystem Size Used
Avail Use% Mounted on
...
/dev/mapper/datavg-lv1 97M 5.2M 92M
6% /lv1
7.5 lvm 卷组管理
7.5.1 扩大卷组
1.准备新的磁盘加入至 pv ,然后检查卷组当前的大小;
[root@node~]# pvcreate /dev/sdc
[root@node~]# vgs
VG #PV #LV #SN Attr VSize
VFree
datavg 1 1 0 wz--n-
1020.00m 920.00m
2.使用 vgextend 扩展卷组
[root@node ~]# vgextend datavg /dev/sdc
Volume group "datavg" successfully extended
3.再次检查,发现卷组已经扩大
[root@node ~]# vgs
VG #PV #LV #SN Attr VSize
VFree
datavg 2 1 0 wz--n-
1.99g 1.89g
7.5.2 缩小卷组
- 假设想移除 /dev/sdb 磁盘,建议先将 sdb 磁盘数
据先迁移到 sdc 磁盘,然后在移除; - 注意:同一卷组的磁盘才可以进行在线迁移
1.检查当前逻辑卷 VG 中 PV 使用情况
[root@node ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb vg1 lvm2 a -- 2.00g 1.76g
/dev/sdc vg1 lvm2 a -- 2.00g 2.00g
2.pvmove 在线数据迁移,将 sdb 的数据迁移至 sdc
[root@node ~]# pvmove /dev/sdb
/dev/sdb: Moved: 100.00%
3.检查是否将 sdb 数据迁移至 sdc
[root@node~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb vg1 lvm2 a -- 2.00g 2.00g
/dev/sdc vg1 lvm2 a -- 2.00g 1.76g
4.从卷组中移除 sdb 磁盘
[root@node ~]# vgreduce datavg
/dev/sdb
Removed "/dev/sdb" from volume group
"datavg"
7.6 lvm 逻辑卷管理
7.6.1 扩展逻辑卷
- 扩展逻辑卷:取决于 vg 卷中是否还有剩余的容量
- 注意扩展逻辑卷不能超过卷组 VG 的总大小
[root@node~]# vgs
VG #PV #LV #SN Attr VSize
VFree
datavg 1 1 0 wz--n-
1020.00m 920.00m
1.扩展 lv 逻辑卷,增加 800M 分配给逻辑卷
[root@node ~]# lvextend -L +800M /dev/datavg/lv1
#也可以选择分配卷组中多少百分比给逻辑卷
[root@node ~]# lvextend -l +50%FREE
/dev/datavg/lv1
2.扩展逻辑卷后需要更新fs文件系统
[root@node ~]# xfs_growfs
/dev/datavg/lv1 #xfs文件格式扩容
[root@node ~]# resize2fs
/dev/datavg/lv1 #ext文件格式扩容
7.6.2删除逻辑卷
1.选卸载挂载点,然后在移除逻辑卷
[root@oldxu ~]# umount /dev/datavg/lv1
[root@oldxu ~]# lvremove /dev/datavg/lv1
2.删除 vg
[root@oldxu ~]# vgremove datavg
3.删除 pv
[root@oldxu ~]# pvremove /dev/sdb
[root@oldxu ~]# pvremove /dev/sdc
8. 磁盘阵列RAID
8.1 什么是RAID
- RAID 简称磁盘阵列,那什么是阵列:
- 古代打仗时会对士兵进行排兵布阵,其目的在于提高
士兵整体的作战能力,而不是某个士兵的战斗力。 - 那么回到磁盘中,我们可以将多块盘组合进行排列,
提高磁盘的整体读写能力,和冗余能力,通常我们将
其称为磁盘阵列。
8.2 为什么需要RAID
- 1.提升读写能力:(在RAID中,可以让很多磁盘同时
传输数据,因为多块磁盘在逻辑上感觉是一个磁盘,
所以使用RAID可以达到单个磁盘的几倍、几十倍甚至
上百倍的速率。100MB/s --> 300MB/s) - 2.保证数据安全:(硬盘非常的脆弱,它经常会坏
掉,所以有了RAID。它的目的是将好多个硬盘组合在
一起;就算坏掉一块盘,也不影响服务器对外提供服
务,保证磁盘高可用; abc b ac) - RAID可以预防数据丢失,但并不能百分百保证数据不
丢,所以在使用RAID的同时还需要备份数据。
8.3 实现RAID的几种模式
8.3.1 RAID0
-
RAID0条带卷,最少两块盘。读写性能好,但没有容
错机制。坏一块磁盘数据全丢。- 磁盘空间使用率:100%,成本低
- 读性能: N * 单块磁盘的读性能 ;
- 写性能: N * 单块磁盘的写性能 ;
- 冗余:无,任何一块磁盘损坏都将导致数据不可用;
- 应用场景:无状态服务(web);
8.3.2 RAID1
-
RAID1 镜像卷,写入性能一般、读取性能快、有容错
机制,但磁盘有50%浪费- 磁盘空间使用率: 50% 成本较高。
- 读性能: N * 单块磁盘的读性能 ;
- 写性能: 1 * 单块磁盘的写性能 ;
- 冗余:在这一对镜像盘中有一块磁盘可以使用,那么无影响;
- 应用场景:系统盘;
8.3.3 RAID5
-
RAID5 校验卷,至少3块相同大小的盘,并且只允许
坏一块盘,有效空间 (N-1) ,读写速度快。坏掉一块
盘,读的性能会下降;- 磁盘空间利用率: (N-1) ,即只浪费一块磁盘用于
奇偶校验; - 读性能: (n-1)*单块磁盘的读性能 ,接近 RAID0
的读性能; - 写性能: (n-1)*单块磁盘的写性能 ,写入数据需要
做校验值;性能会下降; - 冗余:只允许一块磁盘损坏; 修复时间会比较
长,修复过程中可能会出现其他盘损坏的; - 应用场景:常规选择 (all) ;
- 磁盘空间利用率: (N-1) ,即只浪费一块磁盘用于
8.3.4 RAID10
- RAID10 ,先做 RAID1 ,在做 RAID0
- 磁盘空间利用率: 50%
- 读性能:
- 写性能:
- 冗余:只要一对镜像盘中有一块磁盘可以使用就没问题。
- 应用场景:数据库(db);
8.4 实现RAID的方式
8.4.1 硬RAID(服务器 | raid卡)
-
硬 RAID 使用硬件阵列卡;在安装操作系统之前进入
BIOS 配置 -
raid列表
- raid0
- raid1
- raid5
- 选择磁盘
8.4.2 软RAID(软件)
- 软 RAID 通过操作系统软件来实现,性能远不如硬
RAID , 仅测试效果
8.5 软RAID配置实战
8.5.1 RAID环境准备
由于使用操作系统模拟的软RAID,所以需要在虚拟机上
添加 9 块硬盘,来完成实验;
- 2.创建软 RAID 命令 mdadm ,如果没有使用 yum
install mdadm 安装即可- mdadm 磁盘阵列命令选项
- 创建模式:
- –C :创建阵列;
- -l :指定指定级别;
- -n :指定设备数量;
- -v :指定设备名称;
- -x :指定备用磁盘;
- 管理模式:
- --add
- –remove
- --fail
8.5.2 RAID0实战
- 创建 RAID0 实验环境:
raid种类 | 磁盘 | 热备盘 |
---|---|---|
raid0 | sdb,sdc |
1.创建 raid0
[root@node ~]# mdadm -C -v /dev/md0 -l 0
-n 2 /dev/sdb /dev/sdc
2.查看阵列信息
[root@node ~]# mdadm -Ds
[root@node ~]# mdadm -D /dev/md0
3.格式化磁盘并分区挂载
[root@node ~]# mkfs.xfs /dev/md0
[root@node ~]# mkdir /raid0
[root@node ~]# mount /dev/md0 /raid0/
[root@node ~]# df -h
8.5.3 RAID1实战
- 1)创建 RAID1 ,并添加1个热备盘;
- 2)模拟磁盘故障,看备用盘是否会自动顶替故障盘;
- 3)从 raid1 中移出故障盘;
- 创建 RAID1 实验环境:
raid种类 | 磁盘 | 热备盘 |
---|---|---|
raid1 | sdd,sde | sdf |
- 1.准备 sdb、sdc 两块盘,然后创建阵列为 RAID1 ,
准备 sdd 为备用盘。
#1.创建raid1阵列
[root@node ~]# mdadm -C -v /dev/md1 -l 1 -
n 2 /dev/sdd /dev/sde -x1 /dev/sdf
- 2.格式化磁盘并分区挂载;
[root@node ~]# mkfs.xfs -f /dev/md1
[root@node ~]# mkdir /raid1
[root@node ~]# mount /dev/md1 /mnt/raid1/
3.使用 --fail 模拟 RAID1 中数据盘 /dev/sde 出现故障,观察 /dev/sdf 备用盘能否自动顶替故障盘;
[root@node ~]# mdadm /dev/md1 --fail
/dev/sde
4.检查当然 raid 状态
[root@node ~]# # mdadm -D /dev/md1
Number Major Minor RaidDevice
State
0 8 96 0
active sync /dev/sdd
2 8 128 1
spare rebuilding /dev/sdf # 热备盘已经
在同步数据
1 8 112 -
faulty /dev/sde #故障盘
5.移除损坏的磁盘
[root@node ~]# mdadm /dev/md1 -r /dev/sde
8.5.4 RAID5实战
- 1)使用三块盘创建 RAID5 ,使用 -x 添加热备盘
- 2)模拟损坏一块磁盘,然后查看备用盘是否能顶用
(此时是三块磁盘) - 3)然后在模拟一块磁盘损坏,检查数据是否损坏 (此
时是二块磁盘)
创建 RAID5 实验环境:
raid种类 | 磁盘 | 热设备 |
---|---|---|
raid5 | sdg,sdh,sdi | sdj |
1.创建 raid5 也可以在最后-x添加备用盘
[root@node~]# mdadm -C -v /dev/md5 -l 5 -
n 3 /dev/sdg /dev/sdh /dev/sdi -x1 /dev/sdj
2.格式化磁盘并分区挂载
[root@node ~]# mkfs.xfs -f /dev/md5
[root@node ~]# mkdir /mnt/raid5
[root@node ~]# mount /dev/md5 /raid5/
[root@node ~]# echo "Raid" > /raid5/file
[root@node ~]# mdadm -D /dev/md5
3.模拟一块磁盘损坏,查看 /dev/sdj 备用磁盘是否会顶上
[root@node ~]# mdadm /dev/md5 --fail
/dev/sdg
[root@node ~]# mdadm -D /dev/md5
4.将故障的 /dev/sdg 盘剔除;
[root@node ~]# mdadm /dev/md5 -r /dev/sdg
5.再次模拟一块磁盘损坏,检查数据是否丢失;
[root@oldxu ~]# mdadm /dev/md5 --fail
/dev/sdg
[root@oldxu ~]# mdadm -D /dev/md5