LVM

LVM实践

一、概述

​ LVM,Logical Volume Manger,是linux内核提供的一种逻辑卷管理功能,由内核驱动和应用层工具组成,它是在硬盘的分区基础上,创建了一个逻辑层,可以非常灵活且非常方便的管理存储设备。

​ LVM利用Linux内核的device-mapper功能来实现存储系统的虚拟化(系统分区独立于底层硬件)。 通过LVM,可以实现存储空间的抽象化并在上面建立虚拟分区(virtual partitions),可以更简便地扩大和缩小分区,可以增删分区时无需担心某个硬盘上没有足够的连续空间,避免为正在使用的磁盘重新分区的麻烦、为调整分区而不得不移动其他分区的不便,它相比传统的分区系统可以更灵活地管理磁盘。

二、LVM的基本组成

1、物理卷 (PV,Physical Volume)
一个可供存储LVM的块设备. 如硬盘分区(MBR或GPT分区)、SAN 的硬盘、RAID 或 LUN,一个回环文件, 一个被内核映射的设备 (例如 dm-crypt),它包含一个特殊的LVM头,它是 LVM 构建的实际硬件或存储系统。

2、卷组 (VG,Volume Group)
卷组是对一个或多个物理卷的集合,并在设备文件系统中显示为 /dev/vg_name。

3、逻辑卷 (LV,Logical Volume)
逻辑卷是可供系统使用的最终元设备,它们在卷组中创建和管理,由物理块组成,实际上就是一个虚拟分区,并显示为 /dev/vg_name/lv_name,通常在其上可以创建文件系统。

4、物理块 (PE,Physical Extends)
一个卷组中最小的连续区域(默认为4 MiB),多个物理块将被分配给一个逻辑卷。你可以把它看成物理卷的一部分,这部分可以被分配给一个逻辑卷。

图解:

20230823235454

依次为:disk -> partition -> PV -> VG -> LV -> fs,也即磁盘->分区->物理卷->卷组->逻辑卷->文件系统。

其创建也是按照这个顺序,下面会详细介绍。

三、LVM的优缺点

优点:

比起传统的硬盘分区管理方式,LVM更富于灵活性:

​ ·将多块硬盘看作一块大硬盘
​ ·使用逻辑卷(LV),可以创建跨越众多硬盘空间的分区。
​ ·可以创建小的逻辑卷(LV),在空间不足时再动态调整它的大小。
​ ·在调整逻辑卷(LV)大小时可以不用考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间。
​ ·可以在线(online)对逻辑卷(LV)和卷组(VG)进行创建、删除、调整大小等操作。不过LVM上的文件系统也需要重新调整大小,好在某些文件系统(例如ext4)也支持在线操作。
​ ·无需重新启动服务,就可以将服务中用到的逻辑卷(LV)在线(online)/动态(live)迁移至别的硬盘上。
​ ·允许创建快照,可以保存文件系统的备份,同时使服务的下线时间(downtime)降低到最小。
​ ·支持各种设备映射目标(device-mapper targets),包括透明文件系统加密和缓存常用数据(caching of frequently used data)。这将允许你创建一个包含一个或多个磁盘、并用LUKS加密的系统,使用LVM on top 可轻松地管理和调整这些独立的加密卷 (例如. /, /home, /backup等) 并免去开机时多次输入密钥的麻烦。

缺点:

​ ·在系统设置时需要更复杂的额外步骤。

​ ·Windows系统并不支持LVM,若使用双系统,你将无法在Windows上访问LVM分区。

四、LVM的使用

安装:

yum -y install lvm2

命令:

序号 功能 PV物理卷命令 VG卷组命令 LV逻辑卷命令
01 扫描功能 pvscan vgscan lvscan
02 创建功能 pvcreate vgcreate lvcreate
03 查询功能 pvdisplay vgdisplay lvdisplay
04 删除功能 pvremove vgremove lvremove
05 扩容功能 vgextend lvextend
06 缩容功能 vgreduce lvreduce

例:

这里添加了一块21.5GB的硬盘/dev/sdb

20230824113100

1、创建分区(partition):

