声明: 本手册已经被新版本代替了,不再被维护。

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系统,实际上几乎从不这么做。相反,完整的磁盘块设备会被分割成更小的,更易管理的块设备。这些被称为分区或者切片

第一个SCSI磁盘上的第一个分区是/dev/sda1,第二个是/dev/sda2依此类推。

Sun系统上的第三个分区被留出来作为一个特殊的切片名为"whole disk"。这个分区不能含有文件系统。

过去使用DOS分区方案的用户须注意Sun的磁盘标签里没有“主分区”和“扩展分区”。而是每个驱动器最多可以有8个分区,其中第三个被保留。

4.b. 设计分区方案

默认分区方案

如果你对制订一个分区方案没有兴趣,那么可以采用下表的建议,一个适合多数系统的方案。

注意,通常不推荐在SPARC上使用一个单独的/boot分区,因为这会使引导器的配置变得复杂。

分区 文件系统 大小 挂载点 描述
/dev/sda1 ext3 <2 GB / 根分区。对于OBP版本稍旧的sparc64系统,这个分区必须小于2G,而且是磁盘上的第一个分区。
/dev/sda2 swap 512 MB none 交换分区。对于bootstrap和某些比较大的编译,需要至少512M的内存(包括交换分区)。
/dev/sda3 none Whole disk none 整个磁盘分区。这是SPARC系统必需的。
/dev/sda4 ext3 至少2G /usr /usr分区。应用程序都安装在这里。默认情况下这个分区还用来保存Portage数据(除去源代码大概占用500M空间)。
/dev/sda5 ext3 至少1G /var /var分区。用来存放程序产生的数据。默认情况下Portage在编译的时候把这个分区作为临时空间。某些大型的应用程序比如Mozilla和OpenOffice.org在编译的时候需要超过1G的临时空间。
/dev/sda6 ext3 剩余的空间 /home /home 分区。用来放用户的家目录。

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

接下来的部分解释了如何创建先前范例中的分区方案,也就是:

分区 描述
/dev/sda1 /
/dev/sda2 swap
/dev/sda3 whole disk slice
/dev/sda4 /usr
/dev/sda5 /var
/dev/sda6 /home

按照需要改变分区方案。记住对于旧的系统请保持根分区在磁盘的前2G以内。还有对于SCSI和SATA硬盘有15个分区的限制。

开始fdisk

用你的磁盘作为参数来启动fdisk:

代码 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 (Sun disk label): 64 heads, 32 sectors, 8635 cylinders
Units = cylinders of 2048 * 512 bytes

   Device Flag    Start       End    Blocks   Id  System
/dev/sda1             0       488    499712   83  Linux native
/dev/sda2           488       976    499712   82  Linux swap
/dev/sda3             0      8635   8842240    5  Whole disk
/dev/sda4           976      1953   1000448   83  Linux native
/dev/sda5          1953      2144    195584   83  Linux native
/dev/sda6          2144      8635   6646784   83  Linux native

注意输出中的Sun disk label。如果没有这个,磁盘将采用DOS分割,而不是Sun分割。在这种情况下,使用s来确保磁盘有一个sun的分区表:

代码 3.4: 创建一个Sun的磁盘标签

Command (m for help): s
Building a new sun disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.

Drive type
   ?   auto configure
   0   custom (with hardware detected defaults)
   a   Quantum ProDrive 80S
   b   Quantum ProDrive 105S
   c   CDC Wren IV 94171-344
   d   IBM DPES-31080
   e   IBM DORS-32160
   f   IBM DNES-318350
   g   SEAGATE ST34371
   h   SUN0104
   i   SUN0207
   j   SUN0327
   k   SUN0340
   l   SUN0424
   m   SUN0535
   n   SUN0669
   o   SUN1.0G
   p   SUN1.05
   q   SUN1.3G
   r   SUN2.1G
   s   IOMEGA Jaz
Select type (? for auto, 0 for custom): 0
Heads (1-1024, default 64): 
Using default value 64
Sectors/track (1-1024, default 32): 
Using default value 32
Cylinders (1-65535, default 8635): 
Using default value 8635
Alternate cylinders (0-65535, default 2): 
Using default value 2
Physical cylinders (0-65535, default 8637): 
Using default value 8637
Rotation speed (rpm) (1-100000, default 5400): 10000
Interleave factor (1-32, default 1): 
Using default value 1
Extra sectors per cylinder (0-32, default 0): 
Using default value 0

你能在磁盘的说明书中找到正确的值。而'auto configure'通常不会起作用。

删除现有的分区

到了删除全部现有分区的时候了。输入d然后回车。你会被提示输入想要删除的分区号。删除一个已经存在的/dev/sda1,你将输入:

代码 3.5: 删除一个分区

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

你不要删除分区3(whole disk)。它是必需的。如果这个分区不存在,请按照前面"创建一个Sun的磁盘标签"的命令来做。

在删掉除Whole disk分区以外的所有分区后,你将有一个和下面相似的分区布局:

代码 3.6: 查看一个空的分区方案

Command (m for help): p

Disk /dev/sda (Sun disk label): 64 heads, 32 sectors, 8635 cylinders
Units = cylinders of 2048 * 512 bytes

   Device Flag    Start       End    Blocks   Id  System
