Linux 和 FreeBSD 使用两种不同的方案来标记硬盘和分区。本节解释了这两种方案之间的主要区别。事实上,FreeBSD 标签方案是对传统 BSD 标签风格的改编,使其能够在 PC 的 fdisk 分区中运行。因此,它与其他基于 BSD 的 Unix 系统非常相似,例如 NetBSD、OpenBSD、Ultrix、Digital Unix、SunOS 和 Solaris。
FreeBSD 需要 PC 硬盘分区表中的四个条目之一。这个主分区在 FreeBSD 术语中被称为 “slice”(切片)。然后它使用 disklabel
程序在这个主分区中创建最多八个分区。这些逻辑分区在 FreeBSD 术语中被称为 “partitions”(分区)。这个概念类似于 Linux(和 DOS)处理扩展分区中逻辑分区的方式。你不能将 FreeBSD 安装在 Linux(或 DOS)创建的扩展分区中。请注意,Linux 的 fdisk
程序不会从主菜单显示 FreeBSD 切片中的 BSD 分区,但是如果你输入命令 `b`,它可以显示 BSD disklabel 信息。输出结果类似于这样(/dev/hda4
是 FreeBSD 切片):
bash# fdisk /dev/hda Command (m for help): p Disk /dev/hda: 64 heads, 63 sectors, 621 cylinders Units = cylinders of 4032 * 512 bytes Device Boot Begin Start End Blocks Id System /dev/hda1 * 1 1 27 54400+ 83 Linux native /dev/hda2 28 28 55 56448 83 Linux native /dev/hda3 56 56 403 701568 83 Linux native /dev/hda4 404 404 621 439488 a5 BSD/386 Command (m for help): b Reading disklabel of /dev/hda4 at sector 1624897. BSD disklabel command (m for help): p 8 partitions: # size offset fstype [fsize bsize cpg] a: 64512 1624896 4.2BSD 0 0 0 # (Cyl. 404 - 419) b: 104832 1689408 swap # (Cyl. 420 - 445) c: 878976 1624896 unused 0 0 # (Cyl. 404 - 621) e: 64512 1794240 4.2BSD 0 0 0 # (Cyl. 446 - 461) f: 645120 1858752 4.2BSD 0 0 0 # (Cyl. 462 - 621) BSD disklabel command (m for help): q bash#
第一列中的字母 `a'...'f' 与下面 FreeBSD 切片示例中显示的标签相同。在 BSD 术语中有三个特殊的分区。字母 `a' 指定根分区,`b' 指定交换分区,而 `c' 指定整个切片。有关将这些字母分配给不同分区类型的“标准”方式的更多信息,请参阅 FreeBSD 文档。
在 Linux 和 FreeBSD 中,硬盘的标签方式如下:
Linux FreeBSD First IDE drive /dev/hda /dev/wd0 Second IDE drive /dev/hdb /dev/wd1 First SCSI drive /dev/sda /dev/sd0 Second SCSI drive /dev/sdb /dev/sd1
IDE 驱动器上的分区(FreeBSD 切片)的标签方式如下(以 /dev/hda
为例):
Linux FreeBSD First primary partition /dev/hda1 /dev/wd0s1 Second primary partition /dev/hda2 /dev/wd0s2 Third primary partition /dev/hda3 /dev/wd0s3 Fourth primary partition /dev/hda4 /dev/wd0s4
我的 FreeBSD 切片中的分区的标签方式如下。这是你默认获得的标签。如果你进行 FreeBSD 的自定义安装,可以更改标签(在示例中 /dev/hda4
是 FreeBSD 切片)。
Linux label FreeBSD label FreeBSD mount point /dev/hda5 /dev/wd0s4a / /dev/hda6 /dev/wd0s4b swap /dev/hda7 /dev/wd0s4e /var /dev/hda8 /dev/wd0s4f /usr
如果你在 Linux 中运行 dmesg
,你将看到如下内容(Linux 内核必须构建时包含 UFS 文件系统支持才能使其工作。请参阅 安装和准备 Linux 部分)
Partition check: hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 hda8 >
如果你将 FreeBSD 安装在 /dev/sd1s3
切片中(在 Linux 术语中是 /dev/sdb3
),并且 /dev/sdb2
是一个包含两个逻辑分区(/dev/sdb5
和 /dev/sdb6
)的 Linux 扩展分区,则前面的示例将如下所示:
Linux label FreeBSD label FreeBSD mount point /dev/sdb7 /dev/sd1s3a / /dev/sdb8 /dev/sd1s3b swap /dev/sdb9 /dev/sd1s3e /var /dev/sdb10 /dev/sd1s3f /usr
这将显示为:
Partition check: sdb: sdb1 sdb2 < sdb5 sdb6 > sdb3 < sdb7 sdb8 sdb9 sdb10 >在
dmesg
的输出中。如果你的 FreeBSD 切片之后有一个 Linux 扩展分区,你就会遇到麻烦,因为大多数 Linux 内核安装软盘在构建时没有 UFS 支持,它们将无法识别切片内的 FreeBSD 分区。本来应该看到的是(/dev/hda3
是 FreeBSD 切片,/dev/hda4
是 Linux 扩展分区):
Partition check: hda: hda1 hda2 hda3 < hda5 hda6 hda7 hda8 > hda4 < hda9 hda10 >却被视为:
Partition check: hda: hda1 hda2 hda3 hda4 < hda5 hda6 >
这可能会导致错误的设备分配并导致数据丢失。我的建议是始终将你的 FreeBSD 切片放在任何 Linux 扩展分区之后,并且在安装 FreeBSD 后不要更改 Linux 扩展分区中的任何逻辑分区!