LVM
是Logical Volument Manager(逻辑卷管理)的简写,将若干个磁盘或者磁盘分区连接为一个整块的卷组,形成一个存储池。管理员可以在卷组上任意创建逻辑卷,并进一步在逻辑卷上创建文件系统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配。
功能:
将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用时,可以继续将其他的硬盘的分区加入其中,这样可以实现磁盘的动态管理,相当于普通的磁盘分区有很大的灵活性
优点:
与传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储。
使系统管理员可以更方便的为应用与用户分配存储空间。
在LVM管理下的存储卷可以按需要随时改变大小与移除
允许按用户组对存储卷进行管理
允许管理员用更直观的名称代替物理磁盘名来标识存储卷
lvm模型结构
由四个磁盘分区可以组冲一个很大的空间,然后在这些空间上划分一些逻辑区,当一个逻辑分区的空间不够用的时候,可以从剩余空间上划分一些空间给不够用的分区使用
LVM基本术语
物理存储介质(The physical media)
这里指系统的存储设备:硬盘,如:/dev/sda1、/dev/sda2等等,是存储系统最低层的存储单元
物理卷(physic volume)
就是指硬盘分区或从逻辑上与磁盘分区具有相同功能的设备,是LVM的基本存储逻辑块,但和基本的物理存储设备(如分区、磁盘等)比较,却包含有与LVM想关的管理参数
卷组(logical Group)
卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个LVM分区(逻辑卷),卷组由多个物理卷组成
逻辑卷(logical volume)
类似于非LVM系统中的硬盘分区,在逻辑卷上可以建立文件系统
PE(physical extent)
每个物理卷被划分为成PE的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可以改变的,默认4M
LE(logical extend)
逻辑卷也被划分为被称为LE的可被寻址的基本单元。在同一个卷组中,LE的大小和PE相同,并且一一对应
常用命令
创建
pvcreate(创建物理卷)、vgcreate(创建卷组)、lvcreate(创建逻辑卷)
删除
pvremove、vgremove、lvremove
扫描列表
pvscan、lgscan、lvscan
显示属性
pvdisplay、vgdisplay、lvdisplay
显示相关属性
pvs、vgs、lvs
扩展
vgextend、lvextend
缩减
vgreduce、lvreduce
分层存储(stratis)
近年来出现了新-代的存储管理解决方案,称为卷管理文件系统,它可以在创建文件系统及调整其大小时以动态、透明的方式来管理卷层。不过,尽管这些文件系统的社区开发已经持续了很多年,但仍未达到成为红帽企业Linux主要本地存储所震的功能支持和稳定性水平。
在RHEL8中,红帽推出了Stratis存储管理解决方案。与其他存储项目的尝试-样,Stratis的开发并不是从零开始,而是使用现有的RHEL存储组件。Stratis 以管理物理存储设备池的服务形式运行,并透明地为所创建的文件系统创建和管理卷。由于Stratis 使用现有的存储驱动程序和工具,因此Stratis也支持当前在LVM、XFS和设备映射器中使用的所有高级存储功能。
在卷管理文件系统中,文件系统借助–个名为精简配置的概念内置于磁盘设备的共享池中。Stratis文件系统没有固定大小,也不再预分配未使用的块空间。尽管文件系统仍构建在隐藏的LVM卷上,但Stratis会为您管理基础卷,并可在需要时对其进行扩展。文件系统的“使用中”大小可视作所含文件占用的实际块数量。文件系统的可用空间就是它所驻留的池设备中仍未使用的空间量。多个文件系统可以驻留在同—磁盘设备池中,共享可用空间,但文件系统也可以保留池空间,以便在需要时保证可用性。
Stratis使用存储的元数据来识别所管理的池、卷和文件系统。因此,绝不应该对Stratis创建的文件系统进行手动重新格式化或重新配置;只应使用Stratis工具和命令对它们进行管理。手动配置Stratis文件系统可能会导致i该元数据丢失,并阻止Stratis识别它已创建的文件系统。
您可以使用不同组的块设备来创建多个池。在每个池中,您可以创建一个或多个文件系统。目前,每个池最多可以创建2^24个文件系统
stratis元素
是一个卷管理文件系统volume-managing filesystem(VMF)
Stratis 是本地存储管理器
优点
管理快照和精简配置根据需要自动增加文件系统的大小维护文件系统Stratis三个概念
blockdevs、池、文件系统
SWAP
swap称之为交换分区,相当于Windows下的虚拟内存。
作用
当我们系统中的内存不够用的时候,可以通过SWAP来增加内存。安装Linux系统的时候,必须的两个分区一个是根,一个是SWAP。
SWAP分区的创建
方法一、利用磁盘的剩余空间
前提就是磁盘还有剩余空间没有划分,或者是已经划分的分区没有使用。这个时候才能使用此方法。
实现步骤:
新建分区–修改id号为82–格式化–启用swap分区–写入fstab文件然后重启虚拟机
方法二:利用分区的剩余空间
如案例的第一题就是采用此方法
案例
1. 添加一个 swap 分区
在您的系统中添加一个新的 swap 分区,并满足以下要求:
swap 分区容量为 512 MiB
当您的系统启动时,swap 分区应该可以开机自动挂载
不要移除或者修改其他已经存在于您的系统中的 swap 分区
新建文件
[root@redhat ~]# dd if=/dev/zero of=/swaptest bs=1M count=512512+0 records in512+0 records out536870912 bytes (537 MB, 512 MiB) copied, 21.9238 s, 24.5 MB/s
格式化文件
[root@redhat ~]# mkswap /swaptestmkswap: /swaptest: insecure permissions 0644, 0600 suggested.Setting up swapspace version 1, size = 512 MiB (536866816 bytes)no label, UUID=e039779d-17a9-4509-8bfa-6b31565d87b5
激活swap
[root@redhat ~]# swapon /swaptestswapon: /swaptest: insecure permissions 0644, 0600 suggested.[root@redhat ~]# swapon -sFilenameTypeSizeUsedPriority/dev/dm-1partition2129916262912-2/swaptestfile 524284
写入fstab文件然后重启
2. 创建一个逻辑卷
请按下列要求创建一个新的逻辑卷:
查看是否有lvm
[root@redhat ~]# rpm -qa | grep lvm
将一块硬盘进行多分区,然后对分区进行集合
如果用parted进行分区时出现下面的错误
将磁盘标签类型dos更为为gpt,更改成功
[root@redhat ~]# parted /dev/sda mklabel gpt Information: You may need to update /etc/fstab.
添加四个大小为2G的分区
[root@redhat ~]# parted /dev/sda mklabel gpt Information: You may need to update /etc/fstab.[root@redhat ~]# parted /dev/sda mkpart p1 xfs 0% 2G Information: You may need to update /etc/fstab.[root@redhat ~]# parted /dev/sda mkpart p2 xfs 2G 4G Information: You may need to update /etc/fstab.[root@redhat ~]# parted /dev/sda mkpart p3 xfs 4G 6GInformation: You may need to update /etc/fstab.[root@redhat ~]# parted /dev/sda mkpart p4 xfs 6G 8GInformation: You may need to update /etc/fstab.
创建分区成功
[root@redhat ~]# lsblk NAMEMAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda 8:0 0 10G 0 disk ├─sda18:1 0 1.9G 0 part ├─sda28:2 0 1.9G 0 part ├─sda38:3 0 1.9G 0 part └─sda48:4 0 1.9G 0 part
创建一个名为 datastore 的卷组,卷组的大小为4G
添加物理卷
[root@redhat ~]# pvcreate /dev/sda{1,2,3,4}Physical volume "/dev/sda1" successfully created.Physical volume "/dev/sda2" successfully created.Physical volume "/dev/sda3" successfully created.Physical volume "/dev/sda4" successfully created.
[root@redhat ~]# pvsPV VG Fmt Attr PSize PFree/dev/nvme0n1p2 rhel lvm2 a-- <29.00g 0 /dev/sda1 lvm2 --- 1.86g 1.86g/dev/sda2 lvm2 --- 1.86g 1.86g/dev/sda3 lvm2 --- 1.86g 1.86g/dev/sda4 lvm2 --- 1.86g 1.86g
创建卷组,因为每个大小为2G所以添加两个刚好
[root@redhat ~]# vgcreate datastore /dev/sda1 /dev/sda2 Volume group "datastore" successfully created
查看卷组
[root@redhat ~]# vgsVG #PV #LV #SN Attr VSize VFree datastore 2 0 0 wz--n- <3.72g <3.72g
逻辑卷的名字为 database ,所属卷组为 datastore,该逻辑卷大小为3G
[root@redhat ~]# lvcreate -n database -L 3G datastore Logical volume "database" created.
查看
[root@redhat ~]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertdatabase datastore -wi-a----- 3.00g
将新建的逻辑卷格式化为 xfs 文件系统,要求系统启动时,该逻辑卷能被开机自动挂载到 /database
格式化
[root@redhat ~]# mkfs.xfs /dev/datastore/databasemeta-data=/dev/datastore/database isize=512 agcount=4, agsize=196608 blks= sectsz=512 attr=2, projid32bit=1= crc=1 finobt=1, sparse=1, rmapbt=0= reflink=1data= bsize=4096 blocks=786432, imaxpct=25= sunit=0swidth=0 blksnaming =version 2 bsize=4096 ascii-ci=0, ftype=1log=internal log bsize=4096 blocks=2560, version=2= sectsz=512 sunit=0 blks, lazy-count=1realtime =none extsz=4096 blocks=0, rtextents=0
新建挂载点目录
[root@redhat ~]# mkdir /database
进入fstab实现开机自动挂载
[root@redhat ~]# vim /etc/fstab//添加如下信息/dev/datastore/database/databasexfsdefaults 0 0
3. 扩大卷组扩展上题database逻辑卷的大小为5G。
注意我之前得卷组一共只有4G所以,所以逻辑卷扩不了5G,出现下面情况
所以扩大卷组
[root@redhat ~]# vgextend datastore /dev/sda3 /dev/sda4Volume group "datastore" successfully extended
然后再扩大逻辑卷
[root@redhat ~]# lvextend -L 5G /dev/datastore/databaseSize of logical volume datastore/database changed from 3.00 GiB (768 extents) to 5.00 GiB (1280 extents).Logical volume datastore/database successfully resized.
查看
[root@redhat ~]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertdatabase datastore -wi-a----- 5.00g
对扩大的部分进行格式化
[root@redhat ~]# xfs_growfs /databasemeta-data=/dev/mapper/datastore-database isize=512 agcount=4, agsize=327680 blks= sectsz=512 attr=2, projid32bit=1= crc=1 finobt=1, sparse=1, rmapbt=0= reflink=1data= bsize=4096 blocks=1310720, imaxpct=25= sunit=0swidth=0 blksnaming =version 2 bsize=4096 ascii-ci=0, ftype=1log=internal log bsize=4096 blocks=2560, version=2= sectsz=512 sunit=0 blks, lazy-count=1realtime =none extsz=4096 blocks=0, rtextents=0
5. 删除所有逻辑卷恢复到系统最初状
取消挂载
[root@redhat ~]# umount /dev/datastore/database
删除逻辑卷
[root@redhat ~]# lvremove databaseVolume group "database" not foundCannot process volume group database[root@redhat ~]# lvremove /dev/datastore/databaseDo you really want to remove active logical volume datastore/database? [y/n]: yLogical volume "database" successfully removed
删除卷组
[root@redhat ~]# vgremove datastoreVolume group "datastore" successfully removed
删除物理卷
[root@redhat ~]# pvremove /dev/sda{1,2,3,4} Labels on physical volume "/dev/sda1" successfully wiped.Labels on physical volume "/dev/sda2" successfully wiped.Labels on physical volume "/dev/sda3" successfully wiped.Labels on physical volume "/dev/sda4" successfully wiped.
查看
6. 添加一块硬盘大小为6G,按3:1的方式创建vdo卷,测试是否对该卷删除重复数据
[root@redhat ~]# lsblksde 8:64 0 6G 0 disk
安装
[root@redhat ~]# mount /dev/sr0 /mnt //挂载mount: /mnt: /dev/sr0 already mounted on /run/media/root/RHEL-8-3-0-BaseOS-x86_64.
[root@redhat ~]# yum install vdo kmod-kvdo -y
格式化
[root@redhat ~]# mkfs.xfs /dev/mapper/vdo1 meta-data=/dev/mapper/vdo1 isize=512 agcount=4, agsize=1179648 blks= sectsz=4096 attr=2, projid32bit=1= crc=1 finobt=1, sparse=1, rmapbt=0= reflink=1data= bsize=4096 blocks=4718592, imaxpct=25= sunit=0swidth=0 blksnaming =version 2 bsize=4096 ascii-ci=0, ftype=1log=internal log bsize=4096 blocks=2560, version=2= sectsz=4096 sunit=1 blks, lazy-count=1realtime =none extsz=4096 blocks=0, rtextents=0
挂载
[root@redhat ~]# mkdir /vdo[root@redhat ~]# mount /dev/mapper/vdo1 /vdo
查看
[root@redhat ~]# vdostats --human-readable DeviceSizeUsed Available Use% Space saving%/dev/mapper/vdo16.0G4.0G2.0G 66% 98%
写入重复数据来测试一下vdo1能不能起作用
[root@redhat ~]# ll -h /mnt/images/install.img -r--r--r--. 1 root root 583M Oct 9 /mnt/images/install.img[root@redhat ~]# cp /mnt/images/install.img /vdo/[root@redhat ~]# cp /mnt/images/install.img /vdo/im[root@redhat ~]# cp /mnt/images/install.img /vdo/ima//查看[root@redhat ~]# vdostats --human-readable DeviceSizeUsed Available Use% Space saving%/dev/mapper/vdo16.0G4.8G1.2G 80% 52%
7. 通过分层存储创建文件系统,确保文件系统可以正常存放文件
挂载
[root@redhat ~]# mount /dev/sr0 /mnt mount: /mnt: /dev/sr0 already mounted on /run/media/root/RHEL-8-3-0-BaseOS-x86_64.
安装Stratis守护进程和Stratis命令行工具
[root@redhat ~]# yum install stratisd stratis-cli -yInstalled products updated.Upgraded:clevis-15-1.el8.x86_64clevis-luks-15-1.el8.x86_64 Installed:python3-dbus-client-gen-0.4-1.el8.noarch python3-dbus-python-client-gen-0.7-3.el8.noarch python3-dbus-signature-pyparsing-0.03-2.el8.noarch python3-into-dbus-python-0.06-2.el8.noarch python3-justbases-0.14-4.el8.noarch python3-justbytes-0.14-2.el8.noarch python3-psutil-5.4.3-10.el8.x86_64python3-pyparsing-2.1.10-7.el8.noarch python3-semantic_version-2.6.0-5.el8.noarchstratis-cli-2.3.0-3.el8.noarch stratisd-2.3.0-2.el8.x86_64 Complete!
重启
[root@redhat ~]# systemctl restart stratised
将两块设备添加入池
[root@redhat ~]# stratis pool create pool1 /dev/sdb /dev/sdc[root@redhat ~]# stratis blockdev list //查看池设备Pool Name Device Node Physical Size Tierpool1 /dev/sdb 10 GiB Datapool1 /dev/sdc 10 GiB Data
创建文件系统
[root@redhat ~]# stratis filesystem create pool1 fs1[root@redhat ~]# stratis filesystem list //查看池文件系统Pool Name Name UsedCreated Device UUID pool1 fs1 546 MiB Aug 24 22:57 /dev/stratis/pool1/fs1 2bb8a3ea84824d1da3f3dde95fe0918a
挂载
[root@redhat ~]# mkdir /fs1[root@redhat ~]# mount /dev/stratis/pool1/fs1 /fs1
存储文件
[root@redhat images]# cp /mnt/images/install.img /fs1[root@redhat images]# stratis filesystem listPool Name Name Used Created Device UUID pool1 fs1 1.10 GiB Aug 24 22:57 /dev/stratis/pool1/fs1 2bb8a3ea84824d1da3f3dde95fe0918a