学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用

时间:2023-06-14 11:06:55

学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用


本文用于记录学习体会、心得,兼做笔记使用,方便以后复习总结。内容基本完全参考学神教育教材,图片大多取材自学神教育资料,在此非常感谢MK老师和学神教育的优质教学。希望各位因学习需求而要进行转载时,能申明出处为学神教育,谢谢各位!

16.1 LVM的工作原理

实战场景:对于生产环境下的服务器来说,如果存储数据的分区磁盘空间不够了怎么办?

解决方案:使用LVM在线动态扩容

LVM( Logical Volume Manager)逻辑卷管理,是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。管理员利用LVM可以在磁盘不用重新分区的情况下动态调整文件系统的大小,并且利用LVM管理的文件系统可以跨越磁盘,当服务器添加了新的磁盘后,管理员不必将原有的文件移动到新的磁盘上,而是通过LVM可以直接扩展文件系统跨越磁盘

它就是通过将底层的物理硬盘封装起来,然后以逻辑卷的方式呈现给上层应用。在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作

16.1.1 LVM常用术语

物理存储介质(The physical media):LVM存储介质可以是磁盘分区,整个磁盘,RAID阵列或SAN磁盘,设备必须初始化为LVM物理卷,才能与LVM结合使用

物理卷PV(physical volume):物理卷就是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数,创建物理卷它可以用硬盘分区,也可以用硬盘本身;

卷组VG(Volume Group):一个LVM卷组由一个或多个物理卷组成

逻辑卷LV(logical volume):LV建立在VG之上,可以在LV之上建立文件系统

PE(physical extents):PV物理卷中可以分配的最小存储单元,PE的大小是可以指定的,默认为4MB

LE(logical extent): LV逻辑卷中可以分配的最小存储单元,在同一个卷组中,LE的大小和PE是相同的,并且一一对应

关于最小存储单元的总结

名称 最小存储单位
硬盘 扇区(512字节)
文件系统 block(1K或4K )# mkfs.ext4 -b 2048 /dev/sdb1 ,最大支持到4096
raid chunk (512K) #mdadm -C -v /dev/md5 -l 5 -n 3 -c 512 -x 1 /dev/sde{1,2,3,5}
LVM PE (4M) # vgcreate -s 4M vg1 /dev/sdb{1,2}

LVM主要元素构成:

学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用

总结:多个磁盘/分区/raid-》多个物理卷PV-》合成卷组VG-》从VG划出逻辑卷LV-》格式化LV挂载使用

16.1.2 LVM优点

  • 使用卷组,使多个硬盘空间看起来像是一个大的硬盘
  • 使用逻辑卷,可以跨多个硬盘空间的分区 sdb1 sdb2 sdc1 sdd2 sdf
  • 在使用逻辑卷时,它可以在空间不足时动态调整它的大小
  • 在调整逻辑卷大小时,不需要考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间
  • 可以在线对LV,VG 进行创建,删除,调整大小等操作。LVM上的文件系统也需要重新调整大小。
  • 允许创建快照,可以用来保存文件系统的备份。
  • RAID+LVM一起用:LVM是软件的卷管理方式,而RAID是磁盘管理的方法。对于重要的数据,使用RAID来保护物理的磁盘不会因为故障而中断业务,再用LVM用来实现对卷的良性的管理,更好的利用磁盘资源

16.2 创建LVM的基本步骤

  1. 物理磁盘被格式化为PV,(空间被划分为一个个的PE) #PV包含PE
  2. 不同的PV加入到同一个VG中,(不同PV的PE全部进入到了VG的PE池内) #VG包含PV
  3. 在VG中创建LV逻辑卷,基于PE创建,(组成LV的PE可能来自不同的物理磁盘) #LV基于PE创建
  4. LV直接可以格式化后挂载使用 #格式化挂载使用
  5. LV的扩充缩减实际上就是增加或减少组成该LV的PE数量,其过程不会丢失原始数据

16.2.1 lvm常用的命令

常用功能命令

功能 PV管理命令 VG管理命令 LV管理命令
scan扫描 pvscan vgscan lvscan
create创建 pvcreate vgcreate lvcreate
display显示 pvdisplay vgdisplay lvdisplay
remove移除 pvremove vgremove lvremove
extend扩展 vgextend lvextend
reduce减少 vgreduce lvreduce

常用查看命令

