Linux磁盘管理与存储技术实战笔记

📅 2026/8/1 8:47:26 👁️ 阅读次数 📝 编程学习
Linux磁盘管理与存储技术实战笔记

Linux 磁盘管理与存储技术实战笔记 📒

从 GPT 分区到 RAID 阵列,再到 LVM 逻辑卷——一文掌握 Linux 磁盘管理的核心武器。


目录

  1. GPT 分区方案
  2. gdisk:GPT 分区管理工具
  3. wipefs:磁盘信息清理工具
  4. parted:全能分区管理工具
  5. 文件系统持久化挂载
  6. 综合案例:文件系统空间不足怎么办?
  7. Linux RAID 存储技术
  8. Linux 逻辑卷管理(LVM)

1. GPT 分区方案

1.1 为什么要用 GPT?

在 GPT 出现之前,MBR(Master Boot Record)是硬盘分区的主流方案。但它有两个致命短板:

限制项MBRGPT
最大磁盘/分区容量2 TiB18 ZiB(约 18 亿 TB)
最大分区数量15 个128 个(实际可用约 120 个)
分区表冗余❌ 无✅ 有备份

💡小贴士:GPT 使用64 位存储分区扇区总数(MBR 只有 32 位),所以它能管理大到离谱的磁盘。18 ZiB = 2⁶⁴ × 512 字节,这个数字大到短期内不会成为瓶颈。

1.2 GPT 分区表结构一览

GPT 的分区表结构设计非常巧妙,我们可以把它想象成一本"硬盘目录":

┌──────────────────────────────────────────────────┐ │ LBA0 保护性 MBR(含 0xEE 标识 + 引导程序)│ │ LBA1 GPT 表头(位置信息 + CRC32 校验码) │ │ LBA2 ~ LBA33 分区条目(4 条/LBA × 32 = 128 条) │ │ ... 实际数据区 │ │ 末尾 34 LBA 备份 GPT(LBA1~LBA33 的完整副本) │ └──────────────────────────────────────────────────┘

关键设计亮点

  • LBA0(保护性 MBR):前半部分存放启动引导程序,后半部分写入特殊标识0xEE,告诉系统"这是 GPT 格式的磁盘"。老旧的磁盘工具看到这个标识后,不会误操作破坏分区。
  • LBA1(GPT 表头):记录分区表自身的位置、大小,以及备份 GPT 的存放位置。最重要的是存放了CRC32 校验码,操作系统用它来判断 GPT 是否损坏。
  • LBA2~33(分区条目区):每个 LBA 有 512 字节,能存 4 组分区记录。默认 32 个 LBA = 128 组分区。每组记录占 128 字节,其中包含 64 位的分区扇区总数。
  • 末尾 34 LBA(备份区):GPT 的精髓——冗余设计。如果主分区表损坏,立刻可以从备份恢复。

2. gdisk:GPT 分区管理工具

gdisk是 GPT 分区的专属管理工具,特别适合管理超过 2T 的大磁盘。它的交互界面与传统的fdisk非常相似,学习成本很低。

2.1 查看分区表

gdisk-l/dev/sdb

输出示例中要重点关注:

  • Partition table holds up to 128 entries—— 最多 128 个分区
  • First usable sector is 34—— 前 34 个扇区被 GPT 元数据占用
  • Partitions will be aligned on 2048-sector boundaries—— 分区自动对齐到 2048 扇区边界(1 MiB),提升性能

2.2 将 MBR 转换为 GPT

进入交互模式后,输入o即可将磁盘从 MBR 转换为 GPT:

gdisk /dev/sdb Command(?forhelp): o# 创建全新的 GPT 分区表# ⚠️ 这会删除所有现有分区!

⚠️警告:此操作会清空磁盘上所有分区数据,务必提前备份。

2.3 gdisk 常用命令速查

命令作用
n创建新分区
d删除分区
c修改分区名称(很实用!)
t修改分区类型码
i查看分区详细信息
p打印分区表
w保存并退出
q不保存退出

