4. 准备磁盘

内容:

4.a. 块设备介绍

块设备

我们要好好了解下Gentoo Linux以及普通Linux中有关磁盘方面的知识,包括Linux文件系统、分区和块设备。然后,一旦你熟悉了磁盘和文件的方方面面,我们将会指导你设置分区和文件系统,为你安装Gentoo Linux做好准备。

一开始我们先介绍块设备。最有名的块设备可能就是Linux系统中表示第一个IDE硬盘的/dev/sda。SCSI硬盘和Serial ATA硬盘都是/dev/sda。如果你正在使用内核里新的libata架构,即便IDE硬盘也会是/dev/sd*。如果你用的是旧的设备架构,你的第一个IDE硬盘将是/dev/hda

上面介绍的块设备代表磁盘的抽象接口。用户程序可以使用这些块设备来与你的磁盘进行交互,而不用理会你的驱动器到底是IDE、SCSI还是其他的。程序可以把磁盘当作一系列连续的、可随机访问的512字节大小的块来访问。

分区

尽管在理论上可以使用一整块磁盘来安装你的Linux系统,但是在实际中几乎从不这样做。相反,整个磁盘块设备被分割成更小、更容易管理的块设备。在x86系统中,这些被称作分区

分区有三种类型:主分区扩展分区逻辑分区

主分区是把自己的信息储存在MBR(主引导记录)中的分区。由于MBR非常小(512个字节),所以仅可以定义4个主分区(例如,/dev/sda1/dev/sda4)。

扩展分区是一种特殊的主分区(意味着扩展分区必须是4个可能的主分区之一),它包含着更多的分区。这种分区最初并不存在,但是由于4个主分区太少了,为了能划分更多的分区,在保持向后的兼容性的前提下扩展分区诞生了。

逻辑分区是在扩展分区内部的分区。它们的定义不在MBR中,而是在扩展分区中。

高级存储

此x86安装光盘提供了对EVMS和LVM2的支持。EVMS和LVM2提高了你的分区设置的灵活性。在安装指南中,我们将把精力集中在“常规”分区上,但是了解一下我们支持EVMS和LVM2也是有好处的。

4.b. 设计分区方案

默认分区方案

如果你没有兴趣为你的系统设计分区方案,你可以使用我们在本手册中使用的方案:

分区 文件系统 大小 说明
/dev/sda1 ext2 32M 启动分区
/dev/sda2 (swap) 512M 交换分区
/dev/sda3 ext3 剩余磁盘 根分区

如果你想知道一个分区应该多大,或者你需要多少个分区,继续阅读。否则请阅读使用fdisk来为你的磁盘分区来给你的磁盘分区。

多少和多大?

分区的数目主要根据你的系统环境来决定。例如,如果你有很多用户,你可能更希望把你的/home目录独立出来,因为这样做可以增加安全性,备份起来也更容易。如果你安装Gentoo用来做邮件服务器,你的/var目录应该独立出来,因为邮件都存储在/var目录中。选择一个好的文件系统将最大限度地提高你的系统性能。游戏服务器应该把/opt目录独立出来,因为大多数游戏服务端软件都安装在那。理由也与/home目录类似:安全与备份。你一定要使/usr 目录保持足够大:因为它将不仅包含大部分应用程序,而且Portage树本身就需要大约500M空间,这还不包括存储在其中的各种源代码包。

正如你所看到的,这完全取决于你想要达到什么目的。独立的分区或卷有以下优点:

然而,多分区系统有一大缺点:如果配置的不合理,可能导致系统中一个分区有很大的空闲空间,而另一个没有空闲空间了。SCSI和SATA还有15个分区的限制。

作为分区的例子,我们向你示范一个用于演示的有20GB磁盘的笔记本(包含网站服务器、邮件服务器、gnome……):

代码 2.1: 文件系统使用实例

$ df -h
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/sda5     ext3    509M  132M  351M  28% /
/dev/sda2     ext3    5.0G  3.0G  1.8G  63% /home
/dev/sda7     ext3    7.9G  6.2G  1.3G  83% /usr
/dev/sda8     ext3   1011M  483M  477M  51% /opt
/dev/sda9     ext3    2.0G  607M  1.3G  32% /var
/dev/sda1     ext2     51M   17M   31M  36% /boot
/dev/sda6     swap    516M   12M  504M   2% <not mounted>
(留作它用的未分配空间:2GB)

这里的/usr快满了(使用了83%),但是一旦所有的软件都安装好了,/usr目录就不会如此的增长了。尽管分配给/var目录的空间看似过多了,但是要记住,Portage默认使用这个分区来编译软件包。如果你想使你的/var目录保持一个合理的大小,如1GB,你需要更改/etc/make.conf 文件中的PORTAGE_TMPDIR来指定一个拥有足够的空闲空间的分区,用以编译诸如OpenOffice这样巨大的软件包。

