Appearance
Linux 分区指南
1. Linux 文件系统结构介绍
Linux 操作系统有一些固定的目录。各种 Linux 发行版的目录结构虽然不会一模一样,但是不会有很大差异。知道了这些目录的作用,不仅对你进行磁盘分区规划很有帮助,而且会让你以后的日常维护工作变得轻松。
Ubuntu 文件系统的主要目录如下表所示:
| 目录 | 英文全名 | 用途 |
|---|---|---|
/ | / | 整个目录结构的起始点,所有其它文件和目录都在它下面 |
/bin | Binaries | 用来存放最常用的二进制命令 |
/boot | Boot | 包含引导 Linux 的主要文件,如 grub 和内核文件等 |
/dev | Devices | 所有设备都在该目录下,包括硬盘和显示器等 |
/etc | etc | 系统的所有配置文件都放在它下面 |
/home | Home | 存放各用户的主目录 $HOME 及其文件和配置 |
/lib | Libraries | 系统的库文件,有点像 Windows 的 Program Files |
/lost+found | lost+found | 存放系统异常时丢失的文件(如突然宕机),以利于恢复 |
/media | Media | 加载各种媒体,如光盘、软盘等 |
/mnt | Mount | 加载各种文件系统 |
/opt | Optionally | 用于存放安装的 “可选” 程序 |
/proc | Processes | 包含进程等信息,是内存的映射,不是真实目录 |
/root | Root | 该目录是 root 用户的根目录 |
/sbin | System-only binaries | 存放系统专用的二进制命令 |
/sys | System | 存放系统信息 |
/tmp | Temporary files | 存放临时文件 |
/usr | Unix System Resource / User | 这个目录在早期 Unix 系统中曾经是用户的家目录,但现在已经演变为存放用户级别程序和数据的地方 |
/var | Variable files | 存放那些在时间、大小、内容上会经常变化的文件 |
表中各个目录的用途,你应该很了解才行。只要了解了各个目录的用途,你才能在硬盘分区时不至于犯下大的错误。
1.1. “分区” 和 “挂载点”
平时,我们在讨论 Linux 的 “分区” 时,常常混淆 “挂载点” 和 “分区” 的概念。其实只要大家都能明白就可以,不必抠字眼。不过,作为 Linux 系统管理员,我们还是应该弄明白这两个概念的差别。
我们平常所说的 “/var 分区”,实际上说的是 “挂载在 /var 上的分区”,而 “/var” 只是一个挂载点。那么什么是 “分区” 呢?
在 Linux 中,“分区” 是一个一个的设备,放在 /dev 目录下。如果说 IDE 硬盘,它们的名字应该是 /dev/hda1、/dev/hda2 等;如果说 SATA 或者 SCSI 硬盘,它们的名字则是 /dev/sda1、/dev/sda2 等。
1.2. 硬盘分区的表示方法
那么什么是 hda 和 sda 呢?它们分别是 Hard Driver Number A 和 SCSI Driver Number A 的简写,也就是说,hd 和 sd 指出了硬盘的接口类型,后面的 a 则是序号,表示第几块硬盘。第 1 块 IDE 硬盘是 hda,第 2 块 IDE 硬盘是 hdb,依此类推;第 1 块 SCSI 硬盘用 sda 表示,那么第 2 块 SCSI 就是用 sdb 表示了,依此类推,往后则是 sdc、sdd 等。
实际上,sd 表示的不仅仅是 SCSI 设备。除了 IDE 设备外,SCSI、SATA、USB、Firewire 等接口的存储设备都是以 sd 表示的。
现在你应该已经知道,/dev/sdb2 指的是第 2 块 SCSI 硬盘的第 2 个分区,而 /dev/hda5 指的是第 1 块 IDE 硬盘的第 5 个分区。
| IDE 接口硬盘 | SCSI 接口硬盘 | |
|---|---|---|
| 整个硬盘的表示方法 | /dev/hda/dev/hdb/dev/hdc… | /dev/sda/dev/sdb/dev/sdc… |
| 硬盘分区的表示方法 | /dev/hda1, /dev/hda2 …/dev/hdb1, /dev/hdb2 …/dev/hdc1, /dev/hdc2 … | /dev/sda1, /dev/sda2 …/dev/sdb1, /dev/sdb2 …/dev/sdc1, /dev/sdc2 … |
旧版本的 Linux 内核中,所有 IDE 相关的驱动代码,不仅过于复杂,而且问题多多。于是,Linux 内核的开发者们从 Kernel 2.6.19 开始,提供了基于 libata 的 PATA 驱动程序,使得 IDE 设备可以像 SCSI 设备那样使用。
所以,我们现在所使用的 Ubuntu 中,无论你使用的是 IDE 硬盘还是 SATA 硬盘,你看到的设备都是 /dev/sdx 而不是 /dev/hdx。从此,/dev/hdx 不复存在。
需要注意的是,在 Linux 中,硬盘分区还有另外一种表示方法,这种方法是在 grub 中使用的。grub 起源于 Grand Unified Bootloader,是一个通用的计算机引导器,支持多种操作系统的多重引导。在 grub 中,不管是什么接口的存储设备,统统用 hdx 来表示,其中 x 是数字,从 0 开始。比如,第 1 块硬盘的第 1 个分区,表示为 (hd0,0)。
2. Linux 分区指南
使用任何 Linux 系统,都要有至少两个分区:一个是根分区,用 “/” 表示;另一个是 swap(交换)分区。所以,最简单的分区方法就是:先创建 swap 分区,剩下的所有空间分配给根分区 “/”。
swap 分区的尺寸,最小应该和内存一样大,最大一般不超过内存的两倍大小。
swap 分区就像 Windows 的虚拟内存交换文件 pagefile.sys,系统在需要时会把它当作虚拟内存来使用。比方说在运行大型程序时、在内存优化时,或者在系统休眠时。系统休眠时,把整个内存的数据写入 swap 分区,这就是为什么你的 swap 分区的大小至少应该和内存一样大的原因。
此外,最好把 /boot 也单独创建在一个分区上。因为这个目录下的文件比较重要,万一分区损坏,系统可能无法启动。如果单独创建为一个分区,其它分区损坏就不会影响它,从而提高了系统的稳定性。一般情况下,/boot 分区不需要太大,128MB 就足够了。
至于其它分区,就要看你的实际需求了。
比方说,如果你的服务器会有很多用户登录上来放文件,那么 /home 最好单独分区,并给予足够大的空间。
再比方说,如果你的服务器是要放数据库的,这个数据库可能会变得很大,那么 /var 最好单独分区,并给予足够大的空间。因为数据库默认是放在 /var 下面的。
Web 服务器也是一样,因为 Web 页面默认是放在 /var 下面的。所以,如果你认为会有人上传大量的文件,那么最好也要把 /var 单独分区,并给予足够大的空间。
Note
作为服务器,Hiweed 还建议把
/tmp单独作为一个分区。因为大部分应用程序都会向这个目录写入临时文件,虽然每次 Ubuntu 重新启动时这个目录会被清空,但是没有人会动不动重新启动服务器。
3. Linux 分区案例
Hiweed 在帮朋友的公司做系统架构时,在公司内部做了一台开发服务器,在机房里还有 Web 服务器和数据库服务器。
开发服务器是给所以公司开发人员用的,他们要在 “家目录” 中存储大量的文件。平时,他们的工作站在启动时,是会自动将开发服务器上自己的 “家目录” 挂载到本地的。所以,这台服务器的 /home 是用得最多的,而且需要比较大的空间。
此外,由于是开发服务器,我们还需要一个做版本管理的源代码仓库,这个仓库是放在 /var 下面的。虽然源代码的文件尺寸不会特别大,不需要特别大的空间,但是这些代码非常重要,所以我们也要像保护 /boot 那样保护它们。
所以,对于这台开发服务器,我们的分区方案(服务器硬盘共有 80 GB [10 GB],内存为 1 GB [512 MB]),请见下方:
| 文件系统 | 挂载点 | 大小 | 分区格式 |
|---|---|---|---|
/dev/sda1 | /boot | 254 MB [254] | ext2 |
/dev/sda2 | / | 10 GB [2] | ext4 |
/dev/sda5 | (无) | 2 GB [768] | swap |
/dev/sda6 | /var | 20.3 GB [2] | ext4 |
/dev/sda7 | /home | 46.8 GB [4.3] | ext4 |
/dev/sda8 | /tmp | 2 GB [768] | ext4 |
以上分区方案只是一个参考,实际分区方案应该根据自己的实际情况而定。
4. /etc/fstab 介绍
Linux 系统中的所有静态文件系统,全部描述在 /etc/fstab 这个文件中。fstab 是 File System Table 的简写,也就是 “文件系统表”。系统启动时,正是通过 fstab 中的信息挂载各个分区的。fstab 的文件系统条目有 6 个字段,格式如下所示:
| 设备 | 挂载点 | 格式 | 挂载选项 | 是否备份 | 检查顺序 |
|---|---|---|---|---|---|
/dev/sdb2 | /home | Ext4 | Defaults | 0 | 2 |
下面我们来介绍一下每个字段的含义,如下所示:
| 字段 | 描述 |
|---|---|
| 设备 | 存储设备(分区)的名字或者 UUID |
| 挂载点 | 要挂载到的目的文件夹名称。挂载后,从该文件夹即可访问设备 |
| 格式 | 文件系统的格式,如:ext4 |
| 挂载选项 | 挂载的选项。和 mount 命令的选项相同,详情可参考 man mount |
| 是否备份 | 启用/禁用 dump 备份 |