2.4 完整操作演示

# 1. 进入 gdisk[root@centos7 ~]# gdisk /dev/sdb# 2. 转换分区表方案(如果是 MBR 磁盘)Command(?forhelp): o Proceed?(Y/N): Y# 3. 创建新分区Command(?forhelp): n Partition number(1-128, default1):[回车]First sector(34-41943006, default=2048):[回车]Last sector(2048-41943006)or{+-}size{KMGTP}: +2G# 4. 设置分区类型(可选,回车使用默认 Linux filesystem)Hex code or GUID(L to show codes, Enter=8300):[回车]# 5. 修改分区名称Command(?forhelp): c Using1Enter name: data01# 6. 查看结果Command(?forhelp): p# Number Start End Size Code Name# 1 2048 4196351 2.0 GiB 8300 data01# 7. 保存Command(?forhelp): w

3. wipefs:磁盘信息清理工具

wipefs用于擦除磁盘上的文件系统、RAID、分区表等签名信息。当你需要"重置"一块磁盘时,它是一个快速有效的工具。

# 查看磁盘上有哪些管理信息wipefs /dev/sdb# 清除未挂载磁盘的分区表wipefs-a/dev/sdb# ⚠️ 危险操作:强制清除(即使磁盘正在使用)wipefs-fa/dev/sdb

🛑数据无价,操作需谨慎!执行前再三确认磁盘没有重要数据,最好提前备份。


4. parted:全能分区管理工具

如果说fdisk是 MBR 的专家、gdisk是 GPT 的专家,那parted就是双料冠军——它同时支持 MBR 和 GPT,还支持非交互式操作,非常适合编写脚本。

4.1 两种操作模式

  • 交互式:进入(parted)提示符,逐条执行命令
  • 非交互式:直接在命令行传入参数,一行命令完成操作

4.2 进入交互模式

parted/dev/sdb# 查看帮助(parted)help# 查看分区表(parted)print# 设置单位为 MiB(推荐,避免 MB 与 MiB 的混淆)(parted)unit MiB

⚠️特别注意parted所做更改立刻生效,没有"撤销"的机会!

4.3 管理 MBR 磁盘

# 设置分区方案为 MBR(parted)mklabel msdos# 创建主分区(parted)mkpart Partition type? primary/extended? primary File system type?[ext2]? xfs Start?1End?2049# 扩展分区(从 2049MiB 扩展到 4097MiB)(parted)resizepart14097# 删除分区(parted)rm1

4.4 管理 GPT 磁盘

GPT 下创建分区多了一个步骤——给分区命名

# 设置分区方案为 GPT(parted)mklabel gpt# 创建分区(注意多了一个 Name 字段)(parted)mkpart Partition name?[]? data01# GPT 允许为每个分区命名File system type?[ext2]? xfs Start?1End?2049

4.5 非交互式操作(脚本神器)

这是parted的最大亮点——一行命令搞定一切:

# MBR 磁盘:一行创建分区parted/dev/sdb unit MiB mkpart primary12049# GPT 磁盘:一行创建分区parted/dev/sdb unit MiB mkpart data01 xfs12049# 扩展分区parted/dev/sdb unit MiB resizepart15121# 删除分区parted/dev/sdbrm1

📝记忆口诀parted 磁盘 unit 单位 操作 参数...


5. 文件系统持久化挂载

5.1 问题场景

手动mount的文件系统在重启后就消失了。要让它永久生效,需要写入/etc/fstab

5.2 /etc/fstab 字段详解

/etc/fstab每行 6 个字段,以空格或 Tab 分隔:

设备标识 挂载点 文件系统类型 挂载选项 dump备份 fsck检查顺序 UUID=xxx... /data01 xfs defaults 0 0
字段含义说明
第1字段设备标识推荐用UUID(唯一且稳定),也可用设备路径/dev/sdb1
第2字段挂载点目录必须提前创建
第3字段文件系统类型xfsext4vfat
第4字段挂载选项defaults是一组常用选项的集合,多个选项用逗号分隔
第5字段dump 备份0= 不备份,1= 要备份
第6字段fsck 检查顺序0= 不检查(XFS 用这个);1= 最先检查(仅根文件系统);2= 随后检查(其他 ext4 文件系统)

5.3 完整操作示例

# 1. 查看分区的 UUID[root@centos7 ~]# blkid /dev/sdb1/dev/sdb1:UUID="f5c35f10-0274-45af-b044-73694989fe01"TYPE="xfs"...# 2. 创建挂载点[root@centos7 ~]# mkdir /data01# 3. 编辑 /etc/fstab,添加一行[root@centos7 ~]# vim /etc/fstab# 添加:UUID="f5c35f10-0274-45af-b044-73694989fe01"/data01 xfs defaults00# 4. 立即挂载(测试配置是否正确)[root@centos7 ~]# mount /data01# 5. 验证[root@centos7 ~]# df -h /data01/dev/sdb12.0G 33M2.0G2% /data01# 6. 重启验证持久化效果[root@centos7 ~]# reboot[root@centos7 ~]# df -h /data01 # 应该仍然挂载着

5.4 取消持久化挂载

删除/etc/fstab中对应行,然后卸载即可。


6. 综合案例:文件系统空间不足怎么办?

这是运维工作中最常见的"救火"场景。我们分三种情况来应对。

情况一:大量的大文件占用空间 🐘

现象df -h显示磁盘使用率 100%。

排查方法

# 方法1:用 find 按大小搜索(推荐,最直接)find/myapp-1/-size+100M# 方法2:用 du 逐层排查(适合不知道文件大小时)du-s/myapp-1/*|sort-n|tail-5# 从顶层往下逐级排查du-s/myapp-1/etc/*|sort-n|tail-5

解决:确认关键文件后删除或迁移。


情况二:删除文件后空间没释放 👻

现象:删了一个大文件,但df -h显示空间没有变化。

原因:文件虽然被删了,但还有进程在占用文件描述符,内核不会真正释放磁盘空间。

排查

lsof|grepdelete|grep/myapp-1# tail 1654 root 3r REG 8,17 2061565952 444 /myapp-1/etc/bigfile (deleted)

解决:杀掉占用该文件的进程。

kill1654df-h/myapp-1/# 空间回来了!

💡最佳实践:清理大文件之前,先用重定向清空文件内容> /path/to/bigfile,再rm删除。这样即使有进程占用,空间也会立即释放。


情况三:大量小文件耗尽 inode 🐜

现象df -h显示还有很多空间,但创建文件时报"No space left on device"。

原因:inode 用完了!文件系统就像一本笔记本,inode 是页码——页码用完了,就算还有空白页,也写不了新内容。

排查

df-i/myapp-2# Filesystem Inodes IUsed IFree IUse% Mounted on# /dev/sdb2 64K 64K 0 100% /myapp-2

解决

# 思路1:删除大量小文件rm-f/myapp-2/file-0*# 思路2:将大量小文件合并为一个大文件cat/myapp-2/file-{00001..10000}>file-00001

🔑关键区别df -h看的是块空间df -i看的是inode 数量。排查空间问题时要两个都看!


番外:如何彻底擦除硬盘数据? 🔐

  1. 逻辑破坏:用dd全盘写零覆盖
    ddif=/dev/zeroof=/dev/sdb
  2. 物理破坏:消磁处理

7. Linux RAID 存储技术

7.1 RAID 是什么?

1988 年,加州大学伯克利分校的 Patterson 教授首次提出 RAID 概念——廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks)。

核心理念:用多个小容量廉价磁盘组合起来,获得与大容量昂贵磁盘相当甚至更好的容量、性能和可靠性。

