作者:love四叶草health | 来源:互联网 | 2023-06-21 09:06
逻辑卷管理概述每个Linux使用者在安装Linux时都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到当前某个分区需要的
逻辑卷管理概述
每个Linux使用者在安装Linux时都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到当前某个分区需要的容量,还要预见该分区以后可能需要的容量的最大值。如果估计不准确,当遇到某个分区不够用时管理员可能甚至要备份整个系统、清除硬盘、重新对硬盘分区,然后恢复数据到新分区
逻辑卷管理器LVM(Logicl Volume Manager),通过使用逻辑卷管理器对硬盘存储设备进行管理,可以实现硬盘空间的动态划分和调整,而且可以将零碎的空间进行整合
逻辑卷管理组成部分
• 物理卷(PV-Physical Volume)
物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘
• 卷组(VG-Volumne Group)
卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组
• 逻辑卷(LV-Logical Volume)
逻辑卷建立在卷组之上,卷中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组
逻辑卷管理器和是主分区还是逻辑分区没有关系
创建逻辑卷
[root@localhost /]# fdisk /dev/sdc
Command (m for help): p
Device Boot Start End Blocks Id System
#发现没有分区表
Command (m for help): n
#新建分区表,弄出4个主分区,然后t改分区标签(4个都改),都改成8e,过程不赘述
#不改成8e也可以。但是为了优化最好是改成8e
Command (m for help): p
Device Boot Start End Blocks Id System
/dev/sdc1 2048 2099199 1048576 8e Linux LVM
/dev/sdc2 2099200 6293503 2097152 8e Linux LVM
/dev/sdc3 6293504 12584959 3145728 8e Linux LVM
/dev/sdc4 12584960 20973567 4194304 8e Linux LVM
不改成8e也可以。但是为了优化最好是改成8e
Command (m for help): w
[root@localhost /]# pvcreate /dev/sdc{1..4}
[root@localhost /]# vgcreate vg1 /dev/sdc1 /dev/sdc2 /dev/sdc3 /dev/sdc4
#也可以用花括号的形式添加
[root@localhost /]# vgs
#看卷组的信息
VG #PV #LV #SN Attr VSize VFree
vg1 4 0 0 wz--n- 9.98g 9.98g
[root@localhost /]# vgdisplay
#看卷组的详细信息(如果后面加卷组的名称就只看这个卷组的信息)
vgdisplay 里的PE Size是指逻辑卷的最小单位。假设PE Size是4M;比如我向里写东西。我一个文件可能只占用1B的容量,但是我先占上4M,其他的也是,不足4M我也先占上4M。等到每个块都用了,但是每个块都有剩余位置的时候,会把每个区的剩余位置都拼凑一下,以供使用。但是只要还有没被占用的块,都不会使用用过的块。逻辑卷大小为这个PE Size的整数倍
[root@localhost /]# lvcreate -L 3G -n lv1 vg1
#-L :PE 的大小,-l :个数
这里物理卷一共9.98g,这里我只指定3G,还有空间可以创建其他的逻辑卷
[root@localhost /]# lvs
#查看lv情况
[root@localhost /]# lvdisplay
#查看lv详细情况
[root@localhost /]# mkfs.xfs /dev/vg1/lv1
#或者是mkfs.xfs /dev/mapper/vg1-lv1,它们其实是一个东西
#这一步进行格式化。格式不用非是xfs,是什么无所谓
[root@localhost /]# blkid
/dev/sdc1: UUID="8pZe8X-gmpo-czGC-a3VN-Egae-A1Hl-aKDlL1" TYPE="LVM2_member"
/dev/sdc2: UUID="LvDt5u-6PDB-hExx-b5Lw-r3E3-NQf9-sn5EHY" TYPE="LVM2_member"
/dev/sdc3: UUID="sUK3wP-groJ-9Z7K-QwJT-C8CY-TRm6-bz5Unk" TYPE="LVM2_member"
/dev/sdc4: UUID="uyeZ30-kS0u-lNDE-s8bY-L7r1-UpUd-3TknVC" TYPE="LVM2_member"
/dev/mapper/vg1-lv1: UUID="1575972f-8c9a-4cdf-bcd2-3f9fa39149ec" TYPE="xfs"
#这时/dev/sdc1-sdc4就不能再用来做挂载了,因为它现在变成逻辑卷lv1的东西了。
#能进行使用的是/dev/mapper/vg1-lv1: UUID="1575972f-8c9a-4cdf-bcd2-3f9fa39149ec"
[root@localhost /]# mkdir /mnt/xfs
[root@localhost /]# vim /etc/fstab
UUID="1575972f-8c9a-4cdf-bcd2-3f9fa39149ec " /mnt/xfs xfs defaults 0 0
[root@localhost /]#mount -a
[root@localhost /]#mount | grep xfs
#显示/dev/mapper/vg1-lv1 on /mnt/xfs type xfs (rw,relatime,seclabel,attr2,inode64,noquota),说明挂载成功
删除卷
处在它所在的文件夹的时候是无法卸载的
[root@localhost /]# umount /dev/mapper/vg1-lv1
#需要将挂载卸载才能删除卷,如果卸载不掉的话加-f
[root@localhost /]# lvremove vg1 lv1
#删除逻辑卷
[root@localhost /]# vgremove vg1
#必须要下面没有逻辑卷才能删除卷组,否则删不掉
[root@localhost /]# pvremove /dev/sdc{1..4}
#删除物理卷1,2,3,4
我现在想创建两个卷组,vg1和vg2。sdc1和sdc2给vg1,sdc3和sdc4给vg2
[root@localhost /]# pvcreate /dev/sdc{1..4}
[root@localhost /]# vgcreate vg1 /dev/sdc1
[root@localhost /]# vgcreate vg1 /dev/sdc2
#发现添加不了,因为vg1已经创建过了
[root@localhost /]# vgextend vg1 /dev/sdc2
#在vg1卷组里面添加sdc2
[root@localhost /]# vgextend vg1 /dev/sdc3
[root@localhost /]# vgreduce vg1 /dev/sdc3
#添加多了,把它移除出去
[root@localhost /]# vgdisplay vg1
#看一下vg1卷组的状态
#vg2也如法炮制,不赘述
修改卷组属性,用来设置卷组是否处于活动状态,活跃状态的时候卷组无法被删除,非活动状态的卷组才能被删除掉。VG Status:resizable是表示可被调整大小的状态。lvremove时有可能因为逻辑卷里东西过多导致删除逻辑卷的时候假删除,即逻辑卷没了,但是里面东西还在,这时卷组觉得它里面还有东西,就会处于活跃状态,这时需要↓
[root@localhost /]# vgchange -ay vg1
#让卷组vg1成非活跃状态
[root@localhost /]# vgrename
#给卷组换名字,lv也可以被重命名,但是pv不可以,因为pv本来就没有名字
#换完名字之后需要在fstab里将挂载的名字也需要改。除非是用uuid进行挂载的,就不用改
[root@localhost /]# vgcreate -s 8M vg3 /dev/sdc3 /dev/sdc4
[root@localhost /]# vgdisplay vg3
#发现PE size变成了8M
#但是vg如果已经存在,那么它的PE size无法变更
[root@localhost /]# lvcreate -n resize1 -l 100 vg3
#100: 用一百个块(100*8M=800M),从vg3中拿
[root@localhost /]# lvcreate -n resize2 -L 777M vg3
#但是发现给增加了784M,因为777M不是8(PE size为8)的整数倍
放大缩小逻辑卷
接下来resize1要用来做块(逻辑卷)的放大,resize2要用来做块的缩小。设备放大时不论是挂载状态下或非挂载状态下都可以做放大,即在线放大。但是缩小的话设备要是非挂载的状态,即离线缩小
mkfs.ext3 /dev/mapper/vg3-resize1
mkfs.ext3 /dev/mapper/vg3-resize2
mkdir /mnt/rs1
mkdir /mnt/rs2
mount /dev/mapper/vg3-resize1 /mnt/rs1
mount /dev/mapper/vg3-resize2 /mnt/rs2
df -lh
size used avail use% mounted
mkfs.ext3 /dev/mapper/vg3-resize1 772M 828K 731M 1% /mnt/rs1
mkfs.ext3 /dev/mapper/vg3-resize2 756M 812K 716M 1% /mnt/rs2
发现size大小变小了。之前给的resize1是800M,resize2是784M,这里的大小表示文件系统(filesystem)大小(即这个设备能存多少东西),剩下的容量mkfs,挂载的时候都会损耗一定的容量大小。文件系统大小不会随着块的变大或缩小而改变,需要手动才能改变文件系统大小。
❉放大要先放大块的大小,再放大文件系统的大小
lvresize -L +200M /dev/vg3/resize1
放大逻辑卷
如果不带+,会出现warning,+时是在原有基础之上加200M,不加+的话就是将现有逻辑卷的大小调整成200M。如果比之前设置的逻辑卷小的话就证明是要将其缩小,会造成数据丢失
resize2fs /dev/vg3/resize1
调整文件系统大小,但是不会管你到底是放大还是缩小,就是将文件系统调整到它可以变大的最大程度
df -lh
看设备容量变大了
size used avail use% mounted
mkfs.ext3 /dev/mapper/vg3-resize1 970M 1.0M 925M 1% /mnt/rs1
❉缩小的时候要先将文件系统缩小,再缩小逻辑卷的大小
umount /mnt/rs2/
resize2fs /dev/vg3/resize2 700M
出现提示 [请先输入e2fsck -f /dev/vg3/resize2 命令],将处于多个块当中的内容整理到一起,以便进行缩小。但是也不能百分百保证数据不丢失
e2fsck -f /dev/vg3/resize2
resize2fs /dev/vg3/resize2 700M
lvresize -L 700M /dev/vg3/resize2
mount /dev/vg3/resize2 /mnt/rs2/
重新挂载回来
df -lh
看系统里设备和文件系统挂载的使用情况
size used avail use% mounted
mkfs.ext3 /dev/mapper/vg3-resize2 674M 812K 638M 1% /mnt/rs2
发现size变小了,缩小成功