☰
Linux分区与挂载点规划:从容量设计到fstab实操全攻略
2026/10/14 3:53:01 网站建设 项目流程

刚帮人装了一台机器,分区的时候对方问了我一句:这玩意儿随便分分就行了吧?我当场就想叹气。分区挂载点这事儿,表面上就是个“给硬盘切几刀、再挂到目录上”的操作,实际上它是整个 Linux 系统后续好不好用的地基。你分错了、挂载点选得别扭,轻则过俩月磁盘告警,重则数据全没、开机进救援模式。这篇文章就把我这些年攒下来的分区和挂载点规划经验摊开讲,从整体思路到具体容量建议,再到不同业务场景的方案,最后附上一套可以直接照着敲的分区格式化实操记录。无论是刚入门的新手,还是平时不太管存储细节的开发者、运维,都能从中拿到一套能直接用的参考方案。

我见过太多反面教材了:有人把整块盘全分给根目录,结果日志把根分区撑爆,系统直接卡死;有人把/home和系统塞在一起,重装系统时个人数据跟着一起没了;还有人挂载数据盘的时候不写/etc/fstab,重启之后挂载点变成空目录,业务全废。这些问题都不是什么高深技术,纯粹就是分区规划这一步没想清楚。所以我打算先聊聊整体的设计思路,再说容量怎么给,然后分场景给方案,最后放实操。文章偏长,但你只要能耐心看完,分区挂载这块基本就不会再踩坑了。

1. 分区与挂载点规划的整体思路

1.1 先搞明白“挂载点”到底是个什么东西

很多人把“挂载”想得很玄,其实它就是把一块硬盘(或者说一个分区)接到某个目录上的过程。这个目录就叫挂载点。挂载之前,分区里的内容你看不到;挂载之后,你进入这个目录看到的就是这块分区里的数据。类似你把一个移动硬盘插到电脑上,盘符出现之前你访问不到里面的文件,挂载就是 Linux 版的“分配盘符”,只不过目的是接到目录上而不是生成新的盘符。

理解了这层,你就能明白挂载点选择的意义:你选择把分区挂到哪个目录,就决定了你的数据被归到哪一类、容量限制多少、跟系统其它部分是否隔离。根目录/是系统自带的总入口,理论上所有目录都挂在它下面,但你可以把某一个子目录(比如/home、/var、/data)单独切出来挂到独立分区上。这样做最直接的好处是隔离——某一个分区写满了,不影响根分区上的系统运行;单独挂载的数据分区,重装系统时也更容易保留和迁移。

所以规划的第一步不是拿工具去切盘,而是先画一张“目录地图”:你的系统有哪些角色、哪些目录会产生大量数据、哪些数据需要重点保护、哪些目录不能被独立分区卡住容量。这张图画完了,方案基本就定了一半。

1.2 一套省心的分区布局长什么样

我自己的习惯是,在规划任何一台 Linux 机器时,脑子里先跑一遍这套标准挂载布局,再根据实际场景调整:

挂载点建议大小文件系统主要用途
/boot1GB(UEFI 可略大)ext4 / vfat(EFI)引导文件,独立分区避免引导器找不到文件
/50GB 起步,桌面 100GBext4 或 xfs系统本身、程序、依赖库
/home剩余空间的大头ext4 或 xfs用户数据、配置文件、个人文件
swap按内存大小和个人需求swap内存回收和休眠
/data或/srv视业务数据量xfs 首选业务数据、脚本、导出文件等
/var如日志多则独立ext4 / xfs日志、缓存、邮件队列等

当然了,这台机器的磁盘就一块 256GB 的 SSD,你说我要不要分这么多区,那肯定不需要——分区太碎反而浪费空间、管理也麻烦。标准布局的意义是给你一个参照系,让你在需要的时候知道该往哪加。真正的方案取决于你手里的盘有多大、机器拿来干嘛、数据多重要。

一句话总结这套思路:系统盘和数据盘分离、系统目录之间按增长速度和风险隔离、业务数据永远放在独立挂载点上。只要守住这三点,后面的运维会轻松很多。

2. 核心挂载点的容量设计与选型

2.1 根目录/不要抠抠搜搜,但也别一把梭全给它

根目录是系统的大本营,/usr、/lib、/opt、/etc、/var(如果不独立)全都住在它下面。这些目录的共性是:安装软件、升级内核、写日志、存缓存,都会往里塞东西,而且增长速度不见得慢。很多人分区的时候觉得“系统盘 30GB 就够了”,结果用了两个月发现根分区报警,一查是 Docker 镜像或者日志文件把空间吃了。

我个人对根目录的建议,分两种情况。如果是个人桌面或者开发机,根目录给 80GB 到 120GB 最稳,因为桌面环境、开发工具链、容器镜像这些都挺占地方;如果是服务器,只跑一两个业务服务的话,50GB 起步比较合适,留一点余量给日志和临时文件就够了。这里说的“起步”是不管实际使用会不会满,你得给系统留出喘气的空间。根分区一旦满了,后果不只是“不能写文件”那么简单,很多服务会直接崩,甚至系统都进不去桌面。

另外,虽然我建议把大目录拆分出去,但根分区本身还是要留一点冗余。我自己的经验法则是:根分区至少留 20% 的剩余空间,这样系统在写临时文件、进程崩溃时产生 core dump 的时候不会立刻卡死。之前我处理过一台根分区被/var/log撑满的机器,系统的journald直接罢工,服务全线超时,排查了很久才发现是根分区 100% 占用。所以如果你不想把/var单独拆出去,那根分区就要给大一点。

2.2/boot与 swap:两个容易被忽略,但出事很要命的区域

/boot这个挂载点很多新手会忽略,因为它在日常使用中几乎没有存在感。它存的是内核镜像和引导加载器需要读的文件,独立分区的好处是:即使根目录文件系统出问题、损坏了,引导器依然有机会从这个独立分区里读出内核并启动系统。如果/boot跟根目录混在一起,根分区一旦损坏或写满,机器可能直接起不来,你就只能进救援环境折腾了。

容量方面,绝大多数发行版给 1GB 已经完全够用,有些发行版升级内核比较频繁,我建议留 1GB 到 2GB。如果你用的是 UEFI 引导,还有一个专门的 EFI 系统分区(ESP),那里面放的是 UEFI 引导器自己的文件,通常几百 MB 就够,默认分配就能用。这里要特别提醒:UEFI 的 ESP 分区在 Windows 和 Linux 双系统共存时特别容易出问题,因为两种系统对这个分区的处理方式不一样,如果你不做双系统就无所谓。

swap 的容量建议这些年变化很大。早年的经验是 swap 要做到物理内存的两倍,现在内存动辄 16GB、32GB,还照两倍去分就太浪费了。我的建议是:如果你不开休眠(suspend-to-disk),16GB 内存的机器给 4GB 到 8GB swap 就行;32GB 甚至更大的内存,给 8GB 足够,甚至不给也未必出问题。但如果你用休眠功能,swap 至少要跟内存一样大,因为内核把内存里的东西全部倒到 swap 里才能完成休眠。这个依据,你按需求来,比照搬公式靠谱。

2.3/home、数据挂载点的划分逻辑与容量分配

/home是用户文件的默认据点。把它独立出来的最大好处,我在前面提过——重装系统时可以直接保住用户数据。我自己重装系统的次数不少,每次只要/home是独立分区,重装时就可以极速跳过备份环节,装完再挂回去,配置、文档、项目代码全都还在。这个体验真的太好了,强烈建议任何人装桌面 Linux 都把/home单独分出来。

容量上,如果你只有一块盘,/和/boot分完之后剩下的空间基本都可以给/home。数据挂载点我会单独开一个/data或/srv目录,用来放那些不属于某个用户的业务数据,比如数据库导出、日志归档、脚本产物、网站文件。这样分的好处是,/home主要服务个人用户,/data专门服务业务,两者互不干扰,备份策略也可以分别定制。

文件系统选型上,新磁盘我推荐xfs,它在大文件、高并发场景下性能不错,而且支持在线扩容。ext4也很成熟,胜在兼容性好,老系统、迁移工具支持广泛。如果拿不准,就记住这个原则:普通桌面和通用服务器用ext4没问题;数据分区、大文件存储、需要将来扩容的分区,优先xfs。这俩都能满足绝大多数场景,不存在谁绝对碾压谁。