后来随着磁盘成本下降,"廉价"这个词不再合适,RAID 被重新定义为独立磁盘冗余阵列(Redundant Array of Independent Disks)。

7.2 RAID 的三种实现方式

软 RAID ────── 完全由 OS + CPU 完成 ────── 成本低、效率低 └─ 混合 RAID ── 有专用控制芯片,但 I/O 靠 CPU ── 折中方案 └─ 硬 RAID ────── 独立控制芯片 + I/O 芯片 + 缓存 ── 性能最好、成本最高

7.3 RAID 核心技术三要素

技术作用类比
条带化(Striping)数据分散写入多个磁盘,并行读写 → 提速多车道高速公路
镜像(Mirroring)数据完整复制到另一个磁盘 → 冗余照片自动备份到云端
奇偶校验(Parity)存储校验码,故障时可通过计算恢复数据 → 容错数学题的"验算"

7.4 各 RAID 级别详解

RAID 0 —— 速度至上,数据裸奔 🏎️
磁盘A: [数据块0] [数据块2] [数据块4] ... 磁盘B: [数据块1] [数据块3] [数据块5] ...
  • 原理:纯条带化,数据横跨所有磁盘并行读写
  • 优点:速度极快,空间利用率 100%
  • 缺点无任何冗余,坏一块盘 = 全部数据报废
  • 适用:视频剪辑、临时缓存等不关心数据安全的场景
RAID 1 —— 安全第一,成本翻倍 🛡️
磁盘A: [数据块0] [数据块1] [数据块2] ... 磁盘B: [数据块0] [数据块1] [数据块2] ... ← 完全镜像
  • 原理:数据完整镜像到另一块盘
  • 优点:任意坏一块盘不影响;读取可并行,速度快
  • 缺点:写入稍慢,有效容量只有总容量的50%
  • 适用:数据库服务器、关键业务系统
RAID 5 —— 均衡之选 ⚖️
磁盘A: [数据0] [数据1] [校验2] ... 磁盘B: [数据0] [数据1] [校验2] ... 磁盘C: [校验0] [数据1] [数据2] ... ↑ 奇偶校验分散在所有磁盘上,不单独占用一块盘
  • 原理:条带化 + 分布式奇偶校验
  • 最少磁盘:3 块
  • 空间利用率:(N-1)/N,即只有 1 块盘的容量用于校验
  • 容错:允许坏 1 块盘
  • 缺点:写入时需要计算校验码,写入性能偏低
  • 适用:文件服务器、中小型企业应用
RAID 6 —— 双保险 🔒
  • 原理:与 RAID 5 类似,但使用双重奇偶校验
  • 最少磁盘:4 块
  • 空间利用率:(N-2)/N
  • 容错:允许同时坏2 块盘
  • 缺点:写入性能比 RAID 5 更低,成本更高
  • 适用:大容量存储、关键归档系统
RAID 10 —— 速度与安全兼得 💎
RAID 0(条带化,负责速度) ┌──────────┴──────────┐ RAID 1(镜像) RAID 1(镜像) ┌──┴──┐ ┌──┴──┐ 磁盘A 磁盘B 磁盘C 磁盘D
  • 原理:先做镜像(RAID 1),再对镜像组做条带化(RAID 0)
  • 最少磁盘:4 块
  • 空间利用率:50%
  • 容错:每个镜像组最多坏 1 块(如果运气好不同组坏,可以坏多块)
  • 适用:数据库服务器、虚拟化环境、金融交易系统
RAID 50 / RAID 60 —— 企业级方案 🏢
  • RAID 50:RAID 5 组之上再条带化(最少 6 块盘)
  • RAID 60:RAID 6 组之上再条带化(最少 8 块盘)

7.5 RAID 级别速查表

