一个硬盘可以被划分为若干个分区。每个分区的功能就像它是一个独立的硬盘一样。 这样做的目的是,如果你只有一个硬盘,并且想要在上面安装两个操作系统,你可以将硬盘划分为两个分区。 每个操作系统可以使用其分区,而不会影响其他分区。 这样,两个操作系统可以在同一硬盘上和平共处。 如果没有分区,则每个操作系统都必须购买一个硬盘。
软盘通常不进行分区。 从技术上来说,这样做并没有什么不可行的,但由于软盘容量很小,因此分区很少有用。 CD-ROM 通常也不进行分区,因为将它们用作一个大的磁盘更容易,而且很少需要在同一个光盘上安装多个操作系统。
关于硬盘如何分区的的信息存储在其第一个扇区(即,第一个磁盘表面上第一个磁道的第一个扇区)中。 第一个扇区是磁盘的主引导记录 (MBR);这是 BIOS 读取并在机器首次启动时启动的扇区。 主引导记录包含一个小程序,该程序读取分区表,检查哪个分区是活动的(即,标记为可引导的),并读取该分区的第一个扇区,即分区的引导扇区(MBR 也是一个引导扇区,但它具有特殊状态,因此具有特殊名称)。 该引导扇区包含另一个小程序,该程序读取存储在该分区上的操作系统的第一部分(假设它是可引导的),然后启动它。
分区方案并非内置于硬件,甚至也不是内置于 BIOS 中。 这仅仅是许多操作系统遵循的约定。 并非所有操作系统都遵循它,但它们是例外。 有些操作系统支持分区,但它们占用硬盘上的一个分区,并在该分区内使用其内部分区方法。 后一种类型可以与其他操作系统(包括 Linux)和平共处,并且不需要任何特殊措施,但是不支持分区的操作系统无法与任何其他操作系统在同一磁盘上共存。
作为一项安全预防措施,最好将分区表写在一张纸上,这样如果分区表损坏,您就不必丢失所有文件。 (可以使用 fdisk 修复坏的分区表)。 相关信息由 fdisk -l 命令给出
$ fdisk -l /dev/hda Disk /dev/hda: 15 heads, 57 sectors, 790 cylinders Units = cylinders of 855 * 512 bytes Device Boot Begin Start End Blocks Id System /dev/hda1 1 1 24 10231+ 82 Linux swap /dev/hda2 25 25 48 10260 83 Linux native /dev/hda3 49 49 408 153900 83 Linux native /dev/hda4 409 409 790 163305 5 Extended /dev/hda5 409 409 744 143611+ 83 Linux native /dev/hda6 745 745 790 19636+ 83 Linux native $ |
PC 硬盘的原始分区方案只允许四个分区。 这很快被证明在现实生活中太少了,部分原因是有些人想要超过四个操作系统(Linux、MS-DOS、OS/2、Minix、FreeBSD、NetBSD 或 Windows/NT,仅举几例),但主要是因为有时为一个操作系统设置多个分区是一个好主意。 例如,出于速度原因(见下文),交换空间通常最好放在 Linux 的单独分区中,而不是放在主 Linux 分区中。
为了克服这个设计问题,发明了扩展分区。 这个技巧允许将主分区划分为子分区。 这样细分的主分区就是扩展分区;子分区是逻辑分区。 它们的行为类似于主分区,但创建方式不同。 它们之间没有速度差异。 通过使用扩展分区,您现在每个磁盘最多可以拥有 15 个分区。
硬盘的分区结构可能如图 5-2 所示。 磁盘被划分为三个主分区,其中第二个主分区被划分为两个逻辑分区。 磁盘的一部分根本没有分区。 整个磁盘和每个主分区都有一个引导扇区。
分区表(MBR 中的分区表和扩展分区的分区表)每个分区包含一个字节,用于标识该分区的类型。 这试图标识使用该分区的操作系统,或它的用途。 其目的是使两个操作系统有可能避免意外地使用同一个分区。 然而,实际上,操作系统并不真正关心分区类型字节; 例如,Linux 根本不在乎它是什么。 更糟糕的是,它们中的一些操作系统不正确地使用它; 例如,至少某些版本的 DR-DOS 忽略了字节的最高有效位,而其他版本则没有。
没有标准化机构来指定每个字节值的含义,但就 Linux 而言,以下是 fdisk 程序的分区类型列表。
0 Empty 1c Hidden Win95 FA 70 DiskSecure Mult bb Boot Wizard hid 1 FAT12 1e Hidden Win95 FA 75 PC/IX be Solaris boot 2 XENIX root 24 NEC DOS 80 Old Minix c1 DRDOS/sec (FAT- 3 XENIX usr 39 Plan 9 81 Minix / old Lin c4 DRDOS/sec (FAT- 4 FAT16 <32M 3c PartitionMagic 82 Linux swap c6 DRDOS/sec (FAT- 5 Extended 40 Venix 80286 83 Linux c7 Syrinx 6 FAT16 41 PPC PReP Boot 84 OS/2 hidden C: da Non-FS data 7 HPFS/NTFS 42 SFS 85 Linux extended db CP/M / CTOS / . 8 AIX 4d QNX4.x 86 NTFS volume set de Dell Utility 9 AIX bootable 4e QNX4.x 2nd part 87 NTFS volume set df BootIt a OS/2 Boot Manag 4f QNX4.x 3rd part 8e Linux LVM e1 DOS access b Win95 FAT32 50 OnTrack DM 93 Amoeba e3 DOS R/O c Win95 FAT32 (LB 51 OnTrack DM6 Aux 94 Amoeba BBT e4 SpeedStor e Win95 FAT16 (LB 52 CP/M 9f BSD/OS eb BeOS fs f Win95 Ext'd (LB 53 OnTrack DM6 Aux a0 IBM Thinkpad hi ee EFI GPT 10 OPUS 54 OnTrackDM6 a5 FreeBSD ef EFI (FAT-12/16/ 11 Hidden FAT12 55 EZ-Drive a6 OpenBSD f0 Linux/PA-RISC b 12 Compaq diagnost 56 Golden Bow a7 NeXTSTEP f1 SpeedStor 14 Hidden FAT16 <3 5c Priam Edisk a8 Darwin UFS f4 SpeedStor 16 Hidden FAT16 61 SpeedStor a9 NetBSD f2 DOS secondary 17 Hidden HPFS/NTF 63 GNU HURD or Sys ab Darwin boot fd Linux raid auto 18 AST SmartSleep 64 Novell Netware b7 BSDI fs fe LANstep 1b Hidden Win95 FA 65 Novell Netware b8 BSDI swap ff BBT |
有很多程序可以创建和删除分区。 大多数操作系统都有自己的程序,最好使用每个操作系统自己的程序,以防它执行其他程序无法执行的异常操作。 许多程序都称为 fdisk,包括 Linux 的程序,或其变体。 关于使用 Linux fdisk 的详细信息,请参阅其手册页。 cfdisk 命令类似于 fdisk,但具有更友好的(全屏)用户界面。
当使用 IDE 磁盘时,引导分区(包含可引导内核映像文件的分区)必须完全位于前 1024 个柱面内。 这是因为在启动期间(在系统进入保护模式之前),磁盘是通过 BIOS 使用的,而 BIOS 无法处理超过 1024 个柱面。 有时可以使用仅部分位于前 1024 个柱面内的引导分区。 只要使用 BIOS 读取的所有文件都位于前 1024 个柱面内,这就可以工作。 由于这很难安排,因此非常不建议这样做; 您永远不知道内核更新或磁盘碎片整理何时会导致系统无法启动。 因此,请确保您的引导分区完全位于前 1024 个柱面内。
但是,对于支持 LBA(逻辑块寻址)的新版本 LILO 来说,这可能不再适用。 请查阅您的发行版的文档,以查看它是否具有支持 LBA 的 LILO 版本。
实际上,一些较新版本的 BIOS 和 IDE 磁盘可以处理超过 1024 个柱面的磁盘。 如果您有这样的系统,您可以忘记这个问题; 如果您不太确定,请将其放在前 1024 个柱面内。
每个分区都应该有偶数个扇区,因为 Linux 文件系统使用 1 千字节的块大小,即两个扇区。 奇数个扇区将导致最后一个扇区未使用。 这不会导致任何问题,但这很难看,并且某些版本的 fdisk 会对此发出警告。
更改分区大小通常需要首先备份您要从该分区保存的所有内容(最好是整个磁盘,以防万一),删除分区,创建新分区,然后将所有内容恢复到新分区。 如果分区正在增长,您可能还需要调整相邻分区的大小(以及备份和恢复)。
由于更改分区大小很麻烦,因此最好第一次就正确设置分区,或者拥有有效且易于使用的备份系统。 如果您从不需要太多人工干预的介质(例如,从 CD-ROM,而不是软盘)进行安装,则一开始尝试不同的配置通常很容易。 由于您还没有要备份的数据,因此多次修改分区大小并不那么痛苦。
有一个用于 MS-DOS 的程序,称为 fips,它可以调整 MS-DOS 分区的大小,而无需备份和恢复,但对于其他文件系统,仍然需要这样做。
fips 程序包含在大多数 Linux 发行版中。 商业分区管理器“Partition Magic”也具有类似的功能,但界面更友好。 请记住,分区是危险的。 在您尝试“动态”更改分区大小之前,请确保您拥有任何重要数据的最新备份。 程序 parted 也可以调整其他类型分区以及 MS-DOS 分区的大小,但有时方式有限。 在使用 parted 之前,请查阅 parted 文档,安全总比后悔好。