背景

最近重装了 ubuntu 操作系统,主要是为了更换磁盘分区方案。

自从入坑了深度学习,尤其是大量使用 CUDA 和 docker 之后,老的磁盘分区方案越来越捉襟见肘,严重影响了开发效率,是时候换个新的方案了。

老的分区方案,用了接近 10 年。2010 年前后,刚入坑 Linux 时,基于当时的 best practice 整理了这套方案,用到现在也算是功成身退了。

经典分区方案的问题

我的上一代磁盘分区方案,共 4 个分区,划分如下:

  • / 30G,装操作系统
  • swap 4G,swap 分区
  • /home 200G
  • /mnt 剩下的所有空间。放各种不常用的数据

系统盘 30G 不够用

大量使用 CUDA 和 docker 以后,特别明显。

  1. CUDA 特别大,一个版本 1-2G。为了跑开源的老代码,需要装好几个版本。
  2. docker 镜像默认存在系统盘,几十个镜像的磁盘占用,也很可观。尤其是,有的镜像做的不讲究,一个镜像也能占 4G。

可以通过修改默认参数把大软件、docker image 装到其他分区,但不想折腾。

现在磁盘空间越来越大,价格越来越便宜。努力把系统盘继续控制在 30G 以内,看不到这么做的意义。

/home 还需要单独分区吗

home 放在单独的分区,是持续了很多年前的主流做法。主要是为了重装系统的时候能保留个性化配置和个人数据,只更新操作系统即可。但我基本没有享受过收益。问题倒是踩过一些:

  1. home 的下的个性化配置文件,总有一些自动生成的,根本看不懂。坚持 10 年,你一定会踩到不兼容的坑。一直带着这些老文件,不敢删也不敢升级,出了问题也不知道怎么查起。这是历史包袱,不是资产。
  2. 2020 年代了,每个人手里都一堆机器,公司里分配一堆机器。关键的个性化配置都有自己的一套方法在维护,在新机器上重新 setup 并不复杂。根本不需要依赖重装系统的时候保留 home 分区这种上古做法。
  3. 大的数据,经常有多机之间共享的需求,一般放在 /mnt/ 下面,开 NFS server。如果在 home 目录下,就不安全,也不方便。

简单来说,home 目录的定位变了,备份没那么重要了。

我觉得,不需要给 home 单独分区了。

/mnt 分小了

/home 和 /mnt 两个分区,各剩 50G 时,遇到 60G 的数据,就很尴尬。

好多年前,windows 都是 4 个分区,可能很多刚毕业的同学都没见过。
那个时候,受限于技术水平,无法管理超大分区。最大好像是单个分区不建议超过 40G(?)。
从 vista/windows 7 开始,最佳实践变了,改成:操作系统一个分区,剩下的用一个分区。

技术进步了,一个大分区,相对于多个分散的小分区,管理更容易了,利用效率也会更高。

一些值得讨论的

SWAP 分区

关于 swap 分区的大小,一直以来都是建议,使用内存大小的 1.5 倍,最大分配 4G。

现在基本没有 4G 内存以下的机器,所以都无脑分配 4G swap 分区即可。

参考资料:

2020 年代的新分区方案

  1. home 和操作系统一个分区,日常使用,放临时数据等。不放大数据,单个文件、目录 10G 以上,称为大。重装系统时,简单备份 home 即可。
  2. 除去 swap 等功能分区,剩下的作为一个大分区,挂载到 /mnt 下。作为长期数据的存储盘。重装系统时,尽量不动,保留。

我正在用的分区设置如下:

看这个新方案,能否再用 10 年。