4.3. 硬盘分区

为什么要分区? 嗯,虽然完全有可能在单分区系统上运行一个功能完善的 Linux 系统,而且实际上这种方式配置起来更容易一些,但是将一个或多个存储设备分区为多个分区有很多好处。

虽然 Linux 在只有一个大型分区的磁盘上也能正常运行,但至少为四个主要文件系统(根目录、usr、home 和 swap)分区磁盘有几个优点。 这些优点包括

首先,它可以减少执行文件系统检查所需的时间(启动时和手动执行 fsck 时),因为这些检查可以并行完成。(顺便说一句,永远不要在已挂载的文件系统上运行 fsck!!!你几乎肯定会后悔对它所做的事情。 除非文件系统以只读方式挂载,否则这是一个例外,在这种情况下这样做是安全的。)此外,在具有多个分区的系统上,文件系统检查更容易执行。 例如,如果我知道我的 /home 分区有问题,我可以简单地卸载它,执行文件系统检查,然后重新挂载修复后的文件系统(而不是使用救援软盘以单用户模式启动系统并进行修复)。

其次,使用多个分区,您可以根据需要将一个或多个分区挂载为只读。 例如,如果您确定 /usr 中的所有内容即使是 root 用户也不会触及,则可以将 /usr 分区挂载为只读。

最后,分区提供的最重要的好处是保护您的文件系统。 如果文件系统发生意外(无论是用户错误还是系统故障),在分区系统上,您可能只会丢失单个文件系统上的文件。 在非分区系统上,您可能会丢失所有文件系统上的文件。

这个小事实可能是一个很大的优势。 例如,如果您的根分区损坏到无法启动的程度,您基本上可以从救援软盘集启动,挂载您的根分区,并将您可以复制的内容(或从备份恢复;有关如何备份和恢复文件的详细信息,请参阅第 8 章),复制到另一个分区(例如 home),然后再次使用紧急启动盘重新启动,输入 mount root=/dev/hda3(假设包含您的临时根文件系统的分区位于 hda 的第三个分区上)并启动您的功能齐全的 Linux 机器。 然后您可以在未挂载的损坏的根分区上运行 fsck。

曾经有过文件系统灾难的亲身经历,我非常感谢由于使用了多个分区而限制了损失。

最后,由于 Linux 允许您设置其他操作系统(例如 Windows 95/98/NT、BeOS 或其他),然后双启动(或三启动,...)您的系统,您可能希望设置额外的分区来利用这一点。 通常,您会希望为每个操作系统至少设置一个单独的分区。 Linux 包括一个不错的引导加载程序(在基于 Intel 的系统上称为 LILO,尽管在 Alpha 上有非常相似的 MILO,在 Sparc 上有 SILO),它允许您指定在开机时要引导哪个操作系统,并为您最喜欢的操作系统(可能是 Linux,对吧?)设置超时默认引导。

您应该根据自己的需要对磁盘(或多个磁盘)进行分区。 根据我在 Intel、Alpha 和 Sparc 平台上的经验,对于一个功能相当齐全的系统(功能方面),执行相当多的任务(作为家庭桌面系统或工作场所的 Internet 服务器),我发现以下空间近似值对于确定分区大小非常有效。

Given:

A given disk of X Mb/Gb          (eg. 2 Gb)
(Or, more than one disk with a combined total of X Mb/Gb)

Calculate:

(swap) about double main RAM     (eg. 64 Mb system gets 128 Mb swap)
/ (root)  about 10% of available (eg. 200 Mb)
/home about 20% of available     (eg. 400 Mb)
/usr any remaining space         (eg. 1272 Mb)

/var (optional -- see below)
/boot (optional -- see below)
/archive (optional -- see below)

当然,以上数量仅为近似指南。 显然,您需要根据您将 Linux 系统用于什么用途来稍微调整这些百分比。 如果您要进行添加大量庞大应用程序(如 WordPerfect 或 Netscape),或者可能添加日语字符支持之类的操作,您可能会从更多的 /usr 空间中受益。

