附录 E. 磁盘分区简介

磁盘分区长期以来一直是个人计算机领域中的一项基本必备知识。然而,由于越来越多的人开始购买带有预安装的操作系统的计算机,相对来说,只有极少人理解分区的原理。本章试图解释分区的原因以及用法,从而使你能够尽可能简便轻松地安装 Red Hat Linux。

如果你对磁盘分区已有足够的了解,你可以直接跳到第 E.1.4 节来阅读关于如何腾出磁盘空间来准备 Red Hat Linux 安装的信息。本节还将讨论 Linux 系统使用的分区命名方案,与其它操作系统共用磁盘,以及其它相关课题。

E.1. 硬盘基本概念

硬盘功能极为简单 — 它们被用来可靠地储存及检索数据。

在讨论磁盘分区之类的问题时,了解一些基础硬件知识至关重要,然而,这又极容易使人陷入小节,忽略全局。因此,本附录使用了一种简化的磁盘驱动器图表来解释磁盘分区后的情形。图 E-1显示了一个崭新的、未曾使用的磁盘驱动器。

图 E-1. 未使用过的磁盘驱动器

没什么可看的,是不是?不过,若我们仅在一个最基本的层次上讨论磁盘驱动器,此图表已足够。假设我们要在这个磁盘驱动器上面储存一些数据,就目前而言,这还不行。我们首先要做一些准备工作…

E.1.1. 不是你写入什么,而是你怎么写入

有经验的计算机用户可能对此心中有数。我们需要格式化(format)这个驱动器。格式化又称“制作文件系统(file system)”,它是一个将信息写入驱动器,在未经格式化的驱动器内的空白空间中建立秩序的过程。

图 E-2. 有文件系统的磁盘驱动器

图 E-2所暗示,文件系统所建立的秩序牵涉到一些利弊得失:

  • 驱动器上极小的一部分可用空间被用来储存与文件系统有关的数据,这可以被视作管理费用。

  • 文件系统将剩余空间分割成小块的,大小统一的段。在 Linux 中,这些段被称为块(block)[1]

由于文件系统带来创建目录和文件的可能性,以上牺牲可以被看作所需付出的一个很小的代价。

还有一点值得注意的是,统一通用的文件系统并不存在。如图 E-3所示,一个磁盘驱动器上可以有许多不同类型的文件系统。你可能也猜得到,不同类型的文件系统通常是不兼容的。这意味着,支持某种文件系统(或几种相关的文件系统类型)的操作系统可能不支持其它类型的文件系统。不过,最后那句话并非是一个不折不扣的定理。例如,Red Hat Linux 支持的文件系统类型比较广泛(包括许多其它操作系统常用的文件系统),从而使不同文件系统之间的数据交换变得容易多了。

图 E-3. 含有不同文件系统的磁盘驱动器

当然,将文件系统写入磁盘仅仅是一个开端。这个过程的目标实际上是储存并且检索数据。写入一些文件后,让我们再来看一看磁盘。

图 E-4. 已写入数据的磁盘驱动器

图 E-4所示,14 个先前空白的块现在已被写入数据。然而,单看以上图示,我们无法判定在这个驱动器上究竟有多少个文件。可能少到只有一个文件,也可能多到 14 个文件,因为所有的文件至少要使用一个块,有些需要几个块。还有一个要注意的要点是,所使用的块不必构成一处连续的区域;使用的和未使用的块可以交错散布。这就是通称的碎段(fragmentation)。碎段会对试图改变已存分区大小有一定的影响。

如同许多与计算机相关的科技,磁盘驱动器自问世后一直在不断地变化。特别是,它们越来越大。不是实际尺寸越来越大,而是它们储存信息的能力越来越大。这种新增的容量导致了磁盘驱动器使用方法的根本改变。

E.1.2. 分区:将一个驱动器变成多个驱动器

