## 逻辑盘卷管理(LVM,Logical Volume Manager)
# 可以在一个硬盘的多个分区,或多个硬盘上,建立存储组,灵活分配给系统使用,可以动态改变挂载分区大小
【结构】
物理硬盘(disk)----分成---> 多个物理卷(PV)
多个物理卷(PV)----组成---> 一个卷组(VG)
一个卷组(VG)------分成---> 多个逻辑卷(LV)
每个逻辑卷(LV)----挂载---> 一个目录(dir)
【操作流程】
把新硬盘创建成PV
把PV加进VG(VG容量增加)
用VG空余空间扩展LV(LV容量增加)
LV就是挂载的分区
【LVM 详细说明】
物理存储介质 (The physical media)
# 命令:fdisk -l
# 硬盘,如:/dev/hda、/dev/sda等等,是存储系统最低层的存储单元。
PV 物理卷 (physical volume)
# 命令:pvdisplay
# 由物理硬盘或硬盘上的分区创建
# 是LVM的基本存储逻辑块,包含有与LVM相关的管理参数。
PE 物理基本单元 (physical extent)
# 命令:pvdisplay
# 每一个物理卷被划分为称为PE(Physical Extents)的基本单元,
# 具有唯一编号的PE是可以被LVM寻址的最小单元。
# PE的大小是可配置的,默认为4MB。
VG 卷组 (Volume Group)
# 命令:vgdisplay
# 由一个或多物理卷(PV)组成
# 相当于"物理硬盘,存储池"
# 卷组(VG)上可以创建一个或多个逻辑卷(LV)
LV 逻辑卷 (logical volume)
# 命令:lvdisplay
# 相当于"硬盘分区"
# 逻辑卷(LV)可以挂载目录(/home等)
LE 逻辑基本单元 (logical extent)
# 逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。
# 在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
【操作示例】
##【方案一】【新加硬盘】
# 先看新硬盘是否被系统识别到,并查看新硬盘名称,如果上一个硬盘叫sda,那这个新的为sdb,以此类推。
fdisk -l
# 创建 PV(创建新的物理卷)
pvcreate /dev/sdb
# 查看当前VG组名称,看VG Name和Free PE / Size剩余空间
vgdisplay
# VG 扩容 将新的物理卷添加到现有卷组(把sdb扩展到名为centos的VG)(注意:这个VG要预留一些空间才能操作)
vgextend centos /dev/sdb
# 再次查看 VG 信息,发现空余空间变大了,增加了新加的硬盘容量
vgdisplay
# 从VG空闲空间分配空间给指定分区(创建逻辑卷)
-L:指定逻辑卷的大小,单位为"kKmMgGtT"字节;
lvextend -L +100G /dev/mapper/centos-root
-l:指定逻辑卷的大小(LE数)。
lvextend -l +100%free /dev/mapper/centos-root
# 查看当前各分区容量(当前还没增加容量)
df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 6.2G 3.0G 3.3G 48% /
# 分区扩容(会自动格式化新加的部分,不影响老的部分)
xfs_growfs /dev/mapper/centos-root
# 再查看当前各分区容量(现在容量已经增加,可以正常使用)
df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 7.2G 3.0G 4.3G 41% /
##【方案二】【从空余分区抽取】
# 虽然xfs文件系统只支持增加,不支持减少。
# 但并不是说在xfs系统文件下不能减小,只是减小后,需要重新格式化才能挂载上。这样原来的数据就丢失了!
# 这种情况只适用于系统刚安装好,逻辑分区内没有什么数据或数据不多且不重要可以删除或拷贝的情况下
umount /home/ # 卸载 home 分区,注意里面的数据提前备份或者移走
lvreduce -L -100G /dev/mapper/centos-home # 抽取100G
mkfs.xfs /dev/mapper/centos-home -f # 重新格式化这个分区,格式化后才能再次挂载到home下,内容就消失了,需要提前备份好
mount /dev/mapper/centos-home /home/ # 挂载 home 分区
lvextend -L +100G /dev/mapper/centos-root # 增加 / 分区可以用空间
xfs_growfs /dev/mapper/centos-root # 实际增加 / 分区空间
【案例一】(新加磁盘扩容VG中的LV空间)
##【加硬盘前】
##【查看分区信息】
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 2.6G 1019M 1.6G 39% /
devtmpfs 486M 0 486M 0% /dev
tmpfs 497M 0 497M 0% /dev/shm
tmpfs 497M 6.6M 490M 2% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/sda1 1014M 125M 890M 13% /boot
tmpfs 100M 0 100M 0% /run/user/0
##【查看LVM信息】
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <3.00 GiB
PE Size 4.00 MiB
Total PE 767
Alloc PE / Size 767 / <3.00 GiB
Free PE / Size 0 / 0
VG UUID yGqUoi-gojE-VjQR-jpbi-OQv8-FOZr-YfCyC6
##【查看物理硬盘信息】
[root@localhost ~]# fdisk -l
磁盘 /dev/sda:4294 MB, 4294967296 字节,8388608 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a0e1b
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 8388607 3144704 8e Linux LVM
磁盘 /dev/mapper/centos-root:2785 MB, 2785017856 字节,5439488 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/mapper/centos-swap:432 MB, 432013312 字节,843776 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
##【添加硬盘后】
##【查看物理硬盘信息】
[root@localhost ~]# fdisk -l
磁盘 /dev/sda:4294 MB, 4294967296 字节,8388608 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a0e1b
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 8388607 3144704 8e Linux LVM
磁盘 /dev/sdb:4294 MB, 4294967296 字节,8388608 个扇区 # 新增的硬盘
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/mapper/centos-root:2785 MB, 2785017856 字节,5439488 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/mapper/centos-swap:432 MB, 432013312 字节,843776 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
##【创建 PV(创建新的物理卷)】
[root@localhost ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
## 查看当前VG组名称,看 VG Name 和 Free PE / Size 剩余空间
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name centos # 记住这个名字,我们要增加它的空间
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <3.00 GiB
PE Size 4.00 MiB
Total PE 767 # 一共有767个PE
Alloc PE / Size 767 / <3.00 GiB # 已经使用了767个PE
Free PE / Size 0 / 0 # 已经没有多余可用PE(我们要把新磁盘创建出的PE先加到这里)
VG UUID yGqUoi-gojE-VjQR-jpbi-OQv8-FOZr-YfCyC6
## VG 扩容 将新的物理卷添加到现有卷组(把 sdb 扩展到名为 centos 的 VG)
[root@localhost ~]# vgextend centos /dev/sdb
Volume group "centos" successfully extended
## 再次查看 VG 信息,发现空余空间变大了,增加了新加的硬盘容量
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 2
Act PV 2
VG Size 6.99 GiB
PE Size 4.00 MiB
Total PE 1790
Alloc PE / Size 767 / <3.00 GiB
Free PE / Size 1023 / <4.00 GiB # 可用PE增加了
VG UUID yGqUoi-gojE-VjQR-jpbi-OQv8-FOZr-YfCyC6
##【查看当前各分区容量信息】当前还没增加容量,获得文件系统名称,对这个文件系统增加容量
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 2.6G 1018M 1.6G 39% /
devtmpfs 486M 0 486M 0% /dev
tmpfs 497M 0 497M 0% /dev/shm
tmpfs 497M 6.6M 490M 2% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/sda1 1014M 125M 890M 13% /boot
tmpfs 100M 0 100M 0% /run/user/0
##【二选一】【把VG空余容量全部增加给LV(/dev/mapper/centos-root)】
[root@localhost ~]# lvextend -l +100%free /dev/mapper/centos-root
Size of logical volume centos/root changed from 2.59 GiB (664 extents) to <6.59 GiB (1687 extents).
Logical volume centos/root successfully resized.
##【二选一】【从VG空余容量中划分指定容量增加给LV(/dev/mapper/centos-root)】
[root@localhost ~]# lvextend -L +100G /dev/mapper/centos-root
##【查看当前各分区容量信息】当前还没增加容量
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 2.6G 1018M 1.6G 39% /
devtmpfs 486M 0 486M 0% /dev
tmpfs 497M 0 497M 0% /dev/shm
tmpfs 497M 6.6M 490M 2% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/sda1 1014M 125M 890M 13% /boot
tmpfs 100M 0 100M 0% /run/user/0
##【开始扩容 "/" 分区所在的文件系统 "/dev/mapper/centos-root"】会自动格式化
[root@localhost ~]# xfs_growfs /dev/mapper/centos-root
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=169984 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=679936, 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 679936 to 1727488
##【查看分区信息】"/"分区的挂载的文件系统(/dev/mapper/centos-root)已经增加了容量,可以正常使用
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 6.6G 1018M 5.6G 16% /
devtmpfs 486M 0 486M 0% /dev
tmpfs 497M 0 497M 0% /dev/shm
tmpfs 497M 6.6M 490M 2% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/sda1 1014M 125M 890M 13% /boot
tmpfs 100M 0 100M 0% /run/user/0
【案例二】(在VG中创建新LV用于挂载新目录)
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/cl-root 17G 950M 17G 6% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.4M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/vda1 1014M 139M 876M 14% /boot
tmpfs 334M 0 334M 0% /run/user/0
[root@localhost ~]# fdisk -l
磁盘 /dev/vda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000b9a67
设备 Boot Start End Blocks Id System
/dev/vda1 * 2048 2099199 1048576 83 Linux
/dev/vda2 2099200 41943039 19921920 8e Linux LVM
磁盘 /dev/mapper/cl-root:18.2 GB, 18249416704 字节,35643392 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/mapper/cl-swap:2147 MB, 2147483648 字节,4194304 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/vdb:53.7 GB, 53687091200 字节,104857600 个扇区 # 找到新硬盘
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
## 新硬盘做成PV
[root@localhost ~]# pvcreate /dev/vdb
Physical volume "/dev/vdb" successfully created.
## 查看变化前VG
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name cl
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 19.00 GiB
PE Size 4.00 MiB
Total PE 4863
Alloc PE / Size 4863 / 19.00 GiB
Free PE / Size 0 / 0 # 无可用空间
VG UUID twIZ3Q-5nGs-lRmP-MlLl-Nz0a-ITe3-U29O09
## 新PV全部增加给VG
[root@localhost ~]# vgextend cl /dev/vdb
Volume group "cl" successfully extended
## 查看变化后VG
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name cl
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 2
Act PV 2
VG Size 68.99 GiB
PE Size 4.00 MiB
Total PE 17662
Alloc PE / Size 4863 / 19.00 GiB
Free PE / Size 12799 / 50.00 GiB # 新加50G空间
VG UUID twIZ3Q-5nGs-lRmP-MlLl-Nz0a-ITe3-U29O09
## 查看当前LV
[root@localhost ~]# lvscan
ACTIVE '/dev/cl/swap' [2.00 GiB] inherit
ACTIVE '/dev/cl/root' [17.00 GiB] inherit
## 创建新LV
[root@localhost ~]# lvcreate -L 45G -n lv_db cl # 大小45G 名字是lv_db 在名为cl的VG组
Logical volume "lv_db" created.
## 再看LV
[root@localhost ~]# lvscan
ACTIVE '/dev/cl/swap' [2.00 GiB] inherit
ACTIVE '/dev/cl/root' [17.00 GiB] inherit
ACTIVE '/dev/cl/lv_db' [45.00 GiB] inherit # 新增成功
## 格式化
[root@localhost ~]# mkfs -t ext4 /dev/cl/lv_db
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
2949120 inodes, 11796480 blocks
589824 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2160066560
360 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
## 创建挂载目录
[root@localhost ~]# mkdir /DB
## 挂载
[root@localhost ~]# mount /dev/cl/lv_db /DB/
## 查看挂载
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/cl-root 17G 950M 17G 6% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.4M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/vda1 1014M 139M 876M 14% /boot
tmpfs 334M 0 334M 0% /run/user/0
/dev/mapper/cl-lv_db 45G 53M 42G 1% /DB # 挂载成功
## 开启挂载配置
[root@localhost ~]# vi /etc/fstab
/dev/mapper/cl-root / xfs defaults 0 0
UUID=232b6956-956e-4cf6-8e02-66105790dbb1 /boot xfs defaults 0 0
/dev/mapper/cl-swap swap swap defaults 0 0
/dev/cl/lv_db /DB ext4 defaults 0 0 # 新加
/etc/fstab 设置参考
https://blog.youkuaiyun.com/youmatterhsp/article/details/83933158
【案例三】(创建新VG)
## 查看当前VG信息
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name centos ## 原有VG
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <19.00 GiB
PE Size 4.00 MiB
Total PE 4863
Alloc PE / Size 4863 / <19.00 GiB
Free PE / Size 0 / 0
VG UUID 5ZVX7c-gEno-1fuv-dd3a-OHrt-R2t6-y5m2A8
## 查看原有物理磁盘信息
[root@localhost ~]# fdisk -l
磁盘 /dev/vda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000ba3c2
设备 Boot Start End Blocks Id System
/dev/vda1 * 2048 2099199 1048576 83 Linux
/dev/vda2 2099200 41943039 19921920 8e Linux LVM
磁盘 /dev/mapper/centos-root:18.2 GB, 18249416704 字节,35643392 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/mapper/centos-swap:2147 MB, 2147483648 字节,4194304 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
## 查看物理磁盘信息(增加物理磁盘后)
[root@localhost ~]# fdisk -l
磁盘 /dev/vda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000ba3c2
设备 Boot Start End Blocks Id System
/dev/vda1 * 2048 2099199 1048576 83 Linux
/dev/vda2 2099200 41943039 19921920 8e Linux LVM
磁盘 /dev/mapper/centos-root:18.2 GB, 18249416704 字节,35643392 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/mapper/centos-swap:2147 MB, 2147483648 字节,4194304 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/vdb:32.2 GB, 32212254720 字节,62914560 个扇区 ## 找到新增磁盘 /dev/vdb
Units = 扇区 of 1 * 512 = 512 bytes ##
扇区大小(逻辑/物理):512 字节 / 512 字节 ##
I/O 大小(最小/最佳):512 字节 / 512 字节 ##
## 新硬盘做成PV
[root@localhost ~]# pvcreate /dev/vdb
Physical volume "/dev/vdb" successfully created.
## 新建VG 名字为VG_newname 使用上一步建好的PV
[root@localhost ~]# vgcreate VG_newname /dev/vdb
Volume group "VG_newname" successfully created
## 再次查看是否出现新建的VG
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <19.00 GiB
PE Size 4.00 MiB
Total PE 4863
Alloc PE / Size 4863 / <19.00 GiB
Free PE / Size 0 / 0
VG UUID 5ZVX7c-gEno-1fuv-dd3a-OHrt-R2t6-y5m2A8
--- Volume group ---
VG Name VG_newname ## 出现新建的VG
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 <30.00 GiB
PE Size 4.00 MiB
Total PE 7679
Alloc PE / Size 0 / 0
Free PE / Size 7679 / <30.00 GiB
VG UUID 4eBLcf-E4G0-2zVF-g3Sp-dkkH-FG6Y-HCBX2Q