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),多个物理块将被分配给一个逻辑卷。你可以把它看成物理卷的一部分,这部分可以被分配给一个逻辑卷。
图解:
依次为: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
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY