我们要好好了解下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也是有好处的。
如果你没有兴趣为你的系统设计分区方案,你可以使用我们在本手册中使用的方案:
分区 | 文件系统 | 大小 | 说明 |
/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这样巨大的软件包。
下面来解释如何创建前面说明的那个示例分区布局,即:
分区 | 说明 |
/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
|
现在分区已经创建完毕,你可以继续创建文件系统。
你的分区已经创建完了,现在可以在上面安装文件系统了。如果你并不介意选择何种文件系统,而且乐意使用本手册中所使用的默认设置,请阅读在分区上应用文件系统。否则,继续阅读本文来了解可用的文件系统……
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
|
使用上面提到的命令来创建和激活交换分区。
现在你的分区都已经初始化了,并且安装了文件系统,是时候来挂载这些分区了。使用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安装文件。
本文档的内容遵循知识共享-署名-相同方式共享许可协议