4.c. 使用fdisk来为你的磁盘分区

下面来解释如何创建前面说明的那个示例分区布局,即:

分区 说明
/dev/sda1 启动分区
/dev/sda2 交换分区
/dev/sda3 根分区

根据你自己的喜好来改变分区布局。

查看当前分区布局

fdisk是一个流行且强大的工具,用来把你的磁盘划分为分区。启动你磁盘上fdisk程序(在示例中,我们使用/dev/sda):

代码 3.1: 启动fdisk

# fdisk /dev/sda

一旦启动到fdisk中,你将看到如下提示:

代码 3.2: fdisk提示

Command (m for help): 

键入p来显示你的磁盘的当前分区配置:

代码 3.3: 分区配置示例

Command (m for help): p

Disk /dev/sda: 240 heads, 63 sectors, 2184 cylinders
Units = cylinders of 15120 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/sda1   *         1        14    105808+  83  Linux
/dev/sda2            15        49    264600   82  Linux swap
/dev/sda3            50        70    158760   83  Linux
/dev/sda4            71      2184  15981840    5  Extended
/dev/sda5            71       209   1050808+  83  Linux
/dev/sda6           210       348   1050808+  83  Linux
/dev/sda7           349       626   2101648+  83  Linux
/dev/sda8           627       904   2101648+  83  Linux
/dev/sda9           905      2184   9676768+  83  Linux

Command (m for help): 

这个磁盘配置包含了7个Linux文件系统(每个对应于列表中名为“Linux”的分区)及一个交换分区(列表中的“Linux swap”)。

删除所有分区

首先,我们将把磁盘上的所有分区删除。键入d来删除一个分区。例如,要删除存在的/dev/sda1

代码 3.4: 删除分区

Command (m for help): d
Partition number (1-4): 1

该分区就会被列入删除计划。如果你键入p,它也不会再出现了,然而除非你保存了所做的修改,否则它并没有被真正删除。如果你犯了一个错误,想不保存修改并退出,立刻键入q并回车,你分区就不会被删除。

现在,假设你真的想删除你系统中的所有分区,键入p来显示分区列表,然后键入d和要删除的分区的数字,并重复此过程。最后,当分区表中什么也没有的时候你就可以结束了:

代码 3.5: 空的分区表

Disk /dev/sda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

Device Boot    Start       End    Blocks   Id  System

Command (m for help):

现在,内存中的分区表是空的,我们就可以创建分区了。我们将使用前面讨论过的那个默认的分区布局。当然,如果你不想要相同的分区方案就不要按照下面的指令来做!

创建启动分区

首先,我们创建一个小一点的启动分区。键入n创建一个新分区,然后键入p来选择一个主分区,接下来键入1选择第一个主分区。当提示输入第一个柱面的时候,敲回车键。当提示输入最后一个柱面的时候,输入+32M,来创建一个32M大小的分区,并设置它的启动标记:

代码 3.6: 创建启动分区

Command (m for help): n
Command action
  e   extended
  p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-3876, default 1): (按回车)
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-3876, default 3876): +32M

现在,当你键入p时,你应该看到如下的分区输出:

代码 3.7: 已创建的启动分区

Command (m for help): p

Disk /dev/sda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

Device Boot    Start       End    Blocks   Id  System
/dev/sda1          1        14    105808+  83  Linux

我们需要把这个分区设置成可启动的。键入a来给分区添加启动标志,然后键入1。如果你再次按p键,你就会注意到,在“Boot”那一列有个*

创建交换分区

我们现在来创建交换分区。键入n创建一个新分区,然后键入p来告诉fdisk你创建的是主分区。接着输入2来创建第2个主分区,在本例中是/dev/sda2。当提示输入第一个柱面的时候,直接敲回车。当提示输入最后一个柱面的时候,输入+512M来创建一个512MB大小的分区。在这之后,键入t来设置分区类型,键入2选择你刚刚创建的那个分区,然后再输入82把分区类型设置成“Linux Swap”。完成以上这些步骤之后,键入p,应该显示一个与下面类似的分区表:

代码 3.8: 创建交换分区后的分区列表

Command (m for help): p

Disk /dev/sda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

Device Boot    Start       End    Blocks   Id  System
/dev/sda1 *        1        14    105808+  83  Linux
/dev/sda2         15        81    506520   82  Linux swap

创建根分区