在配置lvm之前,必须对存储设备进行分区,可以使用fdisk或者parted工具进行,创建分区时注意分区类型的设置(类型为linux lvm):

如果使用的是MBR,设置分区类型要为8e。
如果使用的是GPT,设置分区类型要为E6D6D379-F507-44C2-A23C-238F2A3DF928。

这里对MBR和GPT做个对比解析:

特性/方面 MBR(Master Boot Record) GPT(GUID Partition)
分区数量限制 最多4个主分区或3+1拓展分区 数千个分区
分区大小限制 最大支持2TB(使用512字节扇区) 支持数EB级别的分区
启动代码 包含引导代码,用于引导操作系统 不包含引导代码,UEFI引导由EFI分区处理
备份和容错性 无备份,分区表存储在第一个扇区 备份存储在分区末尾,提供更好的容错性
UEFI支持 不是UEFI标准的一部分 是UEFI标准的一部分
数据完整性 无内置数据完整性校验 内置CRC用于验证数据完整性
操作系统兼容性 大多数操作系统支持 现代操作系统支持
适用于硬件 适用于较老的系统和硬件 适用于现代计算机、大磁盘和UEFI引导
风险因素 分区表损坏可能影响引导 分区表备份提供更好的容错性

我虚拟机新加了个磁盘/dev/sdb,下面我们创建一个8G的分区:

4.1.查看磁盘分区类型(默认是MBR):

[root@localhost ~]# parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos   #这里是MBR类型,如果是gpt那就是GPT类型
Disk Flags: 

Number  Start  End  Size  Type  File system  Flags

4.2分区技术转换:

# MBR转GPT (fdisk /dev/sdb----->g----->w)
[root@localhost ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): g
Building a new GPT disklabel (GUID: CA6178DF-E93E-4A56-B324-6D6715A90C6D)
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.


# GPT转回MBR (parted /dev/sdb----->mktable----->msdos----->Yes----->q)
[root@localhost ~]# parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mktable
New disk label type? msdos                                                
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to
continue?
Yes/No? Yes
(parted) q

4.3 创建分区

创建一个8G的分区(fdisk /dev/sdb ----> n ----> 回车 ----> 回车 ----> +8G)

[root@localhost ~]# fdisk /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): n
Partition number (1-128, default 1): 
First sector (2048-41943006, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-41943006, default 41943006): +8G
Created partition 1

以同样的方式,再创建一个10G的分区:

Command (m for help): n
Partition number (2-128, default 2): 
First sector (16779264-41943006, default 16779264): 
Last sector, +sectors or +size{K,M,G,T,P} (16779264-41943006, default 41943006): +10G
Created partition 2

4.4修改分区类型为linux lvm

· 如果使用的分区技术是MBR,设置分区类型的时候对应的ID为:8e

· 如果使用的分区技术是MBR,设置分区类型的时候对应的ID为:E6D6D379-F507-44C2-A23C-238F2A3DF928

可以使用命令 “t” 选择分区之后输入 “L” 查看对应的linux lvm对应的ID

# 查分区,使用命令 p
Command (m for help): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt
Disk identifier: CA6178DF-E93E-4A56-B324-6D6715A90C6D


#         Start          End    Size  Type            Name
 1         2048     16779263      8G  Linux filesyste 
 2     16779264     37750783     10G  Linux filesyste
 
