云计算运维必备:CentOS7 磁盘管理与 LVM 实战指南(附完整操作案例)
前言
在云计算运维场景中,磁盘管理是基础且核心的工作 —— 无论是云服务器的数据存储、扩容,还是业务数据的安全隔离,都离不开对磁盘、分区、文件系统及 LVM 的熟练操作。本文基于 CentOS7 系统,从 “磁盘基础管理” 到 “LVM 高级应用”,用通俗易懂的语言 + 实操案例,带你搞定从 “裸盘” 到 “可用存储” 的全流程,适合运维新手快速上手。
一、磁盘管理与系统:从认知到实操
1. Linux 设备命名:一眼认出磁盘 / 分区
Linux 系统对存储设备有固定的命名规则,无需记忆,看懂就能对应硬件:
- SATA/SAS/USB 硬盘:以
/dev/sd开头,后续字母区分不同磁盘(如sda、sdb),数字区分同一磁盘的分区(如sda1、sdb2)。例:/dev/sda是第一块硬盘,/dev/sda1是第一块硬盘的第一个分区,/dev/sdb3是第二块硬盘的第三个分区。 - NVMe 固态硬盘:以
/dev/nvme开头,格式为nvmeXnYpZ(X = 控制器编号,Y = 磁盘编号,Z = 分区编号)。例:/dev/nvme0n1是第一块 NVMe 硬盘,/dev/nvme0n1p1是其第一个分区。 - 虚拟机关联磁盘:虚拟机中可能出现
/dev/vd开头(如vda、vdb),规则同sda系列。
2. 分区表:MBR vs GPT(选对才不踩坑)
分区表是磁盘的 “索引”,记录分区的位置、大小等信息,CentOS7 支持两种主流分区表,核心区别如下:
| 特性 | MBR(Master Boot Record) | GPT(GUID Partition Table) |
|---|---|---|
| 最大磁盘容量 | 支持≤2TB 的磁盘 | 支持≥2TB(最大 18EB),适合大容量云盘 |
| 最大分区数 | 最多 4 个主分区(或 3 主 + 1 扩展分区) | 理论无限制(CentOS7 默认支持 128 个) |
| 兼容性 | 老设备 / BIOS 启动兼容好 | 新设备 / UEFI 启动首选(云服务器主流) |
| 数据恢复 | 分区表损坏后恢复难度高 | 自带备份分区表,恢复更简单 |
实操建议:云服务器场景中,若磁盘≥2TB,直接选 GPT;若≤2TB,可根据启动模式(BIOS 选 MBR,UEFI 选 GPT)选择。
3. 常见文件系统:数据的 “存储格式”
文件系统是磁盘分区的 “组织规则”,不同场景选不同格式,CentOS7 常用以下 3 种:
- ext4:默认文件系统,稳定可靠,支持最大 1EB 分区、16TB 单个文件,适合大多数业务(如网站数据、日志存储)。
- xfs:CentOS7 推荐格式,擅长大文件读写、高并发场景,支持动态扩容(无需卸载分区),云服务器数据盘首选。
- swap:交换分区专用格式,当物理内存不足时,系统会将部分数据暂存到 swap,相当于 “虚拟内存”。
4. 发现新盘 / 查看盘:确认磁盘状态
刚挂载的云盘(或新增硬盘),需先确认系统是否识别,常用命令:
(1)lsblk:直观查看磁盘 / 分区结构
bash
lsblk # 列出所有块设备(磁盘、分区、挂载点)
输出示例(关键信息解读):
plaintext
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 400G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 399G 0 part /
sdb 8:16 0 100G 0 disk # 新增的未分区磁盘(目标盘)
(2)fdisk -l:查看磁盘详细信息(含分区表)
bash
fdisk -l # 列出所有磁盘的分区表、容量等信息
(3)blkid:查看设备 UUID(开机自动挂载必备)
bash
blkid # 显示所有已格式化设备的UUID和文件系统类型
输出示例:
plaintext
/dev/sda1: UUID="d2f8e6e0-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="xfs"
/dev/sda2: UUID="e8b3e1f0-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="xfs"
/dev/sdb1: UUID="f9a7d3c2-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="ext4"
5. 分区工具与交互命令:给磁盘 “分块”
CentOS7 有两种常用分区工具,分别对应 MBR 和 GPT 分区表:
(1)fdisk:MBR 分区表专用(支持≤2TB 磁盘)
实操案例:给/dev/sdb(100GB 磁盘)创建 1 个 MBR 主分区(容量 50GB)
bash
fdisk /dev/sdb # 进入fdisk交互模式(操作对象是整个磁盘,不是分区)
交互命令步骤(输入对应字母 + 回车):
n:新建分区 → 选p(主分区)→ 分区号默认1→ 起始扇区默认(直接回车)→ 结束扇区输入+50G(表示分区大小 50GB);p:查看分区结果(确认分区号、大小是否正确);w:保存分区表并退出(若想放弃,输入q直接退出)。
(2)gdisk:GPT 分区表专用(支持≥2TB 磁盘)
实操案例:给/dev/sdc(500GB 磁盘)创建 1 个 GPT 分区(全量占用 500GB)
bash
gdisk /dev/sdc # 进入gdisk交互模式
交互命令步骤:
n:新建分区 → 分区号默认 → 起始扇区默认 → 结束扇区默认(全量占用磁盘)→ 分区类型默认(直接回车);p:查看分区结果;w:保存并退出(提示 “是否写入”,输入Y确认)。
6. 格式化 / 创建文件系统:让分区 “能存数据”
分区后需格式化(创建文件系统),才能存储文件,常用命令mkfs(make filesystem)。
实操案例 1:将/dev/sdb1(MBR 分区)格式化为 ext4
bash
mkfs.ext4 /dev/sdb1 # 格式化为ext4,会自动生成UUID
输出中会提示 “Creating filesystem with xxx blocks”,表示格式化成功。
实操案例 2:将/dev/sdc1(GPT 分区)格式化为 xfs(CentOS7 推荐)
bash
mkfs.xfs /dev/sdc1 # xfs格式支持后续动态扩容,无需卸载
注意:格式化会清空分区内所有数据,操作前务必确认数据已备份!
7. 挂载 / 卸载 / 开机自动挂载:让系统 “使用分区”
格式化后的分区,需 “挂载” 到系统的某个目录(挂载点),才能被读写,就像给 U 盘分配一个 “访问入口”。
(1)临时挂载(重启失效)
实操案例:将/dev/sdb1(ext4)挂载到/data目录
bash
mkdir -p /data # 先创建挂载点目录(若不存在)
mount /dev/sdb1 /data # 挂载分区到目录
验证挂载:df -h 查看,若/data对应的设备是/dev/sdb1,则挂载成功。
(2)卸载分区(需先确保分区未被使用)
bash
umount /data # 通过挂载点卸载
# 或 umount /dev/sdb1 # 通过设备名卸载
注意:若提示 “device is busy”(设备忙),需先关闭占用该目录的进程(如fuser -m /data查看占用进程,kill -9 进程ID结束),再卸载。
(3)开机自动挂载(永久生效)
临时挂载重启后失效,需配置/etc/fstab文件实现永久挂载,推荐用 UUID(设备名可能变化,UUID 唯一)。
实操步骤:
- 用
blkid获取/dev/sdb1的 UUID:bash
blkid /dev/sdb1 # 输出:/dev/sdb1: UUID="f9a7d3c2-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="ext4" - 编辑
/etc/fstab文件,添加一行:bash
字段说明:vi /etc/fstab # 添加内容(格式:UUID=xxx 挂载点 文件系统类型 defaults 0 0) UUID=f9a7d3c2-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data ext4 defaults 0 0- 第 1 列:设备 UUID(避免设备名变化导致挂载失败);
- 第 2 列:挂载点目录(如
/data); - 第 3 列:文件系统类型(如
ext4、xfs); - 第 4 列:挂载参数(
defaults表示默认,包含 rw、suid、dev 等); - 第 5 列:是否备份(0 = 不备份,1 = 备份);
- 第 6 列:是否开机检查(0 = 不检查,1 = 优先检查,2 = 次优先检查)。
- 验证配置(避免语法错误导致开机无法启动):
bash
mount -a # 加载/etc/fstab中的所有配置,无报错则正常 df -h # 再次确认/data已挂载
8. 交换分区(Swap)操作:给系统 “扩容虚拟内存”
Swap 分区是系统的 “应急内存”,当物理内存不足时,系统会自动使用 Swap,适合内存较小的云服务器。
(1)创建 Swap 分区(两种方式)
方式 1:磁盘分区作为 Swap(推荐,性能稳定)
- 用 fdisk/gdisk 创建一个分区(如
/dev/sdb2,大小 2GB),并将分区类型设为82(Swap 专用):bash
fdisk /dev/sdb → n → p → 分区号2 → 起始扇区默认 → 结束扇区+2G → t(修改类型)→ 分区号2 → 82(Swap类型)→ w - 格式化 Swap 分区:
bash
mkswap /dev/sdb2 # 格式化为swap格式 - 启用 Swap:
bash
swapon /dev/sdb2 # 临时启用 - 开机自动启用:编辑
/etc/fstab添加:bash
验证:/dev/sdb2 swap swap defaults 0 0free -h查看 Swap 列是否有数值。
方式 2:文件作为 Swap(临时扩容,无需分区)
bash
dd if=/dev/zero of=/swapfile bs=1G count=2 # 创建2GB的swap文件(bs=块大小,count=块数)
chmod 600 /swapfile # 设置权限(仅root可读写,保障安全)
mkswap /swapfile # 格式化
swapon /swapfile # 启用
# 开机自动启用:/etc/fstab添加一行
/swapfile swap swap defaults 0 0
(2)关闭 Swap
bash
swapoff /dev/sdb2 # 临时关闭
# 若需永久关闭,删除/etc/fstab中对应的Swap配置行
9. 磁盘 / 文件系统使用情况:监控存储状态
运维中需定期查看磁盘使用率,避免磁盘满导致业务故障,常用命令:
(1)df:查看分区使用率
bash
df -h # -h:人性化显示(GB/MB单位)
输出示例(关键看 Use% 列,超过 80% 需警惕):
plaintext
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 399G 80G 319G 20% /
/dev/sda1 1014M 150M 865M 15% /boot
/dev/sdb1 50G 10G 40G 20% /data
(2)du:查看目录 / 文件占用空间
bash
du -sh /data # -s:汇总大小,-h:人性化显示(查看/data目录总占用)
du -h --max-depth=1 /data # 查看/data下一级目录的占用情况
10. 磁盘从裸盘到挂载:完整流程串讲(实操案例)
以 “新增 1 块 100GB 云盘(/dev/sdb),创建 GPT 分区,格式化为 xfs,挂载到/app并开机自动挂载” 为例,完整步骤:
- 查看新盘是否被识别:
lsblk→ 确认/dev/sdb存在; - 创建 GPT 分区:
gdisk /dev/sdb→ n→默认→默认→默认→w; - 格式化 xfs:
mkfs.xfs /dev/sdb1; - 创建挂载点:
mkdir -p /app; - 临时挂载测试:
mount /dev/sdb1 /app→df -h验证; - 永久挂载:
blkid /dev/sdb1获取 UUID → 编辑/etc/fstab添加配置 →mount -a验证。
二、LVM 概述与管理:灵活扩容的 “存储神器”
在云计算场景中,业务数据增长往往不可预测,传统分区扩容需卸载、重新分区(风险高),而 LVM(Logical Volume Manager,逻辑卷管理)可实现 “在线动态扩容”,无需停机,是云运维的必备技能。
1. LVM 概述:核心概念 + 优势
(1)核心概念(类比理解)
- 物理卷(PV,Physical Volume):底层存储载体,可是整个磁盘、磁盘分区(如
/dev/sdb1、/dev/sdc),相当于 “存储原材料”; - 卷组(VG,Volume Group):将多个 PV 组合成一个 “存储池”,相当于 “原材料加工后的大仓库”;
- 逻辑卷(LV,Logical Volume):从 VG 中划分出的 “虚拟分区”,可直接格式化、挂载使用,相当于 “仓库中划分的货架”;
- 物理扩展(PE,Physical Extent):PV 的最小分配单位(默认 4MB),VG 和 LV 的分配都以 PE 为基础。
(2)LVM 核心优势
- 动态扩容 / 缩容:LV 可在线调整大小(无需卸载,不影响业务);
- 灵活分配:多个磁盘可组合成 VG,按需划分 LV(如 1 块 200GB+1 块 300GB=500GB VG,可划分为 100GB+400GB 两个 LV);
- 数据迁移:可将 PV 中的数据迁移到其他 PV,方便替换故障磁盘。
2. LVM 管理命令汇总(表格速查)
| 操作对象 | 常用命令 | 功能说明 |
|---|---|---|
| PV | pvcreate /dev/sdb1 | 创建 PV(将分区 / 磁盘转为 PV) |
| pvscan | 扫描系统中所有 PV | |
| pvdisplay /dev/sdb1 | 查看 PV 详细信息 | |
| pvremove /dev/sdb1 | 删除 PV(需先从 VG 中移除) | |
| VG | vgcreate vg_data /dev/sdb1 /dev/sdc1 | 创建 VG(将多个 PV 组合为 vg_data) |
| vgscan | 扫描系统中所有 VG | |
| vgdisplay vg_data | 查看 VG 详细信息(剩余空间、PE 等) | |
| vgextend vg_data /dev/sdd1 | 给 VG 扩容(添加新 PV) | |
| vgreduce vg_data /dev/sdd1 | 从 VG 中移除 PV(需先迁移数据) | |
| vgremove vg_data | 删除 VG(需先删除所有 LV) | |
| LV | lvcreate -L 100G -n lv_app vg_data | 创建 LV(从 vg_data 划 100GB,命名 lv_app) |
| lvscan | 扫描系统中所有 LV | |
| lvdisplay /dev/vg_data/lv_app | 查看 LV 详细信息 | |
| lvextend -L +50G /dev/vg_data/lv_app | 给 LV 扩容(增加 50GB) | |
| lvreduce -L 120G /dev/vg_data/lv_app | 给 LV 缩容(缩减到 120GB,需先备份数据) | |
| lvremove /dev/vg_data/lv_app | 删除 LV(需先卸载) | |
| 文件系统 | xfs_growfs /dev/vg_data/lv_app | xfs 文件系统扩容(LV 扩容后执行) |
| resize2fs /dev/vg_data/lv_app | ext4 文件系统扩容(LV 扩容后执行) |
3. LVM 实战操作步骤(CentOS7 案例)
以 “2 块 100GB 磁盘(/dev/sdb、/dev/sdc),创建 LVM 并挂载到/app,后续扩容” 为例,完整实操:
(1)环境准备:创建 PV
- 先将两块磁盘分区(GPT/MBR 均可,这里用 GPT):
bash
gdisk /dev/sdb → n→默认→默认→默认→w # 创建/dev/sdb1 gdisk /dev/sdc → n→默认→默认→默认→w # 创建/dev/sdc1 - 将分区转为 PV:
bash
pvcreate /dev/sdb1 /dev/sdc1 # 同时创建两个PV pvscan # 验证PV是否创建成功(输出中显示/dev/sdb1、/dev/sdc1为PV)
(2)创建 VG(卷组)
bash
vgcreate vg_app /dev/sdb1 /dev/sdc1 # 创建名为vg_app的VG,包含两个PV(总容量200GB)
vgdisplay vg_app # 查看VG信息,确认Total PE、Free PE是否正确
(3)创建 LV(逻辑卷)
bash
lvcreate -L 150G -n lv_app vg_app # 从vg_app中划150GB,创建名为lv_app的LV
lvscan # 验证LV(输出:ACTIVE '/dev/vg_app/lv_app' [150.00 GiB] inherit)
(4)格式化 LV 并挂载
bash
mkfs.xfs /dev/vg_app/lv_app # 格式化为xfs(支持在线扩容)
mkdir -p /app # 创建挂载点
mount /dev/vg_app/lv_app /app # 临时挂载
# 开机自动挂载:/etc/fstab添加一行
/dev/vg_app/lv_app /app xfs defaults 0 0
mount -a # 验证配置
df -h # 查看挂载结果(/app对应的设备是/dev/mapper/vg_app-lv_app)
(5)LV 扩容(业务增长,需新增 50GB)
假设 vg_app 还有 50GB 空闲空间(若没有,先添加新 PV:vgextend vg_app /dev/sdd1):
- 扩展 LV 容量:
bash
lvextend -L +50G /dev/vg_app/lv_app # 给LV增加50GB(总容量变为200GB) # 或 lvextend -L 200G /dev/vg_app/lv_app(直接指定目标容量) lvdisplay /dev/vg_app/lv_app # 验证LV容量已更新 - 扩展文件系统(关键!LV 扩容后需同步文件系统):
- 若为 xfs 文件系统(本文案例):
bash
xfs_growfs /dev/vg_app/lv_app # 无需卸载,在线扩容 - 若为 ext4 文件系统:
bash
resize2fs /dev/vg_app/lv_app
- 若为 xfs 文件系统(本文案例):
- 验证扩容结果:
bash
df -h # 查看/app的容量已变为200GB
(6)LV 缩容(谨慎操作!需备份数据)
缩容风险较高,需先卸载 LV 并检查文件系统:
bash
umount /app # 卸载LV
e2fsck -f /dev/vg_app/lv_app # 检查ext4文件系统(xfs需用xfs_repair)
lvreduce -L 100G /dev/vg_app/lv_app # 缩容到100GB
resize2fs /dev/vg_app/lv_app # 同步ext4文件系统(xfs不支持缩容!)
mount /app # 重新挂载
df -h # 验证容量
注意:xfs 文件系统不支持缩容,若需缩容,需备份数据→删除 LV→重新创建更小的 LV→恢复数据。
4. LVM 创建流程:核心步骤总结
LVM 创建遵循 “从底层到上层” 的顺序,不可逆,核心流程:
- 物理磁盘 / 分区 → 创建 PV(
pvcreate); - 多个 PV → 组合为 VG(
vgcreate); - 从 VG 中划分 → 创建 LV(
lvcreate); - LV 格式化 → 挂载使用(
mkfs→mount)。
三、总结与运维建议
- 磁盘管理核心:从 “识别设备→分区→格式化→挂载”,关键是选对分区表(GPT 优先)和文件系统(xfs 适合云场景),并通过
/etc/fstab实现永久挂载; - LVM 适用场景:云服务器数据盘、业务数据存储(需动态扩容),避免用 LVM 作为
/boot分区(可能导致开机故障); - 安全运维建议:
- 操作磁盘 / 分区前,备份关键数据(格式化、分区会清空数据);
- 扩容 LVM 时,先扩展 LV 再扩展文件系统,顺序不可颠倒;
- 定期用
df -h、vgdisplay监控磁盘和 LVM 容量,提前规划扩容; - Swap 分区大小建议:物理内存≤8GB 时,设为内存的 1.5 倍;内存>8GB 时,设为 8-16GB 即可(无需过大)。
通过本文的实操案例,相信你已掌握 CentOS7 磁盘管理与 LVM 的核心操作。在云计算运维中,灵活运用这些技能,可轻松应对存储扩容、数据隔离等常见需求,保障业务稳定运行!
更多推荐
所有评论(0)