由于磁盘驱动器容量的不断增大,一些人开始质问将所有格式化的空间并为一大块是否明智。这一类想法的动机有哲学上的,也有技术上的。从哲学角度上讲,一个较大的磁盘驱动器所提供的额外空间若超过了一定的大小似乎只会造成更多的杂乱无章。从技术角度上讲,某些文件系统不是为支持大于一定容量的磁盘驱动器而设计的。或者,某些文件系统可能会支持拥有巨大容量的较大的驱动器,但是由文件系统跟踪文件所强加于上的管理费用也随之变得过高过大。

解决这个问题的办法是将磁盘划分为分区 (partition)。每一分区都可以像一个独立的磁盘一样被访问。这是通过添加分区表(partition table)来做到的。

注记注记
 

虽然本章图表中所显示的分区表和实际磁盘驱动器是分开的,这并不完全正确。事实上,分区表被保存在磁盘的最起首,在任何文件系统或用户数据之前。但是为了清楚起见,我们在图表中将之分开。

图 E-5. 带有分区表的磁盘驱动器

图 E-5所示,分区表被分为四个部分。每个部分都装有定义单个分区所必需的信息,这意味着分区表定义的分区不能超过四个。

每个分区表项目都包含着该分区的几项重要的特征:

  • 在磁盘上分区开始和结束的地点(起止点)

  • 分区是否“活跃”

  • 分区的类型

让我们来仔细查看一下每一个特征。起止点实际上定义了分区的大小及在磁盘上的位置。“活跃”标志是被某些操作系统的引导装载程序所用。换一句话说,标为“活跃”的分区上的操作系统将会被引导。

分区类型可能有些不易分辨。 类型是标识分区将会被如何使用的数字。如果这句话听起来有些笼统,那是因为分区类型术语本身也有些笼统。某些操作系统用分区类型来代表一种指定的系统类型,或将分区标为与某个操作系统相关联的分区,或用来指明该分区包含着可引导的操作系统,或是以上三者的结合。

表 E-1中包括了一些常用的(和罕见的)分区类型,以及它们的数值。

分区类型分区类型
空白00Novell Netware 38665
DOS 12-bit FAT01PIC/IX75
XENIX root02Old MINIX80
XENIX usr03Linux/MINUX81
DOS 16-bit <=32M04Linux 交换区82
扩展05Linux Native83
DOS 16-bit >=3206Linux 扩展85
OS/2 HPFS07Amoeba93
AIX08Amoeba BBT94
AIX 可引导09BSD/386a5
OS/2 引导管理器0aOpenBSDa6
Win95 FAT320bNEXTSTEPa7
Win95 FAT32 (LBA)0cBSDI fsb7
Win95 FAT16 (LBA)0eBSDI swapb8
Win95 扩展 (LBA)0fSyrinxc7
Venix 8028640CP/Mdb
Novell51DOS accesse1
Microport52DOS R/Oe3
GNU HURD63DOS secondaryf2
Novell Netware 28664BBTff

表 E-1. 分区类型

到了这一步,你可能会在猜想这些附加的复杂性通常是怎样被使用的。实例请见图 E-6

图 E-6. 只有一个分区的磁盘驱动器

在许多情况下,整个磁盘上只有一个分区,基本上是重复分区以前所使用的方法。分区表内只有一个项目,它指向分区的起点。

我们把此分区标为“DOS”类。虽然它只是列在表 E-1之中的几种可能的分区之一,但也足以达到本附录的讨论目的。这是多数新近购买的带有预装 Microsoft Windows™ 消费者版本的计算机上的典型分区布局。

E.1.3. 分区内的分区 — 扩展分区概述

经过一段时间后,四个分区很明显将不够用。随着磁盘驱动器的不断增大,配置了四个相当大的分区后仍有剩余空间的可能性会越来越大。我们需要有一些创建更多分区的方法。

请进入扩展分区的世界。在表 E-1中你可能已注意到一种分区类型是“扩展”。它就是位于扩展分区核心的分区类型。

