这篇文章上次修改于 407 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
介绍
- LVM是Linux操作系统的逻辑卷管理器。 现在有两个Linux版本的LVM,分别是 LVM1,LVM2。LVM1是一种已经被认为稳定了几年的成熟产品,LVM2 是最新最好的LVM版本
- 逻辑卷管理提供了比传统的磁盘和分区视图更高级别的计算机系统上磁盘存储的视图。 这使得系统管理员可以更灵活地将存储分配给应用程序和用户。
- 最主要的优点是在磁盘空间不足的情况下,使用新增的磁盘,在不格式化分区的情况下对现有分区进行动态扩容
基本概念
物理卷(Physical Volume,PV):
- 说明: 物理卷是指实际的物理存储设备,如硬盘或分区。LVM 将一个或多个物理卷合并成一个卷组(Volume Group)。
- 命令: pvcreate 用于创建物理卷。
卷组(Volume Group,VG):
- 说明: 卷组是由一个或多个物理卷组成的逻辑单位。它提供了一个池,所有卷组中的物理卷的存储空间汇聚在一起。
- 命令: vgcreate 用于创建卷组。
逻辑卷(Logical Volume,LV):
- 说明: 逻辑卷是卷组中的一个逻辑分区,它可以被用作文件系统的挂载点。逻辑卷的大小和数量可以动态调整,而不影响数据。
- 命令: lvcreate 用于创建逻辑卷。
物理区(Physical Extent,PE):
- 说明: 物理区是物理卷上的最小存储单元。卷组中的逻辑卷和物理卷都以物理区为基本单位。
- 命令: pvdisplay 可以显示物理卷中的物理区的信息。
逻辑区(Logical Extent,LE):
- 说明: 逻辑区是逻辑卷上的最小存储单元。它与物理区的概念相似,但在逻辑卷的上下文中使用。
- 命令: lvdisplay 可以显示逻辑卷中的逻辑区的信息。
文件系统:
- 说明: 逻辑卷可以用来创建文件系统,从而作为数据的存储和管理单元。
- 命令: 根据所选择的文件系统类型,可以使用 mkfs 命令来创建文件系统。
使用lvm 创建逻辑分区
- 第一步: 使用fdisk命令,设置硬盘分区,并把分区类型更改为LVM 类型,标识为 8e
[root@k8s-master ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x30354c86 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n //输入n增加分区
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p //输入p,设置增加的分区是主分区
分区号 (1-4,默认 1):1 //分区号设置为1
起始 扇区 (2048-204799,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-204799,默认为 204799):
将使用默认值 204799
分区 1 已设置为 Linux 类型,大小设为 99 MiB
命令(输入 m 获取帮助):t //输入t修改分区类型id
已选择分区 1
Hex 代码(输入 L 列出所有代码):8e //输入 8e ,代表把分区类型改为LVM类型
已将分区“Linux”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):w //输入w 保存更改并退出 fdisk
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@k8s-master ~]#
- 第二步,使用pvcreate 创建物理卷
# 创建
[root@k8s-master ~]# pvcreate /dev/sdb1 /dev/sdc1
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdc1" successfully created.
# 使用 pvdisplay 或者 pvs 命令查看
[root@k8s-master ~]# pvdisplay | grep sd[b-c]
"/dev/sdc1" is a new physical volume of "99.00 MiB"
PV Name /dev/sdc1
"/dev/sdb1" is a new physical volume of "99.00 MiB"
PV Name /dev/sdb1
[root@k8s-master ~]# pvdisplay /dev/sdb1 /dev/sdc1
--- Physical volume ---
PV Name /dev/sdb1
VG Name vgdata
PV Size 99.00 MiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 24
Free PE 24
Allocated PE 0
PV UUID TNcnHc-YCrf-2goB-JGeR-sto4-8rAb-MWhV0N
--- Physical volume ---
PV Name /dev/sdc1
VG Name vgdata
PV Size 99.00 MiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 24
Free PE 24
Allocated PE 0
PV UUID kmRlxp-QSjo-xl3B-DIyN-zzFm-NyOi-cGRsnJ
- 第三步 使用vgcreate 创建一个VG卷组
# 说明: vgdata 是VG卷组名称
[root@k8s-master ~]# vgcreate vgdata /dev/sdb1 /dev/sdc1
Volume group "vgdata" successfully created
# 使用vgs 命令查看刚创建的VG
[root@k8s-master ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <19.00g 0
vgdata 2 0 0 wz--n- 192.00m 192.00m
# 使用vgdisplay 命令查看制定VG卷组信息
[root@k8s-master ~]# vgdisplay vgdata
--- Volume group ---
VG Name vgdata
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 192.00 MiB
PE Size 4.00 MiB
Total PE 48
Alloc PE / Size 0 / 0
Free PE / Size 48 / 192.00 MiB
VG UUID JPgdSn-OUGM-aUpW-HyK8-m1Zv-JV3Z-e83m9t
- 第四步 创建LV
# 创建一个大小是100M的LV逻辑卷 , LV名称是 lv1
[root@k8s-master ~]# lvcreate -n lv1 -L +100M vgdata
Logical volume "lv1" created.
- 查看一下创建的lv1信息
[root@k8s-master ~]# lvdisplay vgdata
--- Logical volume ---
LV Path /dev/vgdata/lv1
LV Name lv1
VG Name vgdata
LV UUID CutiKD-GkCV-4xU3-mYL3-2soU-fNWn-NGGxNq
LV Write Access read/write
LV Creation host, time k8s-master, 2023-12-13 21:10:12 +0800
LV Status available
# open 0
LV Size 100.00 MiB
Current LE 25
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
[root@k8s-master ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <17.00g
swap centos -wi-a----- 2.00g
lv1 vgdata -wi-a----- 100.00m
- 第五步 格式化创建的lv1 逻辑卷
[root@k8s-master ~]# mkfs.xfs /dev/vgdata/lv1
meta-data=/dev/vgdata/lv1 isize=512 agcount=4, agsize=6400 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=25600, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@k8s-master ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs f52dcde1-aa78-42cc-83e1-3fc217d6f4e8 /boot
└─sda2 LVM2_member 2LTInU-3JqW-8hXD-IL2C-S9Rj-nVWB-l8t5Nn
├─centos-root xfs 65054278-6847-47c7-92fa-5e82971d7d51 /
└─centos-swap swap 30ee098a-20e2-4ab3-b202-348c24e29a83
sdb
└─sdb1 LVM2_member TNcnHc-YCrf-2goB-JGeR-sto4-8rAb-MWhV0N
└─vgdata-lv1 xfs af1abf15-f089-414b-b2dd-ab974d1b003f
sdc
└─sdc1 LVM2_member kmRlxp-QSjo-xl3B-DIyN-zzFm-NyOi-cGRsnJ
└─vgdata-lv1 xfs af1abf15-f089-414b-b2dd-ab974d1b003f
sdd
└─sdd1
sr0 iso9660 VBox_GAs_7.0.8 2023-04-17-17-27-11-59
- 第六步 进行文件挂载
[root@k8s-master ~]# mkdir -p /vgdata/lv1
[root@k8s-master ~]# mount /dev/vgdata/lv1 /vgdata/lv1/
# 查看磁盘信息
[root@k8s-master ~]# df -Th | grep lv1
/dev/mapper/vgdata-lv1 xfs 97M 5.3M 92M 6% /vgdata/lv1
# 测试创建一个文件
[root@k8s-master lv1]# echo {1..1000} > text.txt
扩容VG
[root@k8s-master ~]# pvcreate /dev/sdd1
Physical volume "/dev/sdd1" successfully created.
[root@k8s-master ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <19.00g 0
/dev/sdb1 vgdata lvm2 a-- 96.00m 96.00m
/dev/sdc1 vgdata lvm2 a-- 96.00m 96.00m
/dev/sdd1 lvm2 --- 99.00m 99.00m
[root@k8s-master ~]# vgextend vgdata /dev/sdd1
Volume group "vgdata" successfully extended
[root@k8s-master ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <19.00g 0
/dev/sdb1 vgdata lvm2 a-- 96.00m 96.00m
/dev/sdc1 vgdata lvm2 a-- 96.00m 96.00m
/dev/sdd1 vgdata lvm2 a-- 96.00m 96.00m
# 如果需要移除 使用vgreduce 命令
[root@k8s-master ~]# vgreduce vgdata /dev/sdd1
Removed "/dev/sdd1" from volume group "vgdata"
# 使用pvremove 删除pv物理卷
[root@k8s-master ~]# pvremove /dev/sdd1
Labels on physical volume "/dev/sdd1" successfully wiped.
扩容lv逻辑卷
# 先卸载lv设备
[root@k8s-master /]# umount /vgdata/lv1
#扩容50M
[root@k8s-master /]# lvextend -L +50M /dev/vgdata/lv1
Rounding size to boundary between physical extents: 52.00 MiB.
Size of logical volume vgdata/lv1 changed from 100.00 MiB (25 extents) to 152.00 MiB (38 extents).
Logical volume vgdata/lv1 successfully resized.
# 重新进行挂载
[root@k8s-master /]# mount /dev/vgdata/lv1 /vgdata/lv1/
# 查看磁盘信息
[root@k8s-master /]# df -Th | grep lv1
/dev/mapper/vgdata-lv1 xfs 97M 5.3M 92M 6% /vgdata/lv1
# 上面查看磁盘信息, 发现/vgdata/lv1还是100M
# 需要调整xfs文件系统的大小,才能让扩容生效
[root@k8s-master /]# xfs_growfs /dev/vgdata/lv1
meta-data=/dev/mapper/vgdata-lv1 isize=512 agcount=4, agsize=6400 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=25600, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 25600 to 38912
[root@k8s-master /]# df -Th | grep lv1
/dev/mapper/vgdata-lv1 xfs 149M 5.4M 144M 4% /vgdata/lv1
# 发现扩容生效了
没有评论
博主关闭了评论...