lvm和vdo的管理
1 逻辑卷
1.1 什么是逻辑卷
LVM(Logical Volume Manager)是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上、文件系统之下的一个逻辑层,可提高磁盘分区管理的灵活性。
1.2 lvm的原理
LVM的工作原理是通过将底层的物理硬盘抽象的封装起来,以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们对物理硬盘内容的读取是通过直接访问文件系统实现的,而在LVM对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷(lv)的东西来对其进行底层的磁盘管理操作。
1.3 LVM 的基本组成
符号 | 名称 | 含义 |
---|---|---|
pv | 物理卷 | 被处理过的物理分区 |
pe | 物理扩展区 | 设定存储最小单元 |
vg | 物理卷组 | 捆绑pv到一个组中 |
lv | 逻辑卷 | 分配最终的使用设备 |
建立监控:
watch -n 1 "pvs;echo ======;vgs;echo ======;lvs;echo =====;df -H /data"
2 创建 lvm
- 对/dev/vdb硬盘划分物理分区:
fdisk /dev/vdb
- 更改分区的类型为lvm
(1)创建pv
将硬盘格式化为物理卷PV(Physical Volume),格式化物理卷的过程中LVM是将底层的硬盘划分为了一个一个的PE(Physical Extend)
pvcreate /dev/vdb1
(2) 创建物理卷组vg
可以将卷组抽象化成一个空间池,VG的作用就是用来装PE的,我们可以把一个或者多个PV加到VG当中,因为在第一步操作时就已经将该硬盘划分成了多个PE,所以将多个PV加到VG里面后,VG里面就存放了许许多多来自不同PV中的PE
vgcreate westvg /dev/vdb1
:创建vg,并制定物理卷组的名称,-s指定pe的大小
vgcreate westvg -s 2M /dev/vdb1
(3)创建lv
因为PV、VG是逻辑卷底层的东西,创建好以后是不能够直接使用的,我们要在VG的基础上创建我们最终要使用的LV
- 在逻辑卷组westvg中创建设备westlv:
lvcreate -L 500M -n westlv westvg
-L
:指定设备大小
-n
:指定设备的名字
(4)格式化文件系统及挂载
-
格式化设备为xfs文件系统:
mkfs.xfs /dev/westvg/westlv
-
挂载:
mount /dev/westvg/westlv /data
- 查看挂载信息:
mount
,文件系统的格式为xfs
3 lvm的拉伸
在传统的磁盘管理方式中,如果分区大小不足只能通过加入一块物理硬盘,然后对其进行分区。因为加入的硬盘作为独立的文件系统存在,所以对原有分区并没有影响,如果此时我们需要扩大分区,就只能先将之前的分区先卸载掉,然后将所有的信息转移到新的分区下,最后再将新的分区挂载上去,如果是在企业中,会造成无法估量的损失。而采用LVM的磁盘管理方式,逻辑卷的拉伸操作可以在线进行,不需要卸载掉我们的逻辑卷,可以动态的对磁盘进行管理。
3.1 XFS文件系统的lvm拉伸
(1)vg中的容量能满足lvm的拉伸
模拟实验环境:如果lvm原本的容量500M,vg中的空闲空间为520M,如果将lvm拉伸到700M,此时vg中的容量能满足lvm的拉伸
- 给逻辑卷增加空间并不会影响以前空间的使用,所以无需卸载文件系统,通过执行下面的命令进行拉伸:
lvextend -L 700 /dev/westvg/westlv
: -L拉伸到指定大小
需要注意的是xfs扩容只能在挂载的情况下,命令后面只能跟挂载点,不能直接跟设备名,否则会出现下面的问题
- 同步xfs文件系统到设备大小:
xfs_growfs /data
(2)vg中的余量不能能满足lvm的拉伸
当卷组vg不够用时,需要使用vgextend命令对卷组进行扩容,扩容逻辑卷是先扩大逻辑卷再扩大文件系统
- 给硬盘添加一个分区/dev/vdb2,格式为lvm
- 在pv中增加/dev/vdb2:
pvcreate /dev/vdb2
- 将/dev/vdb2添加到westvg中:
vgextend westvg /dev/vdb2
- 扩大lvm的容量到1200M:
lvextend -L 1200 /dev/westvg/westlv
- 同步xfs文件系统到设备大小:
xfs_growfs /data
3.2 ext文件系统的lvm拉伸
- 格式化为ext4文件系统:
mkfs.ext4 /dev/westvg/westlv
挂载: mount /dev/westvg/westlv /data
查看挂载:mount
(2)vg中的余量不能能满足lvm的拉伸
- 创建pv:
pvcreate /dev/vdb3
- 将新创建的pv添加到westvg中:
vgextend westvg /dev/vdb3
- 将lvm的大小拉伸到1500M:
lvextend -L 1500M /dev/westvg/westlv
- 同步ext文件系统和设备的大小:
resize2fs /dev/westvg/westlv
4 lvm的缩减
扩容逻辑卷我们是先扩大逻辑卷再扩大文件系统,而缩减逻辑卷要先缩小文件系统,再缩减逻辑卷。
逻辑卷扩容可以在线操作但是缩减必须是离线执行,需要先卸载已挂载的逻辑卷:umount /data
实验环境
XFS文件系统只能进行拉伸,ext文件系统既能拉伸也能缩减,所以我们先将对ext4的文件系统进行lvm缩减
-
缩小文件系统前要先对文件系统做个扫描检测,这是为了保护缩减文件系统时不损坏数据:
e2fsck -f /dev/westvg/westlv
-
缩减文件系统:
resize2fs /dev/westvg/westlv 600M
- 将lv缩减到600M:
lvreduce -L 600M /dev/westvg/westlv
- 缩小VG卷组的大小:
vgreduce westvg /vdb3
- 缩小VG卷组也就是把一个PV从卷组中移除
- 删除/dev/vdb的信息pvremove /dev/vdb
5 lvm的移除
5.1 移除含有数据的设备
实验环境:如果/dev/vdb1分区出现了故障,此时可以将该分区中的数据迁移到dev/vdb1中
- 将vdb1的数据移动到vdb2:
pvmove /dev/vdb1 /dev/vdb2
- 将westvg中的/dev/vdb1移除:
vgreduce westvg /dev/vdb1
- 移除/dev/vdb1分区:
pvremove /dev/vdb1
5.2 删除整个lvm
- 解除挂载:
umount /data
- 删除westlv:
lvremove /dev/westvg/westlv
- 删除westvg:
vgremove westvg
- 删除pv:
pvremove /dev/vdb2
6 lvm快照
6.1 建立快照
- 解除挂载:
umount /dev/westosvg/westoslv
- 创建lvm的快照
lvcreate -L 20M -n westoslv-backup -s /dev/westosvg/westoslv
-l 快照大小
-n快照名称
-s快照的母盘路径
6.2 删除快照
删除快照:lvremove /dev/westosvg/westoslv-backup
7虚拟数据优化器
VDO(Virtual Data Optimize虚拟数据优化):通过压缩或删除存储设备上的数据来优化存储空间 。
7.1 vdo的建立
- 创建vdo卷:
vdo create --name westos_vdo --device /dev/vdb
- 格式化设备:
mkfs.xfs -K /dev/mapper/westos_vdo
- 挂载:
mount /dev/mapper/westos_vdo /data
7.2 测试vdo性能
-
命令查看vdo卷的初始统计信息和状态:
vdostats --human-readable
-
实验测试:
复制文件到挂载目录: cp /mnt/images/install.img /data/install.img1
- 测试结果:复制同一个文件到vdo的挂载目录,可以发现只有第一次复制时,/data目录的可用空间占用了0.5G,三次复制该文件到vod的挂载目录/data时,该目录自动保存了三份文件,但是数据/data目录的空闲空间并没有明显变化
7.3 vdo设备的删除
- 解除挂载:
umount /data
- vdo设备的停止:
vdo stop --name westos_vdo
- vdo设备的删除:
vdo remove --name westos_vdo