1. 项目缘起:为什么需要自定义分区?
最近在给团队搭建新的开发测试环境,需要批量部署一批Ubuntu虚拟机。直接使用默认的“自动安装”固然省事,但很快就遇到了麻烦:根分区(/)空间被日志和临时文件占满,导致服务异常;而/home目录下用户数据寥寥无几,大量空间闲置。这种“一刀切”的磁盘分配方式,在长期运行的生产或开发环境中,往往埋下了性能和管理上的隐患。
这促使我重新审视虚拟机磁盘分区的必要性。对于Linux系统,尤其是用作服务器或长期工作站的虚拟机,预先规划磁盘分区结构,就像盖房子前先画好施工图。它不仅仅是划分空间,更是对系统性能、数据安全、运维便利性和未来扩展性的综合考量。一个合理的分区方案,能让系统在面对日志暴涨、程序崩溃、系统升级甚至硬盘故障时,更加从容不迫。
因此,我决定整理一份从零开始,在VMware虚拟机中安装Ubuntu并进行自定义磁盘分区的完整指南。这不仅是安装系统,更是一次对Linux存储管理的深度实践。无论你是刚接触Linux的新手,还是需要为项目搭建标准化环境的老手,这套清晰、可复现的操作流程和背后的设计思路,都能让你对“虚拟机”和“Linux系统”有更扎实的掌控感。
2. 前期准备:工具、镜像与虚拟机配置
工欲善其事,必先利其器。在点击“新建虚拟机”按钮之前,我们需要准备好三样东西:虚拟机软件、系统镜像和一个清晰的规划。
2.1 虚拟机软件选择:VMware Workstation Pro
市面上虚拟机软件众多,如VirtualBox、Hyper-V等。我选择VMware Workstation Pro,主要基于其在企业环境和开发者中的广泛接受度、稳定的性能表现、完善的快照与克隆功能,以及出色的网络模拟能力。它对新手友好,同时也能满足高级用户的需求。当然,你可以使用免费的VMware Workstation Player,对于基础安装和学习来说完全足够。
注意:确保你使用的VMware版本支持你要安装的Ubuntu版本。通常,保持软件为较新版本即可避免兼容性问题。
2.2 系统镜像获取:Ubuntu LTS版本
对于服务器和长期使用的环境,我强烈推荐选择Ubuntu的LTS(长期支持)版本,例如最新的Ubuntu 22.04 LTS或24.04 LTS。LTS版本提供长达5年的标准支持,安全更新和软件仓库维护都非常稳定,避免了频繁升级带来的潜在风险。
获取镜像最安全、最快速的途径是访问Ubuntu官方或国内可靠的镜像站。直接搜索“Ubuntu官网下载”或“清华大学Ubuntu镜像”即可找到。下载完成后,你会得到一个后缀为.iso的文件,这就是我们的安装盘。
2.3 虚拟机硬件规划
在VMware中新建虚拟机时,硬件配置需要根据用途来定。以下是一个适用于开发或学习环境的通用起点配置,你可以在虚拟机创建后随时调整(除CPU核心数外):
- CPU:2核心。对于大多数轻量级服务和学习足够,如果宿主机性能强劲且需要编译等重负载任务,可以给到4核心。
- 内存:4GB。这是流畅运行带图形界面的Ubuntu的底线。如果只使用命令行界面(Server版),2GB也勉强可行,但4GB是更舒适的选择。
- 网络:选择“NAT模式”。这是最省心的模式,虚拟机会共享宿主机的IP上网,就像你家路由器下的另一台设备,无需额外配置。
- 磁盘:这是关键!选择“创建新虚拟磁盘”。磁盘类型用默认的SCSI即可。大小我建议至少40GB。虽然Ubuntu最小安装可能只需要10GB+,但预留充足的空间是为了后续安装软件、存储数据和应对系统更新。更重要的是,我们将在这40GB的空间上进行自定义分区。
这里有一个关键操作:不要选择“立即分配所有磁盘空间”。如果勾选,VMware会立刻在宿主机上创建一个40GB的虚拟磁盘文件,占用大量物理空间。我们选择“将虚拟磁盘拆分成多个文件”,并让磁盘空间“按需增长”。这样,虚拟磁盘文件初始很小,随着虚拟机内数据的增加而逐步增大,非常灵活。
至此,一个“空壳”虚拟机已经创建好,并挂载了Ubuntu安装镜像。接下来,我们将启动它,进入真正的核心环节——磁盘分区。
3. 深入理解:Linux磁盘分区与挂载概念
在动手分区之前,有必要花几分钟理解几个核心概念。这能让你清楚每一步操作的目的,而不是机械地点击“下一步”。
3.1 分区表类型:MBR vs GPT
这是磁盘的“地图索引”格式。
- MBR:传统格式,最多支持4个主分区,或3个主分区+1个扩展分区(扩展分区内可再分逻辑分区)。单个分区最大支持2TB。适用于老式BIOS启动的电脑。
- GPT:现代格式,几乎无分区数量限制,支持超过2TB的大容量磁盘。必须配合UEFI启动方式。
对于新建的虚拟机,尤其是磁盘空间可能超过2TB(虽然我们只分配了40GB)或为了兼容未来,强烈建议选择GPT分区表。Ubuntu安装程序在检测到空白磁盘时,通常会默认创建GPT分区表。
3.2 文件系统:Ext4 vs XFS vs 其他
分区完成后,需要格式化,即创建文件系统,这是操作系统用来管理磁盘上文件存储和检索的方法。
- Ext4:这是Ubuntu默认且最常用的文件系统。它非常稳定、成熟,在大多数场景下性能表现良好,是综合平衡之选。
- XFS:特别擅长处理大文件和高并发IO,例如数据库、视频处理等场景。如果你计划将此虚拟机用于存储大量媒体文件或运行数据库服务,XFS是更好的选择。
- Btrfs/ZFS:提供了高级功能如写时复制、快照、数据校验等,但配置相对复杂,更适合有特定数据管理需求的用户。
对于通用目的,选择Ext4即可。
3.3 挂载点:Linux的目录树如何与磁盘关联
这是Linux与Windows磁盘管理逻辑上最大的不同。Windows使用“C盘”、“D盘”这样的盘符。而Linux整个系统只有一个根目录树/,所有存储设备(硬盘分区、U盘、光盘)都必须“挂载”到这棵树的一个“目录”下,这个目录就称为“挂载点”。
例如:
- 将第一个分区挂载到
/(根目录),系统核心文件就放在这里。 - 将第二个分区挂载到
/home,所有普通用户的个人文件(桌面、文档、下载等)就存储在这里。 - 将第三个分区挂载到
/var,系统日志、缓存、数据库文件等经常变动的数据放在这里。
这种设计带来了极大的灵活性。例如,当根分区空间不足时,可能是/var/log日志文件太多,但由于/var是独立分区,它不会影响根分区的其他部分,也更容易定位和管理问题。
理解了这些,我们就可以设计自己的分区方案了。
4. 实战分区方案设计与安装操作
现在,启动虚拟机,进入Ubuntu安装界面。选择语言后,在“安装类型”这一步,务必选择“其他选项”(或“手动分区”)。这样我们才能获得完全的控制权。
安装程序会显示你的虚拟磁盘(例如/dev/sda)。由于是全新磁盘,它显示为“空闲空间”。点击“新建分区表”,系统会提示你创建分区表,选择GPT。
接下来,我们将在这块空闲空间上创建分区。我推荐一个适用于40GB磁盘的、兼顾学习与实用性的分区方案:
| 挂载点 | 大小 | 类型 | 文件系统 | 用途说明 |
|---|---|---|---|---|
/boot/efi | 512 MB | 逻辑分区 | EFI系统分区 | 必须创建。用于UEFI启动,存放引导程序。 |
/boot | 1 GB | 主分区 | Ext4 | 存放Linux内核和启动引导文件。独立出来可以避免内核更新填满根分区。 |
swap | 4 GB | 逻辑分区 | swap area | 交换空间。当物理内存不足时,用作内存扩展。大小通常为物理内存的1-2倍,这里4GB足够。 |
/ | 20 GB | 主分区 | Ext4 | 根目录。存放系统核心文件、安装的软件等。20GB对于基础系统加大量开发工具绰绰有余。 |
/home | 剩余全部 (~14.5 GB) | 主分区 | Ext4 | 用户家目录。你的文档、代码、下载文件、个性化配置都在这里。独立分区后,重装系统时可以保留此分区数据。 |
4.1 逐步创建分区
- 创建
/boot/efi:选中空闲空间,点击“+”。大小设为512MB,新分区类型为“逻辑分区”,位置“起始”,用于“EFI系统分区”。无需选择挂载点,系统会自动识别。 - 创建
/boot:继续选中剩余空间,点击“+”。大小1GB,类型“主分区”,位置“起始”,用于“Ext4日志文件系统”,挂载点选择“/boot”。 - 创建
swap:选中剩余空间,点击“+”。大小4GB,类型“逻辑分区”,位置“起始”,用于“交换空间”。 - 创建
/:选中剩余空间,点击“+”。大小20GB,类型“主分区”,位置“起始”,用于“Ext4日志文件系统”,挂载点选择“/”。 - 创建
/home:选中最后剩余的所有空间,点击“+”。使用全部剩余空间,类型“主分区”,位置“起始”,用于“Ext4日志文件系统”,挂载点选择“/home”。
创建完成后,分区表大致如下所示:
设备 类型 挂载点 大小 /dev/sda1 efi 512 MB /dev/sda2 ext4 /boot 1 GB /dev/sda3 swap 4 GB /dev/sda4 ext4 / 20 GB /dev/sda5 ext4 /home 剩余空间4.2 关键设置:引导加载器安装设备
这是安装过程中极易出错的一步。在分区界面的底部,有一个“安装启动引导器的设备”下拉菜单。这里必须选择你的整个磁盘,即/dev/sda(不带数字),而不是某个具体分区(如/dev/sda1)。这将引导程序安装到磁盘的启动扇区,系统才能正常引导。
确认无误后,点击“现在安装”,按照后续提示设置时区、用户名密码即可完成安装。安装完成后重启,你就拥有了一个按照自定义分区方案部署的Ubuntu系统。
5. 安装后验证与基础环境配置
系统首次启动后,我们首先需要验证分区是否按照我们的规划生效。
打开终端,输入命令df -h。这个命令可以查看所有已挂载文件系统的磁盘使用情况。你应该能看到类似下面的输出,清晰地显示/、/boot、/home各自的大小和使用情况,这证明我们的分区和挂载是成功的。
文件系统 容量 已用 可用 已用% 挂载点 /dev/sda4 20G 6.0G 13G 32% / /dev/sda2 976M 200M 710M 22% /boot /dev/sda5 15G 50M 14G 1% /home再输入lsblk -f,可以查看更详细的块设备信息,包括分区类型和UUID。
5.1 配置软件源加速
系统安装后第一件事,就是更换软件源为国内镜像,以大幅提升软件下载和更新的速度。这里以阿里云镜像为例:
- 备份原有源列表:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak - 编辑源列表文件:
sudo nano /etc/apt/sources.list - 将文件内容全部替换为阿里云的源(以Ubuntu 22.04为例):
(如果是24.04,将deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiversejammy替换为noble) - 按
Ctrl+X,然后按Y,再按回车保存退出。 - 更新软件包列表:
sudo apt update
5.2 安装基础工具集
一个顺手的工具集能极大提升效率。建议安装以下包:
- 网络与诊断工具:
sudo apt install net-tools iputils-ping traceroute curl wgetifconfig、ping、traceroute是网络排障的利器。
- 压缩解压工具:
sudo apt install zip unzip gzip tar- 应对各种格式的压缩包。
- 开发构建工具:
sudo apt install build-essential gitbuild-essential包含了编译C/C++程序必需的gcc, g++, make等。
- 文本编辑器:
sudo apt install vim- Vim是命令行下高效的文本编辑器,值得花时间学习基础操作。
执行sudo apt install net-tools iputils-ping curl wget zip unzip build-essential git vim -y可以一次性安装。
5.3 配置SSH远程登录(针对服务器用途)
如果你打算把这台虚拟机当作服务器来用,启用SSH是必须的。
- 安装OpenSSH服务器:
sudo apt install openssh-server -y - 启动并设置开机自启SSH服务:
sudo systemctl start ssh sudo systemctl enable ssh - 查看虚拟机IP地址:
ip addr show,找到inet后面的地址(通常是192.168.x.x或10.x.x.x)。 - 现在,你就可以从宿主机的终端(Windows可用PowerShell或MobaXterm,macOS/Linux直接用终端)使用
ssh 你的用户名@虚拟机IP来远程登录了,比在VMware窗口里操作方便得多。
6. 分区方案的灵活调整与高级考量
我们之前设计的方案是一个通用模板。在实际项目中,你需要根据虚拟机的具体角色进行调整。
6.1 针对不同角色的分区方案调整
数据库服务器:
- 重点:数据和日志的IO性能、安全性。
- 调整建议:
- 单独分区给数据:为数据库数据文件(如MySQL的
/var/lib/mysql, PostgreSQL的/var/lib/postgresql)创建独立分区,甚至使用XFS文件系统。 - 放大
/var:数据库日志、事务日志通常存放在/var/log和/var/lib下,确保有足够空间。 - 示例调整:可以将
/home空间缩减,额外增加一个/var/lib/mysql分区(XFS格式,20GB+)。
- 单独分区给数据:为数据库数据文件(如MySQL的
Web应用服务器:
- 重点:应用日志、静态资源、代码部署。
- 调整建议:
- 单独分区给日志:为
/var/log和/var/log/nginx(或/var/log/apache2)创建独立分区,避免日志写满根分区导致应用崩溃。 - 单独分区给Web根目录:如果应用代码或用户上传的文件存放在
/var/www或/opt,为其创建独立分区。 - 示例调整:增加
/var/log(Ext4, 5GB),/opt(Ext4, 10GB)。
- 单独分区给日志:为
开发桌面环境:
- 重点:用户数据安全、开发工具和依赖库。
- 调整建议:
- 最大化
/home:开发者的代码、配置、Docker镜像、IDE等都存放在家目录,所以/home分区应尽可能大。 - 考虑
/opt:有些大型开发工具(如JetBrains全家桶的Toolbox安装方式)会默认安装在/opt。 - 示例调整:
/分区15GB,/home分区分配剩余绝大部分空间(如23GB)。
- 最大化
6.2 关于Swap分区的现代观点
传统观点认为Swap大小应为物理内存的1-2倍。但在今天,尤其是虚拟机内存配置比较充足(如8GB+)的情况下,这个规则需要重新审视。
- 内存充足时(>8GB):Swap的主要作用从“防止内存不足崩溃”转变为“支持休眠(Hibernate)功能”和“内核移出非活动内存页”。此时,分配2GB-4GB的Swap通常足够。甚至,如果确认不需要休眠功能,且内存非常充裕,可以分配一个较小的Swap(如1GB)或完全不设Swap(不推荐,某些应用可能依赖Swap存在)。
- 内存紧张时(<4GB):Swap仍然至关重要,建议分配内存大小的1.5-2倍。
- Swap的位置:我们之前将Swap放在机械硬盘(虚拟磁盘模拟的)上,速度慢。如果宿主机是SSD,虚拟机磁盘性能尚可。在物理机上,如果有高速NVMe SSD,Swap性能会好很多。极端性能追求下,甚至可以创建RAM Disk(内存盘)作为Swap,但这会占用宝贵的内存。
6.3 使用LVM:动态卷管理的优势
我们目前使用的是直接分区,一旦划分好,大小就很难调整。如果你预见到未来可能需要灵活调整分区大小,可以在安装时就使用LVM(逻辑卷管理)。
LVM在物理磁盘(PV)之上抽象出一层,创建卷组(VG),然后在卷组里动态创建和调整逻辑卷(LV)。逻辑卷就相当于我们之前的分区,可以被格式化并挂载使用。
使用LVM安装时的简易流程:
- 在分区界面,先创建一个较小的
/boot/efi分区(如512MB)。 - 将剩余所有空间创建为一个分区,类型选择“物理卷(LVM)”。这会作为LVM的物理卷(PV)。
- 系统会自动以此PV创建卷组(VG)。
- 然后,你可以在该卷组内创建多个逻辑卷(LV),分别作为
/、/home、swap等,过程与普通分区类似。
LVM的最大好处是:将来如果/home空间不足,而/空间有富余,你可以先缩减/的逻辑卷,然后将腾出的空间加入卷组,再扩展/home的逻辑卷,整个过程可以在系统在线运行时完成,无需重装系统。对于需要长期演进和调整的系统,LVM是更专业的选择。
7. 常见问题排查与经验心得
即便按照指南操作,你也可能会遇到一些“坑”。这里分享几个我踩过或常见的问题。
7.1 安装程序卡在“探测文件系统”或某个百分比
这通常是因为虚拟机从Ubuntu安装镜像启动时,默认会尝试连接网络更新安装器。如果网络不畅,就会卡住。
- 解决方案:在安装开始的第一个界面(选择语言前),按
E键编辑启动项。在linux开头的那一行的末尾,在---之前,添加nomodeset并空一格。然后按F10启动。这能禁用显卡模式设置,有时能解决问题。更根本的方法是,在安装类型选择界面,先不要联网,等系统安装完成后再配置网络和更新源。
7.2 安装完成后无法启动,提示“GRUB”错误或黑屏
这通常是因为引导加载器(GRUB)安装位置错误或损坏。
- 预防:确保安装时“引导加载器安装设备”选择了整个磁盘(
/dev/sda)。 - 修复:可以使用Ubuntu安装U盘启动,选择“试用Ubuntu”,进入Live系统后,打开终端,挂载原系统的根分区,然后使用
chroot命令修复GRUB。这是一个稍复杂的操作,需要参考专门的GRUB修复教程。
7.3 磁盘空间不足的预警与处理
即使做了分区,某个分区也可能被填满。我们需要监控和清理。
- 监控命令:
df -h(查看各分区使用率),du -sh *(查看当前目录下各文件夹大小)。 - 常见空间杀手:
/var/log:系统日志。可以使用sudo journalctl --vacuum-time=7d清理7天前的日志,或安装logrotate工具自动管理。/var/cache/apt/archives:APT软件包缓存。定期运行sudo apt clean可以清理所有已安装软件的下载包。- Docker:如果安装了Docker,它的镜像、容器、卷默认存储在
/var/lib/docker,会占用大量空间。需要定期使用docker system prune -a(谨慎使用,会删除所有未使用的资源)来清理。
7.4 从Windows向虚拟机传输文件
这是高频需求。除了配置共享文件夹(需要在VMware Tools安装后设置),更通用的方法是使用SCP命令(基于SSH)。
- 确保虚拟机已开启SSH(见5.3节)。
- 在宿主机(Windows)上,如果你安装了Git Bash或WSL,可以直接使用
scp命令。或者使用图形化工具如WinSCP。 - 命令示例(在宿主机的终端中):
scp C:\Users\YourName\Desktop\file.txt username@虚拟机IP:/home/username/- 这条命令将宿主机桌面的
file.txt复制到虚拟机的用户家目录下。
- 这条命令将宿主机桌面的
7.5 关于VMware Tools/Open VM Tools
安装VMware Tools可以显著提升虚拟机的体验,包括:
- 剪贴板共享:在宿主机和虚拟机之间复制粘贴文本。
- 拖放文件:直接拖拽文件到虚拟机窗口。
- 更好的显示驱动:支持自适应分辨率调整。
在Ubuntu新版本中,推荐安装开源替代品Open VM Tools,它已被集成到仓库中。安装非常简单:sudo apt install open-vm-tools open-vm-tools-desktop -y。安装后重启虚拟机即可生效。
自定义分区安装Linux,初看步骤繁多,但一旦掌握,它赋予你对系统底层架构的清晰认知和掌控力。这份掌控力,在系统运维、性能调优和故障排查时,会成为你最得力的工具。从按照模板操作,到能根据实际需求设计出属于自己的分区方案,这个过程本身就是对Linux系统理解的一次重要深化。