当年我第一次手动装Linux,盯着安装器里的分区界面愣了半天。磁盘明明一整块,为什么要拆成什么/boot、/home、swap?少分一个行不行?多分一个又有什么好处?后来在服务器上踩过几次磁盘满、分区无法扩展的坑,才慢慢理解分区这件事,本质上不是"要不要分",而是"怎么分才能让系统以后少折腾"。
这篇文章就把Linux分区这件事从头到尾讲透。从分区表的基本概念、各个挂载点分区的真实用途,到LVM这类逻辑卷管理方案,再到不同场景下的分区规划、全程实操命令,最后把国产系统分区和常见故障的排查思路一起梳理出来。无论你是刚接触Linux的新手,还是准备给服务器做磁盘规划的运维,都应该能从里面拿到一套能直接照用的方案。
1. 先搞懂分区到底在干什么:磁盘、分区表和文件系统的三层关系
很多教程一上来就让你敲fdisk,其实这么做是有问题的。你连"为什么会有主分区、扩展分区、逻辑分区"这种基本概念都没建立起来,敲完命令也只是照葫芦画瓢,换个环境就不知道怎么搞了。
1.1 分区是给磁盘做"编号分块",文件系统才是真正的"仓库货架"
你可以把一块物理硬盘理解成一栋还没装修的毛坯房。分区就是砌墙,把一个大空间隔成几个独立的小房间。文件系统则是每个房间里的货架和收纳柜,决定这个房间能怎么存放东西——是ext4、xfs还是NTFS、FAT32,都对应不同规格的"货架体系"。
分区的意义有三个:
- 隔离数据:系统文件和用户文件分开,某个区域被写满或损坏,不至于拖垮整块磁盘。
- 多系统共存:Windows和Linux各占各的分区,互不干扰。
- 满足引导和硬件限制:比如UEFI固件需要FAT格式的ESP分区才能找到引导程序,老的MBR分区表最多只能有4个主分区。
所以在Linux世界里,"分区"这个词通常包含两个层面:你实际在磁盘上划分出来的物理分区(比如/dev/sda1、/dev/sda2),以及你在系统里看到的挂载点(比如/boot、/home)。物理分区负责"空间怎么切",挂载点负责"切出来的空间放在哪儿用"。
1.2 MBR和GPT:两种分区表决定了一整块盘能怎么切
分区表是记录磁盘上哪些区域属于哪个分区的索引。现在主流只有两种:
MBR(Master Boot Record)
- 传统方案,兼容性最好,几乎所有系统都能认。
- 用32位字节记录分区起始和结束位置,导致单块磁盘最大只能识别约2TB容量,超过的部分要么浪费,要么得转成GPT。
- 最多支持4个主分区。如果想切更多分区,就得占用其中一个主分区位做成"扩展分区",再在扩展分区里面切"逻辑分区"。这就是你常听到"主分区、扩展分区、逻辑分区"这套说法的来历。
- 早期Linux安装器默认/boot放在MBR磁盘的主分区,因为GRUB老版本引导逻辑分区的兼容性不理想。
GPT(GUID Partition Table)
- 现代UEFI固件的标配,也是现在所有新装系统的首选项。
- 理论上支持无限个分区(实际受操作系统限制,Windows是128个,Linux下用
parted可以随便切)。 - 单块磁盘容量上限远超2TB,主流文件系统都能配合。
- 分区表本身有备份,头部损坏了还能从磁盘尾部恢复,可靠性比MBR高一个档次。
用一句话判断:如果是2020年之后的电脑,直接无脑选GPT。 老电脑如果主板只支持Legacy BIOS引导,才需要考虑MBR。
1.3 物理分区的三种类型和"一块盘最多几个分区"的隐藏限制
在MBR时代,你新装系统时经常遇到这类问题:已经分了3个主分区,还想再分一个,结果安装器提示"无法创建新分区"。原因就是MBR的4主分区限制。
- 主分区:可以直接引导系统,最多4个。
- 扩展分区:不能直接存数据,是"容器",本质也是占一个主分区位置。
- 逻辑分区:在扩展分区里继续切出来的分区,数量上可以很多。
GPT摆脱了这套限制,每个分区都是独立的,没有主、扩展、逻辑的区分。所以你会发现,现代Linux安装器里根本不需要你去管什么主逻辑,UEFI+GPT的组合就是"想切几个切几个"。
1.4 为什么Linux习惯把分区和目录挂载在一起
这是Linux和Windows最核心的区别。Windows的C、D、E盘是独立的"盘符",每个盘有自己的根。Linux则是一棵从/开始的目录树,任何分区都可以通过"挂载"(mount)操作,变成这棵树上的某个目录。
比如你把一块单独分区格式化成ext4,然后执行:
bash复制mount /dev/sdb1 /data
之后写入/data目录的所有文件,实际都落在/dev/sdb1这块物理分区上。系统启动时,/etc/fstab文件负责把这些挂载关系固定下来,让系统自动完成挂载。
理解了这个模型,你就能明白"挂载点分区"(比如/boot、/home)和"物理分区"(比如/dev/sda2)并不是一回事。你需要做的规划,是决定"哪块物理分区,挂载到哪个目录"。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 常见挂载点分区逐个拆解:/boot、/、/home、swap到底各自干什么
新装的Linux系统通常默认会帮你分好几个区。很多教程直接说"这样分就行",但没说为什么。我按实际生产环境里的使用习惯,把最常见的几类分区逐个讲清楚。
2.1 EFI系统分区(ESP):UEFI时代开机必经之路
如果你的电脑使用UEFI启动(现在的笔记本和台式机基本都是),安装Linux时一定会让分一个小的FAT32分区,挂载在/boot/efi或者直接作为EFI系统分区。它存放的是引导管理器(比如GRUB、systemd-boot)的可执行文件。
- 大小:一般100MB到500MB就够,有些发行版建议512MB,保险起见我习惯分512MB。
- 文件系统:必须是
vfat(FAT32),UEFI固件只认这个格式。 - 数量:一块硬盘只需要一个ESP分区。多系统共存时,Windows和Linux可以共用这个分区(各自建不同目录),也可以各自分一个,都行。
- 注意:不要随便格式化ESP。Windows和Linux的引导文件都在里面,你格式化掉等于把两套系统的启动入口全删了。
2.2 /boot分区:内核和initramfs的专属地盘
这是很多Linux教程里最容易被忽略、却最容易出问题的分区。/boot存放Linux内核(vmlinuz)、initramfs镜像和GRUB配置。
- 大小:1GB比较稳妥。内核文件通常二三十MB,但发行版会保留多个旧内核版本,你不可能每次都手动清理,所以给足1GB能避免"内核升级后/boot满了"这种尴尬。
- 文件系统:ext4比较通用。如果磁盘是xfs,
/boot用xfs也可以,GRUB2完全支持。 - 是否需要单独分区:如果是在传统BIOS+MBR环境下,GRUB引导老版本对某些文件系统支持不好,所以
/boot单独分区更安全。在UEFI+GPT现代环境下,/boot不单独分区、直接放在根分区下也完全没问题,很多发行版默认就这么干。 - 踩坑提示:
/boot满了的典型症状是系统报错"updatedb: can not open temporary file",或者内核升级时提示No space left on device。我见过不少服务器因此无法升级内核,非常被动。
2.3 /(根分区):所有目录的"兜底"
/是Linux目录树的根基,所有不挂载到其他分区的目录,最终都会落在根分区上。所以根分区一定要够大,它不仅是系统程序所在地,也是各种临时文件、缓存、docker的默认存放位置。
- 大小:桌面环境建议50GB起步,带Docker、数据库等应用的服务器建议100GB起步。你要是装了全套桌面软件、IDE、浏览器缓存,50GB都会紧张,我自己的开发机给的是200GB。
- 文件系统:ext4或者xfs,二选一。CentOS/RHEL系默认xfs,Ubuntu/Debian系默认ext4。其实两者日常使用差别不大,强调大规模并行IO的场景xfs更好一点,但不用太纠结。
- 注意:根分区和
/home、/var等分开之后,这些目录就不占根分区空间。但如果根分区规划太小,就算/home还剩很多,系统也会因为根分区满而宕机。
2.4 /home:用户数据的大仓库
/home存放所有普通用户的家目录,包括文档、下载、桌面、配置文件等。它是独立的用户数据区,重装系统时只要不动这个分区,个人数据就能完整保留。
- 大小:把磁盘剩余空间大头给它。日常使用中,最占空间的就是用户数据,所以
/home一般建议给最大的容量。 - 文件系统:建议和根分区保持一致(同为ext4或xfs),减少驱动和工具链的复杂程度。
- 是否必须分离:对于普通个人桌面,
/home不分离问题不大,重装前把数据备份走就行。但多用户服务器或生产环境,强烈建议分离。否则某用户把家目录塞满,整个系统都可能卡死,你还很难快速清出来。
2.5 swap分区/交换文件:物理内存不够时的"备胎"
swap不是真正意义上的数据存储分区,它是一块磁盘空间,当物理内存不够时,内核会把不活跃的内存页临时挪到这里,腾出物理内存给活跃进程用。
- 大小:传统经验是物理内存的1.5到2倍。但如今服务器动辄32GB、64GB内存,没必要按这比例来。具体可以这样判断:
- 内存小于8GB:swap 给2倍左右,8~16GB。
- 内存8~16GB:swap 给8~16GB。
- 内存大于32GB:swap 给16~32GB基本足够,除非你做大量内存密集型计算或者需要休眠。
- 文件系统:swap分区没有文件系统,直接
mkswap格式化即可。 - 现代替代方案:swap文件(在根分区上建一个大文件作为交换空间)比swap分区灵活,不用提前预留分区大小,扩容也很方便。很多云厂商的默认镜像就是用swap文件。
2.6 其他可选挂载点:/var、/tmp、/usr、/data
根据不同用途,还有几个常见的挂载点分区:
| 挂载点 | 存储内容 | 建议是否需要独立分区 | 推荐大小 |
|---|---|---|---|
| /var | 日志、邮件、缓存、数据库文件(部分发行版) | 高日志量服务器强烈建议 | 20GB起,按日志保留策略扩容 |
| /tmp | 临时文件 | 可独立,也可用tmpfs(内存文件系统) | 2~8GB,或用内存 |
| /usr | 系统软件、程序 | 现代系统基本不独立 | 不需要单独规划 |
| /data 或 /app | 业务数据、应用数据 | 生产环境强烈建议 | 看实际业务,尽量大 |
| /opt | 第三方软件安装目录 | 一般不需要 | 可选 |
如果/var和根分区放一起,日志一旦写爆(比如某个服务疯狂报警),根分区会被打满。生产环境上我一般会把/var单独分出来,给它充足的量,然后在排查问题时也方便定位"是不是日志把磁盘吃光了"。
3. 不止"直接切分区":LVM和RAID能解决什么问题,什么情况下必须用
上面讲的多是"物理分区直接格式化、直接挂载"的传统做法。在服务器场景,还有一套更灵活的方案叫LVM,以及提升可靠性或性能的RAID。新手阶段可以不碰,但做生产规划时一定要懂。
3.1 LVM逻辑卷管理:把多个物理分区"揉成一块再切"
LVM(Logical Volume Manager)的逻辑是用软件抽象层把物理分区(PV)组合成一个大的"存储池"(VG),再从池子里切出任意大小的"逻辑卷"(LV),挂载给系统使用。
流程是这样的:
- 物理分区 → 标记为物理卷PV,比如
pvcreate /dev/sdb1 /dev/sdc1。 - 多个PV组成卷组VG,比如
vgcreate datavg /dev/sdb1 /dev/sdc1。 - 从VG里划分逻辑卷LV,比如
lvcreate -L 500G -n datalv datavg。 - 格式化并挂载LV,例如
mkfs.xfs /dev/datavg/datalv,再写入/etc/fstab。
LVM最大的优势是弹性:某块新硬盘加入VG后,可以直接lvextend -L +100G /dev/datavg/datalv扩容逻辑卷,文件系统也能在线扩展。对于传统物理分区,你几乎没法在不重新分区的情况下扩大某个分区——要么删了重建,要么用第三方工具冒险调整。
什么时候必须用LVM? 生产服务器规划磁盘时,尤其数据库、文件存储这类持续增长的业务,强烈建议用LVM。宁可前期多花点时间配置,也不要等磁盘快满了才发现物理分区的容量卡死。
什么时候可以不用LVM? 个人桌面、测试环境,或者明确知道数据增长上限的场景,直接用物理分区更简洁。
3.2 RAID:多块磁盘协同工作的加速度和保险丝
RAID(独立磁盘冗余阵列)是把多块物理磁盘组合成一个逻辑设备的技术。常见组合:
- RAID 0:数据条带化,两块盘各存一半,性能翻倍,但任何一块盘坏了数据全丢。
- RAID 1:两块盘镜像,数据写两份,一块坏了另一块照常工作,但容量减半。
- RAID 5:三块盘以上,一块盘做校验,允许坏一块盘。需要硬件RAID卡或软件mdadm支持。
- RAID 10:先镜像再条带化,四块盘起,性能和冗余兼顾,代价是容量减半。
服务器上,RAID 1常用于系统盘(两块盘互相备份),RAID 10或RAID 5用于数据盘。Linux软RAID用mdadm管理,硬件RAID则在主板/阵列卡的BIOS里配置。
不过这里要提醒一句:RAID不能替代备份。 RAID解决的是单块磁盘故障的可用性问题,你要是rm删了文件,RAID再完善也救不回来。
3.3 普通分区、LVM、RAID怎么组合选
实际规划时,这三者是可以叠加的。最常见的组合是:
- 硬件RAID卡把物理盘做成RAID 1,系统只看到一块虚拟盘;
- 在这块虚拟盘上分LVM的PV;
- 最后在PV上建VG和LV。
这种"RAID提供冗余、LVM提供弹性"的架构,几乎覆盖了所有生产环境的磁盘需求。你可以理解为:RAID负责"别让一块盘坏了就要命",LVM负责"容量不够了还能往后扩"。
4. 不同场景下的分区方案:照着抄就行
有了上面的基础概念,接下来就是具体的分区方案。我按使用场景给出几套可以直接照抄的模板,你参考着来即可,不用死磕参数。
4.1 Linux个人桌面单系统
这是最简单的情况,整个磁盘都给Linux,推荐GPT分区表。
| 挂载点 | 大小 | 文件系统 | 说明 |
|---|---|---|---|
| /boot/efi (ESP) | 512MB | vfat | EFI引导 |
| /boot | 1GB | ext4 | 内核和引导文件 |
| / | 50~100GB | ext4或xfs | 根分区,系统主体 |
| swap | 8~16GB | swap | 交换空间 |
| /home | 剩余全部 | ext4或xfs | 用户数据 |
如果你是老主板用Legacy BIOS启动,不需要ESP分区,/boot保留1GB,其余逻辑不变。整个安装过程不需要任何特殊操作,图形安装器就能完成。
4.2 双系统(Windows + Linux)
双系统场景下,Windows的分区你必须小心处理。
- 如果机器本身是UEFI+GPT,Windows的EFI分区、恢复分区、MSR保留分区都已经存在。Linux安装时选择"手动分区",把空闲空间切给Linux,并复用已有的EFI分区作为
/boot/efi(不要额外分第二个ESP,虽然可以但没必要,容易把引导搞乱)。 - 常见问题是:Windows自带恢复分区和OEM恢复分区,占用一小块空间。不要删除它们。这些分区通常几百MB到1GB,留着不影响Linux,删了会破坏Windows的恢复功能。
- 分区大小建议参考桌面的方案。重点在于安装GRUB时,引导程序会装到ESP分区,然后由GRUB的os-prober自动识别Windows并添加到启动菜单。
装完注意:Windows更新可能会覆盖MBR或者EFI引导顺序。处理方法是进BIOS把Linux引导项(通常是ubuntu或GRUB)设为第一启动项,或者用efibootmgr手动调整。
4.3 一般服务器(非数据库型)
这类服务器跑Web服务、Java应用、容器,数据增长比较可控。
| 挂载点 | 大小 | 文件系统 | 说明 |
|---|---|---|---|
| /boot (或 ESP) | 1GB | ext4/xfs/vfat | 引导分区,UEFI则分512MB ESP |
| / | 50~100GB | xfs或ext4 | 根分区 |
| /var | 20~50GB | xfs或ext4 | 日志和可变数据,避免日志打满根分区 |
| /data 或 /app | 剩余全部 | xfs或ext4 | 业务数据、代码发布目录 |
| swap | 8~16GB | swap | 服务器一般不建议无swap |
这种方案的关键是把业务数据从系统盘中隔离出来,方便未来单独扩容。如果条件是LVM,就把/var和/data做成LV,剩余空间保留在VG里随时扩展。
4.4 数据库服务器(MySQL、PostgreSQL等)
数据库场景的IO特性是"随机写多、数据增长快、日志持续写",所以对磁盘规划的要求更细。
- 数据目录
/data独立分区,尽量使用单独物理盘或高性能SSD,文件系统用xfs或ext4(高并发场景xfs表现更好)。 - 日志目录如果条件允许,和
/data分开,避免日志写满影响数据盘。 - 如果追求性能,可以做成RAID 10;如果追求容量和冗余平衡,RAID 5/RAID 6。云主机就不用考虑RAID,直接靠云盘的冗余。
- swap 8~16GB即可,数据库主要靠内存缓存,磁盘交换太多说明内存给少了,不是swap不够的问题。
- WLVM依然建议使用,因为数据库数据文件扩容很常见,LVM能热扩。
4.5 国产Linux系统相关(麒麟、统信UOS)的分区差异
国产桌面系统这几年使用量上升,但很多教程缺细节。麒麟(银河麒麟、中标麒麟)和统信UOS本质都是基于Debian或Ubuntu的Linux发行版,分区工具和分区原理与Ubuntu一致,所以上面所有方案都适用。区别主要在安装器的手动分区界面布局和术语。
安装统信UOS或麒麟时,手动分区界面通常有三个区域:引导分区(/boot/efi或/boot)、根分区/、用户数据区(/home或者你自建的/data)。
需要特别注意的坑:
- OEM分区:部分麒麟系统预装时会创建一个OEM分区,用于存放出厂恢复镜像。手动分区时不要删它,否则无法恢复出厂。
- 恢复分区/recovery:统信UOS和麒麟都可能有类似Windows恢复分区的隐藏分区,同样不要动。
- U盘挂载问题:热搜词里很多人查"u盘需要首先挂载分区怎么解决麒麟系"。这不是分区规划问题,而是U盘接入后没有自动挂载到
/media目录。解决方法很简单,手动挂载:
bash复制# 先看U盘设备名,通常是sdb1或sdc1
sudo fdisk -l
# 创建挂载点并挂载
sudo mkdir /media/usb
sudo mount /dev/sdb1 /media/usb
如果U盘是NTFS格式,系统需要安装ntfs-3g才能读写:
bash复制sudo apt install ntfs-3g # Debian/Ubuntu系
sudo yum install ntfs-3g # CentOS系
- persist分区:在一些移动设备或嵌入式Linux(常见于Android类设备)中有persist分区,专门存WLAN、蓝牙、音频校准等参数。热搜词里提到"persist分区里面音频校准参数已经被异常断电写坏",这种问题的典型症状是设备声音异常、WLAN打不开,通常需要从官方刷机包中恢复persist分区。它在手机/平板上很常见,普通电脑Linux里没有。
5. 分区实操:从命令行到图形化工具,手把手走一遍
光有规划还不够,你最好实际动手在测试环境跑一遍命令。下面的操作基于一台空数据盘/dev/sdb,我会演示从建分区到挂载的完整流程。
5.1 动手之前的准备工作
前提条件:最好在虚拟机或测试机上操作。假如做生产操作,先把数据备份好,fdisk这类工具写错编号就可能毁掉整个分区表。
查看当前的磁盘和分区状况,通吃所有场景的命令是:
bash复制lsblk
输出示例:
code复制NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 198.5G 0 part /
sdb 8:16 0 500G 0 disk
lsblk是看清整棵磁盘树的最好工具,比fdisk -l直观得多。看到sdb表示这是一块新盘,还没有分区。
5.2 用fdisk创建GPT分区
现代系统推荐用fdisk(util-linux 2.34+支持GPT),也可以用gdisk或parted。这里用fdisk演示最常规的流程:
bash复制sudo fdisk /dev/sdb
进入交互界面后:
- 输入
g,创建新的GPT分区表。 - 输入
n,创建新分区。按提示选择分区号(默认),输入起始扇区(默认),输入结束扇区。如果想分500GB的单一分区,直接回车默认就是整块盘;如果想分两个250GB,就在结束扇区输入+250G。 - 输入
w,写入分区表并退出。
完成后查看:
bash复制sudo partprobe /dev/sdb # 让内核重新读取分区表
lsblk
如果输出里出现了sdb1,分区创建成功。
5.3 格式化文件系统
创建分区之后,必须格式化才能使用。根据你的规划选择:
bash复制# ext4
sudo mkfs.ext4 /dev/sdb1
# xfs
sudo mkfs.xfs /dev/sdb1
# 创建swap(如果你分了一个swap分区)
sudo mkswap /dev/sdb2
sudo swapon /dev/sdb2
格式化是对分区的一次"大扫除",数据全没,所以务必确认设备名写对了。
5.4 临时挂载和永久挂载
临时挂载,重启就失效:
bash复制sudo mkdir /data
sudo mount /dev/sdb1 /data
df -h # 查看挂载结果
永久挂载,需要写入/etc/fstab。我推荐用UUID而不是设备名(如/dev/sdb1),因为设备名可能随磁盘插入顺序变化,UUID才是分区唯一标识。
bash复制# 查看UUID
sudo blkid /dev/sdb1
输出类似:
code复制/dev/sdb1: UUID="a1b2c3d4-...-..." TYPE="ext4"
在/etc/fstab中追加一行:
code复制UUID=a1b2c3d4-...-... /data ext4 defaults 0 2
然后验证配置是否正确:
bash复制sudo mount -a
如果没有任何报错,说明fstab配置没问题。这里有一个教训:fstab写错后重启会进入紧急模式(emergency mode),修复很麻烦。所以每次改完fstab,务必先执行sudo mount -a确认无误再重启。
各字段含义:
| 字段 | 含义 |
|---|---|
| UUID=... | 分区标识 |
| /data | 挂载点 |
| ext4 | 文件系统类型 |
| defaults | 挂载选项(默认包括读写、自动挂载等) |
| 0 | dump备份选项,0表示不备份 |
| 2 | fsck检查顺序,1表示根分区优先检查,2表示其他分区 |
5.5 图形化工具:GParted和GNOME Disks
命令行虽然强大,但可视化操作对新手更友好。
GParted(Linux下最全能的图形化分区工具)安装和使用:
bash复制sudo apt install gparted # Debian/Ubuntu
sudo yum install gparted # CentOS/RHEL
启动后选择磁盘,右键分区可以调整大小、移动、格式化。它的核心操作流程是:选中未分配空间 → 右键新建分区 → 选择文件系统 → 点击工具栏绿色勾号应用所有操作。
GNOME Disks(也叫gnome-disk-utility)是更轻量的工具,许多桌面发行版自带:
bash复制gnome-disks
它支持分区创建、格式化、编辑挂载选项,操作直观。如果你的环境没有这两个工具,还有blivet-gui、KDE Partition Manager等选择。图形化工具的价值在于调分区大小时能直观预览,避免容量计算错误。
5.6 基于LVM的完整建盘流程
如果你规划了LVM,普通物理分区命令就不够用了。完整流程如下:
bash复制# 1. 创建物理卷
sudo pvcreate /dev/sdb1
# 2. 创建卷组
sudo vgcreate datavg /dev/sdb1
# 3. 创建逻辑卷
sudo lvcreate -L 200G -n datalv datavg
# 4. 格式化并挂载
sudo mkfs.xfs /dev/datavg/datalv
sudo mkdir /data
sudo mount /dev/datavg/datalv /data
# 5. 写入fstab时要特别注意设备名写法
dev/mapper/datavg-datalv /data xfs defaults 0 2
LVM的LV在/dev/mapper/目录下有稳定入口,也可以直接引用。写入fstab时用/dev/mapper/datavg-datalv比较稳妥。
扩容的时候:
bash复制# 先给VG扩容(如果新加了物理盘)
sudo pvcreate /dev/sdc1
sudo vgextend datavg /dev/sdc1
# 再给LV扩容
sudo lvextend -L +100G /dev/datavg/datalv
# 最后扩展文件系统,xfs和ext4的命令不一样
sudo xfs_growfs /data # xfs
sudo resize2fs /dev/datavg/datalv # ext4
很多人只执行了lvextend就结束,结果发现容量没变,就是因为忘了最后一步xfs_growfs或resize2fs。
6. 分区相关的常见坑和排查思路:挂载失败、空间不够、迁移后起不来
这部分是真正的实战环节。我遇到过的、以及热搜词里经常被搜的问题,基本集中在下面几个场景。
6.1 挂载失败、开机进入emergency mode的排查链路
症状:改完/etc/fstab后重启,系统没有正常进入桌面或命令行,而是停在Welcome to emergency mode!的界面。
排查步骤:
- 输入root密码进入紧急模式。
- 先看
/etc/fstab内容,大概率是某一行写错了设备名或文件系统类型。 - 执行
sudo mount -a,系统会提示哪一行挂载失败。 - 修正错误:最常见的是UUID写错,或者文件系统类型写错(比如把ext4写成了xfs)。
- 用
sudo blkid重新确认UUID,改正后执行mount -a验证。 - 输入
exit或reboot恢复正常引导。
防止这个问题的习惯:任何fstab改动后,都先执行一次sudo mount -a;改之前备份/etc/fstab:
bash复制sudo cp /etc/fstab /etc/fstab.bak
6.2 磁盘满了?先定位谁占了大头
我遇到过太多次"根分区满导致服务挂掉"的情况。排查思路是逐层缩小范围:
bash复制df -h
先看哪个挂载点满了。如果确认是根分区/满:
bash复制sudo du -x --max-depth=1 / 2>/dev/null | sort -rh | head
这条命令会统计根目录下各个一级目录的大小,排名靠前的就是罪魁祸首。最常见的几类:
/var/log:日志膨胀。去journalctl --disk-usage看看systemd日志占了多少,用journalctl --vacuum-size=200M清理。/var/lib/docker:Docker容器和镜像。docker system df查看,docker system prune清理。/home:用户数据。/tmp:临时文件残留。
清理时注意别乱删,先确认清的是什么文件,针对日志和缓存动刀即可。
6.3 /home空间不足,根分区还有富余,怎么腾挪
一种常见情况:根分区给得大,/home给得小,结果用户数据塞满了/home。这时候有三种解法:
- 如果有LVM,直接:
bash复制lvextend -L +50G /dev/vg/home
# 先看文件系统类型
blkid /dev/vg/home
# xfs则
xfs_growfs /home
# ext4则
resize2fs /dev/vg/home
-
传统物理分区,没有LVM时麻烦得多,只能:
- 用GParted从空闲空间挪一部分给
/home(需要离线或Live CD操作)。 - 或者干脆做数据迁移:把
/home数据rsync到根分区的临时目录,重新挂载,再拷回来。操作繁琐且有风险。
- 用GParted从空闲空间挪一部分给
-
换方案:如果只是某个大目录(如
/home/user/Videos)超了,可以直接把这个目录单独挂载到其他大分区上。不需要动整个/home,这是Linux挂载模型最大的优势。
6.4 迁移分区或者换磁盘之后,系统起不来的原因
热搜词里"dg迁移分区"频繁出现,说的是用DiskGenius这类工具迁移系统或分区。如果你把Linux系统分区迁移到新磁盘,启动失败的原因通常就两类:
- 引导程序没跟着迁移。MBR或ESP分区的引导文件(GRUB)没有正确安装到新盘。解决办法是使用Live CD或原系统救援模式,重新安装GRUB:
bash复制# UEFI模式
sudo mount /dev/sda2 /mnt
sudo mount /dev/sda1 /mnt/boot/efi
sudo grub-install --target=x86_64-efi --efi-directory=/mnt/boot/efi --boot-directory=/mnt/boot
sudo update-grub
- 分区UUID变了。新磁盘的分区UUID和fstab里记录的不同,系统按UUID找不到根分区。用Live CD启动后挂载原根分区,编辑
/etc/fstab和/etc/default/grub里的GRUB_CMDLINE_LINUX,把旧的UUID换成新的,或者用设备名。
所以,迁移分区的前提工作是:提前记录好所有分区的UUID、文件系统类型和挂载关系,迁移后才不至于手忙脚乱。
6.5 卸载分区时提示"target is busy"怎么处理
直接卸载分区:
bash复制sudo umount /data
如果提示target is busy,说明有进程还在使用该挂载点下的文件。常见处理:
bash复制# 查看哪些进程占用了 /data
lsof /data
或者:
bash复制fuser -mv /data
找到进程后,终止或停止该服务,再卸载;如果只是想临时卸载,也可以用:
bash复制sudo umount -l /data
-l参数是懒惰卸载,先解除挂载关系,等实际进程结束再清理。注意这种方式在数据一致性要求高的场景不要乱用,会有数据未落盘的风险。更好的做法是找到进程并优雅退出。
6.6 Windows和Linux的"恢复分区""保留分区"到底是干嘛的
热搜词里"winre drv分区干嘛用的"反映了很多人对Windows隐藏分区的困惑,它对Linux双系统规划有直接影响。
| 分区名 | 作用 | 能不能删 |
|---|---|---|
| EFI系统分区 (ESP) | 存Windows Boot Manager和Linux GRUB的引导文件 | 不能删,删了系统无法启动 |
| MSR(Microsoft Reserved) | Windows内部保留,用于分区管理 | 建议保留,空间很小 |
| 恢复分区 (WinRE) | Windows恢复环境,存系统修复工具 | 建议保留,删除影响Windows重置和修复功能 |
| DRV/恢复分区 | 部分笔记本厂商的出厂恢复分区 | 建议保留,除非你确定不恢复出厂 |
装Linux双系统时,这些分区别去碰。Linux只需要利用Win留下的空闲空间,或者在已有ESP里加一个GRUB入口就行。我见过有人为了"清理"这些隐藏分区,把恢复分区全删了,后来Windows蓝屏想进修复模式都进不去,只能重装系统。
6.7 U盘或者移动硬盘插入Linux不显示,怎么挂载
这个问题非常普遍,尤其是新装的桌面发行版。插入U盘后没反应或者没自动挂载,大概率是文件系统格式或自动挂载服务问题。
手动解决:
- 查看设备名:
bash复制lsblk
U盘通常识别为/dev/sdb1或/dev/sdc1。
- 创建挂载点并挂载:
bash复制sudo mkdir -p /media/usb
sudo mount /dev/sdb1 /media/usb
- 如果报错"wrong fs type",可能是NTFS/exFAT格式不支持。安装对应驱动:
bash复制# Ubuntu/Debian
sudo apt install exfat-fuse exfat-utils ntfs-3g
# CentOS/RHEL
sudo yum install exfat-utils fuse-exfat ntfs-3g
装完再挂载即可。如果是麒麟系统,操作完全一样,因为它的内核和工具链和Ubuntu同源。
6.8 分区表损坏的数据恢复思路
分区表损坏比单个文件丢失严重得多,但也不是完全没救。常见表现是fdisk -l看不到分区,或者/dev/sda1消失。
恢复思路:
- 先用只读方式查看,不要立刻写入任何分区。
bash复制sudo fdisk -l /dev/sda
sudo parted /dev/sda print
- 用
testdisk工具扫描。testdisk能自动搜索磁盘上的旧分区表,找回丢失的分区。
bash复制sudo apt install testdisk
sudo testdisk /dev/sda
按提示选择磁盘、分区表类型,进入"Analyse"扫描,找到分区后写回分区表。
3. 如果testdisk找不到,试试photorec(testdisk的姊妹工具),但它恢复的是碎片文件而非完整分区结构,效果差一些。
4. GPT备份分区表:如果GPT头部损坏,可以用gdisk从备份恢复:
bash复制sudo gdisk /dev/sda
进入专家模式(x),输入r恢复备份分区表,再w写入。
这个环节最重要的是第一时间停止对磁盘的任何写入操作。数据恢复领域,越少改动,恢复成功率越高。
7. 分区规划最后的一些补充:我自己这些年形成的习惯
分区这件事,做规划和做执行一样重要。分享几个我逐渐养成的习惯,你可以直接抄:
第一,永远留一块"空闲空间"给LVM。 不管装哪台服务器,VG里我都会留10%到20%的未分配容量。这个空间平时用不上,但等某个LV快满时,它就是救命稻草。不需要关机、不需要删数据,lvextend加growfs几分钟搞定。
第二,/boot单独分区,而且坚持给1GB。 也许有发行版不要求,但遇到内核升级频繁、或者根分区异常占满的情况,独立/boot能保证系统还能正常引导,救援也会轻松很多。
第三,重装系统前只动根分区,/home和数据分区都保留。 这也是为什么我强烈建议桌面用户把/home独立出来。遇到系统玩坏需要重装,只要安装器里手动分区时把/home挂载点指回去、并勾选"不格式化",数据全在,省去一堆备份恢复的时间。
第四,fstab里能用UUID就别用设备名。 设备名(sda、sdb)会随着磁盘插入顺序变化,今天还是/dev/sdb的盘,明天插个U盘就可能变成/dev/sdc。UUID是出厂级唯一标识,迁移到哪台机器都不变。
第五,分区前先把"分区方案"写下来。 不要到安装界面才开始想怎么分。拿张纸或者记在手机备忘录里,写上每个挂载点、大小、文件系统类型,再动手。这个习惯帮我少删了不知道多少分区。
Linux分区不是一门"必须背下所有参数"的学问,它本质上是一种合理的资源规划思路。理解了分区表、挂载点、LVM这三层关系,配合一套适合自己的方案,后面无论遇到多少新问题,都逃不出这些基本套路。希望这篇文章能给你一个完整的参考框架,下次装系统或做磁盘规划时,不用再对着分区界面发呆。
