lvm 逻辑卷
lvm简介
LVM(Logical Volume Manager)中文名:逻辑卷管理器,本质上是一个虚拟设备驱动,是在内核中块设备和物理设备之间添加的一个新的抽象层次,它可以将几块磁盘(物理卷,PhysicalVolume)组合起来形成一个存储池或者卷组(VolumeGroup)。
LVM可以每次从卷组中划分出不同大小的逻辑卷(LogicalVolume)创建新的逻辑设备。底层的原始的磁盘不再由内核直接控制,而由LVM层来控制。对于上层应用来说卷组替代了磁盘块成为数据存储的基本单元。
LVM管理着所有物理卷的物理盘区,维持着逻辑盘区和物理盘区之间的映射。LVM逻辑设备向上层应用提供了和物理磁盘相同的功能,如文件系统的创建和数据的访问等。但LVM逻辑设备不受物理约束的限制,逻辑卷不必是连续的空间,它可以跨越许多物理卷,并且可以在任何时候任意的调整大小。相比物理磁盘来说,更易于磁盘空间的管理。
LVM的优点与缺点
我们平时使用电脑,当磁盘空间不足时,一般没办法对磁盘空间进行扩充,我们只能添加新的硬盘,在对新的硬盘进行分区创建,再格式化才能使用。当然这对于我们个人电脑当然足够,除了有点麻烦。但在工作环境下的服务器,我们很难将其关机再添加新的硬盘,要知道运行着重要服务的服务器一般是24小时不间断运行的,此时通过LVM我们就能对系统的磁盘进行动态管理。
image.png
LVM机制的基本概念:
卷组(VG)示意图

术语解释:
物理存储介质(The physical media):这里指系统的存储设备:硬盘,如:/dev/hda1、/dev/sda等等,是存储系统最低层的存储单元。
物理卷(physical volume)PV:物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
卷组(Volume Group)VG:LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
逻辑卷(logical volume)LV:LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
物理块(physical extent)PE:每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
逻辑块(logical extent)LE:逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
LVM的管理命令

lvm重要命令介绍
pvcreate命令:创建新的物理卷(格式:pvcreate...设备名1...[设备名2])
vgcreate命令:创建新的卷组(格式:vgcreate...卷组名...物理卷名1...物理卷名2)
lvcreate命令:创建新的逻辑卷(格式:lvcreate...-L...容量大小...-n...逻辑卷名...卷组名)
lvextend命令:添加逻辑卷的存储空间(格式:lvextend...-L...+容量大小.../dev/卷组名/逻辑卷名)
lvm创建逻辑卷的流程(实际操作)
第一步 添加两块硬盘

第二步 使用lsblk命令 检查磁盘是否添加成功