最后,我们来创建根分区。键入n创建一个新分区,然后键入p来告诉fdisk你创建的是主分区。接着输入3来创建第3个主分区,在本例中是/dev/sda3。当提示输入第一个柱面的时候,直接敲回车。当提示输入最后一个柱面的时候,单击回车把你磁盘上的剩余空间创建一个分区。完成以上这些步骤之后,键入p,应该显示一个与下面类似的分区表:

代码 3.9: 创建根分区后的分区列表

Command (m for help): p

Disk /dev/sda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

Device Boot    Start       End    Blocks   Id  System
/dev/sda1 *        1        14    105808+  83  Linux
/dev/sda2         15        81    506520   82  Linux swap
/dev/sda3         82      3876  28690200   83  Linux

保存分区布局

键入w来保存分区布局并退出fdisk

代码 3.10: 保存并退出fdisk

Command (m for help): w

现在分区已经创建完毕,你可以继续创建文件系统

4.d. 创建文件系统

介绍

你的分区已经创建完了,现在可以在上面安装文件系统了。如果你并不介意选择何种文件系统,而且乐意使用本手册中所使用的默认设置,请阅读在分区上应用文件系统。否则,继续阅读本文来了解可用的文件系统……

文件系统

Linux内核支持各种各样的文件系统。我们将介绍ext2、ext3、ReiserFS、XFS和JFS,因为它们是Linux系统中使用最普遍的文件系统。

ext2是经考验证明可靠的Linux文件系统,但是没有元数据日志,这意味这在启动系统时的ext2文件系统的日常检查相当耗时。现在相当一部分的新一代的日志文件系统都可以非常迅速检查一致性,因此比那些非日志文件系统更受欢迎。当你启动系统碰巧遇到文件系统状态不一致时,日志文件系统不会在那里耽搁很长时间。如果你要在一个很小的硬盘(小于4G)上装Gentoo,那么你需要在创建ext2文件系统时预留足够的inode,执行此命令mke2fs -T small /dev/<device>.

ext3是ext2文件系统的带日志版本,提供了元数据日志模式以快速恢复数据。此外还提供了其他增强的日志模式,如完整数据日志模式和有序数据日志模式。它使用了HTree索引,在几乎所有的情况下都能保持高性能。简而言之,ext3是非常好及可靠的文件系统。如果你要在一个很小的硬盘(小于4G)上装Gentoo,那么你需要在创建ext2文件系统时预留足够的inode,执行此命令mke2fs -T small /dev/<device>

JFS是IBM的高性能日志文件系统。JFS是一个轻量级的、快速的和稳定的基于B+树的文件系统,在很多情况下都有很好的表现。

ReiserFS是基于B+树的文件系统,它有着非常全面的性能,特别时在处理很多小文件的时候,虽然会占用多一点CPU。ReiserFS相比其他文件系统显得受维护的不够。

XFS是一种带元数据日志的文件系统,它有一个健壮的特性集,并且对可伸缩性进行了优化。XFS似乎对各种各样的硬件问题显得不够宽容。

在分区上应用文件系统

要在分区或卷上创建文件系统,对于每种可能的文件系统都有专门的工具。

文件系统 创建命令
ext2 mke2fs
ext3 mke2fs -j
reiserfs mkreiserfs
xfs mkfs.xfs
jfs mkfs.jfs

例如,要使启动分区(本例中的/dev/sda1)为ext2和根分区(本例中的/dev/sda3)为ext3,应该这样做:

代码 4.1: 在分区上应用文件系统

# mke2fs /dev/sda1
# mke2fs -j /dev/sda3

现在在你新建的分区(或逻辑卷)上创建文件系统。

激活交换分区

mkswap是初始化交换分区的命令:

代码 4.2: 创建交换分区标志

# mkswap /dev/sda2

使用swapon命令来激活交换分区:

代码 4.3: 激活交换分区

# swapon /dev/sda2

使用上面提到的命令来创建和激活交换分区。

4.e. 挂载

现在你的分区都已经初始化了,并且安装了文件系统,是时候来挂载这些分区了。使用mount命令进行挂载。别忘记为每个你创建的分区建立所需的挂载目录。作为例子,我们来挂载根分区和启动分区:

代码 5.1: 挂载分区

# mount /dev/sda3 /mnt/gentoo
# mkdir /mnt/gentoo/boot
# mount /dev/sda1 /mnt/gentoo/boot

注意: 如果你希望/tmp目录在一个独立的分区上,确保在挂载之后修改它的权限:chmod 1777 /mnt/gentoo/tmp。这同样适用于/var/tmp目录。

我们还需要在/proc目录上挂载proc文件系统(内核的虚拟接口)。但是,我们首先需要把我们的文件放到分区上。

请继续阅读安装Gentoo安装文件