一、LVM概念
1、物理设备是用于保留逻辑卷中所存储数据的存储设备。它们是块设备,可以是磁盘分区、整个磁盘、RAID阵列或SAN磁盘。设备必须初始化为LVM物理卷,才能与LVM结合使用。整个“设备”将用作一个物理卷。
2、物理卷(PV)用于注册基础物理设备以便在卷组中使用。LVM自动将PV划分为物理区块(PE);
它们是充当PV上最小存储块的小块数据。
3、卷组(VG)是存储池,由一个或多个物理卷组成。一个PV只能分配给一个VG。VG可以包含未使用的空间和任意数目的逻辑卷。
4、逻辑卷(LV)根据卷组中的空闲物理范围创建,提供应用、用户和操作系统所使用的“存储”设备。LV是逻辑区块(LE)的集合,LE映射到物理区块(PV的最小存储块)。默认情况下,每个LE将映射到一个PE。设置特定LV选项将会更改此映射;例如,镜像会导致每个LE映射到两个PE。
二、LVM创建
1、准备物理设备
使用fdisk、gdisk或parted创建新分区,以便与LVM结合使用。在LVM分区上,始终将分区类型设置为Linux LVM;对于MBR式分区,使用0x8e。如有必要,使用partprobe向内核注册新分区。也可以使用完整磁盘、RAID阵列或SAN磁盘。
只有当没有已准备好的物理设备并且需要新物理卷来创建或扩展卷组时,才需要准备物理设备。
#通过# lsblk 查看磁盘名称
[root@localhost ~]# fdisk /dev/sdb
使用m获取帮助,p打印现有分区表,n创建新分区,t更改分区类型,w写入更改,并使用q退出。
2、创建物理卷
使用pvcreate为分区(或其他物理设备)添加标签,使其作为物理卷与LVM结合使用。会将用于存储LVM配置数据的一个标头直接写入到PV。PV分为多个固定大小的物理范围(PE);例如4MiB的块。使用以空格分隔的设备名称作为pvcreate的参数,同时标记多个设备。
[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdb2
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
此命令会将设备/dev/sdb1和/dev/sdb2标记为PV,准备好分配到卷组中。仅当没有空闲的PV可以创建或扩展VG时,才需要创建PV。
3、创建卷组
vgcreate用于创建包含一个或多个物理卷的池,称为卷组。VG的大小由池中物理范围的总数决定。VG负责通过向LV分配空闲PE来托管一个或多个逻辑卷;因此,在创建LV时,VG必须具有足够的空闲PE可用。
[root@localhost ~]# vgcreate vg-alpha /dev/sdb1 /dev/sdb2
Volume group "vg-alpha" successfully created
此命令将创建名为vg-alpha的VG,它的大小是/dev/sdb1和/dev/sdb2这两个PV的总大小(以PE单位计)。仅单没有现有VG时才需要创建VG。可能会出于管理原因创建额外的VG,用于管理PV和LV的使用。否则,可在需要时扩展现有VG以容纳新的LV。
4、创建逻辑卷
lvcreate根据卷组中的可用物理范围创建新的逻辑卷。至少为lvcreate使用以下参数:使用-n选项设置LV名称,使用-L选项设置LV大小(以字节单位),并确定要在其中创建LV的VG名称。
[root@localhost ~]# lvcreate -n hercules -L 2G vg-alpha
Logical volume "hercules" created.
此命令将在VG vg-alpha中创建一个名为hercules的LV,其大小为3GiB。必须有足够的空闲物理范围来分配2GiB,如有必要,会将其取整为PE单元大小的倍数。
有多种方式可以指定大小:-L要求以字节或更大指定值为单位的大小,例如,兆字节(二进制兆字节)和千兆字节(二进制千兆字节)。-l选项要求以物理范围数进行衡量的大小。以下示例:
lvcreate -L 128M:将逻辑卷的大小确定为正好128MiB
lvcreate -l 128:将逻辑卷的大小确定为正好128个范围的大小。字节总数取决于基础物理卷上物理范围块的大小。
5、添加文件系统
使用mkfs在新逻辑卷上创建xfs文件系统。或者,根据你首选的文件系统创建文件系统;例如,ext4.
[root@localhost ~]# mkfs -t xfs /dev/vg-alpha/hercules
meta-data=/dev/vg-alpha/hercules isize=512 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=524288, 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
要使文件系统在重新启动后依然可用:
使用mkdir创建挂载点目录
[root@localhost ~]# mkdir /mnt/hercules
向/etc/fstab文件添加条目
[root@localhost ~]# vi /etc/fstab
/dev/vg-alpha/hercules /mnt/hercules xfs defaults 0 0
运行mount -a以挂载/etc/fstab中的所有文件系统,包括刚才添加的条目
[root@localhost ~]# mount -a
#查看结果
[root@localhost ~]# df -HT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 15G 1.2G 14G 8% /
devtmpfs devtmpfs 952M 0 952M 0% /dev
tmpfs tmpfs 964M 0 964M 0% /dev/shm
tmpfs tmpfs 964M 9.2M 955M 1% /run
tmpfs tmpfs 964M 0 964M 0% /sys/fs/cgroup
/dev/sda1 xfs 1.1G 153M 912M 15% /boot
tmpfs tmpfs 193M 0 193M 0% /run/user/0
/dev/mapper/vg--alpha-hercules xfs 2.2G 34M 2.2G 2% /mnt/hercules
三、查看LVM状态信息
1、物理卷使用pvdisplay显示有关物理卷的信息。如果未随命令指定任何参数,则它将列出有关系统上所有PV的信息。如果参数为特定设备名称,则将仅显示该特定PV的信息
[root@localhost ~]# pvdisplay /dev/sdb1
--- Physical volume ---
PV Name /dev/sdb1
VG Name vg-alpha
PV Size 1.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 255
Free PE 254
Allocated PE 1
PV UUID u2sCoW-nq5i-gSKJ-K6GU-pdtA-Lbog-lIVzAY
PV Name:映射到设备名称
VG Name:显示将PV分配到卷组
PV Size:显示PV的物理大小,包括任何不可用的空间
PE Size:是物理范围大小,它是逻辑卷中可分配的最小大小。它也是计算以PE单位报告的任何值(如Free PE)的大小时的倍数;例如:26个PE x 4MiB(PE Size)可提供104MiB可用空间。逻辑卷大小取整为PE单位的倍数。LVM会自动设置PE大小,但也可以指定该大小
Free PE:显示有多个PE单位可用于分配给新逻辑卷
2、卷组
使用vgdisplay显示有关卷组的信息。如果没有为命令指定任何变量,则它将显示有关所有VG的信息。使用VG名称作为变量将仅显示该特定VG的信息
[root@localhost ~]# vgdisplay vg-alpha
--- Volume group ---
VG Name vg-alpha
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 2
Act PV 2
VG Size 2.99 GiB
PE Size 4.00 MiB
Total PE 766
Alloc PE / Size 512 / 2.00 GiB
Free PE / Size 254 / 1016.00 MiB
VG UUID ZzGhNJ-RWH4-CkMS-MGHX-E65d-Zl0h-lU5rXb
VG Name:是此卷组的名称
VG Size:是存储池可用于逻辑卷分配的总大小
Total PE:是以PE单位表示的总大小
Free PE / Size:显示VG中有多少空闲空间可用于分配给新LV或扩展现有LV
3、逻辑卷
使用lvdisplay显示有关逻辑卷的信息。同样,如果未随命令指定任何参数,则将显示有关所有LV的信息;而使用LV设备名称作为参数将仅显示有关该特定设备的信息
[root@localhost ~]# lvdisplay /dev/vg-alpha/hercules
--- Logical volume ---
LV Path /dev/vg-alpha/hercules
LV Name hercules
VG Name vg-alpha
LV UUID pgcH5w-JN2R-DvId-SzAg-1WLr-fcM8-iy0qqB
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2019-11-07 02:01:41 -0500
LV Status available
# open 1
LV Size 2.00 GiB
Current LE 512
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
LV Path:显示此逻辑卷的设备名称。某些工具可能会将设备名报告为/dev/mapper/vgname-lvname;两个名称都表示同一LV
VG Name:显示从其分配LV的卷组
LV Size:显示LV的总大小。使用文件系统工具检查可用空间和数据存储的已用空间
Current LE:显示此LV使用的逻辑范围数。LE通常映射到VG中的物理范围,并因此映射到物理卷
四、扩展逻辑卷和XFS文件系统
1、验证卷组是否具有可用的空间
使用是gdisplay验证是否有足够的物理区段可供使用。
[root@localhost ~]# vgdisplay vg-alpha
--- Volume group ---
VG Name vg-alpha
...
Free PE / Size 254 / 1016.00 MiB
...
检查输出中的Free PE / Size 它应报告一个等于或大于所需额外空间的值。如果没有足够的可用空间,则卷组扩展幅度至少要达到所需空间的大小。
2、扩展逻辑卷
lvextend可将逻辑卷扩展为新的大小。添加LV设备名称作为命令的最后一个参数
[root@localhost ~]# lvextend -L +300M /dev/vg-alpha/hercules
Size of logical volume vg-alpha/hercules changed from 2.00 GiB (512 extents) to 2.29 GiB (587 extents).
Logical volume vg-alpha/hercules successfully resized
此命令会将逻辑卷hercules的大小增加300MiB。请注意大小前面的“+”,它表示向现有大小增加此值;如无该符号,该值定义LV的最终确切大小。与lvcreate类似,有多钟方式可以指定大小:-l通常要求物理区段值,而-L要求以字节或更大指定值(例如兆字节或千兆字节)为单位的大小。示例如下:
lvextend -l 128:将逻辑卷的大小调整为正好128个范围
lvextend -l +128:向逻辑卷的当前大小添加128个范围
lvextend -L 128M:将逻辑卷的大小调整为正好128MiB
lvextend -L +128:向逻辑卷的当前大小添加128MiB
lvextend -l +50%FREE:向LV添加VG中当前可用空间的50%
3、扩展文件系统
xfs_growfs /mountpoint 扩展文件系统以占用已扩展的LV。xfs_growfs要求在文件系统运行时挂载该系统;在调整大小操作期间仍然可以使用该文件系统。
[root@localhost ~]# xfs_growfs /mnt/hercules
meta-data=/dev/mapper/vg--alpha-hercules isize=512 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=524288, 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 524288 to 601088
#对比之前的大小增加了300M
[root@localhost ~]# df -HT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 15G 1.2G 14G 8% /
devtmpfs devtmpfs 952M 0 952M 0% /dev
tmpfs tmpfs 964M 0 964M 0% /dev/shm
tmpfs tmpfs 964M 9.2M 955M 1% /run
tmpfs tmpfs 964M 0 964M 0% /sys/fs/cgroup
/dev/sda1 xfs 1.1G 153M 912M 15% /boot
/dev/mapper/vg--alpha-hercules xfs 2.5G 34M 2.5G 2% /mnt/hercules
tmpfs tmpfs 193M 0 193M 0% /run/user/0
五、扩展逻辑卷和ext4
扩展基于ext4的逻辑卷的步骤基于与扩展xfs的LV相同,只有调整文件系统大小的步骤不同。
1、验证卷组是否具有可用的空间
使用 vgdisplay vgname 验证是否有足够的物理区段可供使用
2、扩展逻辑卷
lvextend -l +extens /dev/vgname/lvname 对逻辑卷 /dev/vgname/lvname进行扩展,扩展的幅度为范围值
3、扩展文件系统
resize2fs /dev/vgname/lvname 扩展文件系统以占用新扩展的LV。正与xfs_growfs一样,可以在文件系统正在运行时挂载并使用该文件系统。(可选)包含-p选项查看调整大小操作的进度。
[root@localhost ~]# resize2fs /dev/vg-alpha/hercules
注意:
xfs_growfs与resize2fs之间的主要区别是为识别文件系统而传递的参数
xfs_growfs采用挂载点,而resize2fs采用逻辑卷名称
六、删除逻辑卷(LVM)
1、准备文件系统
将必须保留的所有数据移动到另外一个文件系统,然后使用umount卸载改文件系统。不要忘记删除与此文件系统关联的任何/etc/fstab条目
#查看
[root@localhost ~]# df -HT
Filesystem Type Size Used Avail Use% Mounted on
...
/dev/mapper/vg--alpha-hercules xfs 2.5G 34M 2.5G 2% /mnt/hercules
#操作:
[root@localhost ~]# umount /mnt/hercules
2、删除逻辑卷
使用lvremove删除不再需要的逻辑卷。使用设备名称作为参数
[root@localhost ~]# lvremove /dev/vg-alpha/hercules
Do you really want to remove active logical volume vg-alpha/hercules? [y/n]: y
Logical volume "hercules" successfully removed
运行此命令之前,必须卸载LV文件系统。删除LV之前。将请求确认。
LV的物理范围将会被释放,并可用于分配给卷组中的现有LV或新LV
3、删除卷组
使用vgremove删除不再需要的卷组。使用VG名称作为参数
[root@localhost ~]# vgremove vg-alpha
Volume group "vg-alpha" successfully removed
VG的物理卷将会被释放,并可用于分配给系统中的现有的VG或新VG
4、删除物理卷
使用pvremove删除不再需要的物理卷。使用空格分隔的PV设备列表同时删除多个PV。PV元数据将从分区(或磁盘)清除。分区现已空闲,可重新分配或重新格式化。
[root@localhost ~]# pvremove /dev/sdb1 /dev/sdb2
Labels on physical volume "/dev/sdb1" successfully wiped.
Labels on physical volume "/dev/sdb2" successfully wiped.
#查看/dev/sdb磁盘没有被使用
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
fd0 2:0 1 4K 0 disk
sda 8:0 0 16G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 15G 0 part
├─centos-root 253:0 0 13.4G 0 lvm /
└─centos-swap 253:1 0 1.6G 0 lvm [SWAP]
sdb 8:16 0 3G 0 disk
├─sdb1 8:17 0 1G 0 part
└─sdb2 8:18 0 2G 0 part
补充:查看磁盘使用情况
[root@server ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
fd0 2:0 1 4K 0 disk
sda 8:0 0 16G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 15G 0 part
├─centos-root 253:0 0 13.4G 0 lvm /
└─centos-swap 253:1 0 1.6G 0 lvm [SWAP]
sdb 8:16 0 3G 0 disk
└─sdb1 8:17 0 3G 0 part
└─myvg-mylv 253:2 0 2G 0 lvm /mydata
sr0 11:0 1 1024M 0 rom
[root@server ~]#