跳转到内容

Unix 指南/解释/磁盘分区

来自维基教科书,开放世界中的开放书籍

本章介绍了不同类型的分区表以及用于调整分区表的程序。

一个分区表 将磁盘划分为分区。每个分区 可以单独格式化。分区通常用于文件系统,用于存放计算机文件,或交换区,用于操作系统作为额外(但速度较慢)的内存。关于 文件系统和交换区 的章节描述了类 Unix 系统如何使用分区。

类 Unix 系统通常安装在与其他操作系统相同的磁盘上。在这种情况下,类 Unix 内核和其他系统都必须理解相同类型的分区表。

  • 在 i386 硬件上,fdisk 分区很常见。它被 DOS、Windows 和 Linux 使用。引导计算机的 BIOS 启动磁盘上的主引导记录 (MBR)。MBR 理解 fdisk 格式。
  • 在 Macintosh 上,苹果分区表 允许磁盘包含一个或多个 Macintosh (HFS+ 或旧的 HFS) 分区。BIOS (Open Firmware) 可以不使用 MBR 来启动 Macintosh,因为 BIOS 可以找到 HFS+ 和 HFS 分区上的引导加载程序文件。
  • *BSD 系统可以使用带有 *BSD 分区表的 MBR,但大多数配置使用非 BSD 分区表,其中包含一个“切片”,该切片包含一个 *BSD 分区表和分区。

MS-DOS 或 MBR 分区表 (fdisk)

[编辑 | 编辑源代码]

本节可能需要校正。

原始的 IBM PC 为 MS-DOS 定义了一个简单分区表格式。这种分区表被 PC 风格计算机的 BIOS 实现所使用,被 DOS 和 Windows 使用。它也被大多数 PC 风格硬件上的 Linux 系统用于 BIOS 兼容性,以及因为 Linux 通常安装在与 DOS 和 Windows 相同的磁盘上。为了区分这种旧的分区格式与 Windows 可用的新格式,微软现在使用术语MBR 分区(之所以这样命名是因为分区表包含在主引导记录 (MBR) 中)来描述 MS-DOS 格式。许多文献都用 DOS 和 MS-DOS 这些术语来指代这种分区格式。

使用 MBR 分区表

  • 主引导记录 (MBR) 不属于任何分区。MBR 包含一个引导加载程序和一个基本分区表,位于固定位置。
  • 基本分区表最多只能包含四个主分区。如果您需要更多分区,则其中一个主分区必须被标识为扩展分区。扩展分区可以被划分为逻辑分区。例如,Windows 可能安装在主分区 1 (驱动器 C:) 和 2 (驱动器 D:) 上。Linux 可能使用 3 个分区(根/, 交换区和 home/home)。根位于主分区 3 上。主分区 4 是扩展分区,包含交换区和/home作为逻辑分区,以及可能用于将来逻辑分区的额外空间。
  • 一个主分区也可以是一个 *BSD 切片。这意味着它包含一个 *BSD 磁盘标签和几个 *BSD 分区。
  • 一个主分区可以被标记为活动分区。默认的 MBR 引导加载程序(来自 MS-DOS 和 FreeDOS 的那个)会引导活动主分区。但是,一些 MBR 引导加载程序(如 GRUB)可能会提供一个菜单,而不是引导活动分区。
  • 您可以声明每个分区的类型。一些系统使用类型来查找其文件系统。BSD 使用类型来查找其切片,但 Linux 完全忽略了类型。Linux 反而通过其/etc/fstab文件。

要操作 fdisk 分区,请在 DOS 上查找名为 FDISK.EXE 的程序,或在 Linux 上查找名为fdisk 的程序。

苹果分区表

[编辑 | 编辑源代码]

Mac OS 硬盘通常包含苹果分区表。这些表是在使用苹果的驱动器设置程序格式化磁盘时创建的。使用这些分区表

  • 分区 1 包含分区表。
  • 由于某种原因,驱动器设置程序坚持要创建 128 MB 的未使用的 Apple_Free 空间作为分区 2。一些安装了 Mac OS 9 驱动程序的旧磁盘有几个从 2 开始的小分区,这些分区只被 Mac OS 9 和更早的版本使用。
  • 您可以创建至少 17 个分区,可能更多。
  • 没有主引导记录 (MBR)。

