1、LVM
的基本概念
问题:对于生产环境下的服务器来说,如果存储数据的分区磁盘空间不够了怎么办?
2、LVM
的工作原理
LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。管理员利用LVM可以在磁盘不用重新分区的情况下动态调整文件系统的大小,并且利用LVM管理的文件系统可以跨越磁盘,当服务器添加了新的磁盘后,管理员不必将原有的文件移动到新的磁盘上,而是通过LVM可以直接扩展文件系统跨越磁盘。
它就是通过将底层的物理硬盘封装起来,然后以逻辑卷的方式呈现给上层应用。在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。
逻辑卷管理的核心在于如何处理我们系统中安装的硬盘及其分区,对于我们的逻辑卷管理器来说,把硬盘当作物理卷来看。
3、常用术语
-
物理存储介质(The physical media)
这里指系统的存储设备文件,可是磁盘分区,整个磁盘,RAID阵列或SAN磁盘,设备必须初始化为LVM物理卷,才能与LVM结合使用
-
物理卷PV(physical volume)
物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数 (注册物理设备以便在卷组中使用),创建物理卷它可以用硬盘分区,也可以用硬盘本身;
-
卷组VG(Volume Group)
LVM卷组类似于非LVM系统中的物理硬盘,一个LVM卷组由一个或多个物理卷组成
-
逻辑卷LV(logical volume)
似于非LVM系统中的硬盘分区,LV建立在VG之上,可以在LV之上建立文件系统
-
PE(physical extents)
PV中可以分配的最少存储单元,PE的大小是可以指定的,默认为4MB
-
LE(logical extent)
lV中可以分配的最少存储单元,在同一个卷组中,LE的大小和PE是相同的,并且一一对应
4、优点
-
使用卷组,使多个硬盘空间看起来像是一个大的硬盘:
LVM允许将多个物理硬盘组合成一个或多个卷组(Volume Group),从而将这些硬盘空间合并在一起,形成一个逻辑上的大硬盘。在卷组上创建逻辑卷(Logical Volume)时,可以跨越多个物理硬盘。
-
使用逻辑卷,可以跨多个硬盘空间的分区 sdb1 sdb2 sdc1 sdd2 sdf:
在LVM中,逻辑卷是从卷组中划分出来的逻辑分区,可以在逻辑卷上创建文件系统,并且逻辑卷可以跨越多个物理硬盘上的分区,从而允许更大的文件系统容量。
-
在使用逻辑卷时,它可以在空间不足时动态调整它的大小:
LVM允许在逻辑卷的大小不足时,动态地增加逻辑卷的大小,从而扩展文件系统容量。这种操作对于扩展存储空间非常有用,而不需要重新分区或重新格式化磁盘。
-
在调整逻辑卷大小时,不需要考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间:
LVM的优势之一是它抽象了逻辑卷和物理硬盘之间的关系,从而使逻辑卷的大小调整更加灵活和方便。在调整逻辑卷大小时,不需要考虑硬盘上的物理位置,因为LVM会自动管理物理存储和逻辑存储之间的映射。
-
可以在线对LV,VG 进行创建,删除,调整大小等操作。LVM上的文件系统也需要重新调整大小。
LVM允许在运行时(在线)对逻辑卷和卷组进行创建、删除、调整大小等操作,而不需要停机或重启系统。但是,对于逻辑卷上的文件系统,调整逻辑卷大小后,需要使用适当的工具(如resize2fs对于ext2/ext3/ext4文件系统)来重新调整文件系统大小,以便文件系统能够识别和使用扩展后的逻辑卷空间。
-
可以将正在使用中的硬盘迁移到别的硬盘上(emc--500G DELL---1.2T):
LVM允许在不中断正在使用的逻辑卷和文件系统的情况下,将逻辑卷从一个物理硬盘迁移到另一个物理硬盘。这对于硬盘升级或替换、平衡存储负载等情况非常有用。
-
允许创建快照,可以用来保存文件系统的备份。只能使用一次:
LVM允许在逻辑卷上创建快照(Snapshot),快照是原始逻辑卷的一个副本,可以用来保存文件系统的备份或创建数据一致的快照点。快照是只读的,只能使用一次,一旦快照被使用或删除,就不能再使用。
LVM是软件的卷管理方式,而RAID是磁盘保护的方法。对于重要的业务来说,一般是同时存在。RAID用来保护物理的磁盘不会因为故障而中断业务。LVM用来实现对卷的良性的管理,更好的利用磁盘资源
5、创建LVM的基本步骤
常用命令
功能 | PV管理命令 | VG管理命令 | LV管理命令 |
---|---|---|---|
scan 扫描 | pvscan | vgscan | lvscan |
create 创建 | pvcreate | vgcreate | lvcreate |
display显示 | pvdisplay | vgdisplay | lvdisplay |
remove 移除 | pvremove | vgremove | *vremove |
extend 扩展 | vgextend | lvextend | |
reduce减少 | vgreduce | lvreduce |
-
创建物理卷
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 100G 0 disk ├─sda1 8:1 0 1G 0 part /boot ├─sda2 8:2 0 2G 0 part [SWAP] └─sda3 8:3 0 50G 0 part / sdb 8:16 0 20G 0 disk ├─sdb1 8:17 0 1G 0 part ├─sdb2 8:18 0 2G 0 part ├─sdb3 8:19 0 1G 0 part └─sdb4 8:20 0 1.2G 0 part sr0 11:0 1 950M 0 rom /mnt [root@fishman-160 ~]# pvc /dev/sdb{1..4} #创建物理卷
-
加入到卷组
[root@fishman-160 ~]# vgcreate vg01 /dev/sdb{1..4} Volume group "vg01" successfully created [root@fishman-160 ~]# vgdisplay vg01 --- Volume group --- VG Name vg01 System ID Format lvm2 Metadata Areas 4 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 4 Act PV 4 VG Size <5.18 GiB PE Size 4.00 MiB Total PE 1326 Alloc PE / Size 0 / 0 Free PE / Size 1326 / <5.18 GiB VG UUID jgUxEF-8JRf-cQtx-XtBe-Caze-AQpZ-uYacux
-
创建逻辑卷
[root@fishman-160 ~]# lvcreate -n lv01 -L 2G vg01 #创建逻辑卷lv01,2G空间 Logical volume "lv01" created. [root@fishman-160 ~]# lvcreate -n lv02 -L 1G vg01 #创建逻辑卷lv02,1G空间 Logical volume "lv02" created. [root@fishman-160 ~]# lvdisplay --- Logical volume --- LV Path /dev/vg01/lv01 LV Name lv01 VG Name vg01 LV UUID EU2pQq-pln7-l02h-pL1p-Jkid-cuVW-bOM9fU LV Write Access read/write LV Creation host, time fishman-160, 2023-08-03 10:33:49 +0800 LV Status available # open 0 LV Size 2.00 GiB Current LE 512 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:0 --- Logical volume --- LV Path /dev/vg01/lv02 LV Name lv02 VG Name vg01 LV UUID AnPHky-7f8F-PNxB-doeq-uXVY-a2LW-XDI672 LV Write Access read/write LV Creation host, time fishman-160, 2023-08-03 10:35:04 +0800 LV Status available # open 0 LV Size 1.00 GiB Current LE 256 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:1
-
格式化文件系统
[root@fishman-160 ~]# ls -l /dev/vg01/lv01 lrwxrwxrwx 1 root root 7 8月 3 10:33 /dev/vg01/lv01 -> ../dm-0 #lv01软链接到dm-0 [root@fishman-160 ~]# mkfs.ext4 /dev/dm-0 #格式化lv01 mke2fs 1.45.6 (20-Mar-2020) 创建含有 524288 个块(每块 4k)和 131072 个inode的文件系统 文件系统UUID:99624c85-7457-410f-b891-0884d70f6f83 超级块的备份存储于下列块: 32768, 98304, 163840, 229376, 294912 正在分配组表: 完成 正在写入inode表: 完成 创建日志(16384 个块)完成 写入超级块和文件系统账户统计信息: 已完成 [root@fishman-160 ~]# mkfs.ext4 /dev/dm-1 #格式化lv02 mke2fs 1.45.6 (20-Mar-2020) 创建含有 262144 个块(每块 4k)和 65536 个inode的文件系统 文件系统UUID:67a62a7e-4d0f-40b3-a33c-76522daa3b70 超级块的备份存储于下列块: 32768, 98304, 163840, 229376 正在分配组表: 完成 正在写入inode表: 完成 创建日志(8192 个块)完成 写入超级块和文件系统账户统计信息: 已完成
-
挂载
[root@fishman-160 ~]# mount /dev/vg01/lv01 /lv01
[root@fishman-160 ~]# mount /dev/vg01/lv02 /lv02
[root@fishman-160 ~]# lsblk #挂载成功
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 50G 0 part /
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 1G 0 part
│ └─vg01-lv01 253:0 0 2G 0 lvm /lv01
├─sdb2 8:18 0 2G 0 part
│ └─vg01-lv01 253:0 0 2G 0 lvm /lv01
├─sdb3 8:19 0 1G 0 part
└─sdb4 8:20 0 1.2G 0 part
└─vg01-lv02 253:1 0 1G 0 lvm /lv02
sr0 11:0 1 950M 0 rom /mnt
6、指定PE的大小
基本语法
vgcreate -s 16M vg1 /dev/sdX #-s是指定PE大小
#指定卷组中的物理区块大小为16 MiB
例:
[root@fishman-160 ~]# vgcreate -s 16M vg01 /dev/sdb1
Volume group "vg01" successfully created
[root@fishman-160 ~]# vgdisplay
--- Volume group ---
VG Name vg01
System ID
Format lvm2
Metadata Areas 1
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 1
Act PV 1
VG Size 1008.00 MiB
PE Size 16.00 MiB
Total PE 63
Alloc PE / Size 0 / 0
Free PE / Size 63 / 1008.00 MiB
VG UUID cUWnlt-v5RT-7ijU-ugPL-SZOb-dXZJ-fXwlwk
7、lv扩容
确定一下是否还有可扩容的空间,因为空间是从VG里面创建的。所以我们要保证VG还有剩余空间,而且LV不能够跨VG扩容的
基础命令
lvextend -L +30M /dev/vg01/lv01 #逻辑卷增加30M
lvextend -l 30M /dev/vg01/lv01 #逻辑卷增加到30M
例:
[root@fishman-160 ~]# lvextend -L +30M /dev/vg01/lv01 #lv01逻辑卷增加30M
Rounding size to boundary between physical extents: 32.00 MiB.
Size of logical volume vg01/lv01 changed from 208.00 MiB (13 extents) to 240.00 MiB (15 extents).
Logical volume vg01/lv01 successfully resized.
[root@fishman-160 ~]# lvs #lvs查看逻辑卷信息
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv01 vg01 -wi-a----- 240.00m
lv02 vg01 -wi-a----- 64.00m
[root@fishman-160 ~]# df -h /lv01 #df -h 查看,文件系统并没有扩充成功
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 227M 14K 211M 1% /lv01
[root@fishman-160 ~]# lvextend -L +100M /dev/vg01/lv01 #lv01再扩容100M
Rounding size to boundary between physical extents: 112.00 MiB.
Size of logical volume vg01/lv01 changed from 240.00 MiB (15 extents) to 352.00 MiB (22 extents).
Logical volume vg01/lv01 successfully resized.
[root@fishman-160 ~]# df -Th /lv01 #文件系统依然能是227M
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 ext4 227M 14K 211M 1% /lv01
[root@fishman-160 ~]# resize2fs /dev/vg01/lv01 #通过resize2fs命令对ext4的格式做扩容,扩容文件系统
resize2fs 1.45.6 (20-Mar-2020)
/dev/vg01/lv01 上的文件系统已被挂载于 /lv01;需要进行在线调整大小
old_desc_blocks = 2, new_desc_blocks = 3
/dev/vg01/lv01 上的文件系统现在为 360448 个块(每块 1k)。
[root@fishman-160 ~]# df -Th /lv01 #再次查看,扩容成功
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 ext4 335M 14K 315M 1% /lv01
直接扩容(省略resize2fs和xfs_growfs的步骤)
[root@fishman-160 ~]# lvextend -L -r +200m /dev/vg01/lv01 #-r选项是一个自动调整选项,用于告诉lvextend命令在扩展逻辑卷后,自动调整逻辑卷上的文件系统大小,使其与逻辑卷的新大小保持一致。
Size requires number argument.
Invalid argument for --size: -r
Error during parsing of command line.
[root@fishman-160 ~]# lvextend -L +200m -r /dev/vg01/lv01
Rounding size to boundary between physical extents: 208.00 MiB.
Size of logical volume vg01/lv01 changed from 352.00 MiB (22 extents) to 560.00 MiB (35 extents).
Logical volume vg01/lv01 successfully resized.
resize2fs 1.45.6 (20-Mar-2020)
/dev/mapper/vg01-lv01 上的文件系统已被挂载于 /lv01;需要进行在线调整大小
[root@fishman-160 ~]# df -Th /lv01
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 ext4 537M 14K 508M 1% /lv01
#先扩充逻辑卷,再扩充文件系统
8、vg扩容
基础语法
vgextend vg01 /dev/sdX #sdX需先完成pvcreate
例:
root@fishman-160 ~]# vgextend vg01 /dev/sdb2 #vg01添加sdb2
Volume group "vg01" successfully extended
[root@fishman-160 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 2 2 0 wz--n- <2.97g <2.36g
[root@fishman-160 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg01 lvm2 a-- 1008.00m 384.00m
/dev/sdb2 vg01 lvm2 a-- 1.98g 1.98g
/dev/sdb3 lvm2 --- 1.00g 1.00g
/dev/sdb4 lvm2 --- <1.20g <1.20g
9、lvm缩小
9.1、lv缩小
基础语法
lvreduce -L -100m -r /dev/sdX
例:
[root@fishman-160 ~]# lvreduce -L -100m -r /dev/vg01/lv01 #建议提前卸载
Rounding size to boundary between physical extents: 96.00 MiB.
Do you want to unmount "/lv01" ? [Y|n] y
fsck,来自 util-linux 2.32.1
/dev/mapper/vg01-lv01:11/143360 文件(0.0% 为非连续的), 24502/573440 块
resize2fs 1.45.6 (20-Mar-2020)
将 /dev/mapper/vg01-lv01 上的文件系统调整为 475136 个块(每块 1k)。
/dev/mapper/vg01-lv01 上的文件系统现在为 475136 个块(每块 1k)。
[root@fishman-160 ~]# lvs #查看lv
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv01 vg01 -wi-ao---- 464.00m
lv02 vg01 -wi-a----- 64.00m
ext4,xfs不支持动态缩小
9.2、vg缩小(pv要没有被使用)
基础语法
vgreduce vg01 /dev/sdX
例:
[root@fishman-160 ~]# vgreduce vg01 /dev/sdb4
Removed "/dev/sdb4" from volume group "vg01"
[root@fishman-160 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg01 lvm2 a-- 1008.00m 480.00m
/dev/sdb2 vg01 lvm2 a-- 1.98g 1.98g
/dev/sdb3 vg01 lvm2 a-- 1008.00m 1008.00m
/dev/sdb4 lvm2 --- 3.00g 3.00g
10、lvm删除
删除: umount ----> lvremove lv -----> vgremove vg -----> pvremove
卸载挂载
[root@fishman-160 ~]# umount /lv01
移除逻辑卷
[root@fishman-160 lv01]# lvremove /dev/vg01/lv01
Do you really want to remove active logical volume vg01/lv01? [y/n]: y
Logical volume "lv01" successfully removed.
移除卷组
[root@fishman-160 lv01]# vgremove vg01
Volume group "vg01" successfully removed
移除物理卷
[root@fishman-160 lv01]# pvs #通过pvs确认物理卷
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- 1.00g 1.00g
/dev/sdb2 lvm2 --- 2.00g 2.00g
/dev/sdb3 lvm2 --- 1.00g 1.00g
/dev/sdb4 lvm2 --- 3.00g 3.00g
[root@fishman-160 lv01]# pvremove /dev/sdb{1..4} #移除物理卷
Labels on physical volume "/dev/sdb1" successfully wiped.
Labels on physical volume "/dev/sdb2" successfully wiped.
Labels on physical volume "/dev/sdb3" successfully wiped.
Labels on physical volume "/dev/sdb4" successfully wiped.
标签:lv01,vg01,160,管理,dev,fishman,LVM,root
From: https://www.cnblogs.com/kcloveworld/p/17984425