总是似乎在 /home 上有大量可用空间,因此如果您的用户不做太多事情(或者您施加了严格的配额大小),或者您不提供 shell 帐户和个人网页等,您可能会减少 /home 空间并增加 /usr 空间。

以下是各种挂载点和文件系统信息的描述,这可能会让您更好地了解如何最好地为自己的需求定义分区大小

随着添加额外的驱动器,可以将更多的分区添加到新驱动器,并根据需要挂载到各种挂载点 - 这意味着 Linux 系统永远不必担心空间不足。 例如,如果将来很明显 sda6 开始被填满,我们可以添加另一个驱动器,设置一个大小合适的分区,并将挂载点设置为 /usr/local - 然后将 /usr/local 中的所有信息传输到新驱动器。 但是,由于 Linux 会看到 /usr/local,无论它位于何处,因此任何系统或应用程序组件都不会 “崩溃”

为了给您一个关于如何设置分区的示例,我在 Intel 系统(双启动,Windows 95 和 Linux)上使用了以下分区方案

   Device Boot   Begin    Start      End   Blocks   Id  System
/dev/hda1  *         1        1      254  1024096+   6  DOS 16-bit >=32M
/dev/hda2          255      255      782  2128896    5  Extended
/dev/hda5          255      255      331   310432+  83  Linux native
/dev/hda6          332      332      636  1229728+  83  Linux native
/dev/hda7          637      637      749   455584+  83  Linux native
/dev/hda8          750      750      782   133024+  82  Linux swap

第一个分区 /dev/hda1 是一个 DOS 格式的文件系统,用于存储备用操作系统(Windows 95)。 这为我提供了 1 Gb 的空间用于该操作系统。

第二个分区 /dev/hda2 是一个物理分区(称为 “扩展”),它包含驱动器上的剩余空间。 它仅用于封装剩余的逻辑分区(一个磁盘上只能有 4 个物理分区;在我的情况下,我需要超过 4 个分区,因此我不得不为其他分区使用逻辑分区方案)。

第三到第五个分区 /dev/hda5/dev/hda6/dev/hda7 都是 e2fs 格式的文件系统,分别用于 /(根目录)、/usr 和 /home 分区。

最后,第六个分区 /dev/hda8 用于 swap 分区。

对于另一个示例,这次是一个带有两个硬盘驱动器的 Alpha 机器(仅单独启动,仅 Linux),我选择了以下分区方案

   Device Boot   Begin    Start      End   Blocks   Id  System
/dev/sda1            1        1        1     2046    4  DOS 16-bit <32M
/dev/sda2            2        2      168   346859   83  Linux native
/dev/sda3          169      169      231   130851   82  Linux swap
/dev/sda4          232      232     1009  1615906    5  Extended
/dev/sda5          232      232      398   346828   83  Linux native
/dev/sda6          399      399     1009  1269016   83  Linux native
/dev/sdb1            1        1      509  2114355   83  Linux native
/dev/sdb2          510      510     1019  2118540   83  Linux native

第一个分区 /dev/sda1 是一个 DOS 格式的文件系统,用于存储 MILO 引导加载程序。 Alpha 平台的启动方法与 Intel 系统略有不同,因此 Linux 将其引导信息存储在 FAT 分区中。 此分区只需要与允许的最小分区一样大 - 在这种情况下为 2Mb。

第二个分区 /dev/sda2 是一个 e2fs 格式的文件系统,用于 /(根目录)分区。

第三个分区 /dev/sda3 用于 swap 分区。

第四个分区 /dev/sda4 是一个 “扩展” 分区(有关详细信息,请参阅上一个示例)。

第五个和第六个分区 /dev/sda5/dev/sda6 是 e2fs 格式的文件系统,分别用于 /home 和 /usr 分区。

第七个分区 /dev/sdb1 是一个 e2fs 格式的文件系统,用于 /archive 分区。

第八个也是最后一个分区 /dev/sdb2 是一个 e2fs 格式的文件系统,用于 /archive2 分区。

在完成分区信息的设置后,您需要将新分区写入磁盘。 在此之后,Red Hat 安装程序会将分区表重新加载到内存中,以便您可以继续执行安装过程的下一步。