当一个分区被建立,其类型被设为“扩展”时,扩展分区表也被创建。简而言之,扩展分区就像一个独立的磁盘驱动器 — 它有自己的分区表,该表指向一个或多个分区——它们现在被称为逻辑分区(logical partitions),与四个主分区(primary partitions) 相对,并完全包含在扩展分区之内。 图 E-7显示了一个磁盘驱动器,其中有一个主分区和一个包含两个逻辑分区的扩展分区(以及一些未分区的空闲空间)。

图 E-7. 带有扩展分区的磁盘驱动器

如图表中所暗示,主分区与逻辑分区之间有一个区别 — 主分区只能有四个,但是可以存在的逻辑分区数量却无固定限制。不过,鉴于分区在 Linux 中可被进入的方式,你应该避免在一个磁盘驱动器上定义 12 个以上逻辑分区。

现在,我们已经大致讨论了分区概念,让我们来看一看如何将这些知识应用到安装 Red Hat Linux 上。

E.1.4. 为 Red Hat Linux 腾挪空间

当你试图为你的硬盘重新分区时,有三种可能的情况:

  • 有可用的未分区的空闲空间

  • 有可用的未使用过的分区

  • 被活跃使用的分区内有可用的空闲空间

让我们依此来看一看每一种情况。

注记注记
 

请记住,以下图解是为清晰起见而经简化的,它们并不反映当你实际安装 Red Hat Linux 时所会遇到的确切分区布局。

E.1.4.1. 使用未经分区的空闲空间

在这种情况下,已定义的分区没有扩展到整个硬盘,它没有包括那些不属于任何定义分区的未分配的空间。图 E-8显示了可能出现的情境。

图 E-8. 带有未分区的空闲空间的磁盘驱动器

如果细想一下,你就会认识到一个未经使用的硬盘也属这种类型。唯一的区别是后者的全部空间都不属于任何定义的分区。

在以上任一情况下,你都可以从未经使用的空间中创建必要的分区。不幸的是,这种情况虽然简单,出现的可能性却不大(除非你为 Red Hat Linux 特意购买了一个新磁盘)。多数预安装的操作系统被配置为占据磁盘驱动器上所有可用空间(参阅第 E.1.4.3 节)。

接下来,我们将讨论一种更普遍的情况。

E.1.4.2. 使用一个未使用过的分区中的空间

在这种情况下,可能有一个或多个分区你已不再使用。可能你过去用过其它的操作系统,而你拨给它的分区似乎已不再被使用。图 E-9显示了这种情况。

图 E-9. 带有未使用分区的磁盘驱动器

如果你发现自己处于这种情况,你可以使用那些拨给未使用过的分区的空间。首先,你应该删除该分区,然后在其上创建相应的 Linux 分区。你既可以用 parted 命令来删除该分区,也可以在安装过程中选择手工创建分区,然后在创建新分区前删除该分区。

E.1.4.3. 使用活跃分区中的空闲空间

这是最常见的情况。不幸的是,这也是最难处理的情况。主要问题是,即便你有足够的空闲空间,它们目前已被分配给一个正在使用中的分区。如果你购买了一个带有预装软件的计算机,很可能整个硬盘是一个单个的带有操作系统和数据的大分区。

除了给你的系统添加一个新硬盘驱动器外,你还有以下两种选择:

破坏性重新分区

简而言之,这种方法让你删除一个大分区而创建几个小一些的分区。你可能想象得到,贮存在原来分区上的所有数据将会被破坏。这意味着你有做完全备份的必要。为你自己的利益着想,请做两个备份,并校验(如果你的备份软件提供了的话)这些备份,在你删除分区之前试着从你的备份中读取数据。

小心小心
 

如果该分区上装有某类操作系统,该操作系统也需要被重新安装。需要注意的是,那些带有预装操作系统售出的计算机可能没有包括重装该系统所需的光盘介质。请在破坏你的原有分区及原有操作系统之前觉查到这一点。

为现存的软件创建了一个较小的分区后,你可以重装这些软件,恢复你的数据,然后继续安装 Red Hat Linux。图 E-10显示了这个过程完成后的情景。

图 E-10. 被破坏性重新分区的磁盘驱动器

小心小心
 

