
Linux 磁盘管理与存储技术实战笔记 从 GPT 分区到 RAID 阵列再到 LVM 逻辑卷——一文掌握 Linux 磁盘管理的核心武器。目录GPT 分区方案gdiskGPT 分区管理工具wipefs磁盘信息清理工具parted全能分区管理工具文件系统持久化挂载综合案例文件系统空间不足怎么办Linux RAID 存储技术Linux 逻辑卷管理LVM1. GPT 分区方案1.1 为什么要用 GPT在 GPT 出现之前MBRMaster 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 备份 GPTLBA1~LBA33 的完整副本 │ └──────────────────────────────────────────────────┘关键设计亮点LBA0保护性 MBR前半部分存放启动引导程序后半部分写入特殊标识0xEE告诉系统这是 GPT 格式的磁盘。老旧的磁盘工具看到这个标识后不会误操作破坏分区。LBA1GPT 表头记录分区表自身的位置、大小以及备份 GPT 的存放位置。最重要的是存放了CRC32 校验码操作系统用它来判断 GPT 是否损坏。LBA2~33分区条目区每个 LBA 有 512 字节能存 4 组分区记录。默认 32 个 LBA 128 组分区。每组记录占 128 字节其中包含 64 位的分区扇区总数。末尾 34 LBA备份区GPT 的精髓——冗余设计。如果主分区表损坏立刻可以从备份恢复。2. gdiskGPT 分区管理工具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 转换为 GPTgdisk /dev/sdb Command(?forhelp): o# 创建全新的 GPT 分区表# ⚠️ 这会删除所有现有分区⚠️警告此操作会清空磁盘上所有分区数据务必提前备份。2.3 gdisk 常用命令速查命令作用n创建新分区d删除分区c修改分区名称很实用t修改分区类型码i查看分区详细信息p打印分区表w保存并退出q不保存退出2.4 完整操作演示# 1. 进入 gdisk[rootcentos7 ~]# 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, default2048):[回车]Last sector(2048-41943006)or{-}size{KMGTP}: 2G# 4. 设置分区类型可选回车使用默认 Linux filesystemHex code or GUID(L to show codes, Enter8300):[回车]# 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): w3. 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)rm14.4 管理 GPT 磁盘GPT 下创建分区多了一个步骤——给分区命名# 设置分区方案为 GPT(parted)mklabel gpt# 创建分区注意多了一个 Name 字段(parted)mkpart Partition name?[]? data01# GPT 允许为每个分区命名File system type?[ext2]? xfs Start?1End?20494.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检查顺序 UUIDxxx... /data01 xfs defaults 0 0字段含义说明第1字段设备标识推荐用UUID唯一且稳定也可用设备路径/dev/sdb1第2字段挂载点目录必须提前创建好第3字段文件系统类型xfs、ext4、vfat等第4字段挂载选项defaults是一组常用选项的集合多个选项用逗号分隔第5字段dump 备份0 不备份1 要备份第6字段fsck 检查顺序0 不检查XFS 用这个1 最先检查仅根文件系统2 随后检查其他 ext4 文件系统5.3 完整操作示例# 1. 查看分区的 UUID[rootcentos7 ~]# blkid /dev/sdb1/dev/sdb1:UUIDf5c35f10-0274-45af-b044-73694989fe01TYPExfs...# 2. 创建挂载点[rootcentos7 ~]# mkdir /data01# 3. 编辑 /etc/fstab添加一行[rootcentos7 ~]# vim /etc/fstab# 添加UUIDf5c35f10-0274-45af-b044-73694989fe01/data01 xfs defaults00# 4. 立即挂载测试配置是否正确[rootcentos7 ~]# mount /data01# 5. 验证[rootcentos7 ~]# df -h /data01/dev/sdb12.0G 33M2.0G2% /data01# 6. 重启验证持久化效果[rootcentos7 ~]# reboot[rootcentos7 ~]# df -h /data01 # 应该仍然挂载着5.4 取消持久化挂载删除/etc/fstab中对应行然后卸载即可。6. 综合案例文件系统空间不足怎么办这是运维工作中最常见的救火场景。我们分三种情况来应对。情况一大量的大文件占用空间 现象df -h显示磁盘使用率 100%。排查方法# 方法1用 find 按大小搜索推荐最直接find/myapp-1/-size100M# 方法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 数量。排查空间问题时要两个都看番外如何彻底擦除硬盘数据 逻辑破坏用dd全盘写零覆盖ddif/dev/zeroof/dev/sdb物理破坏消磁处理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 50RAID 5 组之上再条带化最少 6 块盘RAID 60RAID 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 逻辑卷管理LVM8.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 │ └──────────┘ └──────────────┘ └──────────┘PVPhysical Volume物理卷磁盘或磁盘分区是 LVM 的基本存储单元VGVolume Group卷组由一个或多个 PV 组成的逻辑存储池LVLogical Volume逻辑卷从 VG 中划分出来的逻辑空间相当于逻辑分区PEPhysical ExtentPV 的最小分配单元默认 4 MiBLELogical ExtentLV 的最小分配单元通常 1 LE 1 PE8.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-N8.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-L2G /dev/webapp/webapp01# 增加 2Glvextend-L20G /dev/webapp/webapp01# 扩展到 20G# 缩减 LV空间退还给卷组lvreduce-L-2G/dev/webapp/webapp01# 减少 2G8.6 文件系统的扩展与缩减这是最容易踩坑的地方扩容了 LV 不等于扩容了文件系统文件系统扩展缩减扩展命令缩减流程XFS✅❌xfs_growfs 挂载点不支持只能重建EXT4✅✅resize2fs 设备卸载 → e2fsck → resize2fs → lvreduce → 挂载XFS 扩展示例# 方法1分两步lvextend-L15G /dev/webapp/webapp01 xfs_growfs /usr/share/nginx/html# 方法2一步到位-r 自动扩展文件系统lvextend-rL20G /dev/webapp/webapp01EXT4 缩减示例需要卸载# 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 块盘可用 5Glvcreate--typeraid5-L5G-i3-I64-nmylv vg00 知识地图总结Linux 磁盘管理知识体系 │ ├── 分区管理 │ ├── MBR 方案 ───── fdisk 工具 │ ├── GPT 方案 ───── gdisk 工具 │ └── 通用工具 ───── parted支持 MBRGPT交互脚本 │ ├── 文件系统 │ ├── 格式化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 扩容等敬请期待。