要操作苹果分区,请在 Mac OS X 或 *BSD 上的 shell 提示符处使用pdiskdiskutil。现在大多数 GNU/Linux 系统出于某种原因将同一个程序称为mac-fdisk

分区类型

[编辑 | 编辑源代码]

实际上,苹果分区表上的分区类型可以是任意字符串,例如“OpenBSD”。虽然有些操作系统仍然停留在“Apple_UNIX_SVR2”上。

Apple_partition_map 此分区包含分区表。它的存在是为了防止其他分区与分区表重叠。
Mac OS classic 驱动程序 这些小分区将位于分区表之后,但大多数磁盘现在都没有它们。Mac OS 9 及更早版本会从这些分区加载磁盘的设备驱动程序。所有其他系统,包括 Mac OS X,都不会使用它们。
Apple_HFS 这是一个 HFS+ 或 HFS 分区。Mac OS 会挂载所有此类型的分区(除非设置了 HFS 不挂载标志)。它也可能是一个 MS-DOS 格式的分区;Mac OS 也能挂载它们。
Apple_UFS 这是一个由 Mac OS X 挂载的 UFS 分区。
  • 它有自己的苹果格式磁盘标签和单独的引导分区 (Apple_Boot?不是 Apple_Bootstrap),以防有人将 Mac OS X 的可引导副本复制到分区中。
  • 特别是对于较新的 Mac OS X 版本,几乎没有理由使用 Apple_UFS。使用 HFS+ 代替。尝试使用 OpenBSD 的 Apple_UFS 分区可能会损坏数据。
OpenBSD 这是 OpenBSD 切片。磁盘必须有一个或没有一个这种切片。
Apple_Bootstrap BIOS (Open Firmware) 可以从这个分区引导,但 Mac OS 不会挂载它。这种分区类型被“ybin”用来存放“yaboot”,即 Linux 引导加载程序。它也可以包含一个 OS 菜单,其中包含 Mac OS 9、Mac OS X 和 GNU/Linux 作为可能的条目。
Apple_UNIX_SVR2 名义上,它是一个 A/UX 分区,用于苹果的 SVR2 到 68k Mac 的移植。但是,苹果借用了这种分区类型来实现 PowerPC Mac 的双重 Linux。这两个苹果系统都已经过时,但现在 Linux 和 NetBSD 都在使用这种分区类型。
  • 使用 NetBSD 的 pdisk,您可以将两个 Apple_UNIX_SVR2 分区标记为根分区和交换分区。当您启动 NetBSD 时,它们将变为“a”和“b”。
  • 如果您在同一磁盘上安装了 Linux 和 NetBSD,就会造成混乱。
Apple_Free pdisk 等映射编辑器会在删除分区时创建此“分区”。“Apple_Free”分区只是未使用的空间。通常只有一个大的“Apple_Free”分区。
  • Mac OS X 上的驱动器设置程序也坚持在 Apple_partion_map 和第一个 Apple_HFS 之间浪费 128 MB 的 Apple_Free 分区。如果小心,可以使用 128 MB 作为 OpenBSD 的交换区。

在示例系统上,我们使用 OpenBSD 上的“pdisk”来查看分区表。我们在 OpenBSD 上运行“pdisk /dev/rwd0c”命令。在 Mac OS X 上,该命令将是“pdisk /dev/disk0”。现在大多数 Linux 发行版将“pdisk”称为“mac-fdisk”,因此该命令将是“mac-fdisk /dev/hda”。我们使用 pdisk 命令“p”来打印分区表,然后使用“q”退出。

# pdisk /dev/rwd0c
Edit /dev/rwd0c -
Command (? for help): p