图 E-10所示,没有正确的备份,原有分区内的所有数据将会丢失!

非破坏性重新分区

这要求你运行一个似乎可以“为所不可为”的程序:它会把大分区变小,却不会丢失该分区上的原有文件。许多人都发现这个办法既可靠又简单可行。但是哪一个软件可以帮助你达到这一目的呢?在软件市场上有好几种磁盘管理软件。你应该做一番调查来找到最适合你的情况的一种。

非破坏性分区过程是非常直捷了当的,它包括以下几个步骤:

  • 压缩现存数据

  • 重新划分现存分区的大小

  • 创建新分区

接下来,我们将详细说明每一步骤。

E.1.4.3.1. 压缩现存数据

图 E-11所示,第一步要压缩你现存分区上的数据。原因是将这些数据重新安排后,你将会在该分区“终点”后获得最多的可用空闲空间。

图 E-11. 磁盘驱动器被压缩

这一步骤至关重要。不执行这一步骤,你的数据所在位置可能会阻止分区被重新划分为想要的大小。还请注意的是,由于某种原因,某些数据不能被移动。如果情况如此(这会严重地限制你的新分区的大小),你可能会被迫在你的磁盘上进行破坏性重新分区。

E.1.4.3.2. 重新划分现存分区的大小

图 E-12显示了重新划分分区大小的实际过程。这一过程的结果要依你所使用的软件而定。多数情况下,新空出的空闲空间被用来创建一个与原有分区同类的未格式化的分区。

图 E-12. 分区大小被重新划分的磁盘驱动器

理解你所使用的重新分区软件对新空出的空间的操作是很重要的,只有这样,你才能正确地采取相应措施。在我们示范的情况中,最佳措施是删除新建的 DOS 分区,然后创建恰当的 Linux 分区。

E.1.4.3.3. 创建新分区

如前一步骤所暗示,创建新分区可能必要,也可能没必要。然而,除非你的重新分区软件知道 Linux 的存在,你很可能需要删除在重新划分分区过程中创建的分区。 图 E-13显示了完成后的情景。

图 E-13. 带有最终分区配置的磁盘驱动器

注记注记
 

下列信息是基于 intel 的计算机所特有的。

为了方便用户,我们提供了 parted 工具。它是一个可免费获得的重新划分分区大小的程序。

如果你决定要使用 parted 来重新给你的硬盘驱动器分区,你需要做两件重要的事:

  • 执行备份 — 将你的计算机上重要的数据做两个备份。这些备份应该保存在可移介质上(如磁盘、光盘或磁带),而且你应该在继续前确定它们可以被读取。

  • 阅读文档 — 完整地阅读 parted 文档。请参考《Red Hat Linux 定制指南》中的“管理磁盘贮存区”这一章。

如果你决定要使用 parted,请留意在 parted 运行后,你会有两个分区:一个是你重新划分大小的分区,另一个是 parted 用新空出的空间创建的新分区。如果你的目的是使用新空出的空间来安装 Red Hat Linux,你应该删除新分区。你既可以使用在目前操作系统下的 Windows fdisk 分区工具来删除它,也可以在安装过程中设置分区时删除它。

E.1.5. 分区命名方案

Linux 使用字母和数字的组合来指代磁盘分区。这可能有些使人迷惑不解,特别是如果你以前使用“C 驱动器”这种方法来指代硬盘及它们的分区。在 DOS/Windows 的世界里,分区是用下列方法命名的:

  • 每个分区都被检查过以便判定它是否可被 DOS/Windows 读取。

  • 如果分区类型是兼容的,它会被指派给一个“驱动器字母”。驱动器字母从“C”开始,然后依据要标签的分区数量而按字母顺序推移。

  • 驱动器字母可以用来指代那个分区,也可以用来指带分区所含的文件系统。

Red Hat Linux 使用一种更灵活的命名方案。它所传达的信息比其它操作系统采用的命名方案更多。该命名方案是基于文件的,文件名的格式为:

/dev/xxyN

下面说明了解析分区命名方案的方法:

/dev/

这个字串是所有设备文件所在的目录名。因为分区在硬盘上,而硬盘是设备,所以这些文件代表了在/dev/上所有可能的分区。

xx

分区名的前两个字母标明分区所在设备的类型。通常是 hd (IDE 磁盘)或 sd(SCSI 磁盘)。

y

这个字母标明分区所在的设备。例如,/dev/hda(第一个 IDE 磁盘)或 /dev/sdb(第二个 SCSI 磁盘)

N

最后的数字代表分区。前四个分区(主分区或扩展分区)是用数字从 1 排列到 4。逻辑分区从 5 开始。例如,/dev/hda3 是在第一个 IDE 硬盘上的第三个主分区或扩展分区;/dev/sdb6 是在第二个 SCSI 硬盘上的第二个逻辑分区。

注记注记
 

该命名方案中没有表明分区类型的地方;与 DOS/Windows 不同,所有分区都可在 Red Hat Linux 下被识别。当然,这并不是说 Red Hat Linux 能够访问每一类分区上的数据,但是在许多情况下,访问专用于另一操作系统的分区上的数据是可能的。

请切记以上信息;它会帮助你在设置 Red Hat Linux 所需分区时更容易地理解许多步骤。

E.1.6. 磁盘分区以及其它操作系统

如果你的 Red Hat Linux 分区将会与其它操作系统所用的分区共享一个硬盘,多数情况下,应该没什么问题。不过,某类 Liunx 和其它操作系统的组合需要特别加以注意。

注记注记
 

如果 Red Hat Linux 会和 OS/2 在你的机器上并存,你必须使用 OS/2 分区软件来创建你的磁盘分区 — 否则,OS/2 可能不会识别磁盘分区。在安装中,不要创建任何新分区,但是请使用 Linux parted 为你的 Linux 分区设立正确的分区类型。

注记注记
 

如果你想从 Red Hat Linux 中能够读写 Windows NT、2000、或 XP 分区,不要把 Windows 分区的文件系统类型设为 NTFS。若 Windows 分区的类型是 NTFS,它就不能在 Red Hat Linux 中被读取;若 Windows 分区的类型是 VFAT,它就能够在 Red Hat Linux 中被读取。

如果你有多个 Windows 分区,它们不必都使用同一文件系统类型。如果你的 Windows 中有不止一个分区,你可以把其中之一设为 VFAT,并在其上贮存你想在 Windows 和 Red Hat Linux 间共享的文件。

E.1.7. 磁盘分区和挂载点

令许多 Linux 的新用户感到困惑的一个地方是各分区是如何被 Linux 操作系统使用及访问的。它在 DOS/Windows 中相对来说较为简单。每一分区有一个“驱动器字母”,你用恰当的驱动器字母来指代相应分区上的文件和目录。

这与 Linux 处理分区及磁盘贮存问题的方法截然不同。其主要的区别在于,Linux 中的每一个分区都是构成支持一组文件和目录所必需的贮存区的一部分。它是通过挂载(mounting)来实现的,挂载是将分区关联到某一目录的过程。挂载分区使起始于这个指定目录(通称为挂载点,mount point)的贮存区能够被使用。

例如,如果分区 /dev/hda5 被 挂载在 /usr 上,这意味着所有在 /usr 之下的文件和目录在物理意义上位于 /dev/hda5 上。因此文件 /usr/share/doc/FAQ/txt/Linux-FAQ 被储存在 /dev/hda5上,而文件 /etc/X11/gdm/Sessions/Gnome 却不是。

继续以上的例子,/usr 之下的一个或多个目录还有可能是其它分区的挂载点。例如,某个分区(假设为,/dev/hda7)可以被挂载到 /usr/local 下,这意味着 /usr/local/man/whatis 将位于 /dev/hda7 上而不是 /dev/hda5 上。

E.1.8. 多少个分区?

到了Red Hat Linux 安装筹备工作的这一步,你应该开始考虑一下你的新操作系统所要使用的分区数量及大小。“多少个分区”一直是 Linux 社区中的一个具有争议性的问题,在没有定论之前,可以说可用的分区布局与争论这一问题的人一样多。

