Linux LVM扩容
基本概念
(1)PV:物理卷(Physical volume):物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘。一块硬盘,或多块硬盘。
(2)VG:卷组(Volume Group):卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。一堆磁盘的统称。
(3)LV:逻辑卷(Logical Volume):逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。一个逻辑分区,一个分区。
(4)PE(Physical Extent):每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
(5)LE(Logical Extent):逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
(6)lvm概念:LVM(Logical Volume Manager逻辑卷管理)是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上、文件系统之下的一个逻辑层,可提高磁盘分区管理的灵活性。
传统分区的缺点:
传统的文件系统是基于分区的,一个文件系统对应一个分区。这种方式比较直观,但不易改变。当一个分区空间已满时,无法对其扩充,只能采用重新分区/建立文件系统,非常麻烦;或把分区中的数据移到另一个更大的分区中。
当采用LVM时:
- 将硬盘的多个分区由LVM统一为卷组管理,可以方便的加入或移走分区以扩大或减小卷组的可用容量,充分利用硬盘空间;
- 文件系统建立在LVM上,可以跨分区,方便使用;
- 当系统空间不足而加入新的硬盘时,不必把用户的数据从原硬盘迁移到新硬盘,而只须把新的分区加入卷组并扩充逻辑卷即可。
使用LVM主要是方便管理、增加了系统的扩展性。可以跨分区,多个硬盘组合。
LVM的制作
第一步:
做物理卷: pv ------- sdb1、sdb2 打pv的标记。
做PV,将原有的磁盘或分区转换成另一种存在形式。
第二步:
PV加入卷组: vg-------- 卷组里面包含:sdb1 sdb2,建立在PV之上。
VG卷组不能直接拿来使用,需要将VG卷组做成LV(逻辑卷)才能用,类似扩展分区。
第三步:
逻辑卷 lv ------- 逻辑卷是从卷组里面拿空间出来做成的逻辑卷,在起个名,建立在VG之上。
第四步:
制作文件系统------mkfs.xfs lvm路径。
第五步:
挂载 ------mount 使用lvm。
实战(创建LVM逻辑卷)
2.1 创建LVM
首先准备添加3块磁盘:可以是/dev/sdb这种没有分区的,也可以是/dev/sdb1这种已经分区了的。
注意:如果没有pv命令安装 #yum install -y lvm2
[root@linux-server ~]# ll /dev/sd*
brw-rw----. 1 root disk 8, 0 Nov 9 12:59 /dev/sda
brw-rw----. 1 root disk 8, 1 Nov 9 12:59 /dev/sda1
brw-rw----. 1 root disk 8, 2 Nov 9 12:59 /dev/sda2
brw-rw----. 1 root disk 8, 16 Nov 9 12:59 /dev/sdb
brw-rw----. 1 root disk 8, 32 Nov 9 12:59 /dev/sdc
brw-rw----. 1 root disk 8, 48 Nov 9 14:04 /dev/sdd
2.2 创建pv
[root@linux-server ~]#pvcreate /dev/sdb #创建pv
Physical volume "/dev/sdb" successfully created.
[root@linux-server ~]#pvs #查看pv
PV VG Fmt Attr PSize PFree
/dev/sdb lvm2 --- 10.00g 10.00g
[root@linux-server ~]#pvscan #查看pv
PV /dev/sda2 VG centos lvm2 [<19.00 GiB / 0 free]
PV /dev/sdb lvm2 [10.00 GiB]
Total: 2 [<29.00 GiB] / in use: 1 [<19.00 GiB] / in no VG: 1 [10.00 GiB]
2.3 创建vg
[root@linux-server ~]#vgcreate vg1 /dev/sdb #创建vg
Volume group "vg1" successfully created
参数解释:
-s 16M 指的是在分区的时候指定vg的大小。
[root@linux-server ~]#vgs #查看vg
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <19.00g 0
vg1 1 0 0 wz--n- <10.00g <10.00g
[root@linux-server ~]#vgscan
Reading volume groups from cache.
Found volume group "centos" using metadata type lvm2
Found volume group "vg1" using metadata type lvm2
[root@linux-server ~]#vgdisplay #查看vg 查看剩余pe
--- Volume group ---
VG Name vg1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <10.00 GiB
PE Size 4.00 MiB
Total PE 2559
Alloc PE / Size 0 / 0 MiB
Free PE / Size 2559 / <10.00 GiB
VG UUID bVvQxe-4M2A-mMuk-b3gJ-4Maj-0xDy-5QZDOp
2.4.创建lv
[root@linux-server ~]#lvcreate -L 150M (+150M) -n lv1 vg1 #创建lv
Rounding up size to full physical extent 152.00 MiB
Logical volume "lv1" created.
[root@linux-server ~]#lvcreate -l 20 -n lv2 vg1 #采用PE方式在创建一个lv
Logical volume "lv2" created.
参数解释:
-L 指定lv的大小
-n 给创建的lv起一个名字
-l 20 指定PE
[root@linux-server ~]#lvs #查看lv
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <17.00g
swap centos -wi-ao---- 2.00g
lv1 vg1 -wi-a----- 152.00m
lv2 vg1 -wi-a----- 80.00m
2.5.制作文件系统并挂载
[root@linux-server ~]#mkfs.xfs /dev/vg1/lv1
[root@linux-server ~]#mkfs.ext4 /dev/vg1/lv2
[root@linux-server ~]#mkdir /mnt/lv{1..2}
[root@linux-server ~]#mount /dev/vg1/lv1 /mnt/lv1
[root@linux-server ~]#mount /dev/vg1/lv2 /mnt/lv2
[root@linux-server ~]#df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg1-lv1 xfs 149M 7.8M 141M 6% /mnt/lv1
/dev/mapper/vg1-lv2 ext4 74M 1.6M 67M 3% /mnt/lv2
LVM逻辑卷扩容
1.VG管理
#注意:如果lv所在的vg有空间直接lv扩容就ok了!如果没有空间则需要先对vg进行扩容。
1.1.扩大VG vgextend
1.创建pv
[root@linux-server ~]#pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created.
2.直接vgextend扩容
[root@linux-server ~]#vgextend vg1 /dev/sdc #vg1卷组名字,将/dev/sdc扩展到vg1中
Volume group "vg1" successfully extended
[root@linux-server ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <19.00g 0
vg1 2 2 0 wz--n- 19.99g 18.23g
1.2.实战lv扩容
[root@linux-server ~]#vgs #查看vg
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <19.00g 0
vg1 1 2 0 wz--n- <19.99g <9.77g
[root@linux-server ~]#lvextend -L 850M /dev/vg1/lv1 #扩展到850M
[root@linux-server ~]#lvextend -L +850M /dev/vg1/lv1 #在原有基础上加850M
[root@linux-server ~]#lvs 查看lv
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <17.00g
swap centos -wi-ao---- 2.00g
lv1 vg1 -wi-ao---- 1.66g
lv2 vg1 -wi-ao---- 80.00m
[root@linux-server ~]#lvextend -l +15 /dev/vg1/lv1 #在原有基础上加15个PE
[root@linux-server ~]#lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <17.00g
swap centos -wi-ao---- 2.00g
lv1 vg1 -wi-ao---- <1.68g
lv2 vg1 -wi-ao---- 80.00m
1.3.FS(file system)文件系统扩容
[root@linux-server ~]#df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg1-lv1 xfs 149M 7.8M 141M 6% /mnt/lv1
/dev/mapper/vg1-lv2 ext4 74M 1.6M 67M 3% /mnt/lv2
[root@linux-server ~]#xfs_growfs /dev/vg1/lv1 #xfs扩容
[root@linux-server ~]#resize2fs /dev/vg1/lv2 #ext4扩容
[root@linux-server ~]#df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg1-lv1 xfs 1.7G 9.1M 1.7G 1% /mnt/lv1
/dev/mapper/vg1-lv2 ext4 74M 1.6M 67M 3% /mnt/lv2
命令汇总
基本磁盘管理对比LVM磁盘管理
lv移除
[root@localhost ~]#lvremove /dev/vg2/lv2
Do you really want to remove active logical volume vg2/lv2? [y/n]: y
Logical volume "lv2" successfully removed
#先移除lv
[root@localhost ~]#vgremove /dev/vg2
Volume group "vg2" successfully removed
#再移除vg
[root@localhost ~]#pvremove /dev/sdc
Labels on physical volume "/dev/sdc" successfully wiped.
#移除pv
lvextend 命令
用于逻辑卷在线扩容,也就是说lvextend扩容是不需要停机的,应用服务也不需要关闭,其语法格式如下:
lvextend [参数] LogicalVolume[Path] [ PhysicalVolumePath... ]
常用参数:
-l + :指定逻辑卷的LE个数,如 -l +200
-L + :表示增加多少空间,如 -L +15G ,单位有bBsSkKmMgGtTpPeE
-l +100%FREE :表示增加vg的全部可用空间
注意:lvextend 扩展后只是扩展了lv的大小,而此时文件系统并未感知到,还需要使用xfs_growfs、resize2fs等命令来扩展文件系统,xfs_growf命令是扩展xfs文件系统,resize2fs是扩展ext4文件系统
使用方法一
[root@localhost ~]# lvextend -L +1G /dev/mysql/lv_data #逻辑卷扩容,增加1G的空间
Size of logical volume mysql/lv_data changed from 6.00 GiB (1536 extents) to 7.00 GiB (1792 extents).
Logical volume mysql/lv_data successfully resized.
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root cl -wi-ao---- 9.79g
swap cl -wi-ao---- 1.20g
lv_data mysql -wi-ao---- 7.00g #发现lv_data其实增大到7G了
[root@localhost ~]# df -Th #发现/dev/mapper/mysql-lv_data逻辑卷还是6G,说明即使lv增大了但文件系统并未感知到lv增大了
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/mysql-lv_data xfs 6.0G 33M 6.0G 1% /lv_data
[root@localhost ~]#
#哎呀,df -Th 看到的怎么是/dev/mapper/mysql-lv_data,我们的逻辑卷文件明明是/dev/mysql/lv_data的呀,怎么回事?
#原来这是lvm的mapper机制决定的,当我们lvcreate一个逻辑卷的时候,Linux会新建两个软链接文件,
#如/dev/VGName/LVName和/dev/mapper/VGName-LVName,而这2个文件都是指向/dev/dm-X 块文件的,所有,当我们使用df -h看
#到的/dev/mapper/mysql-lv_data其实是和/dev/mysql/lv_data一样的,不管我们使用哪个都是可以的。
#查看你的逻辑卷是什么文件系统类型,如果是xfs文件系统,使用xfs_growfs命令扩展容量:
xfs_growfs /dev/mysql/lv_data
#查看你的逻辑卷是什么文件系统类型,如果是ext4文件系统,使用resize2fs命令扩展容量:
resize2fs /dev/root_vg/root
#使用xfs_growfs命令扩展xfs文件系统,如果是ext4文件系统,则使用resize2fs /dev/mysql/lv_data
[root@localhost mapper]# xfs_growfs /dev/mysql/lv_data
meta-data=/dev/mapper/mysql-lv_data isize=512 agcount=4, agsize=393216 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=1572864, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 1572864 to 1835008
[root@localhost mapper]# df -Th #检查
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/cl-root xfs 9.8G 1021M 8.8G 11% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 8.6M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 139M 876M 14% /boot
tmpfs tmpfs 378M 0 378M 0% /run/user/0
/dev/mapper/mysql-lv_data xfs 7.0G 33M 7.0G 1% /lv_data #大小其实增大了1G了
[root@localhost mapper]#
使用方法二
[root@localhost mapper]# lvextend -l +25 /dev/mysql/lv_data #增加25个LE就是100M
Size of logical volume mysql/lv_data changed from 7.00 GiB (1792 extents) to 7.10 GiB (1817 extents).
Logical volume mysql/lv_data successfully resized.
[root@localhost mapper]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/cl-root 10258432 1045568 9212864 11% /
devtmpfs 1921808 0 1921808 0% /dev
tmpfs 1932776 0 1932776 0% /dev/shm
tmpfs 1932776 8776 1924000 1% /run
tmpfs 1932776 0 1932776 0% /sys/fs/cgroup
/dev/sda1 1038336 141608 896728 14% /boot
tmpfs 386556 0 386556 0% /run/user/0
/dev/mapper/mysql-lv_data 7329792 32980 7296812 1% /lv_data #查看容量大小
[root@localhost mapper]# xfs_growfs /dev/mysql/lv_data #扩展文件系统大小
meta-data=/dev/mapper/mysql-lv_data isize=512 agcount=5, agsize=393216 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=1835008, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 1835008 to 1860608 #显示块已经增大了
[root@localhost mapper]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/cl-root 10258432 1045568 9212864 11% /
devtmpfs 1921808 0 1921808 0% /dev
tmpfs 1932776 0 1932776 0% /dev/shm
tmpfs 1932776 8776 1924000 1% /run
tmpfs 1932776 0 1932776 0% /sys/fs/cgroup
/dev/sda1 1038336 141608 896728 14% /boot
tmpfs 386556 0 386556 0% /run/user/0
/dev/mapper/mysql-lv_data 7432192 32980 7399212 1% /lv_data #空间增大了
[root@localhost mapper]#
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程