Linux高级存储管理
逻辑卷
在业务过程中,如果使用单一物理硬盘进行业务内容存储,可能会遇到业务上线一段时间后硬盘被占满的问题.这时你无论是添加新的硬盘还是对之前的硬盘进行清理都显得不那么方便.如果能用一块逻辑上的硬盘作为存储,硬盘本身可以动态扩容而不影响代码实现,是否可以呢.
这就是逻辑卷的出现原因了.
逻辑卷的实现需要以下内容依次层级来实现.
缩写 | 含义 | 简单描述 |
---|---|---|
pv | 物理卷 | 被处理过的物理分区的统称 |
pe | 物理扩展 | 设定存储最小单元 |
vg | 物理卷组 | 捆绑所有物理卷到一个组中 |
lv | 逻辑卷 | 实际分配终止使用的设备 |
最终挂载在系统上的是逻辑卷,系统讲逻辑卷整个视为一块设备来进行存储.逻辑盘的空间来自物理卷组,而物理卷组由一个个处理过的物理卷捆绑在一起组成.当空间不足时,将新的物理卷处理后放入物理卷组中后进行扩容.系统对这一层级实现并不干预,表现为逻辑卷扩大了.
实验准备
##监控命令
watch -n 1 "pvs;echo ====;vgs;echo ====;lvs;echo ====;df -h /Data"
用来监控系统中逻辑卷相关内容的实时变化.
并查看挂载点的具体情况.
具体步骤
- 在虚拟机中添加新的硬盘
- 对硬盘分区并选择逻辑卷需要的LVM格式
- 创建物理卷组并设定存储单元大小,将处理过的物理卷添加到物理卷组中
- 使用物理卷组划分逻辑卷
- 格式化逻辑卷并设置文件系统
- 挂载逻辑卷到系统中,检查是否可以正常使用.
##具体步骤
pvcreate /dev/vdb1
pvcreate /dev/vdb2
vgcreate -s 2M test_vg /dev/vdb1
lvcreate -L 500M -n test_lv0 test_vg
mkfs.xfs /dev/test_vg/test_lv0
mount /dev/test_vg/test_lv0 /Data/
##d对vdb设备上的vda1,vda2分区创建pv
##将vda1添加到新建立的test_vg物理卷组中,并设置物理扩展为2M
##建立500M的逻辑卷test_lv0
##为逻辑卷安装文件系统并挂载到设备中
需要特别提出的是,不同文件类型对于拉伸缩减的支持不同.
- XFS文件系统只能进行拉伸(扩大大小)而不支持缩减.
- EXT4文件系统可以进行拉伸也可以进行缩减,但是缩减不能在线进行.如果需要缩减必须先对挂载点进行卸载.
- 在拉伸缩减方面,对于逻辑卷的的命令是相同的,但不同的两种文件系统的拉伸缩减命令有所不同.
- 当进行拉伸时,需要先拉伸逻辑卷的大小后再调整文件系统的大小;而进行缩减时则相反,需要先对文件系统的大小进行处理.
##为逻辑卷重新建立逻辑分区为EXT4用于拉伸和缩减.
mkfs.ext4 /dev/test_vg/test_lv0
mount /dev/test_vg/test_lv0 /Data/
pvcreate /dev/vdb2
vgextend test_vg /dev/vdb2
##对逻辑卷进行缩减/拉伸的操作
lvextend -L 1024M /dev/test_vg/test_lv0
lvreduce -L 800M /dev/test_vg/test_lv0
##对EXT4文件系统进行拉伸/缩减的操作
##首先需要卸载设备才能缩减
umount /Data
e2fsck -f /dev/test_vg/test_lv0
resize2fs /dev/test_vg/test_lv0 500M
mount /dev/test_vg/test_lv0 /Data/
##XFS文件系统的拉伸操作
xfs_growfs /TestDir
##将物理卷vdb1中的数据转移到vdb2中
##从物理卷组test_vg中移除vdb1卷
##删除逻辑卷
##删除物理卷组test_vg
##卸载vdb1物理卷
pvmove /dev/vdb1 /dev/vdb2
vgreduce test_vg /dev/vdb1
lvremove /dev/test_vg/test_lv0
vgremove test_vg
pvremove /dev/vdb1
逻辑卷的快照
逻辑卷挂载后与物理设备并无二异,对其中文件进行的增删改查依旧会反映在物理设备池中.如果不希望他人操作或意外导致文件损坏或丢失,可以使用快照功能对逻辑卷进行快照,并将快照挂载到系统中使用.
这样,操作只会影响快照而不会影响母盘.
如果快照中出现操作失误,只需要卸载快照并删除,重新对母盘快照即可恢复初始状态.
##创建大小为200M的对于test_lv0的快照test_lv0_backup
lvcreate -L 200M -n test_lv0_backup -s /dev/test_vg/test_lv0
##卸载挂载在Data下的母盘并挂载快照进行替换
umount /Data
mount /dev/test_vg/test_lv0_backup /Data/
##当快照中出现问题时,如何进行数据重置
##卸载出现问题的快照并删除,重新对母盘进行快照并挂载
umount /Data
lvremove /dev/test_vg/test_lv0_backup
lvcreate -L 200M -n test_lv0_backup -s /dev/test_vg/test_lv0
mount /dev/test_vg/test_lv0_backup /Data/
VDO虚拟数据优化器
VDO(Virtual Data Optimize),中文名虚拟数据优化器,能够实现以下两种功能.
- kvdo,数据压缩,将大文件存入建立了优化器的设备中时占用的空间会变小.
- uds,重复数据优化,当内容相同的输入存入建立了优化器的设备中时,并不会额外占用空间.
##vdo的建立
dnf install vdo -y
vdo create --name=test_vdo1 --device=/dev/sdb
vdb status --name=test_vdo1 | less
##对设备sdb建立vdo并查看状态信息
##使用vdo设备
mkfs.xfs -K /dev/mapper/test_vdo1
mkdir /TestDir
mount /dev/mapper/test_vdo1 /TestDir
##为vdo设备分配文件系统并挂载到指定目录
##测试vdo的特性
============
##用于查看vdo设备的统计信息
vdostats --human-readable
##截取生成500M的大文件用于测试vdo特性
dd if=/dev/zero of=/mnt/bigfile bs=1M count=500
du -sh /mnt/bigfile
##复制大文件到vdo设备中,可以看到占用空间比原本要小
cp /mnt/bigfile /Testir
##复制内容相同的文件到vdo设备中的不同位置,并不会额外占用多份空间
cp /usr/lib64/firebox/libxul.so /TestDir
cp /usr/lib64/firebox/libxul.so /TestDir/Dir1
cp /usr/lib64/firebox/libxul.so /TestDir/Dir2
cp /usr/lib64/firebox/libxul.so /TestDir/Dir3
============
##vdo设备的删除
vdo remove --name=westos_vdo1
VDO设备同样作为一块设备在系统中使用,因此一样可以添加开机自动挂载.
##vdo设备的开机自动挂载
vim /etc/fstab
/dev/mapper/test_vdo1 /Data xfs defaults,x-systemd,requires=vdo.service 0 0
##可以看出添加方式与一般的开机自动挂载并无太大区别,主要差异在参数的选择上.