6. 与 DEC Unix 共享磁盘

不幸的是,DEC Unix 对 Linux 一无所知,因此在这两个操作系统之间共享单个磁盘并非完全简单。但是,如果您注意本节中的提示,这不是一项困难的任务。本节假设您正在使用aboot0.5 或更高版本。

6.1. 磁盘分区

首先也是最重要的:绝对不要 在 DEC Unix 也使用的磁盘上使用任何 Linux 分区程序(minlabelfdisk)在 DEC Unix 也使用的磁盘上。Linuxminlabel程序使用与 DEC Unix 相同的分区表格式disklabel,但数据中存在一些不兼容性,minlabel填充,因此 DEC Unix 将直接拒绝接受由以下程序生成的分区表minlabel。要在 DEC Unix 下设置 Linuxext2分区,您必须更改磁盘的 disktab 条目。为了便于讨论,我们假设您有一个 rz26 磁盘(常见的 1GB 驱动器),您想在上面安装 Linux。DEC Unix v3.2 下的 disktab 条目如下所示(参见文件/etc/disktab):
rz26|RZ26|DEC RZ26 Winchester:\
        :ty=winchester:dt=SCSI:ns#57:nt#14:nc#2570:\
        :oa#0:pa#131072:ba#8192:fa#1024:\
        :ob#131072:pb#262144:bb#8192:fb#1024:\
        :oc#0:pc#2050860:bc#8192:fc#1024:\
        :od#393216:pd#552548:bd#8192:fd#1024:\
        :oe#945764:pe#552548:be#8192:fe#1024:\
        :of#1498312:pf#552548:bf#8192:ff#1024:\
        :og#393216:pg#819200:bg#8192:fg#1024:\
        :oh#1212416:ph#838444:bh#8192:fh#1024:

这里有趣的字段是o?,以及p?,其中 ? 是一个范围内的字母a-h(第一个到第 8 个分区)。o值给出分区起始偏移量(以扇区为单位),p值给出分区大小(也以扇区为单位)。参见disktab(4)以获取更多信息。请注意,DEC Unix 喜欢定义重叠分区。对于上面的条目,分区布局如下所示(您可以通过将各种op值)来验证这一点)
  a    	b      	  d    	      e	     	  f
|---|-------|-----------|-----------|-----------|

                        c
|-----------------------------------------------|

                     g                 h
            |-----------------|-----------------|

DEC Unix 坚持认为分区a从偏移量 0 开始,并且分区c跨越整个磁盘。除此之外,您可以以任何您喜欢的方式设置分区表。

假设您有 DEC Unix 正在使用分区g并且想要在分区上安装 Linuxh,分区为b作为一个(较大的)交换分区。为了获得此布局而不破坏现有的 DEC Unix 分区,您需要显式设置分区类型。您可以通过添加一个t字段来为每个分区设置类型。在我们的例子中,我们在上面的 disktab 条目中添加以下行。
	:ta=unused:tb=swap:tg=4.2BSD:th=resrvd8:

现在,我们为什么要将分区标记为h“reservd8” 而不是 “ext2”?好吧,DEC Unix 不了解 Linux。碰巧分区类型 “ext2” 对应于数值 8,而 DEC Unix 使用字符串 “reservd8” 来表示该值。因此,在 DEC Unix 术语中,“reservd8” 意味着 “ext2”。好的,这是困难的部分。现在我们只需要将更新的 disktab 条目安装到磁盘上。让我们假设磁盘的 SCSI ID 为 5。在这种情况下,我们将执行
# disklabel -rw /dev/rrz5c rz26

您可以通过使用以下命令读回 disklabel 来验证一切是否正常disklabel -r /dev/rrz5c。此时,您可能需要重启 DEC Unix 并确保现有的 DEC Unix 分区仍然完好无损。如果是这种情况,您可以关闭机器并开始 Linux 安装。请务必在安装过程中跳过磁盘分区步骤。由于我们已经安装了一个良好的分区表,您应该能够继续并选择第 8 个分区作为 Linux 根分区,并将第 2 个分区作为交换分区。如果磁盘是机器中的第二个 SCSI 磁盘,那么这些分区的设备名称将是/dev/sdb8/dev/sdb2,分别(请注意,Linux 使用字母来命名驱动器,使用数字来命名分区,这与 DEC Unix 的做法完全相反;当然,Linux 方案更有意义 ;-)。

6.2. 安装aboot

第一个大警告:使用 SRM 固件,每个磁盘您只能启动一个操作系统。因此,通常最好在一台您想要在 Linux 和 DEC Unix 之间双启动的机器中至少有两个 SCSI 磁盘。当然,如果速度不重要,您也可以从软盘启动 Linux,或者通过网络启动,如果您有一个bootp-功能的服务器。但在本节中,我们假设您想从包含一个或多个 DEC Unix 分区的磁盘启动 Linux。

第二个大警告:安装aboot在与 DEC Unix 共享的磁盘上会使第一个和第三个分区不可用(因为这些分区必须具有起始偏移量 0)。因此,我们建议您更改分区的大小a为足够容纳以下内容的大小aboot(1MB 应该足够了)。

一旦解决了这两个警告,安装aboot几乎和往常一样容易:由于分区ac将与aboot重叠,我们需要告诉swriteboot这确实是可以的。我们可以在 Linux 下使用以下形式的命令行来做到这一点(再次,假设我们正在尝试安装aboot在第二个 SCSI 磁盘上)
# swriteboot -f1 -f3 /dev/sdb bootlx

The-f1意味着我们想要强制写入bootlx即使它与分区 1 重叠。相应的也适用于分区 3。

就是这样。您现在应该能够关闭系统并从硬盘启动 Linux。在我们的示例中,执行此操作的 SRM 命令行将是
>>> boot dka5 -fi 8/vmlinux.gz -fl root=/dev/sdb8