/dev/sda3             0      8635   8842240    5  Whole disk

创建根分区

我们准备好创建根分区了。输入n来创建新的分区,然后输入1来建立分区。当提示第一个柱面的时候,直接回车。当提示最后一个柱面的时候,输入+512M来建立一个512M大小的分区。确定整个根分区在磁盘的前2G以内。你可用在下面看到这些步骤的输出:

代码 3.7: 创建根分区

Command (m for help): n
Partition number (1-8): 1
First cylinder (0-8635): (press Enter)
Last cylinder or +size or +sizeM or +sizeK (0-8635, default 8635): +512M

现在,当你输入p,你应该看见下面这些分区被列出来:

代码 3.8: 列出分区布局

Command (m for help): p

Disk /dev/sda (Sun disk label): 64 heads, 32 sectors, 8635 cylinders
Units = cylinders of 2048 * 512 bytes

   Device Flag    Start       End    Blocks   Id  System
/dev/sda1             0       488    499712   83  Linux native
/dev/sda3             0      8635   8842240    5  Whole disk

创建交换分区

接着,我们来创建交换分区。输入n来创建新分区,然后敲2建立第二个分区,目前是/dev/sda2。当提示第一个柱面的时候,直接回车。当提示最后一个柱面的时候,输入+512M来建立一个512M的分区。做完以后,输入t来设置分区类型,然后输入82把分区类型设为"Linux Swap"。做完这些步骤以后,输入p应该会显示出类似这样的分区表:

代码 3.9: 列出可用的分区

Command (m for help): p

Disk /dev/sda (Sun disk label): 64 heads, 32 sectors, 8635 cylinders
Units = cylinders of 2048 * 512 bytes

   Device Flag    Start       End    Blocks   Id  System
/dev/sda1             0       488    499712   83  Linux native
/dev/sda2           488       976    499712   82  Linux swap
/dev/sda3             0      8635   8842240    5  Whole disk

创建/usr、/var和/home分区

最后,让我们来创建/usr、/var和/home分区。和前面一样,输入n来创建新的分区,然后输入4创建第三个分区,在本例中是/dev/sda4。在提示第一个柱面的时候,敲回车。当提示最后一个柱面的时候,输入+2048M来建立一个大小为2G的分区。对sda5sda6重复这些步骤,并使用需要的大小。一旦你做完了,就可以看到类似如下的东西:

代码 3.10: 列出完整的分区表

Command (m for help): p

Disk /dev/sda (Sun disk label): 64 heads, 32 sectors, 8635 cylinders
Units = cylinders of 2048 * 512 bytes

   Device Flag    Start       End    Blocks   Id  System
/dev/sda1             0       488    499712   83  Linux native
/dev/sda2           488       976    499712   82  Linux swap
/dev/sda3             0      8635   8842240    5  Whole disk
/dev/sda4           976      1953   1000448   83  Linux native
/dev/sda5          1953      2144    195584   83  Linux native
/dev/sda6          2144      8635   6646784   83  Linux native

保存并退出

保存你的分区表并退出fdisk,输入w

代码 3.11: 保存并退出fdisk

Command (m for help): w

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

4.d. 创建文件系统

介绍

现在你的分区已经建好,到了放置文件系统的时候了。如果你不在意使用什么文件系统并且乐意使用本手册的默认选择,那么继续在分区上建立文件系统。否则,接着看下去了解可用的文件系统……

文件系统

有几种文件系统是可以使用的,有一些已知是在SPARC架构上稳定的。比如Ext2和Ext3可以运行的很好。其他文件系统可能不能正常运行。

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>

在分区上建立文件系统

在分区上创建文件系统或者卷,对于选定的文件系统有特定的工具可供使用:

文件系统 创建命令
ext2 mke2fs
ext3 mke2fs -j

举个例子,在根分区(在本例中是/dev/sda1)上创建ext2,在/usr/var/home分区(在本例中分别是/dev/sda456)上建立ext3,你要用:

代码 4.1: 在分区上建立文件系统

# mke2fs /dev/sda1
# mke2fs -j /dev/sda4
# mke2fs -j /dev/sda5
# mke2fs -j /dev/sda6

激活交换分区

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

代码 4.2: 创建交换分区

# mkswap /dev/sda2

要激活交换分区,使用swapon

代码 4.3: 激活交换分区

# swapon /dev/sda2

现在用上述命令创建并激活交换分区。

4.e. 挂载

现在你的分区都已初始化并拥有文件系统,到了用mount命令来挂载他们的时候了。不要忘记先为每个分区创建需要挂载的目录。比如:

代码 5.1: 挂载分区

# mount /dev/sda1 /mnt/gentoo
# mkdir /mnt/gentoo/usr
# mount /dev/sda4 /mnt/gentoo/usr
# mkdir /mnt/gentoo/var
# mount /dev/sda5 /mnt/gentoo/var
# mkdir /mnt/gentoo/home
# mount /dev/sda6 /mnt/gentoo/home

注意: 如果你想把/tmp作为一个单独的分区,请一定在挂载以后修改权限:chmod 1777 /mnt/gentoo/tmp/var/tmp也要这么做。

同样我们需要挂载proc文件系统(一个内核的虚拟接口)到/proc。但是我们需要先把文件放到分区里。

继续安装Gentoo的安装文件