- 如何从 LVM 的卷组中删除物理卷?
- 多块弹性云硬盘构建 LVM 逻辑卷—腾讯云
- centos7根目录扩容(根目录在sda3 vgdisplay为空)—【简单有效】
- resize2fs 详解和 LVM 逻辑卷缩减
- Linux分区调整(LVM和非LVM环境中扩容和缩小)—【详细】
构建 LVM 逻辑卷
逻辑卷管理(Logical Volume Manager,LVM)通过在硬盘和分区之上建立一个逻辑层,将磁盘或分区划分为相同大小的 PE(Physical Extents)单元,不同的磁盘或分区可以划归到同一个卷组(VG,Volume Group),在 VG 上可以创建逻辑卷(LV,Logical Volume),在 LV 上可以创建文件系统。
相较于直接使用磁盘分区的方式,LVM 的优势在于弹性调整文件系统的容量:
- 文件系统不再受限于物理磁盘的大小,可以分布在多个磁盘中。
例如,您可以购买3块4TB的弹性云硬盘并使用 LVM 创建一个将近12TB的超大文件系统。 - 可以动态调整逻辑卷大小,不需要对磁盘重新分区。
当 LVM 卷组的空间无法满足您的需求时,您可以单独购买弹性云硬盘并挂载到相应的云服务器上,然后将其添加到 LVM 卷组中进行扩容操作。
0️⃣:准备工作:
- 两个空分区(没有创建文件系统),假设有
/dev/sda4
和/dev/sdb
两个分区 - 已使用 root 用户登录服务器
1️⃣:创建物理卷 PV
$ pvcreate /dev/sda4 /dev/vdd /dev/sdb
创建成功,如图所示(因为sdb 分区之前创建了文件系统,所以要擦除)
通过以下命令,查看现在系统中的物理卷
$ lvmdiskscan | grep LVM
# 或者
$ pvdisplay
2️⃣:创建卷组 VG
创建一个名为 lvm_demo
的卷组
$ vgcreate lvm_demo /dev/sda4 /dev/sdb
创建成功则如图所示
可以通过以下命令,向卷组中添加新的物理卷
# vgextend 卷组名 新物理卷路径
# 假设有一个物理卷为 sda5
$ vgextend lvm_demo /dev/sda5
通过 vgs
、vgdisplay
等命令可以查看当前系统中的卷组信息
3️⃣:创建逻辑卷 LV
创建大小是500MB,名为 lv_demo 的逻辑卷
$ lvcreate -L 500MB -n lv_demo lvm_demo
创建成功后,如图所示,物理卷 /dev/sda4 被使用了 500MB 的空间
4️⃣:创建并挂载文件系统
$ mkfs.ext4 /dev/lvm_demo/lv_demo
创建成功后,如图所示
挂载至目录 /tmp/test
下
$ mkdir /tmp/test
$ mount /dev/lvm_demo/lv_demo /tmp/test/
说明:
通过 fdisk -l 可以看到逻辑卷 /dev/lvm_demo/lv_demo 的信息
可以通过 df -TH 命令查看是否挂载成功
5️⃣:动态扩展逻辑卷及文件系统大小
扩展前提:
仅当卷组 VG 容量有剩余时,LV 容量可动态扩展。扩展 LV 容量后,需一并扩展创建在该 LV 上的文件系统的大小。
扩展逻辑卷大小,增加 500MB
# lvextend [-L +/- <增减容量>] <逻辑卷路径>
$ lvextend -L +500MB /dev/lvm_demo/lv_demo
说明:如图所示 两个物理卷被使用了 1000MB 的空间
此时逻辑卷虽然变为 1000MB,但是文件系统并没有变大,还需要执行以下命令
$ resize2fs /dev/lvm_demo/lv_demo
最后可以通过 df -h
命令,查看容量是否变为 1000MB
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OiOL2q2F-1652022822997)(E:/%E7%AC%94%E8%AE%B0/pic/image-20220502235714069.png)]
压缩逻辑卷
假设 /tmp/test 文件夹需要的最大容量是 500MB,现在想要压缩逻辑卷 lvm_demo_lv_demo
,由 1000MB 变为 500MB,并且将分区 /dev/sdb 移出卷组 lv_demo,用作其他用途。
❗️ 注意:压缩逻辑卷前,要保证逻辑卷的总容量大于逻辑卷所有文件的总容量。
1️⃣:对 LVM 强制执行文件系统检测
$ e2fsck -f /dev/mapper/lvm_demo-lv_demo
2️⃣:调整文件系统大小
压缩为文件系统大小为 500M (其中文件总共小于500M)
# 大小单位可以为 'K', 'M', 'G', 'T',大小写均可
$ resize2fs /dev/lvm_demo/lv_demo 500M
注意:resize2fs 的大小参数不支持小数。
如:
$ resize2fs /dev/lvm_demo/lv_demo 0.5G # 报错 resize2fs 1.42.9 (28-Dec-2013) resize2fs: 无效的新大小(Invalid new size):500MB
3️⃣:压缩逻辑卷大小
# 压缩逻辑卷至 500MB
$ lvreduce -L 500M /dev/lvm_demo/lv_demo
通过 pvs 可以看到 /dev/sdb 完全空闲,可以将其移出
4️⃣:将物理卷 /dev/sdb 移出卷组 lvm_demo
$ vgreduce lvm_demo /dev/sdb
通过 vgs 可以看到 卷组的情况
5️⃣:擦除物理卷 /dev/sdb
$ pvremove /dev/sdb
之后就可以将 /dev/sdb 用作其他用途了
非 LVM 分区调整分区大小
总的来说调整分区大小步骤就是:
- 1、卸载分区 —> 2、扩容或缩小分区和文件系统 —> 3、重新挂载分区
但是在非 LVM 分区,可以在线扩容,但是不可以在线缩小分区(在线即挂载了目录)。
如图所示,不能够在线调整文件系统(ext4)的大小,必需要先卸载分区(umount)才能调整大小。但是根目录( / )在系统运行状态是不能卸载的。
不同的文件系统格式下可以做的操作有所不同,这里只以 ext4 为例。
ext4支持扩容和缩小,home分区(你的私人分区)扩容或缩小均可以在root用户登录做卸载后调整,其他分区必须进救援模式进行扩容或缩小。
扩容分区
扩容分区可以通过将待扩容分区的相邻分区,划分到一起进行扩容。 ===> 参考
或者构建逻辑卷进行扩容,这里不再赘述。
缩小分区
现有一个分区 /dev/sdb1,大小为 500MB,但是平常最多只会使用 250MB,所以计划缩小分区为 250MB
通过 df -TH
查看挂载分区的使用情况 (以下图片仅供参考)
1️⃣:卸载待修改分区(/dev/sdb1)
umount /dev/sdb1
2️⃣:检查该分区,并且缩小文件系统的大小
# 先检查格式系统
$ e2fsck –f /dev/sdb1
#开启journal,在系统事故,或者掉电的情况下, journal 可以帮助文件系统找回丢失的文件。 (可选)
$ tune2fs -o has_journal /dev/sdb1
# 缩小文件系统大小,缩小为 250M
resize2fs -f /dev/sdb1 250M
3️⃣:缩小分区大小
$ fdisk /dev/sdb1
# 1.删除原分区 /dev/sdb1
# 2.创建新分区 /dev/sdb1 ===> 容量只有一半(根据Unit大小和扇区起始位置计算即可)
# 3.创建新分区 /dev/sdb2 (可选) ===> 默认即可
4️⃣:调整文件系统,并挂载
# 让文件系统自动适应分区
resize2fs -f /dev/sdb1
# 重新挂载到文件夹
mount /dev/sdb1 /tmp/test