面向开发的ubuntu系统分区方案介绍
2022-04-25 09:56:37 # 实用教程
字数:1.9k 阅读时长:6min

系统分区

在实际开发场景中,一种好的分区策略除了能save your time,很多时候还能save your ass,这点我是深有体会的。
所以我觉得很有必要分享下,自己多年使用和重装系统所得来的经验。我会从硬盘跟Linux系统这两个方向进行介绍,其中会讲解点原理性的东西以便于大家理解。

硬盘

就是存放数据的工具。它的类型主要就机械硬盘跟固态硬盘。

机械硬盘

Hard Disk Drive,简称HDD。它的内部构造可以参考光驱+光盘这个组合,光盘我们都有见过,要用光盘我们需要把它放到一个光驱里,然后就会听到电机转起来的声音,巨吵。这时光盘里的数据就通过光驱读出来了。

而硬盘无非就是一堆光盘叠起来,然后光驱也放到了一起。它跟“光驱+光盘”这个组合的根本区别在于数据的读写形式,如下图所示:

hdd

一个用到的原理是光,而另一个是磁。所以一个用到光盘跟激光头,硬盘则是磁盘跟磁头。

固态硬盘

Solid State Drive,简称SSD。它的内部主要是一块电路板,上面嵌了控制器跟一堆闪存颗粒,如下图所示:

ssd

其实可以把它当做一个U盘来看,只不过接口变了,然后多加了存储东西的元件罢了。

硬盘格式

如果把硬盘当作一本笔记本的话,那么硬盘格式所做的工作就是在规定笔记本每页纸张的大小。主要有MBR和GUID(GPT)两种格式。两者区别如下:

分区格式 出生日期 BIOS启动方式 特点
MBR Legacy 最多只支持2TB大的硬盘,最多支持分4个主分区或三个主分区和一个扩展分区,扩展分区下可以有多个逻辑分区
GPT UEFI 支持18EB大的硬盘且对分区数量没有限制,但没有限制是每个分区付出一点容量记录自身分区信息换来的

根据上表就可以合理选择自己要用的硬盘格式了。

Linux

这个操作系统开发者应该会比较熟悉,我以自己用得比较多的Ubuntu系统为例,简单介绍下跟我们分区相关的内容。

文件系统

主要以文件的形式来管理磁盘,我们看得到的文件类型、创建修改日期等都是文件系统负责的。
Linux 支持很多文件系统格式,不同的格式有其不同的特点,下表是跟我们安装Ubuntu系统有关的格式。

文件格式 特点
ext2 Linux 最传统的磁盘文件系统,稳定可靠,速度快,就是不支持日志,也就是系统崩了不好恢复刚做的修改。
ext3 基于原来的 ext2 开发,添加了日志功能,所以它跟 ext2 格式很容易实现相互转换
ext4 基于 ext3 再次升级的格式,它主要提升了文件系统中卷、文件、目录的最大尺寸,表现它支持最大大小为 1 EB 的卷、最大大小为 16 TB 的文件和无限个子目录

根据这个表格应该很好确定我们等下要用哪个格式了,然后有关更多其他fs格式的介绍可以在这里查看[1]
最后补充一点,就是硬盘格式跟文件系统格式的区别,这个可能很容易搞混。

就还是把硬盘当作一本笔记本,硬盘格式初始化后笔记本每页纸张大小就确定了,而文件系统格式相当于在规定每页纸上日期,天气的位置和每个划线的间距。

系统目录

Linux的系统目录真的非常漂亮,所有的文件皆挂载在一个叫 / 的目录下,这个 / 也叫做根目录。

而根目录下的一级目录大多也是规定好的,由下图这几个关键目录组成,这些目录下各自存放了用于完成不同工作的文件。下图截取自fhs文档,感兴趣的朋友可以在这里了解更多关于linux的fhs介绍[2]

fhs

下面是我的翻译工作:

目录名 作用
/bin 存放基本的二进制文件,一般我们在Linux命令行里输的命令都是来自于/bin目录
/boot 存放系统的开机引导文件,占用空间不大,一般几百M
/dev 存放访问硬件设备的接口文件,用来访问硬盘,内存等各个硬件
/etc 存放系统配置文件,用户管理,网络配置都在这个目录下可以改,相当于Windows下的注册表
/lib 存放动态库跟内核模块文件,给程序调用的
/media 作为可移动存储设备的挂载点,用来访问u盘,cd光盘的内容
/mnt 作为暂时访问其他文件系统的挂载点,实际作用同上,两者完全兼容
/opt 存放附加程序安装包的,也就是后来自己想下的第三方软件都可以放这里,详见fhs文档3.13处
/sbin 存放给系统还有root用户调用的基本二进制文件
/srv 存放系统服务产生的数据
/tmp 存放临时数据的文件
/usr 存放共享的可读文件,大多数常用软件、c/c++头文件和库都在这里
/var 存放变量数据,它里面记录了所有程序的日志还有系统日志等

另外还有几个重要的目录,/root是管理员的的家目录、/home是所有用户的家目录、/proc是存放进程信息的目录。

正式分区

有了以上这些内容铺垫,可以来介绍ubuntu系统分区方案了。

案例

首先以我512g的固态为例,根据硬盘分区的知识,容量 < 2T,那就用MBR格式初始化。
然后根据对Linux系统的知识,可以考虑将系统用户数据分离的原则进行分区。

  • 系统:linux系统根目录(/)、引导系统(/boot)
  • 用户数据:用户家目录(/home)、用户工具链(/usr)

这样做的好处在于系统崩了重装或备份还原时,就不会牵连到用户的数据,/usr用户工具链装冲突了也不影响系统,系统引导出问题了修复引导就行了。下面是我的分区策略供大家参考。

目录 分区格式 分区大小
/ 主分区 20G
/boot 主分区 600MB
/usr 逻辑分区 80G
/home 逻辑分区 100G
未知 逻辑分区 剩余大小

另外提一点,关于/swap分区,它是物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,借给程序使用的。所以一般内存够用没必要划这个分区,我建议不要拿硬盘寿命换内存条寿命。

还原

还原时记得按原来设置的文件系统格式选择对应的分区,然后需要reset的分区点上初始化选项即可。


  1. 1.fh是file system的缩写,这是Ubuntu文件系统手册链接
  2. 2.fhs是Filesystem Hierarchy Standard的缩写,这是官方文档地址