一、lvm----逻辑卷管理
1.lvm定义
LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制。
逻辑卷管理器(LogicalVolumeManager)本质上是一个虚拟设备驱动,是在内核中块设备和物理设备之间添加的一个新的抽象层次,如图所示。它可以将几块磁盘(物理卷,PhysicalVolume)组合起来形成一个存储池或者卷组(VolumeGroup)。LVM可以每次从卷组中划分出不同大小的逻辑卷(LogicalVolume)创建新的逻辑设备。底层的原始的磁盘不再由内核直接控制,而由LVM层来控制。对于上层应用来说卷组替代了磁盘块成为数据存储的基本单元。LVM管理着所有物理卷的物理盘区,维持着逻辑盘区和物理盘区之间的映射。LVM逻辑设备向上层应用提供了和物理磁盘相同的功能,如文件系统的创建和数据的访问等。但LVM逻辑设备不受物理约束的限制,逻辑卷不必是连续的空间,它可以跨越许多物理卷,并且可以在任何时候任意的调整大小。相比物理磁盘来说,更易于磁盘空间的管理。
- pv :物理卷,被处理过的物理分区
- pe:物理扩展,设定存储最小单元
- vg:物理卷组,捆绑pv到一个组中
- lv:逻辑卷 分配最终的使用设备
2.实验素材
- 建立lvm分区
- 新建目录
- 建立监控
建立lvm分区:
首先建立分区,然后设置标签--8e 即lvm分区
建立成功后记得wq保存! 以及同步分区表!
实验建立监控查看:watch -n 1 "pvs;echo ====;vgs;echo =====;lvs;echo =====;df -h /westosdir"
新建目录: /westosdir/
3. lvm设备建立
(1)创建pv---物理卷
# pvcreate /dev/vdb3
(2)创建vg---物理卷组
-s设定pe大小位2M
# vgcreate -s 2M westos_vg /dev/vdb3
(3)创建lv---逻辑卷
-L指定大小 -n指定名称
# lvcreate -L 100M -n westos_lv westos_vg
(4)格式化--创建文件系统
# mkfs.xfs /dev/westos_vg/westos_lv
(5)挂载设备至目录
# mount /dev/westos_vg/westos_lv /westosdir/
监控界面如下:
4. lvm拉伸
(1)vg容量充足
vg容量为1G.容量充足直接拉伸!
# lvextend -L 200M /dev/westos_vg/westos_lv:拉伸到200M
# xfs_growfs /dev/westos_vg/westos_lv:拉伸文件系统,否则无法使用
(2)vg容量不足
- pvcreate /dev/vdb5:创建新pv
- vgextend westos_vg /dev/vdb5:扩展vg容量
- lvextend -L 1500M /dev/westos_vg/westos_lv :拉伸lvm
- xfs_growfs /dev/westos_vg/westos_lv:格式化文件系统
想要拉伸lvm为1.5G,发现容量不够
此时进入磁盘,寻找lvm分区来创建新pv
扩展原来的vg容量,然后进行lvm拉伸,格式化文件系统
最后查看监控,该设备容量拉伸成功!
5.lvm缩减
- 卸载设备:umount /westosdir
- 扫描文件大小,看看缩减大小是否合适:e2fsck -f /dev/westos_vg/westos_lv
- 缩减文件系统: resize2fs /dev/westos_vg/westos_lv 500M
- 缩减lvm:lvreduce -L 500M /dev/westos_vg/westos_lv
- 重新挂载设备:mount /dev/westos_vg/westos_lv /westosdir/
(1)前提
缩减lvm设备的前提是:文件系统是ext或者ext4,xfs文件系统不能缩减!
由于之前实验我们使用的是xfs文件系统,因此本节首先给lvm设备更换文件系统!
# mkfs.ext4 /dev/westos_vg/westos_lv:设定文件系统为ext4
(2)卸载设备+扫描
扫描设备的文件大小,防止lvm缩减太小不可用!
(3)缩减文件系统+lvm,重新挂载设备
挂载成功后查看,lvm设备已经成功缩减到500M
6. vg缩减
- vgreduce westos_vg /dev/vdb3 :把分区3从该vg中缩减
- pvmove /dev/vdb3 :删除该pv
假如想缩减3,首先将3的东西转移到5
pvmove /dev/vdb3 /dev/vdb5
然后直接将pv3从vg中减去
最后彻底删除pv3
7.lvm快照
LVM 机制还提供了对 LV 做快照的功能,也就是说可以给⽂件系统做⼀个备份,这也是设计 LVM 快照的主要⽬的。快照可以用于记录系统当前状态,以便后续进行回滚操作回到此状态,或将这些状态用于系统备份。这⽐传统的备份技术的效率要⾼很多。创建快照时不⽤停⽌服务,就可以对数据进⾏备份。
- 创建快照:快照名:westos_lvbackup 原始:/dev/westos_vg/westos_lv
- 重新挂载即可生效
-
[root@westosa ~]# lvcreate -L 50M -n westos_lvbackup -s /dev/westos_vg/westos_lv Logical volume "westos_lvbackup" created. [root@westosa ~]# mount /dev/westos_vg/westos_lvbackup /westosdir/
=================================实验==================================
接上节,建立的lvm设备挂载在/westosdir目录上!
此时在目录中建立10个重要的文件!由于设备挂载在该目录上,因此该设备也有该数据!
创建该设备的快照,可记录下此时的系统状态!便于备份!
将快照挂载在该目录。
[root@westosa ~]# umount /westosdir
[root@westosa ~]# lvcreate -L 50M -n westos_lvbackup -s /dev/westos_vg/westos_lv Logical volume "westos_lvbackup" created.
[root@westosa ~]# mount /dev/westos_vg/westos_lvbackup /westosdir/
[root@westosa ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 391196 0 391196 0% /dev
tmpfs 419040 0 419040 0% /dev/shm
tmpfs 419040 6872 412168 2% /run
tmpfs 419040 0 419040 0% /sys/fs/cgroup
/dev/vda3 9450496 4344352 5106144 46% /
/dev/vda1 506528 218856 287672 44% /boot
tmpfs 83808 1180 82628 2% /run/user/42
tmpfs 83808 28 83780 1% /run/user/0
/dev/mapper/westos_vg-westos_lvbackup 96928 6068 90860 7% /westosdir
[root@westosa ~]# ls /westosdir/
westosfile1 westosfile2 westosfile4 westosfile6 westosfile8
westosfile10 westosfile3 westosfile5 westosfile7 westosfile9
如果不小心删除了10个重要的文件,怎么办?
因为有快照的存在,可以恢复!
首先卸载设备,删除快照,重新建立快照,再次挂载至该目录!
发现文件仍然存在!
[root@westosa ~]# umount /westosdir
[root@westosa ~]# lvremove /dev/westos_vg/westos_lvbackup
Do you really want to remove active logical volume westos_vg/westos_lvbackup? [y/n]: yLogical volume "westos_lvbackup" successfully removed
[root@westosa ~]# lvcreate -L 50M -n westos_lvbackup -s /dev/westos_vg/westos_lvLogical volume "westos_lvbackup" created.
[root@westosa ~]# mount /dev/westos_vg/westos_lvbackup /westosdir/
[root@westosa ~]# ls /westosdir/
westosfile1 westosfile2 westosfile4 westosfile6 westosfile8
westosfile10 westosfile3 westosfile5 westosfile7 westosfile9
8. lvm设备删除
- 卸载设备
- 删除快照
- 删除lv设备
- 删除vg
- 删除pv
[root@westosa ~]# umount /westosdir
[root@westosa ~]# lvremove /dev/westos_vg/westos_lvbackup
Do you really want to remove active logical volume westos_vg/westos_lvbackup? [y/n]: yLogical volume "westos_lvbackup" successfully removed
[root@westosa ~]# lvremove /dev/westos_vg/westos_lv
Do you really want to remove active logical volume westos_vg/westos_lv? [y/n]: yLogical volume "westos_lv" successfully removed
[root@westosa ~]# vgremove westos_vg Volume group "westos_vg" successfully removed
[root@westosa ~]# pvremove /dev/vdb3 Labels on physical volume "/dev/vdb3" successfully wiped.
删除成功!查看监控!
二、vdo(Virtual Data Optimize)----虚拟数据优化器
VDO是一个内核模块,目的是通过压缩和优化重复数据来节省磁盘空间,从而降低数据中心的成本。原理主要是压缩和优化重复数据,优化重复数据就是硬盘里拷贝来相同的数据,以前要占多份空间,现在只需要1份空间就可以了。
1. vdo的创建及使用
-
前提:vdo必须要用没使用过的硬盘
ps:在创建新硬盘时空间不足,在虚拟机管理界面把其他硬盘删除也不行!!
解决方法:进入主机的硬盘存放地址,删除不用的硬盘!!
983 cd /var/lib/libvirt/images/984 ls985 rm -fr aa.qcow2 qq.qcow2 westosa-2.qcow2 westosa-4.qcow2 bb.qcow2 westosa-1.qcow2 westosa-3.qcow2 westosa-5.qcow2 westos.qcow2
删除后添加新硬盘,发现空间足够了!
- vdo的安装
- vdo的创建: vdo create --name=westosvdo --device=/dev/vdb
[root@westosa ~]# dnf install vdo -y
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
AppStream 169 MB/s | 5.8 MB 00:00
BaseOS 144 MB/s | 2.3 MB 00:00
Package vdo-6.2.2.117-13.el8.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[root@westosa ~]# vdo create --name=westosvdo --device=/dev/vdb
Creating VDO westosvdo
vdo: ERROR - Not enough available memory in system for index requirement of 256M
vdo的创建出现问题,提示内存不足!!!
只需要增加虚拟机的物理内存即可!
增加后再次创建vdo!成功!
[root@westosa ~]# dnf install vdo -y
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Last metadata expiration check: 0:05:08 ago on Sun 30 Jul 2023 02:56:24 PM CST.
Package vdo-6.2.2.117-13.el8.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[root@westosa ~]# vdo create --name=westosvdo --device=/dev/vdb
Creating VDO westosvdoLogical blocks defaulted to 1569686 blocks.The VDO volume can address 6 GB in 3 data slabs, each 2 GB.It can grow to address at most 16 TB of physical storage in 8192 slabs.If a larger maximum size might be needed, use bigger slabs.
Starting VDO westosvdo
Starting compression on VDO westosvdo
VDO instance 0 volume is ready at /dev/mapper/westosvdo
- 查看vdo的功能
数据压缩和重复检测功能均开启!
[root@westosa ~]# vdo status --name=westosvdo
VDO status:Date: '2023-07-30 15:06:08+08:00'Node: westosa.org
Kernel module:Loaded: trueName: kvdoVersion information:kvdo version: 6.2.2.117
Configuration:File: /etc/vdoconf.ymlLast modified: '2023-07-30 15:01:44'
VDOs:westosvdo:Acknowledgement threads: 1Activate: enabledBio rotation interval: 64Bio submission threads: 4Block map cache size: 128MBlock map period: 16380Block size: 4096CPU-work threads: 2Compression: enabledConfigured write policy: autoDeduplication: enabledDevice mapper status: 0 12557488 vdo /dev/vdb normal - online online 1049638 2621440Emulate 512 byte: disabledHash zone threads: 1
- vdo格式化:文件系统的建立
- 挂载vdo设备,可以使用拉!
[root@westosa ~]# mkfs.xfs /dev/mapper/westosvdo
meta-data=/dev/mapper/westosvdo isize=512 agcount=4, agsize=392422 blks= sectsz=4096 attr=2, projid32bit=1= crc=1 finobt=1, sparse=1, rmapbt=0= reflink=1
data = bsize=4096 blocks=1569686, imaxpct=25= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@westosa ~]# mkdir /westosdir
[root@westosa ~]# mount /dev/mapper/westosvdo /westosdir/
[root@westosa ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 906060 0 906060 0% /dev
tmpfs 935132 0 935132 0% /dev/shm
tmpfs 935132 9784 925348 2% /run
tmpfs 935132 0 935132 0% /sys/fs/cgroup
/dev/mapper/rhel-root 8374272 4331900 4042372 52% /
/dev/vda1 1038336 234160 804176 23% /boot
tmpfs 187024 1180 185844 1% /run/user/42
tmpfs 187024 24 187000 1% /run/user/0
/dev/mapper/westosvdo 6268504 76808 6191696 2% /westosdir
2.vdo的优化重复数据功能测试
- 建立监控:查看测试结果
[root@westosa ~]# vdostats --human-readable
Device Size Used Available Use% Space saving%
/dev/mapper/westosvdo 10.0G 4.0G 6.0G 40% 98%
[root@westosa ~]# watch -n 1 vdostats --human-readable
监控界面如下:
- 实验素材:将主机大小为797M的截图发给虚拟机的/iso目录
- 重复数据检测:将/iso的数据复制2次到/westsodir目录,发现之占用了一份空间!
因为此时vdo设备挂载在该目录上!
[root@westosa westosdir]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 906060 0 906060 0% /dev
tmpfs 935132 0 935132 0% /dev/shm
tmpfs 935132 9784 925348 2% /run
tmpfs 935132 0 935132 0% /sys/fs/cgroup
/dev/mapper/rhel-root 8374272 5149108 3225164 62% /
/dev/vda1 1038336 234160 804176 23% /boot
tmpfs 187024 1180 185844 1% /run/user/42
tmpfs 187024 24 187000 1% /run/user/0
/dev/mapper/westosvdo 6268504 76808 6191696 2% /westosdir
[root@westosa westosdir]# cp -r /iso/ /westosdir/
[root@westosa westosdir]# ls
iso
[root@westosa westosdir]# cp -r /iso/ /westosdir/iso-1
[root@westosa westosdir]# ls
iso iso-1
[root@westosa westosdir]# du -h *
797M iso
797M iso-1
查看监控,两份内容一样的数据只占用了一份空间!!这就是vdo的重复数据优化功能!!
3. vdo设备开机自动挂载
- 编辑/etc/fstab文件,注意,需要添加x-systemd.requires=vdo.service
利用man vdo命令查看模板
重启虚拟机后,该设备自动挂载!!
5. 删除vdo设备
- 卸载设备
- 停止设备,ps:停止后还可以打开
- 删除设备
[root@westosa ~]# umount /westosdir
[root@westosa ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 906232 0 906232 0% /dev
tmpfs 935300 0 935300 0% /dev/shm
tmpfs 935300 9428 925872 2% /run
tmpfs 935300 0 935300 0% /sys/fs/cgroup
/dev/mapper/rhel-root 8374272 5149588 3224684 62% /
/dev/vda1 1038336 234460 803876 23% /boot
tmpfs 187060 1180 185880 1% /run/user/42
tmpfs 187060 4 187056 1% /run/user/0
[root@westosa ~]# vdo stop --name westosvdo
Stopping VDO westosvdo
[root@westosa ~]# vdo remove --name westosvdo
Removing VDO westosvdo
Stopping VDO westosvdo
删除设备后,该vdo设备删除成功!
- 打开设备
[root@westosa ~]# vdo stop --name westosvdo
Stopping VDO westosvdo
[root@westosa ~]# vdo start --name westosvdo
Starting VDO westosvdo
Starting compression on VDO westosvdo
VDO instance 1 volume is ready at /dev/mapper/westosvdo
[root@westosa ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 906232 0 906232 0% /dev
tmpfs 935300 0 935300 0% /dev/shm
tmpfs 935300 9432 925868 2% /run
tmpfs 935300 0 935300 0% /sys/fs/cgroup
/dev/mapper/rhel-root 8374272 5149608 3224664 62% /
/dev/vda1 1038336 234460 803876 23% /boot
tmpfs 187060 1180 185880 1% /run/user/42
tmpfs 187060 4 187056 1% /run/user/0
/dev/mapper/westosvdo 6268504 1711180 4557324 28% /westosdir
注意:打开设备后,该设备自动挂载!记得删除/etc/fstab里的自动挂载语句!