磁盘分区管理
1.分区工具:
1.1设置磁盘(物理)分区:fdisk gdisk parted
1.2MBR 与 GPT 简要对比表
1.3parted的用法
基本语法:parted (选项) <设备>,常用选项包括-l(列出所有已识别的设备及其分区表)、-s(以无交互模式运行)、-v(显示版本信息)、-h(显示帮助信息)
交互式用法
:运行
parted /dev/sdX(X 为磁盘盘符)可进入交互式模式,在其中可使用以下命令:
print:显示当前设备的分区表。mklabel:创建新的分区表,如mklabel gpt创建 GPT 分区表。mkpart:创建新分区,如mkpart primary ext4 1MiB 100MiB创建一个起始位置为 1MiB、大小为 100MiB 的主分区,文件系统为 ext4。rm:删除分区,如rm 1删除第一个分区。resizepart:调整现有分区大小,如resizepart 1 200MiB将第一个分区大小调整为 200MiB。set:设置分区标志,如set 1 boot on将第一个分区设置为可启动。quit:退出 parted。
2.Linux LVM 完整配置流程(优化版):从物理设备到开机自挂载
本文基于实操命令,梳理 LVM(逻辑卷管理)从物理设备准备到开机自挂载的标准化流程,补充关键参数解释、易错点规避和效率优化技巧,确保操作准确且符合生产环境规范。
2.1、流程总览
LVM 核心逻辑是通过 “物理卷(PV)→ 卷组(VG)→ 逻辑卷(LV)” 的层级管理磁盘空间,最终实现灵活扩容与按需分配。完整流程如下: 硬盘/分区/RAID → 创建物理卷(PV)→ 创建卷组(VG)→ 创建逻辑卷(LV)→ 格式化文件系统 → 创建挂载点 → 临时挂载 → 配置开机自挂载
2.2、分步优化操作(含命令解析)
2.2.1. 准备物理设备并创建物理卷(PV)
物理卷是 LVM 的 “基础原料”,可将整块磁盘、分区或 RAID 设备初始化为 PV(建议对磁盘先分区再做 PV,便于后续管理)。
操作命令
# 示例1:将 /dev/sdb 的3个分区(sdb1、sdb2、sdb3)初始化为 PV
[root@centos7 ~]# pvcreate /dev/sdb{1..3} # {1..3} 是通配符,等价于 /dev/sdb1 /dev/sdb2 /dev/sdb3
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
Physical volume "/dev/sdb3" successfully created.
# 示例2:将整块磁盘 /dev/sdc(无分区)直接初始化为 PV(适合全新磁盘)
[root@centos7 ~]# lsblk /dev/sdc # 先确认磁盘无重要数据(SIZE=2G,无分区)
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdc 8:32 0 2G 0 disk
[root@centos7 ~]# pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created.优化说明
通配符使用:
/dev/sdb{1..3}替代逐个输入分区路径,减少重复操作(若分区是 sdb5、sdb6,可写sdb{5,6})。前置检查:创建 PV 前必须用
lsblk或fdisk -l确认设备无重要数据(PV 创建会覆盖设备头部信息,数据无法恢复)。分区类型建议:若用分区做 PV,建议将分区类型设为
8e(LVM 专用类型),通过fdisk的t命令修改(便于识别)。
2.2.2. 查看物理卷(PV)状态
通过工具查看 PV 的归属(是否已加入卷组)、大小、UUID 等信息,确认 PV 创建成功。
操作命令
# 1. 快速扫描所有 PV(简洁显示,适合批量检查)
[root@centos7 ~]# pvscan
PV /dev/sda3 VG centos_centos7 lvm2 [<39.00 GiB / 0 free] # 已加入卷组 centos_centos7,无空闲空间
PV /dev/sdb2 lvm2 [500.00 MiB] # 未加入卷组(无 VG 名称)
PV /dev/sdc lvm2 [2.00 GiB]
PV /dev/sdb3 lvm2 [300.00 MiB]
PV /dev/sdb1 lvm2 [1.00 GiB]
Total: 5 [<42.78 GiB] / in use: 1 [<39.00 GiB] / in no VG: 4 [3.78 GiB] # 统计信息
# 2. 列表形式显示 PV(重点看 VG 列和 PFree 列)
[root@centos7 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 centos_centos7 lvm2 a-- <39.00g 0 # a-- 表示激活状态,PFree=0 无空闲
/dev/sdb1 lvm2 --- 1020.00m 1020.00m# --- 表示未激活(未加入 VG),PFree=总大小
/dev/sdb2 lvm2 --- 496.00m 496.00m
/dev/sdb3 lvm2 --- 300.00m 300.00m
/dev/sdc lvm2 --- 2.00g 2.00g
# 3. 查看单个 PV 详细信息(如 /dev/sdb1,含 UUID、PE 大小等)
[root@centos7 ~]# pvdisplay /dev/sdb1
"/dev/sdb1" is a new physical volume of "1.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name # 空,表示未加入卷组
PV Size 1.00 GiB
Allocatable NO # 未加入 VG 前不可分配
PE Size 0 # 未加入 VG 前无 PE 大小(PE 由 VG 定义)
Total PE 0
Free PE 0
Allocated PE 0
PV UUID cRPSpO-mkfW-ZFpv-B2ye-Qedh-FibA-GI0RR9 # PV 唯一标识,用于故障排查关键字段解释
Attr 列:
a= 激活,-= 未激活;未加入 VG 的 PV 为---,加入后变为a--。PFree 列:PV 的空闲空间,未加入 VG 时 PFree=PSize,加入后随 LV 创建减少。
2.2.3. 创建卷组(VG)
卷组是 PV 的 “聚合池”,将多个 PV 合并为一个逻辑空间,统一分配 PE(物理扩展单元,默认 4MB,VG 级别的最小分配单位)。
操作命令
# 创建卷组 vg01,将 /dev/sdb1 和 /dev/sdb2 加入(选择未使用的 PV)
[root@centos7 ~]# vgcreate vg01 /dev/sdb2 /dev/sdb1
Volume group "vg01" successfully created优化技巧
自定义 PE 大小:若需分配大空间(如 TB 级),可通过
-s指定更大的 PE(如-s 16M),减少 PE 数量,提升性能:vgcreate -s 16M vg01 /dev/sdb1 /dev/sdb2卷组命名规范:建议按用途命名(如
vg_data用于数据,vg_log用于日志),便于后续维护。
2.2.4. 查看卷组(VG)状态
确认 VG 的大小、包含的 PV 数量、空闲空间等,为后续创建 LV 做准备。
操作命令
# 1. 列表形式显示所有 VG(简洁,重点看 VSize 和 VFree)
[root@centos7 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos_centos7 1 2 0 wz--n- <39.00g 0 # #PV=1个PV,#LV=2个LV,VFree=0无空闲
vg01 2 0 0 wz--n- 1.48g 1.48g # #PV=2个PV,#LV=0无LV,VFree=总大小
# 2. 查看单个 VG 详细信息(如 vg01,含 PE 大小、总 PE 数)
[root@centos7 ~]# vgdisplay vg01
--- Volume group ---
VG Name vg01
System ID
Format lvm2
Metadata Areas 2 # 包含 2 个 PV
Metadata Sequence No 1
VG Access read/write # 读写权限
VG Status resizable # 可扩容(支持添加新 PV)
MAX LV 0 # 无 LV 数量限制(默认)
Cur LV 0 # 当前无 LV
Open LV 0 # 无已挂载的 LV
Max PV 0 # 无 PV 数量限制(默认)
Cur PV 2 # 当前 2 个 PV
Act PV 2 # 激活的 PV 数量
VG Size 1.48 GiB # VG 总大小(≈1G+500M,因 PV 头部占用少量空间)
PE Size 4.00 MiB # 默认 PE 大小(VG 最小分配单位)
Total PE 379 # 总 PE 数(1.48G / 4M ≈ 379)
Alloc PE / Size 0 / 0
Free PE / Size 379 / 1.48 GiB # 空闲 PE 数(可分配给 LV)
VG UUID vZw5z0-e3AM-QFpC-NdEj-1XxI-srSh-A1etbe关键字段解释
#PV/#LV:卷组包含的 PV 数量和 LV 数量,创建 LV 后 #LV 会增加。
PE Size:LV 创建时的最小单位(如 PE=4M,LV 大小必须是 4M 的整数倍)。
2.2.5. 创建逻辑卷(LV)
逻辑卷是从 VG 中 “切割” 出的空间,可直接格式化并挂载使用(相当于传统分区,但支持动态扩容)。创建 LV 有两种指定大小的方式:-L(指定具体容量)和 -l(指定 PE 数量或百分比)。
方法 1:用 -L 指定具体容量(推荐,直观)
# 1. 先查看 VG 空闲空间(vg01 有 1.48G 空闲)
[root@centos7 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos_centos7 1 2 0 wz--n- <39.00g 0
vg01 2 0 0 wz--n- 1.48g 1.48g
# 2. 创建 LV:从 vg01 分配 200M,命名为 lv01
[root@centos7 ~]# lvcreate -L 200M -n lv01 vg01 # -L=容量,-n=LV 名称,最后跟 VG 名称
Logical volume "lv01" created.
# 3. 查看 LV 创建结果(lvs)和 VG 剩余空间(vgs)
[root@centos7 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos_centos7 -wi-ao---- <35.00g # -wi-ao 表示可写、已激活、已挂载
swap centos_centos7 -wi-ao---- 4.00g
lv01 vg01 -wi-a----- 200.00m # -wi-a 表示可写、已激活、未挂载
[root@centos7 ~]# vgs # VG 空闲空间减少 200M(1.48g → 1.29g)
VG #PV #LV #SN Attr VSize VFree
centos_centos7 1 2 0 wz--n- <39.00g 0
vg01 2 1 0 wz--n- 1.48g <1.29g方法 2:用 -l 指定 PE 数量或百分比(灵活,适合充分利用空间)
# 创建 LV:从 vg01 分配 20 个 PE(PE=4M → 20*4=80M),命名为 lv02
[root@centos7 ~]# lvcreate -l 20 -n lv02 vg01
Logical volume "lv02" created.
# 查看结果(LV 大小为 80M)
[root@centos7 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos_centos7 -wi-ao---- <35.00g
swap centos_centos7 -wi-ao---- 4.00g
lv01 vg01 -wi-a----- 200.00m
lv02 vg01 -wi-a----- 80.00m # 20*4M=80M扩展用法
分配 VG 所有空闲空间:
lvcreate -l 100%FREE -n lv03 vg01(适合一次性用满 VG 空闲空间)。分配 VG 空闲空间的 50%:
lvcreate -l 50%FREE -n lv04 vg01(灵活预留空间)。
2.2.6. 格式化逻辑卷(创建文件系统)
LV 需格式化后才能挂载使用,常用文件系统为 ext4(兼容好,支持缩容)和 xfs(性能优,CentOS 7/8 默认,仅支持扩容)。
操作命令
# 1. 格式化 lv01 为 ext4(适合需要缩容的场景)
[root@centos7 ~]# mkfs.ext4 /dev/vg01/lv01 # LV 路径:/dev/卷组名/逻辑卷名
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
51200 inodes, 204800 blocks
10240 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
25 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
# 2. 格式化 lv02 为 xfs(适合高性能场景,CentOS 7 默认)
[root@centos7 ~]# mkfs.xfs /dev/vg01/lv02
meta-data=/dev/vg01/lv02 isize=512 agcount=4, agsize=5120 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=20480, 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
# 3. 验证格式化结果(用 blkid 查看文件系统类型和 UUID)
[root@centos7 ~]# blkid
......
/dev/mapper/vg01-lv01: UUID="06b713e3-d656-413d-b193-ed0faa44e824" TYPE="ext4" # ext4
/dev/mapper/vg01-lv02: UUID="5265df4c-6b5b-4e02-be23-a39ac1f3.LVM 逻辑卷(LV)扩容完整指南
LVM 的核心优势之一是支持在线动态扩容(无需卸载逻辑卷,不中断业务),但需根据文件系统类型(如 ext4/xfs)选择对应工具。扩容流程遵循 “扩展 LV 逻辑空间 → 扩展文件系统” 两步核心操作,以下是详细步骤与优化说明。
3.1、扩容前必备检查
扩容前需确认 3 个关键信息,避免操作失败或数据丢失:
确认 LV 挂载状态:无需卸载(在线扩容),但需确认挂载点(后续 xfs 扩容需用到)。
# 查看 LV 挂载情况(示例:vg01 卷组的 lv01、lv02) df -hT | grep vg01 # 输出示例: # /dev/mapper/vg01-lv01 ext4 190M 1.6M 175M 1% /lv01 # /dev/mapper/vg01-lv02 xfs 77M 4.3M 73M 6% /lv02确认卷组(VG)剩余空间:LV 扩容需依赖 VG 的空闲空间,若 VG 无空闲空间,需先添加新物理卷(PV)到 VG。
# 查看 VG 空闲空间(重点看 VFree 列) vgs vg01 # 仅查看 vg01 卷组 # 输出示例: # VG #PV #LV #SN Attr VSize VFree # vg01 2 2 0 wz--n- 1.48g <1.20g # 有 1.20G 空闲,可用于扩容确认文件系统类型:ext4 和 xfs 扩容工具不同(ext4 用
resize2fs,xfs 用xfs_growfs)。# 方法1:通过 df -hT 查看(TYPE 列) # 方法2:通过 blkid 查看(TYPE 字段) blkid /dev/vg01/lv01 # 输出示例:/dev/mapper/vg01-lv01: UUID="xxx" TYPE="ext4"
3.2、分场景扩容步骤(ext4/xfs)
场景 1:文件系统为 ext4(如 lv01)
步骤 1:扩展 LV 逻辑空间
通过 lvextend 命令从 VG 中分配空闲空间给 LV,支持两种指定容量的方式:
方式 1:指定扩容后总容量
(如扩容到 500M):
lvextend -L 500M /dev/vg01/lv01 # -L 后跟总容量方式 2:指定新增容量
(如增加 300M,号表新增):
lvextend -L +300M /dev/vg01/lv01 # 推荐,避免算错总容量方式 3:使用 VG 全部空闲空间
(适合一次性用满空闲空间):
lvextend -l 100%FREE /dev/vg01/lv01 # -l 后跟 PE 数量(100%FREE 表示全部空闲 PE)
执行结果验证:查看 LV 大小是否已更新
lvs /dev/vg01/lv01 # 或 lvdisplay /dev/vg01/lv01
# 输出示例:LV lv01 VG vg01 LSize 500.00m # LV 已扩展到 500M步骤 2:扩展 ext4 文件系统
LV 扩容后,文件系统尚未识别新增空间,需用 resize2fs 同步(ext4 支持在线同步,无需卸载)
# 直接指定 LV 路径即可(ext4 会自动识别新增空间)
resize2fs /dev/vg01/lv01执行结果验证:查看挂载点空间是否更新
df -hT /lv01 # 查看 /lv01 挂载点
# 输出示例:/dev/mapper/vg01-lv01 ext4 488M 1.8M 462M 1% /lv01 # 空间已生效场景 2:文件系统为 xfs(如 lv02)
xfs 扩容与 ext4 核心区别:xfs_growfs 需指定挂载点,而非 LV 路径,且 xfs 不支持缩容(操作前需确认扩容需求)。
步骤 1:扩展 LV 逻辑空间
与 ext4 步骤 1 完全一致,示例:给 lv02 新增 200M 空间
lvextend -L +200M /dev/vg01/lv02执行结果验证:
lvs /dev/vg01/lv02 # 输出示例:LV lv02 VG vg01 LSize 280.00m步骤 2:扩展 xfs 文件系统
用 xfs_growfs 同步文件系统,需传入 LV 的挂载点(如 /lv02):
xfs_growfs /lv02 # 注意:这里是挂载点 /lv02,不是 LV 路径 /dev/vg01/lv02执行结果验证:
df -hT /lv02 # 输出示例:/dev/mapper/vg01-lv02 xfs 277M 4.5M 273M 2% /lv023.3、特殊场景:VG 无空闲空间怎么办?
若执行 vgs vg01 发现 VFree=0,需先添加新物理卷(PV)到 VG,再进行 LV 扩容,步骤如下:
准备新物理设备(如新增磁盘 /dev/sdd,或分区 /dev/sdd1):
# 示例:将整块磁盘 /dev/sdd 初始化为 PV pvcreate /dev/sdd # 输出:Physical volume "/dev/sdd" successfully created.将新 PV 加入目标 VG(如 vg01):
vgextend vg01 /dev/sdd # 扩展 vg01 卷组,加入 /dev/sdd # 输出:Volume group "vg01" successfully extended验证 VG 空闲空间:
vgs vg01 # 此时 VFree 会增加(如新增 2G 磁盘,VFree 约 2G)后续操作:回到 “场景 1 / 场景 2”,正常扩容 LV 即可。
3.4、扩容易错点与避坑指南
漏扩展文件系统:仅执行
lvextend会导致 LV 逻辑空间变大,但文件系统仍识别原大小(df -h无变化),必须执行resize2fs/xfs_growfs。xfs 扩容传错路径:
xfs_growfs必须传挂载点(如 /lv02),传 LV 路径(/dev/vg01/lv02)会报错:xfs_growfs: /dev/vg01/lv02 is not a mounted XFS filesystem。未检查数据完整性:虽然 LVM 扩容安全性高,但重要数据建议先备份(如通过
rsync备份挂载点数据)。离线扩容误区:ext4/xfs 均支持在线扩容,无需卸载 LV;若强行卸载,可能导致业务中断(生产环境需避免)。
4、总结:扩容核心流程
检查前提:确认 LV 挂载点、VG 空闲空间、文件系统类型。
扩展 LV:
lvextend -L +新增容量 /dev/VG名/LV名。扩展文件系统
:
ext4:
resize2fs /dev/VG名/LV名xfs:
xfs_growfs 挂载点
验证结果:
df -hT 挂载点确认空间生效。