Linux LVM的基本使用 https://www.cnblogs.com/rainbow-tan/p/17540457.html
Linux LVM逻辑卷相关管理方式 https://www.jb51.net/server/319432bvt.htm
LVM逻辑卷管理器 https://www.cnblogs.com/zhouby/p/10683974.html
Linux 基础知识 - LVM 逻辑卷管理器介绍 https://zhuanlan.zhihu.com/p/682304853
LVM 架构概述
LVM 逻辑卷的基本物理存储单元是块设备,比如一个分区或者整个磁盘。将这个设备初始化为 LVM 物理卷(PV)。
要创建 LVM 逻辑卷,可将物理卷合并到 卷组(VG)中。这会创建一个磁盘空间池,用于分配 LVM 逻辑卷(LV)。这个过程和将磁盘分区的过程类似。逻辑卷被文件系统和应用程序(如数据库)使用。
图 1.1 “LVM 逻辑卷组件” 显示简单 LVM 逻辑卷的组件:
图 1.1. LVM 逻辑卷组件
linux系统-lvm详解
https://zhuanlan.zhihu.com/p/567765195
什么是LVM?
LVM(Logical Volume Manager)逻辑卷管理,也有翻译成大容量管理。是一种将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的 分区加入其中,这样可以事项一种磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性,使用普通的磁盘分区,当一个磁盘的分区空间不够使用的时候,可 能就会带来很大的麻烦。使用LVM在一定程度上就可以解决普通磁盘分区带来的问题。
为什么使用LVM?
LVM通常用于装备大量磁盘的系统,但它同样适于仅有一、两块硬盘的小系统。
小系统使用LVM的益处?
传统的文件系统是基于分区的,一个文件系统对应一个分区。这种方式比较直观,但不易改变:
- 1.不同的分区相对独立,无相互联系,各分区空间很易利用不平衡,空间不能充分利用;
- 2.当一个文件系统/分区已满时,无法对其扩充,只能采用重新分区/建立文件系统,非常麻烦;或把分区中的数据移到另一个更大的分区中;或采用符号连接的方式使用其它分区的空间。
- 3.如果要把硬盘上的多个分区合并在一起使用,只能采用再分区的方式,这个过程需要数据的备份与恢复。
当采用LVM时,情况有所不同:
- 1.硬盘的多个分区由LVM统一为卷组管理,可以方便的加入或移走分区以扩大或减小卷组的可用容量,充分利用硬盘空间;
- 2.文件系统建立在逻辑卷上,而逻辑卷可根据需要改变大小(在卷组容量范围内)以满足要求;
- 3.文件系统建立在LVM上,可以跨分区,方便使用;
大系统使用LVM的益处?
在使用很多硬盘的大系统中,使用LVM主要是方便管理、增加了系统的扩展性。 在一个有很多不同容量硬盘的大型系统中,对不同的用户的空间分配是一个技巧性的工作,要在用户需求与实际可用空间中寻求平衡。用户/用户组的空间建立在LVM上,可以随时按要求增大,或根据使用情况对各逻辑卷进行调整。当系统空间不足而加入新的硬盘时,不必把用户的数据从原硬盘迁 移到新硬盘,而只须把新的分区加入卷组并扩充逻辑卷即可。同样,使用LVM可以在不停服务的情况下。把用户数据从旧硬盘转移到新硬盘空间中去。
【名词解释】
1. PV(Physical Volume):物理卷,处于LVM最底层,可以是物理硬盘或者分区。
2.PE(Physical Extend):物理区域,PV中可以用于分配的最小存储单元,可以在创建PV的时候制定,如1M, 2M, 4M, 8M, 32M, 64M…组成同一VG中所有PV的PE大小应该相同。
3.VG(Volume Group):卷组,建立在PV之上,可以含有一个到多个PV。
4. LV(Logical Volume):逻辑卷,建立在VG之上,相当于原来分区的概念。不过大小可以动态改变。
【创建LVM】可参考linux 系统硬盘分区
1.目前分区
2.添加2块硬盘
3.给2块硬盘分别分2个区,输入fdisk /dev/sdb
Blocks:分区的大小,以Blocks(块)为单位,默认的块大小为1024字节
Id:分区对应的系统ID号。83 表示Linux中的XFS 分区或EXT4分区(普通分区的id)、8e 表示LVM逻辑卷。。82 swap交换分区的id fd raid磁盘整列的id。System:分区类型。识别到新的硬盘设备后,就可以在该硬盘中建立新的分区了。在Linux操作系统中,分区和格式化的过程是相对独立。
输入P打印一下磁盘分区信息,比如ID类型是 83.
输入命令t可以进行修改分区类型,输入需要修改的分区和修改的分区类型代码。
确认没有问题之后,输入W 进行保存。(如果出现错误,选择D删除重新分区)修改好之后的分区要正常使用,还需要进行格式化操作。
常见磁盘id序号表,输入l可以查看。
注:注意将分区id修改为8e
每个区分了5G
注:
First Sector 表示起始扇区
默认从第2048块扇区开始是因为,由于EFI的兴起,要给EFI 代码留磁盘最开始的1M空间.Extensive Firmware Interface 可拓展固件接口,是英特尔公司推出的一种在类PC的电脑系统中替代BIOS的升级方案。EFI以小型磁盘分区的形式存放在硬盘上的,并非在BIOS的FLASH里面。
那留1M空间为什么要从第2048块扇区开始?
因为每块扇区有512字节 [现在新硬盘扇区每块为4096字节(4KByte)]
2048*512Byte = 1024 KByte = 1 Mbyte
4、用fdisk –l 命令查看分区表,df -lh查看分区情况
5、建好分区后,用pvcreate命令在新建的分区上创建PV
1)先安装lvm2,yum -y install lvm2
2)pvcreate /dev/sdb1 /dev/sdb2 /dev/sdc1 /dev/sdc2
pvscan
6、使用vgcreate命令创建一个名为vgdata的VG,并且将所有的新建的PV加入vgdata
7、用lvcreate –L 11G –n lv01 vgdata 命令从VG vgdata中创建一个大小为11G的名为lv001的LV
lvcreate -L 11G -n lv001 vgdata
我们创建的第一个LV所在的目录为 /dev/vgdata/lv001
8、使用mkfs /dev/vgdata/lv01命令格式化lv01
mkfs.xfs /dev/vgdata/lv001
9、创建/data,把/dev/vgdata/lv001挂载上去
挂载好后,可以正常使用了
【扩容LVM】
1.有9G的剩余空间还未分配
1)挂载至另一个目录中
lvcreate 这个命令中-L后加容量,-l 后加百分比。
2)把未分配空间添加到原来的挂载目录中
lvextend是扩展逻辑卷,lvreduce是缩小逻辑卷,lvresize是扩展或缩小逻辑
扩展尽量使用lvextend,安全性更高
lvextend -l +100%free -r /dev/vgdata/lv001
xfs格式不支持缩容,只支持扩容
2.添加硬盘扩容
1)先分区
2)新机盘无需在创建物理卷
vgextend vgdata /dev/sdd1
lvcreate -L 3G -n lv002 vgdata
把3G的容量放在同一卷组的新创建的逻辑卷lv002中
挂载到/data2中
然后把50%的容量加到lv001中,会挂载在/data
Sdd1最后剩下的都加到lv002中,就是挂载到data2中
最后,别忘了,设置开机自动挂载!
总结:
lvm结构:
磁盘 => 分区 => PV => VG => LV => 文件系统
扩张:
先扩LV再扩文件系统
lvextend -L +100M /dev/vg1/lv1 逻辑卷的大小增加100M
resize2fs /dev/vg1/lv1 文件系统增到逻辑卷的大小
收缩:
先减文件系统再减LV(注意顺序)
umount /dev/vg1/lv1
e2fsck -f /dev/vg1/lv1
resize2fs /dev/vg1/lv1 100M 减小文件系统到100M
lvreduce -L 100M /dev/vg1/lv1 减小逻辑卷到100M
mount -a
创建PV所需分区:
[root@rhel6-client ~]# fdisk -cul /dev/sda
[root@rhel6-client ~]# fdisk -cu /dev/sda
Command (m for help): w
reboot/partx -a /dev/sda
[root@rhel6-client ~]# cat /proc/partitions
root@rhel6-client ~]# pvcreate /dev/sda5 /dev/sda6 /dev/sda7
root@rhel6-client ~]# vgcreate -s 8M vg1 /dev/sda5 /dev/sda6 /dev/sda7
[root@rhel6-client ~]# vgs
创建LV:
[root@rhel6-client ~]# lvcreate vg1 -L 100M -n lv1
[root@rhel6-client ~]# lvs
[root@rhel6-client ~]# df -h
创建文件系统:
[root@rhel6-client ~]# mkfs.ext4 /dev/vg1/lv1
挂载文件系统:
[root@rhel6-client ~]# mkdir /lvm
[root@rhel6-client ~]# mount /dev/vg1/lv1 /lvm
[root@rhel6-client ~]# df -h
扩张:先扩lvm再扩文件系统
[root@rhel6-client ~]# vgs
[root@rhel6-client ~]# lvextend -L +100M /dev/vg1/lv1
[root@rhel6-client ~]# lvs
[root@rhel6-client ~]df -h
[root@rhel6-client ~]# resize2fs /dev/vg1/lv1
[root@rhel6-client ~]# df -h
收缩:先件文件系统再减lvm
[root@rhel6-client ~]# resize2fs /dev/vg1/lv1 150M
[root@rhel6-client ~]# umount /lvm
[root@rhel6-client ~]# resize2fs /dev/vg1/lv1 150M
Please run 'e2fsck -f /dev/vg1/lv1' first.
[root@rhel6-client ~]# e2fsck -f /dev/vg1/lv1
[root@rhel6-client ~]# resize2fs /dev/vg1/lv1 150M
[root@rhel6-client ~]# lvs
[root@rhel6-client ~]# lvreduce -L 150M /dev/vg1/lv1
[root@rhel6-client ~]# lvs
[root@rhel6-client ~]# mount /dev/vg1/lv1 /lvm
[root@rhel6-client ~]# df -h
[root@rhel6-client ~]# lvs
[root@rhel6-client ~]# vgs
逻辑卷可以实现动态在线拉伸,扩展一个逻辑卷的空间不需要卸载文件系统
raid: 用多个硬盘 在其上分散存储或重复存储的数据系统!
lvm: 高效的在多个分区之间分配可用的磁盘空间.
创建逻辑卷的步骤:1、首先使用fdisk修改分区的ID为8e2、通过pvcreate命令将linux分区处理成物理卷(PV)3、通过vgcreate命令将创建好的物理卷处理成卷组(VG)4、通过lvcreate命令将卷组分成若干个逻辑卷(LV)
----VG的扩展相对简单三步操作就可以完成-----------------
步骤:
准备分区,设置新分区的System ID为8e
使用pvcreate构建PV
使用vgextend将新的PV加入到原有VG中
查看当前系统中原有的PV:
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree /dev/sdb1 testVG lvm2 a-- 10.00g 0 /dev/sdc1 testVG lvm2 a-- 10.00g 10.00g1.2.3.4.
准备分区结果:
[root@localhost ~]# fdisk /dev/sdd
Device Boot Start End Blocks Id System /dev/sdd1 1 1306 10490413+ 8e Linux LVM1.2.3.
使用pvcreate 命令创建pv:
[root@localhost ~]# pvcreate /dev/sdd1 Physical volume "/dev/sdd1" successfully created1.2.
查看当前系统中的所有PV:
[root@localhost ~]# pvscan PV /dev/sdb1 VG testVG lvm2 [10.00 GiB / 0 free] PV /dev/sdc1 VG testVG lvm2 [10.00 GiB / 10.00 GiB free] PV /dev/sdd1 lvm2 [10.00 GiB] Total: 3 [30.00 GiB] / in use: 2 [20.00 GiB] / in no VG: 1 [10.00 GiB]1.2.3.4.5.
可见sdb1和sdc1已经加入到了名为testVG的VG中,
将名为/dev/sdd1的PV加入到名为testVG中:
[root@localhost ~]# vgextend testVG /dev/sdd1 Volume group "testVG" successfully extended1.2.
查看VG扩展结果:
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree /dev/sdb1 testVG lvm2 a-- 10.00g 0 /dev/sdc1 testVG lvm2 a-- 10.00g 10.00g /dev/sdd1 testVG lvm2 a-- 10.00g 10.00g1.2.3.4.5.
------------VG的缩减--------------:
步骤:
确定要移除的PV
使用pvmove将此PV上的数据转移到其它PV
使用vgreduce:从卷组中将此PV移除
使用pvremove删除物理卷,真正删除pv的物理卷
移除名为/dev/sdb1的pv
pvmove /path/to/pv 将PV上的数据转移到其它PV,如果不指定目标PV则转移到同卷组的其它PV上:
[root@localhost ~]# pvmove /dev/sdb1 /dev/sdb1: Moved: 0.2% /dev/sdb1: Moved: 61.5% /dev/sdb1: Moved: 100.0%1.2.3.4.
卷组testVG的当前情况:
[root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 testVG lvm2 a-- 10.00g 10.00g /dev/sdc1 testVG lvm2 a-- 10.00g 0 /dev/sdd1 testVG lvm2 a-- 10.00g 10.00g1.2.3.4.5.
从卷组testVG中移除名为/dev/sdv1的PV:
[root@localhost ~]# vgreduce testVG /dev/sdb1 Removed "/dev/sdb1" from volume group "testVG"1.2.
再次查看卷组testVG的情况:
[root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 a-- 10.00g 10.00g /dev/sdc1 testVG lvm2 a-- 10.00g 0 /dev/sdd1 testVG lvm2 a-- 10.00g 10.00g1.2.3.4.5.
可以看到vgreduce命令只是把/dev/sdb1从卷组testVG中移除,但并没有删除名为/dev/sdb1的PV
使用pvremove真正删除名为/dev/sdb1的PV:
[root@localhost ~]# pvremove /dev/sdb1 Labels on physical volume "/dev/sdb1" successfully wiped1.2.
查看pvremove的操作结果,可以看到名为/dev/sdb1的pv被删除了
[root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdc1 testVG lvm2 a-- 10.00g 0 /dev/sdd1 testVG lvm2 a-- 10.00g 10.00g1.2.3.4.
注意:pvmove 和 pvremove操作的不同,pvmove是移动数据,而pvremove是删除PV.
VG上的操作并不会影响lv中的数据
----------------LV的扩展----------------------
步骤:
确定当前逻辑卷所在的卷组有足够的空闲空间:
扩展物理边界,即分区的大小
扩展逻辑边界,即文件系统的大小
完成文件系统检测
使用命令pvs查看名为testVG的信息:
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree testVG 2 1 0 wz--n- 20.00g 10.00g1.2.3.
可以看到在testVG的卷组中PV数为2 LV数为1 ,VG总大小为20G ,空闲10G
查看lv的大小:
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert testLV testVG -wi-ao--- 10.00g1.2.3.
使用命令lvextend [-L|-l] [+] SIZE /path/to/lv扩展物理边界的大小:
size前边有+号和没有加号的区别:
有+号:表示扩展了
无+号: 表示扩展到
-L:SIZE 以B ,M ,G 为单位表示扩展的量
-l:以物理扩展为单位,表示扩展了多少个pe
[root@localhost ~]# lvextend -L +5G /dev/testVG/testLV Extending logical volume testLV to 15.00 GiB Logical volume testLV successfully resized1.2.3.
使用lvs查看扩展后的lv的前况:
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert testLV testVG -wi-ao--- 15.00g1.2.3.
可以看到扩展成功,但是为什么我们把lv挂载之后使用df -lh查看,却只是看得到10G而不是15G呢?
[root@localhost ~]# df -lh /backup/ Filesystem Size Used Avail Use% Mounted on /dev/mapper/testVG-testLV 9.9G 151M 9.2G 2% /backup [root@localhost ~]#j ld1.2.3.4.5.
是因为我们只扩展了分区的大小,并没有扩展文件系统的大小:
使用命令resize2fs /path/to/device扩展文件系统:
[root@localhost ~]# resize2fs /dev/testVG/testLV resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/testVG/testLV is mounted on /backup; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/testVG/testLV to 3932160 (4k) blocks. The filesystem on /dev/testVG/testLV is now 3932160 blocks long.1.2.3.4.5.6.
再次使用df -lh 查看文区大小,可以看到结果也是15G了
[root@localhost ~]# df -lh /backup/ Filesystem Size Used Avail Use% Mounted on /dev/mapper/testVG-testLV 15G 153M 14G 2% /backup1.2.3.4.
文件系统检测:
fsck :可以检测所有的支持的文件系统
e2fsck [-t fs_type][-f][-p] /path/to/device 只支持ext系列文件系统
-f :强制检测
-p:检测过程中如果有问题就修复
注意不能检测当前正处于挂载中的设备
[root@localhost ~]# umount /dev/testVG/testLV [root@localhost ~]# e2fsck -f /dev/testVG/testLV e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/testVG/testLV: 12/983040 files (0.0% non-contiguous), 100865/3932160 blocks1.2.3.4.5.6.7.8.9.
--------------------缩减逻辑卷------------------------------(有风险)
步骤:步骤:
确定要缩减为多大? 前提是:至少能容纳原有的所有数据
卸载当前正在挂载中的LV并检测文件系统
缩减逻辑边界 resize2fs /path/to/device SIZE
缩减物理边界 lvreduce [-L | -l ] SIZE /path/to/lv
检测文件系统
挂载使用
查看当前处于挂载中的设备:
[root@localhost ~]# mount /dev/sda2 on / type ext4 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0") /dev/sda1 on /boot type ext4 (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) /dev/mapper/testVG-testLV on /backup type ext4 (rw)1.2.3.4.5.6.7.8.9.10.
卸载当前正在挂载中的LV并检测文件系统
[root@localhost ~]# umount /dev/mapper/testVG-testLV [root@localhost ~]# e2fsck -f /dev/mapper/testVG-testLV e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/mapper/testVG-testLV: 12/983040 files (0.0% non-contiguous), 100865/3932160 block1.2.3.4.5.6.7.8.9.
使用resize2fs使用缩减逻辑边界:
[root@localhost ~]# resize2fs /dev/testVG/testLV 5G resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/testVG/testLV to 1310720 (4k) blocks. The filesystem on /dev/testVG/testLV is now 1310720 blocks long.1.2.3.4.
使用lvs查看LV,发现LV并没有变化,因为我们只缩减了逻辑边界,并没有缩减物理边界
[root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert testLV testVG -wi-a---- 15.00g1.2.3.
使用lvreduce缩减物理边界:
[root@localhost ~]# lvchange -a n /dev/testVG/testLV [root@localhost ~]# lvreduce -L 5G /dev/testVG/testLV Reducing logical volume testLV to 5.00 GiB Logical volume testLV successfully resized [root@localhost ~]# lvchange -a y /dev/testVG/testLV1.2.3.4.5.
再次使用lvs发现lv减小了:
[root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert testLV testVG -wi-a---- 5.00g1.2.3.
检测文件系统:
[root@localhost ~]# e2fsck -f /dev/testVG/testLV e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/testVG/testLV: 12/327680 files (0.0% non-contiguous), 58463/1310720 blocks1.2.3.4.5.6.7.8.
挂载设备并查看大小:
[root@localhost ~]# mount /dev/testVG/testLV /backup/ [root@localhost ~]# df -lh /backup/ Filesystem Size Used Avail Use% Mounted on /dev/mapper/testVG-testLV 5.0G 148M 4.6G 4% /backu1.2.3.4.5.
-------------------------完---------------------------------------------
发布于 2022-09-24 16:22