附录 A. 磁盘分区简介
注意
本附录对于非 x86 体系不一定适用。然而,在这里提及的一般原理可能适用。
本附录对于非 x86 构架不一定适用。然而,在这里提及的一般原理可能适用。
如果您对磁盘分区很熟悉,则可以跳至 第 A.1.5 节 “为 Red Hat Enterprise Linux 提供空间”,在那里您可以了解为 Red Hat Enterprise Linux 安装而释放磁盘空间的步骤。本节也讨论 Linux 系统所使用的分区命名方案、与其他操作系统分享磁盘空间以及相关主题。
A.1. 硬盘基本概念
硬盘执行一个非常简单的功能 — 它们保存数据并使用命令搜索它们。
讨论诸如磁盘分区等问题时,了解一点底层的硬件是很重要的。遗憾的是,我们往往容易拘泥于细节。因此,这个附录使用了磁盘的简化框图来帮助说明当磁盘被分区时的实际情况。图 A.1 “未使用过的磁盘驱动器” 显示了全新的,未被使用的磁盘情况。
图 A.1. 未使用过的磁盘驱动器
没有太多选择是吗?但如果是基本级别的磁盘驱动器,这就足够了。比如要在这个驱动器中保存数据。现在这种情况,它可能无法做到。首先我们要解决一些问题。
A.1.1. 写入什么没关系,关键是如何写入。
有经验的计算机用户可能会首先尝试这个操作。我们需要格式化驱动器。格式化(通常称之为"创建文件系统")会在驱动器中写入信息,在未格式化驱动器的空白空间中创建顺序。
图 A.2. 有文件系统的磁盘驱动器
如 图 A.2 “有文件系统的磁盘驱动器” 所指,文件系统所强加的顺序涉及了一些折衷方案:
- 驱动器中的一小部分可用空间被用来存储与文件系统有关的数据,这可以被视作额外开销。
- 文件系统将剩余的空间分成小的一定大小的片段。在 Linux 中,这些片段就是块。[15]
给出那个文件系统可让目录和文件成为可能,这些代价看起来是值得的。
我们也要注意,这里没有单一、通用的文件系统。如 图 A.3 “含有不同文件系统的磁盘驱动器” 所示,磁盘中可能有不同类型的文件系统。您也许已经猜到了,不同的文件系统都是趋向于不兼容的;也就是说,支持某一文件系统的操作系统可能不支持另外一种文件系统。最后这句话并非一个固定的规则。例如, Red Hat Enterprise Linux 就支持很多文件系统(包括许多被其他操作系统使用的文件系统),这就使得在不同文件系统之间的数据交换变得容易了。
图 A.3. 含有不同文件系统的磁盘驱动器
当然在磁盘中写入文件系统只是个开始。这个进程的目的是确实保存并搜索数据。让我们看一下写入一些文件的驱动器。
图 A.4. 已写入数据的磁盘驱动器
如 图 A.4 “已写入数据的磁盘驱动器” 所示,某些之前的空数据块现在也存放着数据。然而,只看这个框图,我们不能确认这个磁盘中有多少个文件系统。这有可能是一个,也有可能是多个,因为所有的文件都使用至少一个数据块而有些文件则使用多块。另外一个值得注意的地方是,已经被使用的块不需要组成连续的空间;未使用的和已使用的块可以散布着排列。这被称作碎片。当尝试调整现存分区的大小时,碎片会对其产生影响。
和大多数与计算机相关的技术一样,与磁盘驱动器刚发明时相比它已经改变了很多。特别是它们变得越来越大。不是物理大小变大,而是保存信息的容量增大。同时额外的容量让使用磁盘驱动器的方法发生了根本改变。
A.1.2. 分区:将一个驱动器变成多个
磁盘驱动器可分成分区。每个分区可作为独立磁盘访问。这可通过添加分区表完成。
将磁盘空间分配到独立磁盘分区有如下理由,例如:
- 将操作系统数据与用户数据进行合理分隔。
- 可使用不同的文件系统
- 可在一台机器中运行多个操作系统
目前有两个物理硬盘分区布局标准:主引导记录(MBR)和 GUID 分区表(GPT)。MBR 是基于 BIOS 的计算机使用的较老的磁盘分区方法。GPT 是较新的分区布局,它是统一可扩展固件界面(UEFI)的一部分。本小节主要论述主引导记录(MBR)磁盘分区方案。有关GUID 分区表(GPT)分区布局详情请查看 第 A.1.4 节 “GUID 分区表(GPT)”。
注意
虽然本章图表中所显示的分区表和实际磁盘驱动器是分开的,这并不完全正确。事实上,分区表是保存在磁盘的最开始,在任何文件系统或用户数据之前。但是为了清楚起见,我们在图表中将其分开。
图 A.5. 带有分区表的磁盘驱动器
如 图 A.5 “带有分区表的磁盘驱动器” 所示,分区表被分成 4 个部分或者说是 4 个主分区。主分区是硬盘中只包含一个逻辑分区(或部分)的分区。每个分区都存放着定义单一分区的必要的信息,这意味着分区表最多可以定义 4 个分区。
每个分区表条目包含几个分区的重要特性:
- 在磁盘上分区开始和结束的地点(起止点)
- 分区是否"活跃"
- 分区的类型
让我们仔细看看这些特性。起点和终点实际上定义了分区的大小和在磁盘中的位置。"active" 标签用于某些操作系统的引导装载程序。换句话说就是引导该分区中标记为 "active" 操作系统。
分区类型可能有些混乱。这个类型是一个识别分区预先用法的数字。如果这个说明听起来有点模糊,那是因为分区类型的含义有点模糊。有些操作系统使用分区类型表示具体文件系统类型、为分区添加标签使其与特定操作系统关联、表示该分区中包含引导操作系统或者以上三者之和。
现在,您可能想知道怎么处理其他复杂的情况。请参考 图 A.6 “采用单一分区的磁盘驱动器” 中的示例。
图 A.6. 采用单一分区的磁盘驱动器
在很多情况下,整个磁盘中只有一种分区,实际上是复制以前分区的方法。分区表只使用一个条目,它是指向分区的起点。
我们已经将这个分区记号为 "DOS" 类型。虽然这只是 表 A.1 “分区类型” 中列出的可能类型里的其中一种,但对于这里的讨论来说,这已经足够了。
表 A.1 “分区类型” 中包括了一些常用的(和罕见的)分区类型,以及它们的十六进制数值。
分区类型 | 值 | 分区类型 | 值 |
---|---|---|---|
Empty | 00 | Novell Netware 386 | 65 |
DOS 12-bit FAT | 01 | PIC/IX | 75 |
XENIX root | 02 | Old MINIX | 80 |
XENIX usr | 03 | Linux/MINUX | 81 |
DOS 16-bit <=32M | 04 | Linux swap | 82 |
Extended | 05 | Linux native | 83 |
DOS 16-bit >=32 | 06 | Linux extended | 85 |
OS/2 HPFS | 07 | Amoeba | 93 |
AIX | 08 | Amoeba BBT | 94 |
AIX bootable | 09 | BSD/386 | a5 |
OS/2 Boot Manager | 0a | OpenBSD | a6 |
Win95 FAT32 | 0b | NEXTSTEP | a7 |
Win95 FAT32 (LBA) | 0c | BSDI fs | b7 |
Win95 FAT16 (LBA) | 0e | BSDI swap | b8 |
Win95 Extended (LBA) | 0f | Syrinx | c7 |
Venix 80286 | 40 | CP/M | db |
Novell | 51 | DOS access | e1 |
PReP 引导 | 41 | DOS R/O | e3 |
GNU HURD | 63 | DOS secondary | f2 |
Novell Netware 286 | 64 | BBT | ff |
A.1.3. 分区中的分区 — 扩展分区概述
当然久而久之四个分区已经不够了。磁盘驱动器一直在增长,人们越来越有机会配置四个相当大小的分区后仍有剩余磁盘空间。这就需要有一些创建更多分区的方法。
进入扩展分区。您可能已经注意到了,表 A.1 “分区类型” 里有一个 "Extended" 分区类型。扩展分区中处于中心地位的就是这个类型。
当分区被创建且类型被设置为 "Extended" 时,扩展分区表就会被创建。实际上,扩展分区就象是其自身的磁盘驱动器 — 它有指向完全包含在扩展分区里的一个或多个分区(和 4 个主分区相反,这被称作逻辑分区)的分区表。图 A.7 “带有扩展分区的磁盘驱动器” 展示了有一个主分区和一个包含两个逻辑分区的扩展分区的磁盘(还有一些未被分区的剩余空间)。
图 A.7. 带有扩展分区的磁盘驱动器
如此图所示,主分区和逻辑分区间是有区别的 — 只有四个主分区,但可有无限个逻辑分区存在。但是因为 Linux 中访问分区的方法,应避免在单一磁盘驱动器中定义 12 个以上的逻辑分区。
现在已讨论了常规分区,让我们复习以下如何使用这个知识安装 Red Hat Enterprise Linux。
A.1.4. GUID 分区表(GPT)
GUID 分区表(GPT)是一个基于全局唯一识别符(GUID)的较新的分区方案。开发 GPT 是为了解决 MBR 分区表的局限,特别是磁盘的最大可使用存储空间限制。MBR 无法处理超过 2.2TB 的存储空间,与之不同的是 GPT 能够处理超过此硬盘大小的硬盘,其最大可处理的磁盘大小为 2.2ZB。另外,默认情况下 GPT 最多支持生成 128 个主分区。如果为分区表分配更多的空间,这个数字还能增大。
GPT 磁盘使用逻辑块寻址(LBA)及如下分区布局:
- 要保留与 MBR 磁盘的向后兼容性,则需要将 GPT 的第一个扇区(LBA 0)留给 MBR 数据,我们称之为 “保护性 MBR(protective MBR)”。
- 主 GPT 标头从该设备的第二个逻辑块(LBA 1)开始。该标头包含磁盘 GUID、主分区表位置、辅 GPT 标头位置以及其自身和主分区表的 CRC32 checksum。它还指定该分区表中的分区条目数。
- 默认主 GPT 表包括 128 个分区条目,每个条目为 128 字节,其分区类型 GUID 以及唯一 GUID。
- 副 GPT 表与主GPT表完全一致,主要是作为备份表使用,在主分区表崩溃时用来恢复。
- 副 GPT 标头从位于该磁盘的最后一个逻辑块中,可用来在主标头崩溃时恢复 GPT 信息。该标头包含磁盘 GUID、主分区表位置、辅分区表以及主 GPT 标头位置、以及其自身和副分区表的 CRC32 checksum、以及可能的分区条目数。
重要
必须有 BIOS引导分区方可成功将引导装载程序安装到包含 GPT(GUID 分区表)的磁盘中。其中包括使用 Anaconda 初始化的磁盘。如果该磁盘已包含 BIOS 引导分区,则该磁盘将会重复使用。
A.1.5. 为 Red Hat Enterprise Linux 提供空间
下面的列表列出了一些在尝试重新对硬盘分区时可能遇到的情景:
- 有可用的未分区的闲置空间
- 有可用的未使用过的分区
- 被活跃使用的分区内有可用的闲置空间
让我们按顺序看一下每一种情况。
注意
请记住,以下图解是为清晰起见而经简化的,并不反映实际安装 Red Hat Enterprise Linux 时所会遇到的实际分区布局。
A.1.5.1. 使用未分区的剩余空间
在这种情形下,已经定义的分区并没有占满整个磁盘,它留出了不属于任何分区的未配置的空间。图 A.8 “带有未分区的闲置空间的磁盘驱动器” 演示了这种情况。
图 A.8. 带有未分区的闲置空间的磁盘驱动器
在 图 A.8 “带有未分区的闲置空间的磁盘驱动器” 中,1 代表带有未被分配的空间的未定义分区,2 代表带有已被分配的空间的已定义分区。
如果考虑这一点,未使用硬盘也会被规入此类。唯一的区别是所有空间都不是任何定义的分区的一部分。
在任何情况下都可以在未被使用的空间中创建所需的分区。遗憾的是,这种情况虽然很简单,但却不经常出现(除非刚刚为 Red Hat Enterprise Linux 购买了新磁盘)。大部分预安装的操作系统都被配置为占用磁盘中的全部可用空间(请参考 第 A.1.5.3 节 “使用激活分区中的剩余空间”)。
下一步,我们将讨论更通常的情况。
A.1.5.2. 使用未使用分区中的空间
在这种情况下,可能会有一个或多个不再使用的分区。您可能之前添加过其他操作系统和分区,但已不再使用了。图 A.9 “带有未使用分区的磁盘驱动器” 演示了这种情况。
图 A.9. 带有未使用分区的磁盘驱动器
在 图 A.9 “带有未使用分区的磁盘驱动器” 中,1 代表未使用的分区,2 代表为 Linux 重新分配的未使用过的分区。
如果处于这种情况,可以将该空间分配给未使用的分区。首先必须删除该分区,然后在它的位置上创建适当的 Linux 分区。可以删除未使用分区,并在安装过程中手动创建新分区。
A.1.5.3. 使用激活分区中的剩余空间
这是最常见的情况。遗憾的是这也是最难控制的方法。主要问题是即使有足够的剩余空间,不久它就可被分配给某个已经在使用中的分区。如果购买的计算机有预装软件,该硬盘应该会有一个拥有操作系统和数据的大分区。
除了在系统中添加新硬盘外,还有两个选择:
- 破坏性分区
- 通常,删除单一大分区并创建几个较小的分区。如您所知,原始分区中的所有数据都会被破坏。就是说完全备份是必要的。为安全起见,生成两个备份,使用验证(如果您的备份软件可进行验证),并在删除分区前尝试从备份中读取数据。
警告
如果该分区上装有某类操作系统,该操作系统也需要被重新安装。需要注意的是,那些带有预装操作系统售出的计算机可能没有包括重装该系统所需的光盘介质。最好在破坏原有分区及原有操作系统之前意识到这一点。在为当前操作系统创建较小分区后,可以重新安装任何软件,恢复数据并启动 Red Hat Enterprise Linux 安装。图 A.10 “破坏性地对磁盘驱动器重新分区” 演示了这种情况。图 A.10. 破坏性地对磁盘驱动器重新分区
在 图 A.10 “破坏性地对磁盘驱动器重新分区” 中,1 代表之前的情况,2 代表之后的情况。警告
如 图 A.10 “破坏性地对磁盘驱动器重新分区” 所示,在最初的分区中的数据都因没有正确备份而丢失! - 非破坏性分区
- 在此要运行一个看似不可能的程序:它会将大分区变小,却不会丢失该分区中的原有文件。许多人都发现这个办法既可靠又简单可行。但是哪一个软件可以帮助您达到这一目的呢?在软件市场上有好几种磁盘管理软件。请研究一下找到适合您的软件。非破坏性分区过程是非常直捷了当的,它包括以下几个步骤:
- 压缩和备份现有数据
- 重新划分现存分区大小
- 创建新分区
接下来,我们将详细说明每一步骤。
A.1.5.3.1. 压缩现有数据
如 图 A.11 “磁盘驱动器被压缩” 所示,第一步是压缩现有分区中的数据。这样做的原因是可以重新安排数据,以便最大限度使用分区"末端"的可用空间。
图 A.11. 磁盘驱动器被压缩
在 图 A.11 “磁盘驱动器被压缩” 中,1 代表之前的情况,2 代表之后的情况。
这一步骤至关重要。不执行这一步,您的数据所在位置可能会阻止分区被重新划分为想要的大小。还要注意的是,由于某种原因,某些数据不能被移动。如果情况如此(这会严重地限制您的新分区的大小),可能会被迫在您的磁盘中进行破坏性重新分区。
A.1.5.3.2. 重新划分现存分区大小
图 A.12 “分区大小被重新划分的磁盘驱动器” 演示了重新划分区大小的实际过程。这一过程的结果要依您所使用的软件而定。多数情况下,新空出的闲置空间被用来创建一个与原有分区同类的未格式化的分区。
图 A.12. 分区大小被重新划分的磁盘驱动器
在 图 A.12 “分区大小被重新划分的磁盘驱动器” 中,1 代表之前的情况,2 代表之后的情况。
理解所使用的重新分区软件对新空出的空间的作业是很重要的,只有这样才能正确地采取相应措施。在我们的示范中,最佳措施是删除新建的 DOS 分区,然后创建恰当的 Linux 分区。
A.1.5.3.3. 创建新分区
如前面的步骤所示,不一定需要创建新分区。但除非用来调整大小的软件是 Linux 软件,否则很可能必须删除在调整大小过程中创建的分区。图 A.13 “带有最终分区分配的磁盘驱动器” 中演示了这种情况。
图 A.13. 带有最终分区分配的磁盘驱动器
在 图 A.13 “带有最终分区分配的磁盘驱动器” 中,1 代表之前的情况,2 代表之后的情况。
注意
下列信息只用于使用 x86 构架的计算机。
为了方便用户,我们提供了
parted
工具。它是一个可免费获得的重新划分区大小的程序。
如果决定使用
parted
重新为硬盘驱动器分区,则必须熟悉磁盘贮存区,并备份计算机中的数据。这一点至关重要。应该为计算机中重要的数据做两个备份。这些备份应该存储在可移介质中(如磁盘、光盘或磁带),而且应该在继续操作前确定可读取这些数据。
如果决定要使用
parted
,请留意在 parted
运行后,会有两个分区:一个是重新划分大小的分区,另一个是 parted
用新空出的空间创建的新分区。如果目的是使用新空出的空间安装 Red Hat Enterprise Linux,则应该删除新分区。既可以使用在目前操作系统中的分区工具删除它,也可以在安装过程中设置分区时删除它。
A.1.6. 分区命名方案
Linux 使用字母和数字的组合来指代磁盘分区。这可能有些使人迷惑不解,特别是如果以前使用 "C 驱动器"这种方法指代硬盘及其其分区。在 DOS/Windows 的世界里,分区使用下列方法命名:
- 检查每个分区的类型以便判定它是否可被 DOS/Windows 读取。
- 如果分区类型是兼容的,则会分配给它会一个"驱动器字母"。驱动器字母从"C"开始,然后依据要标记的分区数量而按字母顺序推移。
- 驱动器字母可以用来指代那个分区,也可以用来指带分区所含的文件系统。
Red Hat Enterprise 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 Enterprise Linux 可识别所有分区。当然,这并不是说 Red Hat Enterprise Linux 能够访问每一类分区中的数据,但是在许多情况下,访问专用于另一操作系统的分区中的数据是可能的。
请记录以上信息;它会帮助您在设置 Red Hat Enterprise Linux 所需分区时更容易地理解许多步骤。
A.1.7. 磁盘分区以及其他操作系统
如果 Red Hat Enterprise Linux 分区要与其他操作系统所用的分区共享一个硬盘,多数情况下,应该没什么问题。不过,某类 Liunx 和其他操作系统的组合需要特别加以注意。
A.1.8. 磁盘分区和挂载点
令许多 Linux 的新用户感到困惑的地方是 Linux 操作系统如何使用和访问各个分区。在 DOS/Windows 中相对较为简单。每一分区有一个"驱动器字母",使用正确的驱动器字母指代相应分区上中文件和目录。
这与 Linux 处理分区及磁盘贮存问题的方法截然不同。其主要的区别在于,Linux 中的每一个分区都是构成支持一组文件和目录所必需的贮存区的一部分。它是通过挂载来实现的,挂载是将分区关联到某一目录的过程。挂载分区使初始化于这个指定目录(通称为挂载点)的贮存区能够被使用。
例如,如果分区
/dev/hda5/
被挂载在 /usr/
上,这意味着所有 /usr/
中的文件和目录在物理意义上位于 /dev/hda5/
中。因此文件 /usr/share/doc/FAQ/txt/Linux-FAQ
被保存在 /dev/hda5/
上,而文件 /etc/gdm/custom.conf
却不是。
继续以上的示例,
/usr/
之下的一个或多个目录还有可能是其他分区的挂载点。例如,某个分区(假设为,/dev/hda7/
)可以被挂载到 /usr/local/
下,这意味着 /usr/local/man/whatis
将位于 /dev/hda7
上而不是 /dev/hda5
上。
A.1.9. 多少个分区?
在准备安装 Red Hat Enterprise Linux 的这一阶段,应该开始考虑新操作系统所要使用的分区数量及大小。"多少个分区"一直是 Linux 社区中的一个具有争议性的问题,在没有定论之前,可以说可用的分区布局与争论这一问题的人一样多。
记住,我们推荐,除非有特殊的原因,应该至少创建下面的分区:
swap
、/boot/
以及 /
(root)。
详情请参考 第 9.15.5 节 “推荐的分区方案”。