RAID 级别最少磁盘容错能力空间开销读速度写速度成本
RAID 02❌ 无0%⬆️ 高⬆️ 高💰
RAID 12✅ 1 块50%⬆️ 高⬇️ 低💰💰
RAID 53✅ 1 块1/N➡️ 中⬇️ 低💰💰
RAID 64✅ 2 块2/N➡️ 中⬇️ 低💰💰💰
RAID 104✅ 多个*50%⬆️ 高➡️ 中💰💰💰
RAID 506✅ 多个*1/N⬆️ 高➡️ 中💰💰💰
RAID 608✅ 多个*50%⬆️ 高➡️ 中💰💰💰

* RAID 10/50/60 的"容错多个"是有条件的:坏在不同镜像组/RAID 组内才能容忍。


8. Linux 逻辑卷管理(LVM)

8.1 为什么需要 LVM?

传统的硬盘分区方案有几个"硬伤":

痛点传统分区LVM
扩容需要连续空间,如果后面有其他分区就麻烦了 😰从卷组空闲空间直接划拨 ✅
跨盘一个文件系统不能跨多块硬盘一个 LV 可以横跨多块 PV ✅
冗余单盘损坏 = 数据丢失支持 RAID 逻辑卷 ✅
快照不支持支持快照,可保留某一时刻的数据状态 ✅

8.2 LVM 三剑客:PV → VG → LV

物理卷 (PV) 卷组 (VG) 逻辑卷 (LV) ┌──────────┐ ┌──────────────┐ ┌──────────┐ │ /dev/sdb │ ──────→ │ │ ────→ │ webapp01 │──→ 格式化 → 挂载使用 │ 20G │ │ webapp │ │ 5G │ └──────────┘ │ (存储池) │ └──────────┘ ┌──────────┐ │ │ ┌──────────┐ │ /dev/sdc │ ──────→ │ 40G 总计 │ ────→ │ data01 │ │ 20G │ │ │ │ 25G │ └──────────┘ └──────────────┘ └──────────┘
  • PV(Physical Volume,物理卷):磁盘或磁盘分区,是 LVM 的基本存储单元
  • VG(Volume Group,卷组):由一个或多个 PV 组成的逻辑存储池
  • LV(Logical Volume,逻辑卷):从 VG 中划分出来的逻辑空间,相当于"逻辑分区"
  • PE(Physical Extent):PV 的最小分配单元,默认 4 MiB
  • LE(Logical Extent):LV 的最小分配单元,通常 1 LE = 1 PE

8.3 基本操作三步走

# 第一步:创建物理卷pvcreate /dev/sdb /dev/sdc /dev/sdd# 第二步:创建卷组vgcreate webapp /dev/sdb# 单 PV 的卷组vgcreate dbapp /dev/sdc /dev/sdd# 多 PV 的卷组# 第三步:从卷组中创建逻辑卷lvcreate-nwebapp01-L5G webapp# 创建 5G 的逻辑卷lvcreate-ndata01-L25G dbapp# 创建 25G 的跨盘逻辑卷

查看命令

查看对象简略命令详细命令
物理卷pvspvdisplay
卷组vgsvgdisplay
逻辑卷lvslvdisplay

逻辑卷的设备路径有三种等效形式:

  • /dev/vg名称/lv名称(推荐,最直观)
  • /dev/mapper/vg名称-lv名称
  • /dev/dm-N

8.4 卷组的扩展与缩减

扩展卷组(加盘)
# 卷组空间不够了?直接加一块盘vgextend webapp /dev/sdc /dev/sdd
缩减卷组(移除旧盘/小盘)
# 关键在于:先把数据从要移除的 PV 上迁移走pvmove /dev/sdb# 迁移 /dev/sdb 上的数据到同卷组的其他 PV# 或指定目标pvmove /dev/sdb /dev/sdd# 确认该 PV 不再使用后,从卷组中移除vgreduce webapp /dev/sdb

🔑 核心思路:先迁移数据,再移除 PV,就像搬家一样——先把东西搬走,才能退房。

8.5 逻辑卷的扩展与缩减