第三步 用pcvreate命令将两个磁盘创建为物理卷
[root@localhost ~]# pvcreate /dev/sdb /dev/sdc
Physical volume "/dev/sdb" successfully created.
Physical volume "/dev/sdc" successfully created.
查看物理卷是否创建成功
[root@localhost ~]# pvscan
PV /dev/sda2 VG centos lvm2 [59.80 GiB / 0 free]
PV /dev/sdc lvm2 [20.00 GiB]
PV /dev/sdb lvm2 [20.00 GiB]
Total: 3 [99.80 GiB] / in use: 1 [59.80 GiB] / in no VG: 2 [40.00 GiB]
第四步 新建卷组 (VG)
[root@localhost ~]# vgcreate data_vg /dev/sdb /dev/sdc
Volume group "data_vg" successfully created
查看vg详细信息
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name data_vg
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 39.99 GiB
PE Size 4.00 MiB
Total PE 10238
Alloc PE / Size 0 / 0
Free PE / Size 10238 / 39.99 GiB
VG UUID VgRlHx-6eT3-V2rM-gqpQ-ZXEr-J37D-grYJQe
--- 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 59.80 GiB
PE Size 4.00 MiB
Total PE 15309
Alloc PE / Size 15309 / 59.80 GiB
Free PE / Size 0 / 0
VG UUID KOf9lB-Un4p-aQdw-HhNP-CMC8-tzaa-RXcdbS
第五步新建逻辑卷
[root@localhost ~]# lvcreate -L 10G -n data_lv data_vg
Logical volume "data_lv" created.
[root@localhost ~]# lvcreate -L 10G -n data1_lv data_vg
Logical volume "data1_lv" created.
查看lv详细信息
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/data_vg/data_lv
LV Name data_lv
VG Name data_vg
LV UUID unMx09-Yeju-QSJJ-2vIe-JxS9-99Y5-GqDAi2
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2021-12-17 10:53:27 -0500
LV Status available
# open 0
LV Size 10.00 GiB
Current LE 2560
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
--- Logical volume ---
LV Path /dev/data_vg/data1_lv
LV Name data1_lv
VG Name data_vg
LV UUID CdObad-IDe0-X2TW-2GK1-Ad2p-BbFf-khyt02
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2021-12-17 10:53:34 -0500
LV Status available
# open 0
LV Size 10.00 GiB
Current LE 2560
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
--- Logical volume ---
LV Path /dev/centos/swap
LV Name swap
VG Name centos
LV UUID EiTkhB-rXrM-3NFR-Pdua-kE5d-Vr1z-ahqdJq
LV Write Access read/write
LV Creation host, time localhost, 2021-04-14 10:09:33 -0400
LV Status available
# open 2
LV Size 1.00 GiB
Current LE 256
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1
--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID EZofSL-dwV4-Ks11-B2cm-moTG-uAgD-b5KwHZ
LV Write Access read/write
LV Creation host, time localhost, 2021-04-14 10:09:33 -0400
LV Status available
# open 1
LV Size 58.80 GiB
Current LE 15053
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
再次查看分区信息
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 200M 0 part /boot
└─sda2 8:2 0 59.8G 0 part
├─centos-root 253:0 0 58.8G 0 lvm /
└─centos-swap 253:1 0 1G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
└─data_vg-data_lv 253:2 0 10G 0 lvm
sdc 8:32 0 20G 0 disk
└─data_vg-data1_lv 253:3 0 10G 0 lvm
sr0 11:0 1 1024M 0 rom
格式化逻辑卷lvm所在分区
[root@localhost ~]# mkfs.xfs -f -n ftype=1 /dev/data_vg/data_lv
meta-data=/dev/data_vg/data_lv isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]# mkfs.xfs -f -n ftype=1 /dev/data_vg/data1_lv
meta-data=/dev/data_vg/data1_lv isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
临时挂载
[root@localhost ~]# mkdir /test{1..2}
[root@localhost ~]#
[root@localhost ~]# mount /dev/data_vg/data_lv /test1/
[root@localhost ~]# mount /dev/data_vg/data1_lv /test2/
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 59G 1.9G 57G 4% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 992M 0 992M 0% /dev/shm
tmpfs 992M 9.5M 982M 1% /run
tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/sda1 197M 108M 90M 55% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/mapper/data_vg-data_lv 10G 33M 10G 1% /test1
/dev/mapper/data_vg-data1_lv 10G 33M 10G 1% /test2
永久挂载
[root@localhost ~]# umount -lf /test1
[root@localhost ~]# umount -lf /test2
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 59G 1.9G 57G 4% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 992M 0 992M 0% /dev/shm
tmpfs 992M 9.5M 982M 1% /run
tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/sda1 197M 108M 90M 55% /boot
tmpfs 199M 0 199M 0% /run/user/0
[root@localhost ~]# mount -a
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 59G 1.9G 57G 4% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 992M 0 992M 0% /dev/shm
tmpfs 992M 9.5M 982M 1% /run
tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/sda1 197M 108M 90M 55% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/mapper/data_vg-data_lv 10G 33M 10G 1% /test1
/dev/mapper/data_vg-data1_lv 10G 33M 10G 1% /test2
[root@localhost ~]# tail -3 /etc/fstab
/dev/data_vg/data_lv /test1 xfs defaults 0 0
/dev/data_vg/data1_lv /test2 xfs defaults 0 0
lvm扩容
ext2/ext3/ext4 文件系统扩容操作
ext2/ext3/ext4文件系统, 调整命令为resize2fs 或者直接用 -r 自动扩展文件系统大小
[root@localhost ~]# umount -lf /dev/mapper/data_vg-data_lv
[root@localhost ~]# mkfs.ext4 /dev/mapper/data_vg-data_lv
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2151677952
80 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
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
[root@localhost ~]# lvextend -L +1G /dev/data_vg/data_lv
Size of logical volume data_vg/data_lv changed from 10.00 GiB (2560 extents) to 11.00 GiB (2816 extents).
Logical volume data_vg/data_lv successfully resized.
[root@localhost ~]# mo
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# mount /dev/mapper/data_vg-data_lv /test1
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 59G 1.9G 57G 4% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 992M 0 992M 0% /dev/shm
tmpfs 992M 9.6M 982M 1% /run
tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/sda1 197M 108M 90M 55% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/mapper/data_vg-data1_lv 10G 33M 10G 1% /test2
/dev/mapper/data_vg-data_lv 9.8G 37M 9.2G 1% /test1
[root@localhost ~]# resize2fs /dev/data_vg/data_lv
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/data_vg/data_lv is mounted on /test1; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 2
The filesystem on /dev/data_vg/data_lv is now 2883584 blocks long.
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 59G 1.9G 57G 4% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 992M 0 992M 0% /dev/shm
tmpfs 992M 9.6M 982M 1% /run
tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/sda1 197M 108M 90M 55% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/mapper/data_vg-data1_lv 10G 33M 10G 1% /test2
/dev/mapper/data_vg-data_lv 11G 41M 11G 1% /test1
使用 -r 参数直接自动扩展文件系统大小
[root@localhost ~]# lvextend -L +2G /dev/data_vg/data_lv -r
Size of logical volume data_vg/data_lv changed from 11.00 GiB (2816 extents) to 13.00 GiB (3328 extents).
Logical volume data_vg/data_lv successfully resized.
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/data_vg-data_lv is mounted on /test1; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 2
The filesystem on /dev/mapper/data_vg-data_lv is now 3407872 blocks long.
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 59G 1.9G 57G 4% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 992M 0 992M 0% /dev/shm
tmpfs 992M 9.6M 982M 1% /run
tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/sda1 197M 108M 90M 55% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/mapper/data_vg-data1_lv 10G 33M 10G 1% /test2
/dev/mapper/data_vg-data_lv 13G 41M 12G 1% /test1
xfs文件系统扩容操作
xfs文件系统调整命令为xfs_growfs. 后者直接用-r自动扩展文件系统大小
xfs扩容操作
[root@localhost ~]# lvextend -L +2G /dev/data_vg/data1_lv
Size of logical volume data_vg/data1_lv changed from 10.00 GiB (2560 extents) to 12.00 GiB (3072 extents).
Logical volume data_vg/data1_lv successfully resized.
[root@localhost ~]# xfs_growfs /dev/data_vg/data1_lv
meta-data=/dev/mapper/data_vg-data1_lv isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=2621440, 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 2621440 to 3145728
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 59G 1.9G 57G 4% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 992M 0 992M 0% /dev/shm
tmpfs 992M 9.6M 982M 1% /run
tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/sda1 197M 108M 90M 55% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/mapper/data_vg-data1_lv 12G 33M 12G 1% /test2
/dev/mapper/data_vg-data_lv 13G 41M 12G 1% /test1
使用 -r 参数直接自动扩展文件系统大小
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 59G 1.9G 57G 4% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 992M 0 992M 0% /dev/shm
tmpfs 992M 9.6M 982M 1% /run
tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/sda1 197M 108M 90M 55% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/mapper/data_vg-data1_lv 12G 33M 12G 1% /test2
/dev/mapper/data_vg-data_lv 13G 41M 12G 1% /test1
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# lvextend -L +2G /dev/data_vg/data1_lv -r
Size of logical volume data_vg/data1_lv changed from 12.00 GiB (3072 extents) to 14.00 GiB (3584 extents).
Logical volume data_vg/data1_lv successfully resized.
meta-data=/dev/mapper/data_vg-data1_lv isize=512 agcount=5, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=3145728, 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 3145728 to 3670016
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 59G 1.9G 57G 4% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 992M 0 992M 0% /dev/shm
tmpfs 992M 9.6M 982M 1% /run
tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/sda1 197M 108M 90M 55% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/mapper/data_vg-data1_lv 14G 33M 14G 1% /test2
/dev/mapper/data_vg-data_lv 13G 41M 12G 1% /test1
卷组的扩容 (VG)
新增加一块硬盘

探测硬盘不重启方法
添加完硬盘后一般是重启系统,单企业中服务器不能随便启动, 这里我们用 echo "- - -" > /sys/class/scsi_host/host0/scan命令重新扫描scsi总线来添加硬盘
[root@localhost ~]# pvcreate /dev/sdd
Physical volume "/dev/sdd" successfully created.
[root@localhost ~]# vgex
vgexport vgextend
[root@localhost ~]# vgex
vgexport vgextend
[root@localhost ~]# vgextend data_vg /dev/sdd
Volume group "data_vg" successfully extended
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- 59.80g 0
data_vg 3 0 0 wz--n- <59.99g <59.99g