系统分区
在实际开发场景中,一种好的分区策略除了能save your time,很多时候还能save your ass,这点我是深有体会的。
所以我觉得很有必要分享下,自己多年使用和重装系统所得来的经验。我会从硬盘跟Linux系统这两个方向进行介绍,其中会讲解点原理性的东西以便于大家理解。
硬盘
就是存放数据的工具。它的类型主要就机械硬盘跟固态硬盘。
机械硬盘
Hard Disk Drive,简称HDD。它的内部构造可以参考光驱+光盘这个组合,光盘我们都有见过,要用光盘我们需要把它放到一个光驱里,然后就会听到电机转起来的声音,巨吵。这时光盘里的数据就通过光驱读出来了。
而硬盘无非就是一堆光盘叠起来,然后光驱也放到了一起。它跟“光驱+光盘”这个组合的根本区别在于数据的读写形式,如下图所示:
一个用到的原理是光,而另一个是磁。所以一个用到光盘跟激光头,硬盘则是磁盘跟磁头。
固态硬盘
Solid State Drive,简称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]
下面是我的翻译工作:
目录名 | 作用 |
---|---|
/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.fh是file system的缩写,这是Ubuntu文件系统手册链接 ↩
- 2.fhs是Filesystem Hierarchy Standard的缩写,这是官方文档地址 ↩