下一页 上一页 目录

2. FreeBSD 硬盘标签方式

Linux 和 FreeBSD 使用两种不同的方案来标记硬盘和分区。本节解释了这两种方案之间的主要区别。事实上,FreeBSD 标签方案是对传统 BSD 标签风格的改编,使其能够在 PC 的 fdisk 分区中运行。因此,它与其他基于 BSD 的 Unix 系统非常相似,例如 NetBSD、OpenBSD、Ultrix、Digital Unix、SunOS 和 Solaris。

2.1 FreeBSD “slices”(切片)和 “partitions”(分区)

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 文档。

2.2 Linux 和 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 扩展分区中的任何逻辑分区!


下一页 上一页 目录