# 通过分区的类型ID把分区设置为linux lvm,对应的ID可以使用命令 L 查看,见第31个
Command (m for help): L
  1 EFI System                     C12A7328-F81F-11D2-BA4B-00A0C93EC93B
  2 MBR partition scheme           024DEE41-33E7-11D3-9D69-0008C781F39F
  3 Intel Fast Flash               D3BFE2DE-3DAF-11DF-BA40-E3A556D89593
  4 BIOS boot                      21686148-6449-6E6F-744E-656564454649
  5 Sony boot partition            F4019732-066E-4E12-8273-346C5641494F
  6 Lenovo boot partition          BFBFAFE7-A34F-448A-9A5B-6213EB736C22
  7 PowerPC PReP boot              9E1A2D38-C612-4316-AA26-8B49521E5A8B
  8 ONIE boot                      7412F7D5-A156-4B13-81DC-867174929325
  9 ONIE config                    D4E6E2CD-4469-46F3-B5CB-1BFF57AFC149
 10 Microsoft reserved             E3C9E316-0B5C-4DB8-817D-F92DF00215AE
 11 Microsoft basic data           EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
 12 Microsoft LDM metadata         5808C8AA-7E8F-42E0-85D2-E1E90434CFB3
 13 Microsoft LDM data             AF9B60A0-1431-4F62-BC68-3311714A69AD
 14 Windows recovery environment   DE94BBA4-06D1-4D40-A16A-BFD50179D6AC
 15 IBM General Parallel Fs        37AFFC90-EF7D-4E96-91C3-2D7AE055B174
 16 Microsoft Storage Spaces       E75CAF8F-F680-4CEE-AFA3-B001E56EFC2D
 17 HP-UX data                     75894C1E-3AEB-11D3-B7C1-7B03A0000000
 18 HP-UX service                  E2A1E728-32E3-11D6-A682-7B03A0000000
 19 Linux swap                     0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
 20 Linux filesystem               0FC63DAF-8483-4772-8E79-3D69D8477DE4
 21 Linux server data              3B8F8425-20E0-4F3B-907F-1A25A76F98E8
 22 Linux root (x86)               44479540-F297-41B2-9AF7-D131D5F0458A
 23 Linux root (ARM)               69DAD710-2CE4-4E3C-B16C-21A1D49ABED3
 24 Linux root (x86-64)            4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709
 25 Linux root (ARM-64)            B921B045-1DF0-41C3-AF44-4C6F280D3FAE
 26 Linux root	(IA-64)             993D8D3D-F80E-4225-855A-9DAF8ED7EA97
 27 Linux reserved                 8DA63339-0007-60C0-C436-083AC8230908
 28 Linux home                     933AC7E1-2EB4-4F13-B844-0E14E2AEF915
 29 Linux RAID                     A19D880F-05FC-4D3B-A006-743F0F84911E
 30 Linux extended boot            BC13C2FF-59E6-4262-A352-B275FD6F7172
 31 Linux LVM                      E6D6D379-F507-44C2-A23C-238F2A3DF928
 32 FreeBSD data                   516E7CB4-6ECF-11D6-8FF8-00022D09712B
 33 FreeBSD boot                   83BD6B9D-7F41-11DC-BE0B-001560B84F0F
 34 FreeBSD swap                   516E7CB5-6ECF-11D6-8FF8-00022D09712B
 35 FreeBSD UFS                    516E7CB6-6ECF-11D6-8FF8-00022D09712B
 36 FreeBSD ZFS                    516E7CBA-6ECF-11D6-8FF8-00022D09712B
 37 FreeBSD Vinum                  516E7CB8-6ECF-11D6-8FF8-00022D09712B
 38 Apple HFS/HFS+                 48465300-0000-11AA-AA11-00306543ECAC
 39 Apple UFS                      55465300-0000-11AA-AA11-00306543ECAC
 40 Apple RAID                     52414944-0000-11AA-AA11-00306543ECAC
 41 Apple RAID offline             52414944-5F4F-11AA-AA11-00306543ECAC
 42 Apple boot                     426F6F74-0000-11AA-AA11-00306543ECAC
 43 Apple label                    4C616265-6C00-11AA-AA11-00306543ECAC
 44 Apple TV recovery              5265636F-7665-11AA-AA11-00306543ECAC
 45 Apple Core storage             53746F72-6167-11AA-AA11-00306543ECAC
 46 Solaris boot                   6A82CB45-1DD2-11B2-99A6-080020736631
 47 Solaris root                   6A85CF4D-1DD2-11B2-99A6-080020736631
 48 Solaris /usr & Apple ZFS       6A898CC3-1DD2-11B2-99A6-080020736631
 49 Solaris swap                   6A87C46F-1DD2-11B2-99A6-080020736631
 50 Solaris backup                 6A8B642B-1DD2-11B2-99A6-080020736631
 51 Solaris /var                   6A8EF2E9-1DD2-11B2-99A6-080020736631
 52 Solaris /home                  6A90BA39-1DD2-11B2-99A6-080020736631
 53 Solaris alternate sector       6A9283A5-1DD2-11B2-99A6-080020736631
 54 Solaris reserved 1             6A945A3B-1DD2-11B2-99A6-080020736631
 55 Solaris reserved 2             6A9630D1-1DD2-11B2-99A6-080020736631
 56 Solaris reserved 3             6A980767-1DD2-11B2-99A6-080020736631
 57 Solaris reserved 4             6A96237F-1DD2-11B2-99A6-080020736631
 58 Solaris reserved 5             6A8D2AC7-1DD2-11B2-99A6-080020736631
 59 NetBSD swap                    49F48D32-B10E-11DC-B99B-0019D1879648
 60 NetBSD FFS                     49F48D5A-B10E-11DC-B99B-0019D1879648
 61 NetBSD LFS                     49F48D82-B10E-11DC-B99B-0019D1879648
 62 NetBSD concatenated            2DB519C4-B10E-11DC-B99B-0019D1879648
 63 NetBSD encrypted               2DB519EC-B10E-11DC-B99B-0019D1879648
 64 NetBSD RAID                    49F48DAA-B10E-11DC-B99B-0019D1879648
 65 ChromeOS kernel                FE3A2A5D-4F32-41A7-B725-ACCC3285A309
 66 ChromeOS root fs               3CB8E202-3B7E-47DD-8A3C-7FF2A13CFCEC
 67 ChromeOS reserved              2E0A753D-9E48-43B0-8337-B15192CB1B5E
 68 MidnightBSD data               85D5E45A-237C-11E1-B4B3-E89A8F7FC3A7
 69 MidnightBSD boot               85D5E45E-237C-11E1-B4B3-E89A8F7FC3A7
 70 MidnightBSD swap               85D5E45B-237C-11E1-B4B3-E89A8F7FC3A7
 71 MidnightBSD UFS                0394EF8B-237E-11E1-B4B3-E89A8F7FC3A7
 72 MidnightBSD ZFS                85D5E45D-237C-11E1-B4B3-E89A8F7FC3A7
 73 MidnightBSD Vinum              85D5E45C-237C-11E1-B4B3-E89A8F7FC3A7
 74 Ceph Journal                   45B0969E-9B03-4F30-B4C6-B4B80CEFF106
 75 Ceph Encrypted Journal         45B0969E-9B03-4F30-B4C6-5EC00CEFF106
 76 Ceph OSD                       4FBD7E29-9D25-41B8-AFD0-062C0CEFF05D
 77 Ceph crypt OSD                 4FBD7E29-9D25-41B8-AFD0-5EC00CEFF05D
 78 Ceph disk in creation          89C57F98-2FE5-4DC0-89C1-F3AD0CEFF2BE
 79 Ceph crypt disk in creation    89C57F98-2FE5-4DC0-89C1-5EC00CEFF2BE
 80 OpenBSD data                   824CC7A0-36A8-11E3-890A-952519AD3F61
 81 QNX6 file system               CEF5A9AD-73BC-4601-89F3-CDEEEEE321A1
 82 Plan 9 partition               C91818F9-8025-47AF-89D2-F030D7000C2C

