资讯详情

Linux磁盘分区与挂载实战:从fdisk到LVM的完整指南

📅 2026/10/11 18:31:45 | 华诺云谱 👁 阅读
Linux磁盘分区与挂载实战:从fdisk到LVM的完整指南
磁盘分区与挂载听起来像是每个运维和 Linux 用户的基本功但真正上手做一遍尤其是面对新硬盘、大容量磁盘、或者不小心写错/etc/fstab的时候才发现里面的门道比想象中多得多。这几年我前前后后处理过不少服务器和台式机的磁盘问题从最简单的fdisk分区到生产环境的 LVM 扩容踩过的坑基本都集中在“分区表选错”“挂载后重启失效”“设备忙卸载失败”这几个点上。这篇文章就把我自己常用的磁盘分区与挂载流程完整梳理一遍包括思路、命令、坑点和排查方法给刚接触 Linux 的朋友一个可以直接照着做的参考也让有经验的人看看我这里的处理习惯是否值得借鉴。1. 分区与挂载到底在解决什么问题1.1 从一块新硬盘到可用空间中间发生了什么拿到一块新硬盘直接插上服务器lsblk能看到设备名但系统里并没有对应目录能让你往里存文件。原因在于硬盘要变成可用的目录空间中间至少经过三个步骤分区、格式化、挂载。分区是把物理硬盘划分成逻辑区域相当于给一整块地画出几块不同用途的地皮格式化是在划分好的区域上建立文件系统相当于在地皮上打好地基、修好路规定数据怎么存放挂载则是把文件系统关联到某个目录让用户通过这个目录访问里面的文件相当于给这块地开一个入口。很多人觉得分区可有可无直接把整块盘格式化也能用。确实Linux 允许在一块裸设备上直接建文件系统但这么做有几个实际麻烦无法在同一块盘上隔离系统盘和数据盘的操作风险后续想调整大小会很被动如果要装双系统或做特殊引导分区更是绕不开。所以除非是临时场景不然我都会按“分区 - 格式化 - 挂载”的顺序走一遍。这里有一个很容易忽略的认知操作系统看到的设备名并不是固定的。比如sda、sdb这种名字取决于内核识别顺序换了插槽或开机时多挂了一块盘设备名可能就变了。而分区后的 UUID 是稳定的所以挂载配置里尽量用 UUID 而不是设备名否则下一次重启可能就挂到了莫名其妙的位置上。1.2 分区表、文件系统、挂载点三者的关系分区表是记录硬盘上分区信息的元数据目前主流就是 MBR 和 GPT 两种。MBR 是传统方案GPT 是 UEFI 时代的标准。分区表决定的是“硬盘上有哪些分区、从哪里开始到哪里结束”。文件系统则决定“分区内部怎么存文件”ext4、xfs、btrfs 都是不同的文件系统方案。挂载点就是目录比如/data它只是文件系统在系统目录树中的一个入口。这三层的关系可以类比成租房分区表是房产证划分了哪间房属于谁文件系统是房间里的家具布局决定了东西怎么摆挂载点则是房门你从这门进去就能看到里面的内容。很多人把“分区”和“挂载”混为一谈其实分区是底层切割挂载是上层关联。实际工作中我喜欢先画一张简单的表把设备、分区、文件系统、挂载点对应起来避免操作混乱。比如sda: 整块系统盘 sda1 - /boot/efi (vfat) sda2 - / (xfs) sdb: 数据盘 sdb1 - /data (ext4)看清这个对应关系后再动分区和挂载就不容易出错了。2. 动手前必须搞懂的几个概念2.1 分区表选 MBR 还是 GPT这是第一个决定后续所有操作的事情。MBR 最多支持 4 个主分区如果想分更多需要把其中一个设为扩展分区再在里面切逻辑分区逻辑分区又有数量和容量上的限制。而且 MBR 只识别 2TB 以下的容量超过 2TB 的磁盘必须用 GPT。GPT 没有 4 个主分区的限制单个分区容量上限也远高于现在能买到的任何硬盘容量同时带有冗余分区表头比 MBR 更抗损坏。现在新装系统除非是老旧 BIOS 环境且盘小于 2TB否则我无脑选 GPT。这里有个常见误区MBR 和 GPT 的选择不只是看硬盘大小还要看主板的启动方式。Legacy BIOS 通常和 MBR 搭配UEFI 通常和 GPT 搭配。老机器用 GPT 做系统盘时需要主板开启 UEFI 启动并支持反过来UEFI 模式下装系统也未必要求 GPT但官方推荐 GPT。最稳妥的办法是先确认主板是 UEFI 还是 Legacy再决定分区表类型。不过对于纯数据盘也就是不承担系统启动功能的分区GPT 基本是通用答案。现在二手市场买到的硬盘或新硬盘默认也多是 GPT直接用就好。2.2 文件系统怎么选ext4、xfs、btrfs文件系统是格式化时写入的决定了数据存储和检索方式。我常用的三种分别是 ext4、xfs、btrfs。ext4 是 Linux 上最经典、兼容性最好的文件系统老系统、嵌入式设备、U 盘这些小容量场景下非常稳。它支持在线扩展但收缩很麻烦基本不建议收缩。xfs 是目前 RHEL 系和很多发行版的默认文件系统擅长处理大文件和高并发读写单个文件大小上限高但在线收缩同样做不到。btrfs 主打快照、压缩、校验和功能丰富适合需要子卷和高级特性的场景但在一些高负载下性能和稳定性争议比较多。怎么选我一般这样把握系统盘用发行版默认的通常是 xfs 或 ext4数据盘如果主要是存静态文件和大文件xfs 很合适如果经常删改大量小文件或需要快照btrfs 值得考虑如果只是移动硬盘、U 盘这类要插到各种设备上的ext4 最稳。还有一个折中的说法是“ext4 元数据性能在小文件场景占优xfs 大文件吞吐占优”实际差距没有想象中夸张稳定性和熟悉程度往往比那点性能差异更关键。格式化时我还会顺手做两件事一是给分区设置 label方便以后识别二是确认块大小。块大小默认 4K 适合绝大多数场景不需要改。如果存的都是超小文件可以用更小的块减少浪费但会牺牲大文件性能非必要别折腾。2.3 挂载点、UUID 与设备名的坑挂载点就是一个空目录理论上放在哪都行。常见的有/mnt、/media但生产环境我更习惯自己建目录比如/data、/backup。要注意的是挂载点必须是已经存在的空目录如果目录里已有内容挂载后原内容会被暂时隐藏等卸载后又会出现。这个特性经常造成“数据消失”的假象。设备名的问题前面提过/dev/sdb1不保证每次重启后都对应同一块盘。所以配置自动挂载时应该用 UUID 或 PARTUUID 来标识分区。UUID 是文件系统生成时分配的PARTUUID 是分区表层面分配的。用blkid可以查到blkid /dev/sdb1输出里能看到UUIDxxxx和PARTUUIDyyyy通常挂载用 UUID 就足够了。把 UUID 写进/etc/fstab重启后系统能精确定位到分区不会因为设备名变动而挂错。另外挂载时要考虑文件系统是否支持按 label 挂载比如 ext4 可以LABELdata。这种方式直观但 label 必须全网唯一否则可能挂到意外的地方。我的习惯是自动挂载统一用 UUID临时排查才用设备名。3. 实操从零开始完成分区、格式化与挂载3.1 用 fdisk 做分区新盘插上后先用lsblk和fdisk -l确认设备名和磁盘大小。比如看到/dev/sdb是一块 1TB 的新盘就可以开始分区了。sudo fdisk /dev/sdb进入fdisk交互界面后按g创建 GPT 分区表。如果确认要用 MBR可以按o。然后按n新建分区通常直接回车用默认起始扇区结束扇区可以输入500G这种格式来指定大小。最后按w写入。这里有个细节对于 GPT 分区fdisk 默认对齐到 2048 扇区可以保证物理扇区对齐性能不打折。只要不手动输入奇奇怪怪的扇区号默认值最安全。分区完成后内核未必立即刷新分区表可以运行partprobe /dev/sdb让内核重新读取。fdisk 适合小于 2TB 或交互式操作如果分几个区它够用。但对于超大规模磁盘比如 8TB 以上我会用parted后面单独说。实际分区时我会把整盘分成一个区的情况其实是多数。因为数据盘通常不需要多个分区LVM 或目录层级的拆分往往更灵活。别为了“多分区”而分区分区的粒度要考虑后续运维。3.2 用 parted 处理大容量磁盘fdisk对 GPT 支持没问题但很多人不习惯它的交互方式。parted支持直接命令行指定分区大小更适合脚本化和非交互操作。查看分区表用sudo parted /dev/sdb print创建 GPT 分区表和分区sudo parted /dev/sdb mklabel gpt sudo parted /dev/sdb mkpart primary xfs 1MiB 100%mkpart后面可以指定文件系统类型但这个参数其实不真正格式化只是写入分区表元数据。真正格式化还得靠mkfs。百分比写法很直观1MiB起始位置是为了对齐。用parted一定要小心命令是即时生效的没有 fdisk 那种“写完再确认”的缓冲。如果你把mklabel跑错盘数据瞬间就没了。所以执行前必须反复确认设备名。遇到某些老版本parted不支持 xfs 作为分区类型时可以直接写mkpart primary 1MiB 100%省略文件系统名。分区类型对于 Linux 来说实际影响很小。3.3 格式化与临时挂载分区建好后就是格式化。以 ext4 和 xfs 为例sudo mkfs.ext4 /dev/sdb1 sudo mkfs.xfs /dev/sdb1mkfs 前要再次确认设备名因为格式化会抹掉分区上的所有数据。有的发行版提供了mkfs的别名比如mkfs.ext4其实指向mke2fs用法一致。格式化时可以加-L指定 labelsudo mkfs.ext4 -L data /dev/sdb1 sudo mkfs.xfs -L data /dev/sdb1格式化完成后先手动挂载测试sudo mkdir -p /data sudo mount /dev/sdb1 /data df -h /data看到Filesystem那一行出现/dev/sdb1说明挂载成功。此时可以写一个测试文件echo test /data/test.txt重启前先确认文件还在再考虑配置自动挂载。临时挂载只对本次运行有效重启后失效所以业务数据不能依赖临时挂载。3.4 配置 /etc/fstab 实现开机自动挂载自动挂载是生产环境的刚需。/etc/fstab每一行有六个字段设备、挂载点、文件系统类型、挂载选项、dump 备份标志、fsck 检查顺序。用 UUID 挂载的典型写法UUIDxxxx-xxxx /data ext4 defaults 0 2设备那一列我始终坚持用 UUID。挂载点就是目标目录注意写实际路径。文件系统类型要和格式化时一致写错会挂载失败。挂载选项常用的是defaults它包含了 rw、suid、dev、exec、auto、nouser、async 等默认组合。如果不需要 suid 和 exec可以写defaults,nosuid,noexec这种强化在数据盘上很常见。dump字段通常写 0fsck字段根文件系统写 1其他 ext 系列写 2xfs 建议写 0 因为 xfs 不参与传统 fsck。这里有个容易翻车的地方如果 fstab 里写错了 UUID系统启动时会报错甚至进入 emergency mode。所以我每次修改 fstab 后都会先跑一遍sudo mount -a这条命令会按 fstab 挂载所有尚未挂载的条目如果语法或设备错误会立刻报出来而不是等重启才炸。强烈建议改完 fstab 都跑一次mount -a再加上sync reboot验证不要偷懒。4. 几个容易翻车的场景与排查实录4.1 挂载后数据消失我遇到过不止一次挂载某个分区到/data后发现/data下原有的文件没了第一反应是数据被格式化清掉了。其实不是挂载点目录本身的内容没有被删除只是被隐藏了。内核把文件系统挂载到目录后目录原本的 inode 关联被覆盖只有卸载后才会重新看到原有内容。这个机制在空目录挂载时无所谓但如果有人把分区挂到了/home这种已有大量文件的目录没提前备份的话会造成慌乱。排查方法很简单先卸载看目录内容是否回来或者用ls -la比较挂载前后 inode。真正要避免的是操作前没有确认挂载点是否为空我现在的习惯是新建挂载点目录后立即用ls -A检查确认空再挂载。如果确实需要挂到非空目录并保留原数据最好先把原内容复制到新分区再修改 fstab 挂载避免数据隐藏带来的误操作风险。4.2 fstab 写错导致系统无法启动fstab 写错导致的启动失败是运维最常见的故障之一。比如设备名用了/dev/sdb1但重启后变成/dev/sdc1系统找不到设备就会进入 emergency mode。或者文件系统类型写错同样会导致无法挂载。遇到这种情况不要慌。系统提示输入 root 密码进入维护模式后执行mount -o remount,rw /因为此时根文件系统通常是只读挂载的先把它变成可读写才能编辑 fstab。然后打开/etc/fstab把错误行注释掉或改正再重启。如果是在物理机前面可能需要等待 fsck 超时耐心一点。我的做法是在 fstab 里绝不直接写设备名全部用blkid查到的 UUID。同时每改一次 fstab都会在测试环境先重启一次。哪怕多花几分钟也比次日被线上故障叫醒强。4.3 磁盘满了但 df 看不出来inode 耗尽有时候df -h显示还有空间但应用报“No space left on device”第一反应是磁盘满了。再看df -i发现 inode 使用率 100%这才是真正原因。inode 是文件系统存储元数据的数据结构每个文件或目录占一个 inode。如果文件数量多但单文件很小比如缓存目录、消息队列目录可能空间没满但 inode 先满了。小文件越多inode 消耗越快。解决思路主要有几个find /data -xdev -type f | wc -l先统计文件数量确认是不是 inode 耗尽。如果是就需要清理旧文件、合并小文件、或者重新格式化分区时调大 inode 密度。ext4 可以用-i参数设置 inode 间隔比如mkfs.ext4 -i 4096增大 inode 数量。不过格式化后改 inode 数量只能重建文件系统所以生产环境规划时就得考虑业务是不是会产生海量小文件。日常监控中我习惯把df -i也纳入巡检项只看空间不看 inode 迟早要吃亏。4.4 卸载不掉、设备忙的解决思路执行umount /data时提示target is busy原因是有进程正在使用该目录下的文件。常见的是 shell 的当前目录停留在里面也有可能是某个服务一直持有句柄。排查工具用lsof和fuserlsof /data fuser -mv /data找到占用进程后可以在确认安全的前提下停止进程或使用umount -l /data-l是 lazy 卸载先断开挂载点等进程释放后再清理资源。这个操作对正在写入的进程可能导致数据不一致只适合明确没写操作或者能接受短时风险的情况。生产环境建议优先停应用再卸载不要一上来就-l。另一个坑是挂载点嵌套。如果挂载了/data又挂载了/data/sub必须先卸载子挂载点才能卸载/data否则同样会提示 busy。检查可以用mount或findmntfindmnt /data能列出所有相关挂载点非常直观。5. 关于 LVM 和 swap 的一点额外补充5.1 为什么生产环境建议用 LVM上面说的是最基础的物理分区方式。实际生产环境尤其是需要扩容的数据目录我更推荐用 LVM。LVM 把物理分区或整块盘变成物理卷PV再组合成卷组VG最后在 VG 上划分逻辑卷LV。挂载时挂的是 LV而不是物理分区。LVM 最大的好处是逻辑卷可以在线扩容只要 VG 里有剩余空间执行lvextend和resize2fs或xfs_growfs就能让文件系统变大不用动分区表也不影响业务。相比之下普通分区扩容要插新盘、搬数据、重新分区非常痛苦。新装系统时我通常会把系统盘和数据盘都做成 LVM留一部分 VG 空闲空间作为弹性储备。虽然 LVM 多了一层抽象多了一些命令要记但换来的是日后扩容的极大便利。当然 LVM 也增加了故障排查复杂度比如 PV/VG/LV 元数据损坏所以硬件 RAID 或云盘快照的备份机制依然不能少。LVM 的常用操作备忘pvcreate /dev/sdb1 vgcreate vg_data /dev/sdb1 lvcreate -L 500G -n lv_data vg_data mkfs.xfs /dev/vg_data/lv_data mount /dev/vg_data/lv_data /data后面扩容就是lvextend -L 100G /dev/vg_data/lv_data xfs_growfs /dataext4 则对应resize2fs /dev/vg_data/lv_data。这个流程熟练之后再处理磁盘扩容就非常从容。5.2 swap 分区还是 swap 文件早期 swap 必须单独分区现在 Linux 直接用 swap 文件也可以。区别在于 swap 分区独立于文件系统性能上略有优势而且不依赖根文件系统是否正常。swap 文件却更灵活可以在不重分盘的情况下随时创建和调整大小。创建 swap 文件的流程dd if/dev/zero of/swapfile bs1M count8192 statusprogress chmod 600 /swapfile mkswap /swapfile swapon /swapfile要永久生效在 fstab 里加一行/swapfile none swap sw 0 0swap 分区则用mkswap /dev/sdb2后同样写 fstab。选择上云服务器或虚拟机建议用 swap 文件因为好调整物理机使用独立分区会更清爽也不会出现根文件系统写满时 swap 文件无法扩展的尴尬。如果内存充足swap 大小不需要过度分配但别完全不配很多环境没有 swap 会出现 OOM 直接杀进程的惨剧。6. 写在最后的心得磁盘分区与挂载看起来是 Linux 入门操作但每次线上事故复盘总有几件和它有关。我自己吃过最大的亏就是拿 fdisk 操作错了盘符一条mkfs下去数据全没了。所以现在无论操作哪块盘我都会先lsblk看序列号再对比分区信息甚至会在设备名上用 label 或 UUID 双重确认。另一个深刻体会是 fstab 改动必须立刻验证别等到重启才发现问题。如果你刚开始接触这部分可以先用虚拟机或者闲置 U 盘练习整个流程分区、格式化、挂载、改 fstab、重启验证再把顺序记熟。熟练之后试着用 LVM 搭一套可扩容的环境这样无论日后遇到云盘扩容还是物理机加盘心里都有底。磁盘管理没有太多高深理论多做几次自然就稳了。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