# 扩展 LV(空间变多)lvextend-L+2G /dev/webapp/webapp01# 增加 2Glvextend-L20G /dev/webapp/webapp01# 扩展到 20G# 缩减 LV(空间退还给卷组)lvreduce-L-2G/dev/webapp/webapp01# 减少 2G

8.6 文件系统的扩展与缩减

这是最容易踩坑的地方:扩容了 LV 不等于扩容了文件系统!

文件系统扩展缩减扩展命令缩减流程
XFSxfs_growfs 挂载点不支持(只能重建)
EXT4resize2fs 设备卸载 → e2fsck → resize2fs → lvreduce → 挂载
XFS 扩展示例
# 方法1:分两步lvextend-L15G /dev/webapp/webapp01 xfs_growfs /usr/share/nginx/html# 方法2:一步到位(-r 自动扩展文件系统)lvextend-rL20G /dev/webapp/webapp01
EXT4 缩减示例(需要卸载)
# 1. 卸载umount/usr/share/nginx/html# 2. 检查文件系统完整性e2fsck-f/dev/webapp/webapp01# 3. 先缩减文件系统(⚠️ 这一步必须在缩减 LV 之前做)resize2fs /dev/webapp/webapp01 10G# 4. 再缩减逻辑卷lvreduce-L10G /dev/webapp/webapp01# 5. 重新挂载验证mount/dev/webapp/webapp01 /usr/share/nginx/html

⚠️缩减 EXT4 的铁律:① 必须卸载 → ② 先缩文件系统 → ③ 再缩 LV。顺序错了数据就丢了!

8.7 逻辑卷快照 📸

快照就像虚拟机快照,记录 LV 在某一时刻的数据状态,后续可用于数据恢复。

# 创建快照lvcreate-s-nwebapp01-snap1-L10G /dev/webapp/webapp01# 挂载快照,像普通文件系统一样访问mount/dev/webapp/webapp01-snap1 /mnt/snapshot/ls/mnt/snapshot/# 能看到快照创建时的数据

8.8 RAID 逻辑卷

LVM 还可以创建带 RAID 保护的逻辑卷,兼具 LVM 的灵活性和 RAID 的数据安全:

# 创建 RAID 1 逻辑卷lvcreate--typeraid1-nwebapp01-L15G webapp# 创建 RAID 5 逻辑卷(3 条带 + 1 校验盘 = 4 块盘,可用 5G)lvcreate--typeraid5-L5G-i3-I64-nmylv vg00

🏁 知识地图总结

Linux 磁盘管理知识体系 │ ├── 分区管理 │ ├── MBR 方案 ───── fdisk 工具 │ ├── GPT 方案 ───── gdisk 工具 │ └── 通用工具 ───── parted(支持 MBR+GPT,交互+脚本) │ ├── 文件系统 │ ├── 格式化(mkfs.xfs / mkfs.ext4) │ ├── 挂载(临时 mount / 持久化 /etc/fstab) │ └── 空间排查(df -h 看容量 / df -i 看 inode / du + find 找文件) │ ├── RAID 存储 │ ├── 条带化(RAID 0)─── 纯速度 │ ├── 镜像(RAID 1)──── 纯冗余 │ ├── 校验(RAID 5/6)── 折中方案 │ └── 组合(RAID 10/50/60)── 企业级 │ └── LVM 逻辑卷 ├── PV → VG → LV 三层架构 ├── 弹性伸缩(pvmove / vgextend / lvextend) ├── 快照(lvcreate -s) └── RAID 逻辑卷(LVM + RAID)

📝写作日期:2026-07-31

📚 本文基于课堂实验笔记整理,所有命令均在 CentOS 7 环境验证通过。如果你在实践过程中遇到问题,欢迎留言讨论!

🔗扩展阅读建议:下一课将学习mdadm软 RAID 的更多高级操作(RAID 1/5 故障模拟与恢复、RAID 扩容等),敬请期待。