资讯动态

Ubuntu磁盘分卷实战:从分区布局到LVM扩容

发布时间:2026/9/8 20:57:23 来源:尧图企业网站定制
前阵子帮一个朋友在他的笔记本上装 Ubuntu 双系统他直接用安装向导里的“Install Ubuntu alongside Windows”一路点下去结果装完没到两周就来跟我抱怨根分区就 50GB编译几个项目、Docker 镜像一拉直接满了。我上机一看swap 分了 16G/home 挂在根上一堆大文件把系统盘塞得严严实实。这种场景我见了太多次。很多人在 Ubuntu 下折腾“磁盘分卷”也就是磁盘分区与卷管理真正的问题往往不是命令不会敲而是动手之前没想清楚自己到底需要什么样的分区布局。这篇文章我就把 Ubuntu 下磁盘分卷的完整链路讲透——从最基础的分区表选型到安装系统时怎么布局再到系统装好后不重装改分区、用 LVM 动态管理卷最后顺手说说“分卷”在文件层面的另一种玩法大文件拆包。内容偏实战适合正在规划装机的、准备做双系统的、以及分区后想扩容却不知道怎么下手的读者。1. 分卷前的基础认知分区表、设备名和文件系统的选择1.1 GPT 和 MBR先别急着二选一我接触过不少用户一上来就问“我应该用 MBR 还是 GPT”其实这个选择在现代硬件上基本没有悬念用 GPT。MBRMaster Boot Record是上世纪 80 年代的设计它有两大硬伤第一最多只能建 4 个主分区虽然可以用扩展分区绕一下但操作繁琐且容易踩坑第二单块磁盘最大只能识别 2TB超过 2TB 的部分直接“消失”。如果你现在买一块 4TB 的机械盘或者 2TB 以上的 NVMe用 MBR 初始化后面扩容、加分区都会非常痛苦。GPTGUID Partition Table就没有这些限制。它支持最多 128 个分区默认值实际还可以更多单分区容量上限达到了 9.4ZB对个人用户来说等于没有上限。而且 GPT 在磁盘末尾还存了一份分区表副本其中一块坏了还有另一块兜底比 MBR 那种“分区表坏了一切全完”的设计稳健得多。不过有一个细节需要注意GPT 需要 UEFI 引导配合才能真正发挥优势。如果是一台 2012 年以前的老机器BIOS 是 Legacy 模式那选 MBR 更省事。2015 年之后的机器基本都是 UEFI直接 GPT 走起。怎么看自己的分区表类型终端里执行sudo parted -l输出里会明确写Partition Table: gpt或者Partition Table: msdos一眼就能认出来。1.2 认盘sda、nvme0n1 到底谁是谁很多人分区失败不是不会敲命令而是认错盘。Ubuntu 里设备名的命名规则是有规律的但和 Windows 的 C 盘 D 盘完全是两套逻辑SATA 接口的硬盘或 SSD设备名是/dev/sda、/dev/sdb依次往后排。注意这个字母顺序不一定是物理插槽顺序而是内核识别顺序所以不要凭感觉认为 sda 一定是第一块盘。NVMe 接口的 SSD命名方式完全不一样是/dev/nvme0n1、/dev/nvme1n1后面的数字表示控制器编号和命名空间编号。分区也不叫 sda1而是nvme0n1p1带个p再跟分区号。虚拟机里的 VirtIO 磁盘是/dev/vdaSD 卡读卡器常见/dev/mmcblk0loop 设备则是/dev/loop0这些平时用得少但遇到了要知道它们是什么。要快速查看当前系统认到了哪些磁盘用这个命令lsblk输出非常直观以树状结构展示磁盘和分区的从属关系。比如NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme0n1 259:0 0 476.9G 0 disk ├─nvme0n1p1 259:1 0 512M 0 part /boot/efi ├─nvme0n1p2 259:2 0 99.5G 0 part / └─nvme0n1p3 259:3 0 376.9G 0 part /home这个输出告诉我机器只有一块 NVMe 盘分了三个区分别挂载在/boot/efi、/和/home。任何分区操作之前先 lsblk 看一眼再决定动谁这是避免“把系统盘删了”这种事故的最有效手段。1.3 挂载点与文件系统分区只是手段挂载才是目的分区本身没有意义Linux 是将“分区”通过“挂载”变成目录树的一部分之后才能真正存东西。理解这一点很多概念就通了。挂载点就是目录比如/、/home、/var。一个分区挂载到/home后你往/home/user/文件里写的数据物理上就是落在那个分区里。当你把多个分区分别挂到不同目录就实现了“分卷”的效果——系统目录、用户数据、日志文件各自独立互不挤占。文件系统的选择也很关键。Ubuntu 默认用的是ext4这是最稳的选择成熟、日志机制完善、出问题后恢复工具多。如果你是重度桌面用户磁盘上有大量小文件ext4 的表现完全够用。xfs适合超大文件和高吞吐场景比如视频剪辑素材盘但它的劣势是缩减分区很难几乎只能扩不能缩。btrfs功能很强大支持快照、压缩、校验和但普通用户没必要为这些特性承担额外的复杂度和潜在的性能开销。看完分区布局再配合查看文件系统类型和 UUIDlsblk -f输出里会多出 FSTYPE 和 UUID 两列。UUID 是分区的全局唯一标识符后面写 fstab 自动挂载时要用它而不是用设备名——因为设备名可能因启动顺序变化而改变UUID 不会变。2. 安装 Ubuntu 时的分区实操从双系统到虚拟机2.1 手动分区推荐布局别再用“一整块盘给系统”Ubuntu 安装界面默认的“清除整个磁盘并安装 Ubuntu”适合那种拿整台机器专门跑 Linux、且未来不打算折腾的人。但只要你有以下任何一种情况我都建议在安装时选择“Something else”手动分区打算和 Windows 双系统共存将来可能重装系统但想保留个人文件对 Docker 镜像、虚拟机磁盘等大文件有存储需求就是想搞明白自己的系统盘里都是什么。手动分区时我常用的推荐布局是这样的以 512GB 固态 UEFI 引导为例挂载点分区类型建议大小文件系统用途说明/boot/efiEFI System Partition512MBFAT32UEFI 引导必需已有 Windows 则共用不新建/bootExt41GBext4内核和引导文件非 LVM 加密场景也可不单独分/Ext480GBext4根目录系统程序、依赖库全在这里swapswap8GBswap内存交换区休眠用建议等于内存大小/homeExt4剩余全部ext4用户数据、下载、文档、项目文件这套方案的核心思路是系统是系统数据是数据隔离管理。把 /home 独立出来之后哪天系统崩了要重装只要在安装时再次手动挂载 /home 分区并且不去勾选“格式化”个人文件就能原封不动保留下来。这是我自己这么多年折腾系统最深的一条体会。至于 swap 区如果你内存 16GB 以上且不需要休眠功能可以完全不建 swap 分区改用 swapfile需要多大动态创建多大灵活得多。2.2 双系统安装中的关键陷阱别动 Windows 的分区双系统安装 Ubuntu最大的风险不是 Ubuntu 装不上而是把 Windows 的分区搞坏了。我在安装界面见过太多人对着分区表手一抖把 Windows 的恢复分区或 EFI 分区当成无用分区删掉结果 Windows 直接进不去。如果你电脑上已经有一个 Windows 系统并且能看到它占用了一个 EFI 分区通常是 100MB 到 600MBFAT32 格式安装 Ubuntu 时选择这个已经存在的 EFI 分区作为/boot/efi挂载点不要格式化它。Windows 和 Ubuntu 可以共用同一个 EFI 分区Grub 引导菜单会同时列出两个系统。不要去动 Windows 的 C 盘分区NTFS 格式通常是最大的那个分区更不要把它删除或重新分配。找一个 Windows 没有使用的空余空间在里面创建/和/home。如果你的磁盘空间已经很满建议先从 Windows 的磁盘管理里压缩卷腾出空间再回到 Ubuntu 安装界面。为什么强调“不要格式化 EFI 分区”因为格式化会把里面 Windows 的引导文件清掉开机后 Windows 的启动项就没了。这种情况可以修复但过程相当折腾要用 Windows 安装 U 盘进恢复模式执行bootrec /rebuildbcd一类的命令重建引导对普通用户来说心理压力极大。2.3 在虚拟机里安全练习分区零成本的试错空间如果你对分区还不太有信心我非常建议先在虚拟机里完整演练一遍。VMware Workstation 或者 VirtualBox 里装 Ubuntu和物理机上的操作几乎完全一样唯一的区别是虚拟磁盘认出来是/dev/sda或者/dev/vda。虚拟机练习有一个物理机比不了的优势快照。在动手分区之前给虚拟机拍一个快照然后随便折腾——删错分区、格式化错磁盘、把引导搞坏都只需要回滚快照就能恢复如初。这种“零成本试错”的机会在真实物理机上是不可能有的。我在 VirtualBox 里演练了至少十几次分区流程之后才敢在朋友的物理机上动手。分区操作的肌肉记忆和分区表的阅读能力都是靠反复练习练出来的看一百篇教程不如亲手折腾一次。安装完成后还可以顺手把gparted装上。它是个图形化分区工具查看分区情况非常直观后半程改分区的时候会用到sudo apt update sudo apt install gparted3. 系统已经装好了在不重装的情况下改分区3.1 GParted 无损扩容实操最常见的“根分区不够用”救法Ubuntu 装好后最常遇到的问题就是当初根分区给小了现在 / 满了想扩容。很多人以为只能重装其实不是。只要目标分区相邻的右侧有空闲空间就可以用 GParted 做到“无损扩容”。所谓“无损”是在保留分区数据的前提下调整分区大小。使用 GParted 的步骤大致如下先sudo fdisk -l或者lsblk确认空闲空间在哪。如果空间在根分区右侧比如你之前预留了未分配空间这是最简单的情况如果空间在更远的位置可能需要先移动分区耗时更长。打开 GParted需要管理员权限右键目标分区选择Resize/Move拖动滑块或者输入新的大小点击Resize/Move确认。GParted 会把操作加入队列此时还没真正执行需要点击工具栏上的绿色勾“Apply All Operations”才会开始。这一步会根据数据量大小耗时几分钟到几十分钟不等期间不要断电。有一个硬性前提要调整的分区不能被挂载。根分区挂在/上系统正在使用所以这种情况下没法直接在运行中的系统里用 GParted 去扩根分区。常见做法是做一个 Ubuntu Live USB从 U 盘启动后在 Live 环境里打开 GParted此时硬盘上的分区都未被挂载就可以随便操作了。如果是想扩大数据分区/dev/sdb1而它没有挂载在关键路径上理论上可以在运行中的系统里操作。但为了稳妥我仍然建议重要数据先备份Live USB 环境永远是分区调整最安全的选择。3.2 fdisk 命令行分区全流程新硬盘从零开始命令行的分区工具首选fdisk它适用于 MBR 和 GPT 两种分区表。假设新加了一块硬盘/dev/sdb想在上面建两个分区一个 100GB剩下全部分给第二个分区流程是这样的sudo fdisk /dev/sdb进入交互界面后Command (m for help): g # 创建新的 GPT 分区表 Command (m for help): n # 新建分区 Partition number (1-128, default 1): 1 First sector (2048-..., default 2048): # 直接回车用默认起始扇区 Last sector, /-sectors or size: 100G # 指定大小 100G Command (m for help): n # 再建第二个分区 Partition number (2-128, default 2): 2 First sector: # 直接回车 Last sector: # 直接回车用满剩余空间 Command (m for help): p # 打印分区表确认 Command (m for help): w # 写入并退出注意w才是真正写入q是退出不保存。在写入之前所有操作都只是存在于内存里的计划这是 fdisk 比较安全的一点——但前提是你记得最后要按w我见过有人按了q以为分区建好了结果白忙活一场。分区建好后内核可能不会立即识别新分区表可以用partprobe或者sudo partprobe /dev/sdb强制刷新。3.3 格式化、挂载与 fstab 自动挂载分区建好只是第一步还得格式化加挂载。格式化成 ext4sudo mkfs.ext4 /dev/sdb1如果你的磁盘大于 16TBext4 支持得不太好建议 xfssudo mkfs.xfs /dev/sdb2挂载也很简单sudo mkdir -p /mnt/data sudo mount /dev/sdb1 /mnt/data但这样挂载是临时的重启就没了。要开机自动挂载需要写入/etc/fstab。绝不要直接写设备名而要使用 UUIDsudo blkid /dev/sdb1输出类似UUIDf8a1b2c3-...然后在/etc/fstab末尾加一行UUIDf8a1b2c3-... /mnt/data ext4 defaults 0 2写完后先验证一下再重启sudo mount -a如果mount -a没有报错说明 fstab 写法没问题。如果报错马上检查路径、UUID 和文件系统类型。fstab 写错最典型的后果是开机进入 emergency mode出现这种情况不要慌输入 root 密码后用vim把写错的那行注释掉或改回来重启即可。4. 用 LVM 做“真分卷”动态调整逻辑卷4.1 为什么传统分区不够用LVM 解决的问题前面讲的都是传统分区它有一个人人都会迟早遇到的痛点分区大小一旦定下来想改非常麻烦尤其是缩减。你很难把一个已经用了大半的分区缩得很小因为文件系统里的数据可能分布在分区各个位置移动数据耗时且风险高。LVMLogical Volume Manager逻辑卷管理就是为了解决这个问题而生的。它把“磁盘分区”和“文件系统”之间加了一层抽象物理卷PV, Physical Volume就是一块磁盘或一个分区比如 /dev/sdb1卷组VG, Volume Group把多个物理卷打包成一个大的“存储池”逻辑卷LV, Logical Volume从卷组里划分出来的逻辑分区格式化后挂载使用。用生活里的话说传统分区就像你买了一个固定大小的柜子隔板位置是定死的LVM 则像一个仓库里面有若干货架物理卷组成一个大库容卷组货架上的箱子逻辑卷可以随时挪动、扩大、缩小只要整个仓库还有空间。如果你喜欢折腾系统、经常需要扩容或者有多块硬盘想合并使用LVM 是很值得上的方案。Ubuntu Server 安装时选默认设置其实就已经帮你用了 LVM桌面版默认不用但完全可以手动配。4.2 从物理卷到逻辑卷的完整创建链路假设你有两块新硬盘 /dev/sdb 和 /dev/sdc想把它们合并成一个“大卷”然后从中划出两个逻辑卷分别存数据和备份。第一步创建物理卷sudo pvcreate /dev/sdb /dev/sdc注意这里我直接对整块磁盘创建 PV没有分区。这是合法的LVM 可以直接管理整盘。第二步创建卷组sudo vgcreate vgdata /dev/sdb /dev/sdcvgdata是我给卷组起的名字。卷组创建好后可以查看状态sudo vgdisplay第三步从卷组中创建逻辑卷。我要划一个 200GB 的data卷和一个 100GB 的backup卷sudo lvcreate -L 200G -n data vgdata sudo lvcreate -L 100G -n backup vgdata创建出来的逻辑卷设备路径是/dev/vgdata/data和/dev/vgdata/backup。第四步格式化并挂载sudo mkfs.ext4 /dev/vgdata/data sudo mkfs.ext4 /dev/vgdata/backup sudo mkdir -p /srv/data /srv/backup sudo mount /dev/vgdata/data /srv/data sudo mount /dev/vgdata/backup /srv/backupfstab 里同样写 UUID逻辑卷的 UUID 用blkid查。之后开机自动挂载的写法和前面一模一样。4.3 在线扩容与缩减LVM 的杀手锏LVM 最爽的时刻来了。假设用了几个月200GB 的data卷快满了而backup卷还剩 80GB。我想把 data 扩到 260GB不用关机不用卸载在线就能完成sudo lvextend -L 60G /dev/vgdata/data sudo resize2fs /dev/vgdata/datalvextend是扩大逻辑卷resize2fs是让文件系统感知并使用新增空间。两个命令执行完数据立即可用不需要重启。这就是传统分区完全做不到的操作。缩减则要麻烦一些而且风险更高。缩减的顺序绝不能反过来必须先缩小文件系统再缩小逻辑卷。否则文件系统和逻辑卷大小不匹配数据会损坏。sudo umount /srv/data sudo e2fsck -f /dev/vgdata/data sudo resize2fs /dev/vgdata/data 150G sudo lvreduce -L 160G /dev/vgdata/data sudo mount /dev/vgdata/data /srv/data我在这里多留了 10GB 的余量防止文件系统缩过头导致数据丢失。缩减之前务必确认数据有备份因为 e2fsck 和 resize2fs 在这些操作中一旦中途断电后果非常严重。LVM 还有一个传统分区给不了的功能快照。对逻辑卷做快照可以瞬间得到一个“某时间点的副本”做系统级备份、升级前的回滚准备都非常方便sudo lvcreate -L 20G -s -n>sudo lvremove /dev/vgdata/data-snapshot不过我自己的建议是LVM 的 /boot 分区不要放在 LVM 里面。Grub 引导器对 LVM 的支持虽然已经不错但遇到某些特殊情况比如 /boot 上的驱动加载问题会很头痛单独分一个 ext4 的 /boot 分区能省掉很多麻烦。5. 另一种“分卷”大文件的拆分、传输与合并5.1 split 与 cat最朴素的拆包方案“磁盘分卷”这个词在中文语境里还有一种常见理解把一个超大文件拆成多个小卷方便传输、上传或刻录。这个场景我用得最多的命令是split。比如我有一个 8GB 的数据库备份database.sql想把它拆成 2GB 一块方便分次传到另一台机器有些网盘单文件限 2GBsplit -b 2G -d -a 3 database.sql database.sql.part_参数含义-b 2G按大小切分-d让文件后缀用数字而不是字母-a 3表示后缀用三位数字也就是database.sql.part_000、database.sql.part_001……一直到全部拆完。合并的时候更简单cat database.sql.part_* database.sql合并完最好校验一下完整性。用md5sum在拆分前和合并后各算一遍对比结果一致就说明没传坏md5sum database.sql md5sum database.sql.part_* checksums.txt如果文件分散在不同目录cat的*通配符可能会乱序。稳妥起见用循环按序号合并for i in $(seq 0 30); do cat database.sql.part_$(printf %03d $i) database_merged.sql; done不过要注意这样按固定序号循环如果分卷数量不确定不如cat part_*直接方便。实际情况自己判断。5.2 分卷压缩与合并tar 和 rar 的实际用法如果你的原始内容是整个目录而不是单个文件可以在打包的同时直接分流输出达到“边打包边分卷”的效果tar -czf - /path/to/project | split -b 2G -d - project_backup.tar.gz.part_这里tar -czf -把项目目录压缩后输出到标准输出管道交给split按 2GB 拆分-表示从标准输入读取。合并后解压cat project_backup.tar.gz.part_* project_backup.tar.gz tar -xzf project_backup.tar.gz如果是 Windows 用户协同可能需要处理rar格式的分卷压缩。Ubuntu 上安装工具sudo apt install rar unrar压缩成每个 2GB 的分卷包rar a -v2000M archive.rar /path/to/project解压时只要把第一个文件archive.part1.rar交给 unrar 即可它会自动读取后续分卷unrar x archive.part1.rar这里有个细节rar 分卷的文件名通常是archive.part1.rar、archive.part2.rar如果少了任何一个unrar 会提示缺卷。传输这些分卷文件时要保证文件名不要被改动否则顺序错乱后解压会失败。7zip 也有分卷功能而且更通用sudo apt install p7zip-full 7z a -v2g archive.7z /path/to/project解压时输入7z x archive.7z.001分卷传输的另一个建议是传完立刻校验别等对方解压时报错才回头查。用sha256sum -c配合一份包含所有分卷哈希值的校验文件是效率比较高的做法。6. 我在分区这件事上踩过的坑和最终的规划建议6.1 分区前必须做的三件事这些年折腾 Ubuntu我总结出三条操作前铁律每一条都是用教训换来的一是备份。不是“重要数据备份”而是“万无一失才动手”。分区操作涉及底层数据结构哪怕是最常见的扩容也有极小的概率因为断电、工具 bug、文件系统异常导致数据不可读。我在给朋友操作前会先把他 /home 下的关键目录通过 rsync 同步到移动硬盘rsync -avzh --progress /home/user/ /media/user/backup_drive/home/二是记录原分区表。操作前把lsblk -f和sudo fdisk -l的输出保存到文本文件最好再blkid记录所有 UUID。一旦中途出了意外这些信息是恢复现场的导航图。三是准备 Live USB 和足够的充电。笔记本务必插上电源再操作台式机最好接一个 UPS。分区扩展过程中断电比扩容失败本身要麻烦得多轻则分区表损坏重则文件系统无法挂载。Live USB 用来在系统进不去的时候修复。6.2 那些容易忽略的空间占用为什么分区总是不够用很多人都问过同一个问题“我明明按 50GB 给根分区留了空间怎么没几天就满了”这其中有几个沉默的空间吞食者第一个是 ext4 文件系统默认会保留 5% 的块给 root 用户用于防止磁盘写满后系统无法启动。500GB 的盘5% 就是 25GB对个人用户来说偏浪费。如果你确定 root 不需要这么大的应急空间可以调小sudo tune2fs -m 1 /dev/nvme0n1p2把保留比例从 5% 降到 1%。第二个是 Docker 和虚拟机镜像。Docker 默认数据目录在/var/lib/docker一个镜像动辄几个 GB几个容器跑起来几十 GB 瞬间就没了。虚拟机的磁盘文件默认也放在用户目录下稍不注意就会把 /home 塞满。所以如果你的 Docker 用量大建议单独给/var分一个区或者把 Docker 数据目录迁移到大分区sudo systemctl stop docker sudo rsync -av /var/lib/docker/ /srv/data/docker/ sudo vim /etc/docker/daemon.json # 写入 {data-root: /srv/data/docker} sudo systemctl start docker第三个是日志。系统的 journal 日志如果不管时间长了也能积攒几个 GB。限制一下大小sudo journalctl --vacuum-size500M还可以在/etc/systemd/journald.conf里设置SystemMaxUse500M从源头限制。6.3 适合普通用户的分区规划模板回到最初的“格局”问题我给普通用户的分区规划建议实际上可以归纳成三套模板模板一省心型适合 256GB-512GB 固态盘单系统EFI 分区 512MB/直接用全盘余量swap 用 swapfile不单独分 /home。好处是空间利用最大化坏处是重装系统时个人文件要提前迁移。适合不在乎重装、桌面使用轻度的用户。模板二稳重型适合 512GB 以上且在意数据EFI 512MB/80GBswap 8GB 或 swapfile/home剩余全部。重装系统不丢个人数据系统盘被日志或 Docker 灌满也不影响 /home。这是我给大多数朋友的推荐。模板三折腾型适合多盘/长期使用系统盘按模板二再额外加一块或多块盘组成 LVM 卷组把 Docker 数据目录、虚拟机镜像、下载目录全挂到大卷上。前期多花半小时配置后期扩容只需lvextend resize2fs两条命令。至于很多人纠结的“要不要单独分 /tmp、/var、/usr”我的观点是桌面场景完全没必要分区越细空间利用率越低管理负担越大。分区是手段不是目的别为了“看起来很专业”去过度分区。还有个容易忽略的小细节Linux 的dd命令可以整盘克隆如果你要换一块更大的系统盘直接sudo dd if/dev/sda of/dev/sdb bs64K convnoerror,sync statusprogress然后sudo gparted扩大分区即可。这算是一个不用重装就能“磁盘升级”的实用技巧。最后再分享一个我自己的习惯每台机器分区完成后我会把完整的分区规划、UUID、硬盘型号、用途写在一个 Markdown 文件里放在 /root 下或者自己的笔记库里。半年后你再回头看那台机器不会一脸茫然地想“这 400G 到底是谁在用”。磁盘分卷这件事说到底不是技术门槛有多高而是你有没有在动手前把需求和布局都想清楚。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价