查看卷名 简单对应卷信息的查看 扫描相关的所有的对应卷 详细对应卷信息的查看
物理卷 pvs pvscan pvdisplay
卷组 vgs vgscan vgdisplay
逻辑卷 lvs lvscan lvdisplay

16.2.2 创建并使用LVM逻辑卷

16.2.2.1 添加一个sdb磁盘,并设置4个大小为2G的分区


[root@localhost ~]# ll /dev/sd* #查看新添加的硬盘
brw-rw----. 1 root disk 8, 0 6月 16 08:00 /dev/sda
brw-rw----. 1 root disk 8, 1 6月 16 08:00 /dev/sda1
brw-rw----. 1 root disk 8, 2 6月 16 08:00 /dev/sda2
brw-rw----. 1 root disk 8, 16 6月 16 08:00 /dev/sdb
[root@localhost ~]# fdisk /dev/sdb #在硬盘/dev/sdb上面创建4个分区
欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。 Device does not contain a recognized partition table
使用磁盘标识符 0x7e20c0aa 创建新的 DOS 磁盘标签。 命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p #设置为主分区
分区号 (1-4,默认 1):1 #设置分区号为1
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+2G #设置分区大小为2G
分区 1 已设置为 Linux 类型,大小设为 2 GiB 命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
分区号 (2-4,默认 2):
起始 扇区 (4196352-41943039,默认为 4196352):
将使用默认值 4196352
Last 扇区, +扇区 or +size{K,M,G} (4196352-41943039,默认为 41943039):+2G
分区 2 已设置为 Linux 类型,大小设为 2 GiB 命令(输入 m 获取帮助):N
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): P
分区号 (3,4,默认 3):
起始 扇区 (8390656-41943039,默认为 8390656):
将使用默认值 8390656
Last 扇区, +扇区 or +size{K,M,G} (8390656-41943039,默认为 41943039):+2G
分区 3 已设置为 Linux 类型,大小设为 2 GiB 命令(输入 m 获取帮助):N
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): P
已选择分区 4
起始 扇区 (12584960-41943039,默认为 12584960):
将使用默认值 12584960
Last 扇区, +扇区 or +size{K,M,G} (12584960-41943039,默认为 41943039):+2G
分区 4 已设置为 Linux 类型,大小设为 2 GiB 命令(输入 m 获取帮助):P #查看分区信息 磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x7e20c0aa 设备 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 8390655 2097152 83 Linux
/dev/sdb3 8390656 12584959 2097152 83 Linux
/dev/sdb4 12584960 16779263 2097152 83 Linux 命令(输入 m 获取帮助):W #保存分区信息
The partition table has been altered! Calling ioctl() to re-read partition table.
正在同步磁盘。

设定分区类型代码:fdisk /dev/sdb ===> t ===> 选择分区号 ====> 8e ====> w ,详细如下所示:


[root@localhost ~]# fdisk /dev/sdb #使用fdisk修改分区类型
欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。 命令(输入 m 获取帮助):t #修改分区类型
分区号 (1-4,默认 4):1 #输入分区号
Hex 代码(输入 L 列出所有代码):l #查看类型详细 0 空 24 NEC DOS 81 Minix / 旧 Linu bf Solaris
1 FAT12 27 隐藏的 NTFS Win 82 Linux 交换 / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 隐藏的 C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux 扩展 c7 Syrinx
5 扩展 41 PPC PReP Boot 86 NTFS 卷集 da 非文件系统数据
6 FAT16 42 SFS 87 NTFS 卷集 db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux 纯文本 de Dell 工具
8 AIX 4e QNX4.x 第2部分 8e Linux LVM df BootIt
9 AIX 可启动 4f QNX4.x 第3部分 93 Amoeba e1 DOS 访问
a OS/2 启动管理器 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad 休 eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 扩展 (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC
11 隐藏的 FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor
12 Compaq 诊断 5c Priam Edisk a9 NetBSD f4 SpeedStor
14 隐藏的 FAT16 <3 61 SpeedStor ab Darwin 启动 f2 DOS 次要
16 隐藏的 FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
17 隐藏的 HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST 智能睡眠 65 Novell Netware b8 BSDI swap fd Linux raid 自动
1b 隐藏的 W95 FAT3 70 DiskSecure 多启 bb Boot Wizard 隐 fe LANstep
1c 隐藏的 W95 FAT3 75 PC/IX be Solaris 启动 ff BBT
1e 隐藏的 W95 FAT1 80 旧 Minix
Hex 代码(输入 L 列出所有代码):8e #修改分区1类型为8e
已将分区“Empty”的类型更改为“Linux LVM” 命令(输入 m 获取帮助):t
分区号 (1-4,默认 4):2
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM” 命令(输入 m 获取帮助):t
分区号 (1-4,默认 4):3
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM” 命令(输入 m 获取帮助):t
分区号 (1-4,默认 4):4
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM” 命令(输入 m 获取帮助):p #查看分区信息 磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x7e20c0aa 设备 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 8e Linux LVM #分区类型已经修改为8e
/dev/sdb2 4196352 8390655 2097152 8e Linux LVM
/dev/sdb3 8390656 12584959 2097152 8e Linux LVM
/dev/sdb4 12584960 16779263 2097152 8e Linux LVM 命令(输入 m 获取帮助):w #保存配置
The partition table has been altered! Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# ll /dev/sdb*
brw-rw----. 1 root disk 8, 16 6月 16 08:06 /dev/sdb
brw-rw----. 1 root disk 8, 17 6月 16 08:06 /dev/sdb1
brw-rw----. 1 root disk 8, 18 6月 16 08:06 /dev/sdb2
brw-rw----. 1 root disk 8, 19 6月 16 08:06 /dev/sdb3
brw-rw----. 1 root disk 8, 20 6月 16 08:06 /dev/sdb4

注:现在系统已经很智能了, 直接使用默认的 83 Linux分区,也可以创建pv的。

16.2.2.2 创建PV


[root@localhost ~]# pvcreate /dev/sdb[1,2,3,4]
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
Physical volume "/dev/sdb3" successfully created.
Physical volume "/dev/sdb4" successfully created.

16.2.2.3 产看PV的详细信息


[root@localhost ~]# pvdisplay /dev/sdb1
"/dev/sdb1" is a new physical volume of "2.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name #VG name为空,说明还未加入VG
PV Size 2.00 GiB
Allocatable NO #是否使用:未使用
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 1NmJQX-wcA8-MBNM-p7rs-oLfb-iAH9-K9VhY8

16.2.2.4 创建VG卷组

语法: vgcreate vg名字 pv的名字 备注:可以跟多个PV


[root@localhost ~]# vgcreate vg01 /dev/sdb1 #使用/dev/sdb1创建vg01
Volume group "vg01" successfully created
[root@localhost ~]# vgs #查看所有vg信息
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <39.00g 4.00m
vg01 1 0 0 wz--n- <2.00g <2.00g
[root@localhost ~]# vgdisplay /dev/vg01
--- 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 <2.00 GiB
PE Size 4.00 MiB #PE大小默认为4MB
Total PE 511
Alloc PE / Size 0 / 0
Free PE / Size 511 / <2.00 GiB
VG UUID DdXIqq-Sefk-IjRp-fq54-vYV3-XmFF-Vw8kcj [root@localhost ~]# vgdisplay vg01 #显示vg01详细信息,可以如上使用绝对路径也可以直接使用vg名称
--- 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 <2.00 GiB
PE Size 4.00 MiB
Total PE 511
Alloc PE / Size 0 / 0
Free PE / Size 511 / <2.00 GiB
VG UUID DdXIqq-Sefk-IjRp-fq54-vYV3-XmFF-Vw8kcj

16.2.2.5 创建LV

语法:lvcreate -n 指定新逻辑卷的名称 -L指定lv大小的SIZE(M,G) (-l:小l 指定LE的数量) vg名称


[root@localhost ~]# lvcreate -n lv01 -L 16M vg01 #在VG01上创建大小为16M的lv01
Logical volume "lv01" created.
[root@localhost ~]# lvcreate -n lv02 -l 4 vg01 #在VG01上创建大小为4个PE的lv02
Logical volume "lv02" created.
[root@localhost ~]# lvs #查看所有lv信息,因为PE大小为4mb,所以lv01和lv02大小一致
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <35.12g
swap centos -wi-ao---- <3.88g
lv01 vg01 -wi-a----- 16.00m
lv02 vg01 -wi-a----- 16.00m
[root@localhost ~]# lvdisplay /dev/vg01/lv01 #查看lv01的详细信息
--- Logical volume ---
LV Path /dev/vg01/lv01
LV Name lv01
VG Name vg01
LV UUID 2DDOOC-6SrA-T9xG-cqlq-4Ubl-8YtF-MDkR5T
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2019-06-16 08:39:52 +0800
LV Status available
# open 0
LV Size 16.00 MiB
Current LE 4
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
[root@localhost ~]# lvdisplay /dev/vg01/lv02
--- Logical volume ---
LV Path /dev/vg01/lv02
LV Name lv02
VG Name vg01
LV UUID sBR4JF-4HSa-rdWj-WG2b-jkiz-JZa7-WltI5A
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2019-06-16 08:44:48 +0800
LV Status available
# open 0
LV Size 16.00 MiB
Current LE 4
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3

16.2.2.6 文件系统格式与挂载


[root@localhost ~]# mkdir /lv01 #创建挂载点
[root@localhost ~]# mkfs.xfs /dev/vg01/lv01 #将lv01格式化为XFS文件系统
meta-data=/dev/vg01/lv01 isize=512 agcount=1, agsize=4096 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=4096, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]# mount /dev/vg01/lv01 /lv01 #将lv01挂载到/lv01目录
[root@localhost ~]# echo "/dev/vg01/lv01 /lv01 xfs defaults 0 0" >> /etc/fstab #将逻辑卷LV01加入开机自动挂载
[root@localhost ~]# unmount /dev/vg01/lv01
bash: unmount: 未找到命令...
[root@localhost ~]# umount /dev/vg01/lv01 #卸载逻辑卷lv01,测试开机自动挂载是否成功
[root@localhost ~]# mount -a
[root@localhost ~]# df -Th /lv01
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 xfs 13M 896K 12M 7% /lv01