# 通过命令 t 修改分区类型
# 把分区1类型改为linux lvm
Command (m for help): t
Partition number (1,2, default 2): 1
Partition type (type L to list all types): E6D6D379-F507-44C2-A23C-238F2A3DF928
Changed type of partition 'Linux filesystem' to 'Linux LVM'

# 把分区2类型改为linux lvm
Command (m for help): t
Partition number (1,2, default 2): 2
Partition type (type L to list all types): E6D6D379-F507-44C2-A23C-238F2A3DF928
Changed type of partition 'Linux filesystem' to 'Linux LVM'

# 保存退出
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

4.5 创建物理卷

① 通过lvmdiskscan命令列出可被用作pv的设备

[root@localhost ~]# lvmdiskscan
  /dev/sda1 [       1.00 GiB] 
  /dev/sda2 [     <51.00 GiB] 
  /dev/sda3 [       8.00 GiB] 
  /dev/sdb1 [       8.00 GiB] 
  /dev/sdb2 [      10.00 GiB] 
  0 disks
  5 partitions
  0 LVM physical volume whole disks
  0 LVM physical volumes
  
[root@localhost ~]# df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  3.8G     0  3.8G   0% /dev
tmpfs          tmpfs     3.9G     0  3.9G   0% /dev/shm
tmpfs          tmpfs     3.9G   12M  3.8G   1% /run
tmpfs          tmpfs     3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda2      ext4       51G  1.5G   47G   4% /
/dev/sda1      ext4      976M  114M  796M  13% /boot
tmpfs          tmpfs     781M     0  781M   0% /run/user/0