3. 不同业务场景的挂载方案推荐

3.1 个人桌面与开发机:怎么分最舒服

个人电脑的场景很典型:日常办公、开发、看视频、存资料,偶尔玩点虚拟机。这类机器通常就一块 SSD,容量从 256GB 到 1TB 不等。我的推荐方案是这样:

以一块 512GB 的 SSD 为例,分成这样:

  • /boot:1GB,独立分区
  • /:100GB,系统
  • /home:剩余约 380GB 到 390GB
  • swap:8GB

这种方案的好处是兼顾了系统稳定和日常使用的灵活性。根目录 100GB 足够装下常用的 IDE、编译工具链、浏览器缓存、开发用的本地镜像;/home占了大头,你的下载、文档、虚拟机镜像、项目都丢这里,不会有容量焦虑。swap 8GB 对 16GB 内存的机器来说已经绰绰有余,如果你内存只有 8GB 且不做休眠,swap 也可以给 8GB。

有人会问:那我的 Docker 镜像、虚拟机文件放哪?默认会在根目录的/var/lib下,这就可能把 100GB 的根分区悄悄吃掉。我建议如果你经常用 Docker 或者 KVM,要么把/var/lib/docker或者整个/var/lib单独分一个区,要么把 Docker 的数据目录迁到/home或/data下。迁移方式不复杂,修改 Docker 配置里的>lsblk

输出类似这样:

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 238.5G 0 disk ├─sda1 8:1 0 1G 0 part /boot ├─sda2 8:2 0 100G 0 part / └─sda3 8:3 0 8G 0 part [SWAP] sdb 8:16 0 2.7T 0 disk └─sdb1 8:17 0 2.7T 0 part /data

看到上面的输出,你就能知道sda是系统盘,sdb是一块已经挂到/data的数据盘。如果是新加的盘,它通常没有分区,也不会出现在挂载点里。此时你可以再用:

sudo fdisk -l /dev/sdb

确认新盘的大小和是否已有分区。分区工具我建议用gdisk,它支持 GPT 分区表,现在 2TB 以上的盘和 UEFI 引导环境基本都要求 GPT。启动交互式分区:

sudo gdisk /dev/sdb

它会进入交互界面,常用的命令就三个:n新建分区、w写入并退出、q不保存退出。新建分区时它会问你起始扇区(可以直接回车用默认,通常是从 2048 开始),再问你结束扇区或者分区大小,直接输入+500G这类格式就行。如果你之前没接触过fdisk,这个交互逻辑几乎一样,放心试。

提示:所有分区操作之前,务必确认这块盘上没有你还需要的数据,或者你已经备份过了。新建分区表会清空目标盘的原有分区信息,虽然数据理论上还可以用恢复工具找,但代价很高,别赌。

4.2 格式化与第一次挂载:mkfs 和 mount 的正确顺序

分区建好后,这块盘还只是个“空的容器”,必须格式化写入文件系统才能用。文件系统的选择我前面提到了,数据盘首选xfs,兼容性求稳就ext4。格式化命令分别是:

sudo mkfs.xfs /dev/sdb1 # 或者 sudo mkfs.ext4 /dev/sdb1

如果你希望这个分区有个好识别的卷标,可以在格式化时加-L参数,比如:

sudo mkfs.xfs -L data /dev/sdb1

卷标相当于给分区起名字,后面用blkid查看时一眼就能认出来。不过我在生产环境里更推荐用 UUID 来标识分区,因为它绝对唯一,不依赖卷标是否重复或设备名是否漂移。

格式化完成之后,创建一个挂载点目录,然后挂载:

sudo mkdir -p /data sudo mount /dev/sdb1 /data

挂载之后,用df -h查看,你就能看到/data这个挂载点和它的容量。这里有个细节很容易被坑:挂载点目录里原本如果有文件,挂载之后这些文件会被“遮挡”,你看到的全是新分区的内容,原来的文件并没有消失,卸载后又会重新出现。所以千万别把分区挂到一个有数据的目录上,否则你误以为数据丢了,吓一跳再执行卸载才发现虚惊一场。正确做法是先建空目录,再挂载。