16.2.3 指定PE大小

指定PE大小用的参数: -s ,如果存储的数据都是大文件,那么PE尽量调大,读取速度快


[root@localhost ~]# vgcreate -s 16M vg02 /dev/sdb2
Volume group "vg02" successfully created

PE的大小只有为2的幂数,且最大为512M


[root@localhost ~]# vgdisplay vg02
--- Volume group ---
VG Name vg02
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 1.98 GiB
PE Size 16.00 MiB
Total PE 127
Alloc PE / Size 0 / 0
Free PE / Size 127 / 1.98 GiB
VG UUID NTiQEe-EV0y-AusA-PDxW-omf8-VP7M-qztDNl

16.2.4 LV扩容

首先,确定一下是否有可用的扩容空间,因为空间是从VG里面创建的,并且LV不能跨VG扩容


[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <39.00g 4.00m
vg01 1 2 0 wz--n- <2.00g 1.96g
vg02 1 0 0 wz--n- 1.98g 1.98g

扩容使用命令如下:

extend扩展 vgextend lvextend

扩容逻辑卷

lvextend命令举例:

  1. lvextend -L 30m /dev/vg01/lv01 #将逻辑卷lv01扩容到30M

  2. lvextend L 30m /dev/vg01/lv01 #将逻辑卷lv01扩容30M

  3. lvextend -l 30%free /dev/vg01/lv01 #将vg01卷组剩余空间的30%扩容给lv01


[root@localhost ~]# 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 16.00 MiB (4 extents) to 48.00 MiB (12 extents).
Logical volume vg01/lv01 successfully resized.
[root@localhost ~]# lvs #产看lv信息,发现逻辑卷lv01已经扩展成功
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <35.12g
swap centos -wi-ao---- <3.88g
lv01 vg01 -wi-ao---- 48.00m
lv02 vg01 -wi-a----- 204.00m
[root@localhost ~]# df -Th /dev/vg01/lv01 #查看文件系统lv01发现大小未变
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 xfs 13M 896K 12M 7% /lv01
[root@localhost ~]# xfs
xfs_admin xfs_estimate xfsinvutil xfs_mkfile xfs_rtcp
xfs_bmap xfs_freeze xfs_io xfs_ncheck
xfs_copy xfs_fsr xfs_logprint xfs_quota
xfs_db xfs_growfs xfs_mdrestore xfs_repair
xfsdump xfs_info xfs_metadump xfsrestore
[root@localhost ~]# xfs
xfs_admin xfs_estimate xfsinvutil xfs_mkfile xfs_rtcp
xfs_bmap xfs_freeze xfs_io xfs_ncheck
xfs_copy xfs_fsr xfs_logprint xfs_quota
xfs_db xfs_growfs xfs_mdrestore xfs_repair
xfsdump xfs_info xfs_metadump xfsrestore

注:可以看到LV虽然扩展了,但是文件系统大小还是原来的,下面开始扩容文件系统:

ext4文件系统扩容使用命令语法: resize2fs 逻辑卷名称

xfs文件系统扩容使用命令语法: xfs_growfs 挂载点

resize2fs和xfs_growfs 两者的区别是传递的参数不一样的,xfs_growfs是采用的挂载点;resize2fs是逻辑卷名称,而且resize2fs命令不能对xfs类型文件系统使用


[root@localhost ~]# xfs_growfs lv01 #扩容文件系统
xfs_growfs: lv01 is not a mounted XFS filesystem
[root@localhost ~]# xfs_growfs /dev/vg01/lv01
meta-data=/dev/mapper/vg01-lv01 isize=512 agcount=1, agsize=4096 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=4096, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 4096 to 12288
[root@localhost ~]# df -Th /dev/vg01/lv01 #查看发现文件系统扩容成功
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 xfs 45M 992K 44M 3% /lv01

如下所示可以通过增加-r参数,直接扩容逻辑卷后完成文件系统扩容,一步到位


[root@localhost ~]# lvextend -L 80M -r /dev/vg01/lv01 #同时扩容逻辑卷和文件系统
Size of logical volume vg01/lv01 changed from 48.00 MiB (12 extents) to 80.00 MiB (20 extents).
Logical volume vg01/lv01 successfully resized.
meta-data=/dev/mapper/vg01-lv01 isize=512 agcount=3, agsize=4096 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=12288, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 12288 to 20480
[root@localhost ~]# df -Th /dev/vg01/lv01 #查看发现文件系统也扩容成功
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 xfs 77M 1.1M 76M 2% /lv01

16.2.5 VG扩容

查看VG剩余空间


[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <39.00g 4.00m
vg01 1 2 0 wz--n- <2.00g <1.72g
vg02 1 0 0 wz--n- 1.98g 1.98g

发现VG剩余空间不够后,开始扩容


[root@localhost ~]# pvcreate /dev/sdb3 #使用sdb3创建新的pv
Physical volume "/dev/sdb3" successfully created.
[root@localhost ~]# vgextend vg01 /dev/sdb3 #将新的pv添加到vg01中
Volume group "vg01" successfully extended
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <39.00g 4.00m
vg01 2 2 0 wz--n- 3.99g 3.71g #vg01扩容成功
vg02 1 0 0 wz--n- 1.98g 1.98g

16.2.6 LVM缩小(实际工作中基本遇不到,尽量避免)

LVM可以动态增加,也可以动态缩小,但是XFS不支持动态缩小,所以我们无法实现基于xfs的动态缩小。btrfs文件系统支持在线缩小

[root@localhost ~]# lvreduce -L -20M /dev/vg01/lv01	#将lv01缩小20M
WARNING: Reducing active and open logical volume to 60.00 MiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg01/lv01? [y/n]: y #是否确认缩小
Size of logical volume vg01/lv01 changed from 80.00 MiB (20 extents) to 60.00 MiB (15 extents).
Logical volume vg01/lv01 successfully resized. #提示逻辑卷lv01已经缩小成功
[root@localhost ~]# df -h /dev/vg01/lv01 #查看文件系统
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 77M 1.1M 76M 2% /lv01 #发现文件系统并未缩小
[root@localhost ~]# lvextend -L 10M -r /dev/vg01/lv01
Rounding size to boundary between physical extents: 12.00 MiB.
New size given (3 extents) not larger than existing size (15 extents)

VG的缩减,要保证你的物理卷是否被使用,是因为它无法缩减一个正在使用的PV


[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <39.00g 4.00m
vg01 2 2 0 wz--n- 3.99g 3.73g
vg02 1 0 0 wz--n- 1.98g 1.98g
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <39.00g 4.00m
/dev/sdb1 vg01 lvm2 a-- <2.00g <1.74g
/dev/sdb2 vg02 lvm2 a-- 1.98g 1.98g
/dev/sdb3 vg01 lvm2 a-- <2.00g <2.00g
/dev/sdb4 lvm2 --- 2.00g 2.00g
[root@localhost ~]# cp /etc/passwd /lv01
[root@localhost ~]# vgreduce vg01 /dev/sdb1 #测试复制一些测试数据
Physical volume "/dev/sdb1" still in use #将sdb1移出失败,因sdb1正在被使用

测试将sdb1上的数据移动到sdb3后再从vg01中删除sdb1


[root@localhost ~]# pvmove /dev/sdb1 /dev/sdb3 #将sdb1上的数据移动到sdb3上
/dev/sdb1: Moved: 6.06%
/dev/sdb1: Moved: 22.73%
/dev/sdb1: Moved: 100.00% #数据移动完毕
[root@localhost ~]# vgreduce vg01 /dev/sdb1 #从vg01中移除sdb1
Removed "/dev/sdb1" from volume group "vg01"
[root@localhost ~]# pvs #查看pv信息,发现sdb1现在不属于vg01,vg01已经缩减成功
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <39.00g 4.00m
/dev/sdb1 lvm2 --- 2.00g 2.00g
/dev/sdb2 vg02 lvm2 a-- 1.98g 1.98g
/dev/sdb3 vg01 lvm2 a-- <2.00g <1.74g
/dev/sdb4 lvm2 --- 2.00g 2.00g

16.2.7 LVM删除

创建LVM流程:

pvcreate创建pv -> vgcreate创建卷组 -> lvcreate创建逻辑卷 -> mkfs.xfs lv 格式化-> mount挂载

删除LVM流程:

umount卸载 -> lvremove lv移出卷组中所有逻辑卷-> vgremove vg移出卷组-> pvremove 移出pv


[root@localhost ~]# umount /lv01 #卸载/dev/vg01/lv01逻辑卷
[root@localhost ~]# lvremove /dev/vg01/lv01
Do you really want to remove active logical volume vg01/lv01? [y/n]: y
Logical volume "lv01" successfully removed
[root@localhost ~]# vgremove vg01 #删除vg01
Do you really want to remove volume group "vg01" containing 1 logical volumes? [y/n]: y
Do you really want to remove active logical volume vg01/lv02? [y/n]: y
Logical volume "lv02" successfully removed
Volume group "vg01" successfully removed
[root@localhost ~]# vgs 查看vg信息,发现vg01已经删除
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <39.00g 4.00m
vg02 1 0 0 wz--n- 1.98g 1.98g
[root@localhost ~]# vgremove vg02
Volume group "vg02" successfully removed
[root@localhost ~]# pvs #查看pv信息发现所有pv都已经释放
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <39.00g 4.00m
/dev/sdb1 lvm2 --- 2.00g 2.00g
/dev/sdb2 lvm2 --- 2.00g 2.00g
/dev/sdb3 lvm2 --- 2.00g 2.00g
/dev/sdb4 lvm2 --- 2.00g 2.00g
[root@localhost ~]# pvremove /dev/sdb1 #删除pv
Labels on physical volume "/dev/sdb1" successfully wiped.
[root@localhost ~]# pvremove /dev/sdb[2,3,4]
Labels on physical volume "/dev/sdb2" successfully wiped.
Labels on physical volume "/dev/sdb3" successfully wiped.
Labels on physical volume "/dev/sdb4" successfully wiped.

16.3 SSM工具介绍

需要安装SSM(system-storage-manager)工具, yum -y install system-storage-manager

语法:

ssm create -s lv大小 -n lv名称 --fstype lv文件系统类型 -p 卷组名 设备 挂载点

自动把设备变成pv,创建vg , lv ,格式化文件系统, 自动挂载

举例:ssm create -s 1G -n mail-lv --fstype xfs -p mail /dev/sdb[1-4] /mail-lv

说明:使用sdb1、2、3、4创建pv,然后使用这些PV创建名为名为mail的vg,然后创建名为mail-lv的lv,大小为1G,文件类型为xfs

具体如下所示(因为断网直接使用学神的例子):


[root@xuegod63 ~]# ssm create -s 1G -n mail-lv --fstype xfs -p mail /dev/sdb[1-4] /mail-lv
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
Physical volume "/dev/sdb3" successfully created.
Physical volume "/dev/sdb4" successfully created.
Volume group "mail" successfully created
WARNING: ext4 signature detected on /dev/mail/mail-lv at offset 1080. Wipe it? [y/n]: y
Wiping ext4 signature on /dev/mail/mail-lv.
Logical volume "mail-lv" created.
meta-data=/dev/mail/mail-lv isize=512 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=262144, 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@xuegod63 ~]# df -h /mail-lv/
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/mail-mail--lv 1014M 33M 982M 4% /mail-lv


END

2019-6-16 2:35:03