鉴于上述情况,除非另有原因,你至少应该创建以下几个分区:swap/boot 以及 /(根)分区。

详情请参阅第 3.19.4 节

小心小心
 

请一定阅读第 E.1.9 节 — 那里所提供的信息也适用于 /boot 分区。

关于各类 Red Hat Linux 分区的正确大小的特定推荐可在第 1.5 节中找到。

E.1.9. 最后一个疑问:使用 GRUB 还是 LILO

GRUB 和 LILO 是最常用的在基于 Intel 的系统上引导 Red Hat Linux 的方法。作为操作系统装载程序,它们操作于任何操作系统 “之外”,仅使用计算机硬件中内建的基本 I/O 系统(或 BIOS)。本节向你描述 GRUB 和 LILO 与 PC BIOS 之间的交流,它只针对于 Intel 兼容的计算机。

E.1.9.1. 与 BIOS 相关的限制对 GRUB 和 LILO 的影响

在多数基于 Intel 的计算机中,GRUB 和 LILO 要接受由 BIOS 所强加的限制。特别是,多数 BIOS 无法进入两个以上的硬盘,而且它们无法访问任一驱动器上柱面 1023 以上所贮存的数据。请注意,某些新近的 BIOS 没有这些限制,但是无论如何这还不是统一的规范。

窍门窍门
 

在为你的硬盘驱动器分区的时候,请留意,某些老系统内的 BIOS 无法进入硬盘上前 1024 柱面外的空间。如果情况如此,请在你的硬盘驱动器的前 1024 柱面上为 /boot Linux 分区保留足够空间以便引导 Linux。 其它的 Linux 分区可以放在柱面 1024 之后。

parted 中,1024 柱面相当于 528MB。详情请参阅 http://www.pcguide.com/ref/hdd/bios/sizeMB504-c.html

所有 GRUB 和 LILO 需要在引导期间访问的数据(包括 Linux 内核)都位于 /boot 目录中。如果你遵循了以上所建议的分区布局,或者执行的是工作站、个人桌面或服务器安装,/boot 目录将会是一个单独的小分区。否则,它可能会驻留在根分区(/)上。无论如何,如果你要使用 GRUB 或 LILO 来引导你的 Red Hat Linux 系统,/boot 所驻留的分区一定要遵守以下条例:

在前两个 IDE 驱动器上

如果你有两个 IDE(或 EIDE)驱动器,/boot 必须要位于其中之一。请注意,两个驱动器的限制也包括任何在你的主 IDE 控制器上的 IDE 光盘驱动器。因此,如果在你的主控制器上你有一个 IDE 硬盘,和一个光盘驱动器,/boot 必须仅能位于第一个硬盘,即便你在次 IDE 控制器上另有硬盘。

在第一个 IDE 或第一个 SCSI 驱动器上

如果你有一个 IDE(或 EIDE)驱动器以及一个或更多 SCSI 驱动器,/boot 必须位于 IDE 驱动器上或 ID 为 0 的 SCSI 驱动器上。其它任何 SCSI ID都不行。

在前两个 SCSI 驱动器上

如果你只有 SCSI 硬盘,/boot 必须位于 ID 为 0 或 1 的驱动器上。其它任何 SCSI ID 都不行。

如前所述,某些新型的 BIOS 可能会允许 GRUB 和 LILO 与不符合这些条例的配置配合工作。同样的,某些 GRUB 和 LILO 的较隐诲的功能也可以用来启动 Linux 系统,即便其配置不符合我们的条例。然而,由于牵涉的变量太多,Red Hat 无法支持此类应用。

注记注记
 

Disk Druid,以及工作站和服务器的安装,把这些 BIOS 相关的限制都已考虑在内。

[1]

与图解所示不同,块实际上大小统一的。此外还请留意,一个普通的磁盘驱动器上含有数以千计的块。不过,在本次讨论中,我们可以忽略这些细微出入。