前言

在云计算运维场景中,磁盘管理是基础且核心的工作 —— 无论是云服务器的数据存储、扩容,还是业务数据的安全隔离,都离不开对磁盘、分区、文件系统及 LVM 的熟练操作。本文基于 CentOS7 系统,从 “磁盘基础管理” 到 “LVM 高级应用”,用通俗易懂的语言 + 实操案例,带你搞定从 “裸盘” 到 “可用存储” 的全流程,适合运维新手快速上手。

一、磁盘管理与系统:从认知到实操

1. Linux 设备命名:一眼认出磁盘 / 分区

Linux 系统对存储设备有固定的命名规则,无需记忆,看懂就能对应硬件:

  • SATA/SAS/USB 硬盘:以/dev/sd开头,后续字母区分不同磁盘(如sdasdb),数字区分同一磁盘的分区(如sda1sdb2)。例:/dev/sda是第一块硬盘,/dev/sda1是第一块硬盘的第一个分区,/dev/sdb3是第二块硬盘的第三个分区。
  • NVMe 固态硬盘:以/dev/nvme开头,格式为nvmeXnYpZ(X = 控制器编号,Y = 磁盘编号,Z = 分区编号)。例:/dev/nvme0n1是第一块 NVMe 硬盘,/dev/nvme0n1p1是其第一个分区。
  • 虚拟机关联磁盘:虚拟机中可能出现/dev/vd开头(如vdavdb),规则同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交互模式(操作对象是整个磁盘,不是分区)

交互命令步骤(输入对应字母 + 回车):

  1. n:新建分区 → 选p(主分区)→ 分区号默认1 → 起始扇区默认(直接回车)→ 结束扇区输入+50G(表示分区大小 50GB);
  2. p:查看分区结果(确认分区号、大小是否正确);
  3. w:保存分区表并退出(若想放弃,输入q直接退出)。
(2)gdisk:GPT 分区表专用(支持≥2TB 磁盘)

实操案例:给/dev/sdc(500GB 磁盘)创建 1 个 GPT 分区(全量占用 500GB)

bash

gdisk /dev/sdc  # 进入gdisk交互模式

交互命令步骤:

  1. n:新建分区 → 分区号默认 → 起始扇区默认 → 结束扇区默认(全量占用磁盘)→ 分区类型默认(直接回车);
  2. p:查看分区结果;
  3. 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 唯一)。

实操步骤

  1. blkid获取/dev/sdb1的 UUID:

    bash

    blkid /dev/sdb1  # 输出:/dev/sdb1: UUID="f9a7d3c2-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="ext4"
    
  2. 编辑/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 列:文件系统类型(如ext4xfs);
    • 第 4 列:挂载参数(defaults表示默认,包含 rw、suid、dev 等);
    • 第 5 列:是否备份(0 = 不备份,1 = 备份);
    • 第 6 列:是否开机检查(0 = 不检查,1 = 优先检查,2 = 次优先检查)。
  3. 验证配置(避免语法错误导致开机无法启动):

    bash

    mount -a  # 加载/etc/fstab中的所有配置,无报错则正常
    df -h  # 再次确认/data已挂载
    

8. 交换分区(Swap)操作:给系统 “扩容虚拟内存”

Swap 分区是系统的 “应急内存”,当物理内存不足时,系统会自动使用 Swap,适合内存较小的云服务器。

(1)创建 Swap 分区(两种方式)

方式 1:磁盘分区作为 Swap(推荐,性能稳定)

  1. 用 fdisk/gdisk 创建一个分区(如/dev/sdb2,大小 2GB),并将分区类型设为82(Swap 专用):

    bash

    fdisk /dev/sdb → n → p → 分区号2 → 起始扇区默认 → 结束扇区+2G → t(修改类型)→ 分区号2 → 82(Swap类型)→ w
    
  2. 格式化 Swap 分区:

    bash

    mkswap /dev/sdb2  # 格式化为swap格式
    
  3. 启用 Swap:

    bash

    swapon /dev/sdb2  # 临时启用
    
  4. 开机自动启用:编辑/etc/fstab添加:

    bash

    /dev/sdb2 swap swap defaults 0 0
    
    验证:free -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并开机自动挂载” 为例,完整步骤:

  1. 查看新盘是否被识别:lsblk → 确认/dev/sdb存在;
  2. 创建 GPT 分区:gdisk /dev/sdb → n→默认→默认→默认→w;
  3. 格式化 xfs:mkfs.xfs /dev/sdb1
  4. 创建挂载点:mkdir -p /app
  5. 临时挂载测试:mount /dev/sdb1 /app → df -h 验证;
  6. 永久挂载: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 管理命令汇总(表格速查)

操作对象常用命令功能说明
PVpvcreate /dev/sdb1创建 PV(将分区 / 磁盘转为 PV)
pvscan扫描系统中所有 PV
pvdisplay /dev/sdb1查看 PV 详细信息
pvremove /dev/sdb1删除 PV(需先从 VG 中移除)
VGvgcreate 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)
LVlvcreate -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_appxfs 文件系统扩容(LV 扩容后执行)
resize2fs /dev/vg_data/lv_appext4 文件系统扩容(LV 扩容后执行)

3. LVM 实战操作步骤(CentOS7 案例)

以 “2 块 100GB 磁盘(/dev/sdb/dev/sdc),创建 LVM 并挂载到/app,后续扩容” 为例,完整实操:

(1)环境准备:创建 PV
  1. 先将两块磁盘分区(GPT/MBR 均可,这里用 GPT):

    bash

    gdisk /dev/sdb → n→默认→默认→默认→w  # 创建/dev/sdb1
    gdisk /dev/sdc → n→默认→默认→默认→w  # 创建/dev/sdc1
    
  2. 将分区转为 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):

  1. 扩展 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容量已更新
    
  2. 扩展文件系统(关键!LV 扩容后需同步文件系统):
    • 若为 xfs 文件系统(本文案例):

      bash

      xfs_growfs /dev/vg_app/lv_app  # 无需卸载,在线扩容
      
    • 若为 ext4 文件系统:

      bash

      resize2fs /dev/vg_app/lv_app
      
  3. 验证扩容结果:

    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 创建遵循 “从底层到上层” 的顺序,不可逆,核心流程:

  1. 物理磁盘 / 分区 → 创建 PV(pvcreate);
  2. 多个 PV → 组合为 VG(vgcreate);
  3. 从 VG 中划分 → 创建 LV(lvcreate);
  4. LV 格式化 → 挂载使用(mkfs → mount)。

三、总结与运维建议

  1. 磁盘管理核心:从 “识别设备→分区→格式化→挂载”,关键是选对分区表(GPT 优先)和文件系统(xfs 适合云场景),并通过/etc/fstab实现永久挂载;
  2. LVM 适用场景:云服务器数据盘、业务数据存储(需动态扩容),避免用 LVM 作为/boot分区(可能导致开机故障);
  3. 安全运维建议
    • 操作磁盘 / 分区前,备份关键数据(格式化、分区会清空数据);
    • 扩容 LVM 时,先扩展 LV 再扩展文件系统,顺序不可颠倒;
    • 定期用df -hvgdisplay监控磁盘和 LVM 容量,提前规划扩容;
    • Swap 分区大小建议:物理内存≤8GB 时,设为内存的 1.5 倍;内存>8GB 时,设为 8-16GB 即可(无需过大)。

通过本文的实操案例,相信你已掌握 CentOS7 磁盘管理与 LVM 的核心操作。在云计算运维中,灵活运用这些技能,可轻松应对存储扩容、数据隔离等常见需求,保障业务稳定运行!

更多推荐