注:如果系统引导程序不支持LVM,则/boot不能置于LVM中。此刻必须创建一个独立的/boot分区并直接格式化后挂载到/boot。已知支持LVM的引导程序只有GRUB。

如上图,/dev/sda1、/dev/sda2、/dev/sda3、/dev/sdb1、/dev/sdb2均可用于创建PV,但是因为/dev/sda1是/boot引导区,所以下面我们还是对新增的/dev/sdb1、/dev/sdb2创建PV

②、使用pvcreate命令创建pv

命令:pvcreate 分区1 分区2 ...

[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdb2 
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdb2" successfully created.

③、查看当前所有PV信息

可以通过pvs、pvscan、pvdisplay这三个命令查看pv信息

[root@localhost ~]# pvs
  PV         VG Fmt  Attr PSize  PFree 
  /dev/sdb1     lvm2 ---   8.00g  8.00g
  /dev/sdb2     lvm2 ---  10.00g 10.00g

[root@localhost ~]# pvscan
  PV /dev/sdb2                      lvm2 [10.00 GiB]
  PV /dev/sdb1                      lvm2 [8.00 GiB]
  Total: 2 [18.00 GiB] / in use: 0 [0   ] / in no VG: 2 [18.00 GiB]

[root@localhost ~]# pvdisplay
  "/dev/sdb2" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2
  VG Name               
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               l5EQ6Q-kZmu-ugWf-V1jP-0PLA-4gGu-8z68pc
   
  "/dev/sdb1" is a new physical volume of "8.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               8.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               tgKNIA-dtN1-iU3U-T9zF-djLA-9O1U-QZ44H5
注意: 如果你用的是未格式化过且擦除块(erase block)大小小于1M的SSD,请采用以下命令pvcreate --dataalignment 1m /dev/sda来设置对齐(alignment)。

4.6 创建卷组

①、创建卷组
使用命令vgcreate创建卷组,vgcreate 卷组名称 物理卷1 物理卷2

#查看所有物理卷
[root@localhost ~]# pvs
  PV         VG Fmt  Attr PSize  PFree 
  /dev/sdb1     lvm2 ---   8.00g  8.00g
  /dev/sdb2     lvm2 ---  10.00g 10.00g
  
#我这里只加入一个pv,另一个等会儿当扩容讲解
[root@localhost ~]# vgcreate vg01 /dev/sdb1
  Volume group "vg01" successfully created

②、查看卷组信息

可以通过vgs、vgscan、vgdisplay这三个命令查看pv信息

[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  vg01   1   0   0 wz--n- <8.00g <8.00g

[root@localhost ~]# vgscan
  Reading volume groups from cache.
  Found volume group "vg01" using metadata type lvm2

[root@localhost ~]# vgdisplay
  --- 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               <8.00 GiB
  PE Size               4.00 MiB
  Total PE              2047
  Alloc PE / Size       0 / 0   
  Free  PE / Size       2047 / <8.00 GiB
  VG UUID               oWpTYI-NaxP-Lwsi-JOt9-AEzI-NfMP-tB1WvD

此时,也可以通过pvs查看各个物理卷所在的卷组:

[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sdb1  vg01 lvm2 a--  <8.00g <8.00g
  /dev/sdb2       lvm2 ---  10.00g 10.00g

4.7 创建逻辑卷

①、创建LV
使用lvcreate命令:lvcreate -L <lv_size> <vg_name> -n <lv_name>

# 从卷组vg01中分出5G的逻辑卷lv01
[root@localhost ~]# lvcreate -L 5G  vg01 -n lv01
  Logical volume "lv01" created.

# 查看
[root@localhost ~]# lvs
  LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv01 vg01 -wi-a----- 5.00g

将卷组vg_name下所有剩余空间给创建的lv_name逻辑卷:lvcreate -l +100%FREE <vg_name> -n <lv_name>

#先删除刚才创建的5G的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
  
#把卷组vg01下所有剩余空间给创建的lv01逻辑卷
[root@localhost ~]# lvcreate -l +100%FREE  vg01 -n lv01
  Logical volume "lv01" created.
  
#查看
[root@localhost ~]# lvs
  LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv01 vg01 -wi-a----- <8.00g

该逻辑卷创建完后,你就可以通过/dev/mapper/vg_name-lv_name或/dev/vg_name/lv_name来访问它:

[root@localhost ~]# ll /dev/mapper/vg01-lv01
lrwxrwxrwx. 1 root root 7 Aug 24 09:45 /dev/mapper/vg01-lv01 -> ../dm-0

[root@localhost ~]# ll /dev/vg01/lv01 
lrwxrwxrwx. 1 root root 7 Aug 24 09:45 /dev/vg01/lv01 -> ../dm-0

②、查看lv
命令lvs、lvscan、lvdisplay查看

[root@localhost ~]# lvs
  LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv01 vg01 -wi-a----- <8.00g 
  
[root@localhost ~]# lvscan
  ACTIVE            '/dev/vg01/lv01' [<8.00 GiB] inherit
  
[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/vg01/lv01
  LV Name                lv01
  VG Name                vg01
  LV UUID                iKlBEk-EyK6-g97E-yJlY-PVVD-g9yn-f1j0pK
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2023-08-24 09:45:03 -0400
  LV Status              available
  # open                 0
  LV Size                <8.00 GiB
  Current LE             2047
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

4.8 格式化并挂载

格式化:mkfs.<filesystem_type> /dev/mapper/<vg_name>-<lv_name> 或mkfs.<filesystem_type> /dev/vg_name/lv_name

[root@localhost ~]# mkfs.ext4 /dev/vg01/lv01 
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
524288 inodes, 2096128 blocks
104806 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2147483648
64 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 ~]# mkdir /data
[root@localhost ~]# mount /dev/vg01/lv01 /data/
[root@localhost ~]# df -hT
Filesystem            Type      Size  Used Avail Use% Mounted on
devtmpfs              devtmpfs  3.8G     0  3.8G   0% /dev
tmpfs                 tmpfs     3.9G     0  3.9G   0% /dev/shm
tmpfs                 tmpfs     3.9G   12M  3.8G   1% /run
tmpfs                 tmpfs     3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda2             ext4       51G  1.5G   47G   4% /
/dev/sda1             ext4      976M  114M  796M  13% /boot
tmpfs                 tmpfs     781M     0  781M   0% /run/user/0
/dev/mapper/vg01-lv01 ext4      7.8G   36M  7.3G   1% /data

4.9 扩容

这里由于卷组已经被逻辑卷全部分走了,需要先扩容卷组

[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree
  vg01   1   1   0 wz--n- <8.00g    0 
[root@localhost ~]# lvs
  LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv01 vg01 -wi-ao---- <8.00g

#可以看到现在/dev/sdb1属于卷组vg01,/dev/sdb2还未加入卷组
[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sdb1  vg01 lvm2 a--  <8.00g     0 
  /dev/sdb2       lvm2 ---  10.00g 10.00g
  
# 把/dev/sdb2也加入卷组vg01
[root@localhost ~]# vgextend vg01 /dev/sdb2
  Volume group "vg01" successfully extended
  
# 可以看见现在/dev/sdb2已经加入卷组vg01
[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize   PFree  
  /dev/sdb1  vg01 lvm2 a--   <8.00g      0 
  /dev/sdb2  vg01 lvm2 a--  <10.00g <10.00g
  
# 再查看卷组时看见vg01已经从8G扩到了18G
[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree  
  vg01   2   1   0 wz--n- 17.99g <10.00g
  
#查看卷组空余空间,可以看到 Free PE/Size还剩10GB
[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               vg01
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  5
  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               17.99 GiB
  PE Size               4.00 MiB
  Total PE              4606
  Alloc PE / Size       2047 / <8.00 GiB
  Free  PE / Size       2559 / <10.00 GiB
  VG UUID               oWpTYI-NaxP-Lwsi-JOt9-AEzI-NfMP-tB1WvD

扩容卷组完成后扩容已经挂载的逻辑卷

通过命令:lvextend -L <extend_size> <lv_path>

# 对lv01逻辑卷扩容+5G,可以看见提示从8G增加到了13G
[root@localhost data]# lvextend -L +5G /dev/vg01/lv01 
  Size of logical volume vg01/lv01 changed from <8.00 GiB (2047 extents) to <13.00 GiB (3327 extents).
  Logical volume vg01/lv01 successfully resized.

# 但是发现分区大小还是没有增大,需要进行下一步让其生效
[root@localhost data]# df -hT
Filesystem            Type      Size  Used Avail Use% Mounted on
devtmpfs              devtmpfs  3.8G     0  3.8G   0% /dev
tmpfs                 tmpfs     3.9G     0  3.9G   0% /dev/shm
tmpfs                 tmpfs     3.9G   12M  3.8G   1% /run
tmpfs                 tmpfs     3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda2             ext4       51G  1.5G   47G   4% /
/dev/sda1             ext4      976M  114M  796M  13% /boot
tmpfs                 tmpfs     781M     0  781M   0% /run/user/0
/dev/mapper/vg01-lv01 ext4      7.8G   36M  7.3G   1% /data

# 执行resize2fs或者xfs_growfs(针对xfs文件系统)命令使修改生效,可以通过df -Th或者blkid查看lv所挂载的文件系统类型。
# 这里刚刚格式化的是ext4格式
[root@localhost data]# resize2fs /dev/vg01/lv01 
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg01/lv01 is mounted on /data; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/vg01/lv01 is now 3406848 blocks long.

# 再次查看,已经完成扩容
[root@localhost data]# df -hT
Filesystem            Type      Size  Used Avail Use% Mounted on
devtmpfs              devtmpfs  3.8G     0  3.8G   0% /dev
tmpfs                 tmpfs     3.9G     0  3.9G   0% /dev/shm
tmpfs                 tmpfs     3.9G   12M  3.8G   1% /run
tmpfs                 tmpfs     3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda2             ext4       51G  1.5G   47G   4% /
/dev/sda1             ext4      976M  114M  796M  13% /boot
tmpfs                 tmpfs     781M     0  781M   0% /run/user/0
/dev/mapper/vg01-lv01 ext4       13G   40M   13G   1% /data


# 把还卷组里还剩的空间也再次扩容到分区
[root@localhost data]# lvextend -l +100%FREE /dev/vg01/lv01
  Size of logical volume vg01/lv01 changed from <13.00 GiB (3327 extents) to 17.99 GiB (4606 extents).
  Logical volume vg01/lv01 successfully resized.
  
[root@localhost data]# resize2fs /dev/vg01/lv01
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg01/lv01 is mounted on /data; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
The filesystem on /dev/vg01/lv01 is now 4716544 blocks long.

[root@localhost data]# df -hT
Filesystem            Type      Size  Used Avail Use% Mounted on
devtmpfs              devtmpfs  3.8G     0  3.8G   0% /dev
tmpfs                 tmpfs     3.9G     0  3.9G   0% /dev/shm
tmpfs                 tmpfs     3.9G   12M  3.8G   1% /run
tmpfs                 tmpfs     3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda2             ext4       51G  1.5G   47G   4% /
/dev/sda1             ext4      976M  114M  796M  13% /boot
tmpfs                 tmpfs     781M     0  781M   0% /run/user/0
/dev/mapper/vg01-lv01 ext4       18G   44M   17G   1% /data

​ 注意:如果扩容的逻辑卷已经挂载到具体文件系统,则需要执行resize2fs或者xfs_growfs(针对xfs文件系统)命令使修改生效,可以通过df -Th或者blkid查看lv所挂载的文件系统类型。

4.10 开机自动挂载

#查找分区的UUID
[root@localhost data]# blkid /dev/vg01/lv01 
/dev/vg01/lv01: UUID="e3b06533-954f-41cb-ae85-f94fc89ebb6a" TYPE="ext4" 

#写入/etc/fstab
[root@localhost data]# echo "UUID=e3b06533-954f-41cb-ae85-f94fc89ebb6a /data ext4 defaults 0 0" >>/etc/fstab 

#查看
[root@localhost data]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Mon Jul 17 06:29:24 2023
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=74f5b9fa-22cf-4e4b-abbf-b0a0e3f42559 /                       ext4    defaults        1 1
UUID=ac823757-fbd6-4618-9c81-e4f7ecc95980 /boot                   ext4    defaults        1 2
UUID=818ce6e4-d5c7-4b9a-a27a-e6f9e935ac21 swap                    swap    defaults        0 0
UUID=e3b06533-954f-41cb-ae85-f94fc89ebb6a /data ext4 defaults 0 0

五、分区调整

5.1 分区容量调整

有时候机器往往是客户帮你准备,他不知道具体需求,没有按具体需求做好分区规划,这时候就需要稍微手动调整。如以下,/data分区有46G容量,但是/分区只有9.4G,这时候你想把/data分区的容量转移到/data分区,可以使用以下方法,这里因为/data分区里没有任何数据,所以我直接删除了再扩容到/分区的逻辑卷,生产环境应该注意备份好对应分区下的文件。

[root@localhost ~]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  1.9G     0  1.9G    0% /dev
tmpfs                   tmpfs     1.9G     0  1.9G    0% /dev/shm
tmpfs                   tmpfs     1.9G   12M  1.9G    1% /run
tmpfs                   tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs       9.4G  1.3G  8.1G   14% /
/dev/sda1               xfs      1014M  151M  864M   15% /boot
/dev/mapper/centos-data xfs        46G   33M   46G    1% /data
tmpfs                   tmpfs     378M     0  378M    0% /run/user/0
# 查看卷组
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   3   0 wz--n- <59.00g 8.00m
  
# 查看逻辑卷
[root@localhost ~]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  data centos -wi-ao---- <45.68g                                                    
  root centos -wi-ao----   9.31g                                                    
  swap centos -wi-ao----   4.00g

# 先卸载挂载在/data分区的逻辑卷
umount /dev/mapper/centos-data

# 删除逻辑卷
[root@localhost ~]# lvremove /dev/mapper/centos-data 
Do you really want to remove active logical volume centos/data? [y/n]: y
  Logical volume "data" successfully removed
  
# 此时再查看卷组发现空闲空间变多了
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree 
  centos   1   2   0 wz--n- <59.00g 45.68g
  
# 这时候把卷组中剩余的容量扩容到/分区所在的逻辑卷
[root@localhost ~]# lvextend -l +100%FREE /dev/centos/root 
  Size of logical volume centos/root changed from 9.31 GiB (2384 extents) to <55.00 GiB (14079 extents).
  Logical volume centos/root successfully resized.

# 让它生效
[root@localhost ~]# xfs_growfs /dev/centos/root 
meta-data=/dev/mapper/centos-root isize=512    agcount=4, agsize=610304 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=2441216, 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 2441216 to 14416896

#再查看,/data分区容量已经转移到/分区。
[root@localhost ~]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  1.9G     0  1.9G    0% /dev
tmpfs                   tmpfs     1.9G     0  1.9G    0% /dev/shm
tmpfs                   tmpfs     1.9G   12M  1.9G    1% /run
tmpfs                   tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        55G  1.3G   54G    3% /
/dev/sda1               xfs      1014M  151M  864M   15% /boot
tmpfs                   tmpfs     378M     0  378M    0% /run/user/0
posted @   国杰响当当  阅读(126)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示