学习目标
- 查看 LVM 组件
- 实施 LVM 存储
- 创建快照作为备份
pv ##物理卷
被lv命令处理过的物理分区
vg ##物理卷组
被组装到一起的物理卷
pe ##物理扩展
lvm设备的最小单元,lvm是pe的整数倍
lvm ##逻辑卷
直接使用的设备,可以增大缩减并保持原有数据不变
查看 LVM 定义
- 物理分区或磁盘是 LVM 的第一构建块。这些可以是分区、完整磁盘、 RAID 集或 SAN 磁盘物理卷是 LVM 所使用的基础 “物理”存储。这通常是块设备, 例如分区或完整磁盘。设备必须初始化为 LVM 物理卷 , 才能与 LVM 结合使用卷组是存储池 ,由一个或多个物理卷组成物理区块是物理卷中存储的小型数据区块 , 用作 LVM 存储的后端逻辑区块映射到物理区块 , 构成LVM存储的前端。默认情况下 , 每个逻辑区块映射到一个物理区块。启用某些选项将更改 此映射。例如 ,镜像会导致每个逻辑区块映射到两个物理区块逻辑卷是逻辑区块组。逻辑卷可以像硬盘驱动器分区一样使用。
为什么使用逻辑卷
- 逻辑卷和逻辑卷管理有助于更加轻松地管理磁盘空间。如果文件系统需要更多的空间 , 可以将其卷组的可用空间分配给逻辑卷
,并且可以调整文件系统的大小。如果磁盘开始出现错误 , 可以通过卷组将替换磁盘注册为物理卷 , 并且逻辑卷的范围可迁移到新磁盘。
1.lvm建立
fdisk /dev/vdb -->t -->L--->8e--->wq ##添加lvm标签8e的分区
partprobe #手动同步分区表
cat /proc/partitions ##查看
watch -n 1 'pvs;echo ====;vgs;echo ====;lvs;echo ====;df -h /mnt'
#监控pv vg lv
pvcreate /dev/vdb1 ##建立pv 榨汁装入小瓶子
vgcreate vg0 /dev/vdb1 ##lv 倒入大杯子vg0 倒的是vdb1
lvcreate -L 20M -n lv0 vg0 ##lvm 倒出20M 根据需要扩展或缩小大缸
L大小 n名字
mkfs.xfs /dev/vg0/lv0 ##格式化
mount /dev/vg0/lv0 /mnt/ ##挂载
df -h /mnt
示例:
fdisk /dev/vdb -->t -->L--->8e--->wq ##添加lvm标签8e的分区
partprobe #手动同步分区表
cat /proc/partitions #查看
watch -n 1 'pvs;echo ====;vgs;echo ====;lvs;echo ====;df -h /mnt'
[root@client ~]# pvcreate /dev/vdb1 #建立pv
[root@client ~]# vgcreate vg0 /dev/vdb1 #建立vg0
[root@client ~]# lvcreate -L 20M -n lv0 vg0 #建立lvm,观察vg0少了20M,可以根据需要扩大或缩小
[root@client ~]# mkfs.xfs /dev/vg0/lv0 #格式化
[root@client ~]# mount /dev/vg0/lv0 /mnt/ #挂载
[root@client ~]# df -h /mnt/ #查看挂载
注意:h与H 不同
df -h 1M=1024
-H 1M=1000
2.lvm拉伸
lvm支持热拉身(不用卸掉挂载)
1>.当vg中的剩余容量充足时
lvextend -L 80M /dev/vg0/lv0 ##拉身设备 lv分了80M,但是挂载中只有17M,因为没扩容文件系统
示例:给lv0分400M
xfs_growfs /dev/vg0/lv0 ##拉身文件系统
2>.当vg中剩余容量不足时再次建立分区并指定标签8e
首先新建标签为8e的的分区
pvcreate /dev/vdb2 #建立pv
vgextend vg0 /dev/vdb2 ##拉伸物理卷组
lvextend -L 200M /dev/vg0/lv0 ##拉伸设备
xfs_growfs /dev/vg0/lv0 ##拉伸文件系统
示例:当vg中剩余容量不足时
首先建立标签位8e的新分区
[root@client ~]# partprobe
[root@client ~]# cat /proc/partitions
[root@client ~]# pvcreate /dev/vdb2
3.针对ext文件系统的设备的拉伸和缩减
xfs只能拉身不能缩减
ext4 支持拉身缩减(不支持热缩减,需要先卸载)
umount /mnt #先卸载
mkfs.ext4 /dev/vg0/lv0 #格式化系统为ext4
mount /dev/vg0/lv0 /mnt
lvextend -L 250M /dev/vg0/lv0 ##拉伸设备
resize2fs /dev/vg0/lv0 ##拉伸系统
##拉伸
lvextend -L 250M /dev/vg0/lv0 ##拉伸设备
resize2fs /dev/vg0/lv0 ##拉伸系统
##缩减
umount /dev/vg0/lv0
e2fsck -f /dev/vg0/lv0 ##检测文件系统
resize2fs /dev/vg0/lv0 100M ##缩减系统
lvreduce -L 100M /dev/vg0/lv0 ##缩减设备
mount /dev/vg0/lv0 /mnt/
警告:可能会有数据损坏
lvdisplay #查看lv
pvdisplay #查看pv
4.vg缩减
vgreduce vg0 /dev/vdb2 ##把物理卷/dev/vdb1从卷组vg0中删除,vg缩减时,注意不能正在使用
vgextend vg0 /dev/vdb2 ##重新拉伸vg0
5.数据迁移
pvmove /dev1/vdb1 /dev/vdb2 ##把vdb1的数据迁移到vdb2
vgreduce vg0 /dev/vdb1 ##把物理卷/dev/vdb1从卷组vg0中删除
pvremove /dev/vdb1 ##恢复分区 果汁变成水果
5.ivm快照
lvcreate -L 40M -n lv0-backup -s /dev/vg0/lv0 ##快照,大于40M,设备会损坏快照设备lv0-backup,快照/dev/vg0/lv0
mount /dev/vg0/lv0-backup /mnt ##超过40M,再次挂载会报错
dd if=/dev/zero of=/mnt/file bs=1M count=60 ##截取60M
umount /mnt
lvremove /dev/vg0/lv0-backup ##移除lv0-backup
lvcreate -L 40M -n lv0-backup -s /dev/vg0/lv0 ##相当于设备的reset再次挂载可以查看到原设备的数据
快照lv0,起名lv0-backup,并挂载在/mnt上
给/mnt截取大于lv0-backup容量的数据(lv0-backup40M,此处截取60M数据)
监视/mnt 挂载消失
重新截取也会报错,因为lv0-backup已经被损坏
移除lv0-backup
重新快照,相当于reset
做完所有实验后依次还原:
lvremove /dev/vg0/lv0-backup ##移除lv0-backup
lvremove /dev/vg0/lv0 ##移除lv0
vgremove vg0 ##移除vg0
pvremove /dev/vdb2 ##移除vdb2