另外,如果你创建挂载点的目录名带有特殊字符或者路径层级较深,注意权限问题。挂载成功后,业务用户可能还需要写权限,你可以用chown或chmod调整目录权限,这些都是常规操作,不赘述。

4.3 开机自动挂载:fstab 的正确写法和校验方法

手动挂载的缺点是重启后失效,所以必须把挂载信息写进/etc/fstab。这个文件就是 Linux 的开机自动挂载清单。每一行代表一条挂载记录,标准格式是六个字段:设备标识、挂载点、文件系统类型、挂载选项、dump、pass。

我强烈建议你用 UUID 而不是/dev/sdb1这种设备名来写 fstab,因为设备名在重新插拔硬盘、内核升级之后可能发生变化,而 UUID 是分区格式化时就定死的。获取 UUID 的命令:

sudo blkid /dev/sdb1

输出里就有UUID="xxxx-xxxx-xxxx"。然后编辑/etc/fstab,追加一行:

UUID=xxxx-xxxx-xxxx /data xfs defaults 0 0

各字段含义:第一列是 UUID,第二列是挂载点,第三列是文件系统类型,第四列是挂载选项(默认用defaults就好),第五列是是否用dump备份(填 0 就行),第六列是开机时是否用fsck检查(根目录填 1,其他分区填 0 或 2)。

写完之后,千万别直接重启验证,先执行:

sudo mount -a

这个命令会按 fstab 里的配置重新挂载所有未挂载的分区,如果配置有错,终端会立刻报错,而不会等到重启时卡在 emergency mode。确认mount -a没有报错之后,再重启验证一遍,才算真的稳妥。

注意:fstab 写错最常见的后果就是开机进入系统维护模式。比如设备 UUID 写错、文件系统类型写错、挂载点目录不存在,都会导致系统启动时挂载失败,被迫降到命令行让你输 root 密码排查。真遇到这种情况也别慌,在维护模式下执行vim /etc/fstab改回正确配置,或者临时注释掉错误行,再重启就行。

4.4 常见问题速查与避坑心得

实操中常见的坑,我按故障现象整理了一张速查表,方便你直接对照排查:

现象原因解决方案
mount: wrong fs type文件系统类型写错或缺少对应驱动工具确认分区实际格式化类型;安装对应包如xfsprogs
mount: mount point does not exist挂载点目录还没创建mkdir -p /data再挂载
cannot open /dev/sdb1: No such file or directory分区不存在或内核未识别lsblk确认分区号,必要时partprobe刷新分区表
开机进 emergency modefstab 配置错误在维护模式修改 fstab 或用mount -a定位错误
挂载后访问不到原目录的内容挂载点原来有数据被遮挡换个空目录作为挂载点;数据卸载后仍在原处
明明格式化过却提示找不到文件系统格式化的是盘而不是分区确认操作对象是/dev/sdb1而不是/dev/sdb

除了这些具体问题,我还想分享两个实操心得。第一,新盘分区挂载完之后,养成把 UUID、挂载点、容量记到本地的习惯,哪怕只是记到一个文本文件里。因为过几个月你再来看这台机器,很可能记不清当初的规划了,有个记录能省很多排查时间。第二,任何涉及分区和挂载的操作,都要在动手前把lsblk的输出留底,尤其是你要动的是有数据的机器,留底之后操作错了还能对照着恢复。

最后再聊一个我踩过一次的坑:有一次我给一块盘做分区,顺手把分区格式化成 ext4,然后写进 fstab 挂到/data,重启之后一切正常。后来为了给数据盘扩容,我直接把 fstab 里的 UUID 换成了新分区的 UUID,但忘了在mount -a之前卸载旧分区,结果重复挂载导致/data下看到的还是旧分区数据,新分区的内容完全没出现。排查的时候我还以为是扩容没生效,绕了好大一圈。这里也顺便提醒你:修改 fstab 或扩容后,先用umount卸载旧挂载,再执行mount -a挂新的,别图省事。这套实操流程你只要完整走一遍,Linux 分区和挂载的底子就算真正立住了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询