Partition map (with 512 byte blocks) on '/dev/rwd0c'
 #:                type name                   length   base     ( size )
 1: Apple_partition_map Apple                      63 @ 1
 2:     Apple_Bootstrap untitled                 1954 @ 50331712
 3:           Apple_HFS Apple_HFS_Untitled_1 24903680 @ 262208   ( 11.9G)
 4:             OpenBSD OpenBSD              25165824 @ 25165888 ( 12.0G)
 5:     Apple_UNIX_SVR2 untitled             24064454 @ 50333666 ( 11.5G)
 6:          Apple_Free Extra                  262144 @ 64       (128.0M)
 7:     Apple_UNIX_SVR2 swap                  1099416 @ 74398120 (536.8M)
 8:          Apple_Free Extra                41712704 @ 75497536 ( 19.9G)

Device block size=512, Number of Blocks=117210240 (55.9G)
DeviceType=0x0, DeviceId=0x0

Command (? for help): q
#

BSD 切片和分区

[编辑 | 编辑源代码]

本节可能需要校正。

术语“切片”和“分区”通常定义如下

  • 一个分区 是 BSD 磁盘标签中的一个条目(文件系统或交换区)。
  • 一个切片 是非 BSD 分区表(如 fdisk 或 Apple)中的分区,它包含 BSD 磁盘标签和分区。

BSD 分区表称为磁盘标签。在下文中,“分区表”指的是非 BSD 分区表,它不是磁盘标签。

BSD 分区很特殊,因为在安装了 *BSD 的磁盘上,'a' 必须是根分区,'b'(如果存在)必须是交换分区。磁盘标签指示所有分区的地址、类型和字母。由于这些特殊特性,BSD 磁盘标签被限制在任何与非 BSD 操作系统一起使用的磁盘的切片中。当磁盘与 BSD 一起使用时,会导致三种情况

  1. 磁盘具有分区表和磁盘标签。 分区表位于磁盘开头(可能在 MBR 之后)。其中一个分区是 BSD 切片。磁盘标签位于 BSD 切片的开头。*BSD 系统将使用磁盘标签,而其他系统将使用分区表。安装了 OpenBSD/macppc 的磁盘使用这种配置。
  2. 磁盘有分区表但没有磁盘标签。如果磁盘与 *BSD 一起使用,BSD 内核会生成一个分区表,并为所有识别的分区类型分配字母。对于 Apple 分区表,OpenBSD/macppc 仅识别 Apple_HFS 分区。NetBSD/macppc 同时识别 Apple_HFS 和 NetBSD (Apple_UNIX_SVR2) 分区,因此 NetBSD/macppc 安装不需要磁盘标签。
  3. 磁盘只有磁盘标签。磁盘标签位于磁盘的开头,可能位于 MBR 之后,整个磁盘都保留给 *BSD。只有 *BSD 可以使用此磁盘。

是否有空间容纳磁盘标签?

[编辑 | 编辑源代码]

为了腾出空间放置磁盘标签,所有 UFS/FFS 分区都会保留前几个字节未用。因此,您可以将根 UFS/FFS 分区直接放置在磁盘的开头(除了 MBR),并且仍然有空间放置磁盘标签。

所有 UFS/FFS 分区必须列在磁盘标签中才能发挥作用。Mac OS X 会在所有 Apple_UFS 分区上放置一个特定于 Apple 的磁盘标签,因为这些分区没有列在 BSD 磁盘标签中。

BSD 如何读取非 BSD 分区表?

[编辑 | 编辑源代码]

*BSD 发行版有不同的方法来使用非 BSD 分区,或者在同一磁盘上同时使用 *BSD 和非 *BSD 操作系统。

  • 如果 NetBSD 看到一个 Apple 分区表,它将为所有 HFS+ 分区和 NetBSD 分区分配字母。
  • 如果 OpenBSD 看到一个 Apple 分区表,它将搜索类型为 "OpenBSD" 的分区,并使用该分区上的磁盘标签。如果不存在磁盘标签,OpenBSD 会从字母 'i' 开始为所有 "Apple_HFS" (HFS+) 分区分配字母。在创建磁盘标签时,首先要将磁盘标签中已有的 HFS+ 分区列入。然后,通过将 "OpenBSD" Apple 分区分成多个磁盘标签分区,来添加 OpenBSD 分区,这是一种二次分区的方式。使用 **disklabel -E** 来编辑磁盘标签。
华夏公益教科书