Next Previous Contents

3. 在 Linux 和 FreeBSD间分享 Swap 空间

这一个篇幅描述我如何让 Linux 和 FreeBSD 共用一个 Swap 切割. 可能还有别的方法可以做到相同的结果. 这里所用的 Linux 是 Red Hat 4.1 和 4.2 (Linux 核心 2.0.29 和 2.0.30) 与 FreeBSD 2.2.2. 如果你愿意, 你可以在安装 Linux 之前先安装 FreeBSD, 但要注意 FreeBSD slice 中 partition 的顺序.

3.1 安装和准备 Linux

第一步是如平常一样的安装 Linux. 你必须在你的硬盘中留下给 FreeBSD slice 的空间. 你不用作 Linux 的 Swap 切割, 但如果你要这样一个切割, 就把它放在你要给 FreeBSD 的空间中. 这样, 你便可以在稍后删除这个切割, 并把它拿来给 FreeBSD 用 .

在完成 Linux 的安装后, 你必须要重新编译 kernel. 如果你对这不清楚, 可以参考 The Linux Kernel HOWTO. 你 必须 加入对 UFS 文档系统 的支持, 与对 BSD disklabel (FreeBSD partition tables) 的支持.

UFS filesystem support (read only) (CONFIG_UFS_FS) [N/y/m/?] y
BSD disklabel (FreeBSD partition tables) support (CONFIG_BSD_DISKLABEL) [N/y/?]
(NEW) y
安装新的核心并重新开机. 如果你有建构 Linux Swap 切割, 把在/etc/fstab 档中任何含有 swap 的那几行删去. 确定你有可用的新核心开机片 你便可以开始来安装 FreeBSD 了.

3.2 安装 FreeBSD

依 FreeBSD 文件中所描述的方式来安装你的 FreeBSD. 如果你有建构 Linux swap 切割, 把它删除, (你可以使用 FreeBSD 的fdisk 程序.) 注意一下 FreeBSD slice 中 partitions 的顺序. 如果你使用预设的标签编码, 第二个 partition 将是swap 切割. 完成 FreeBSD 的安装, 并使用Linux的开机片 重新开机进入 Linux.

3.3 在 Linux 中设定 FreeBSD 的 swap 切割

在进入 Linux 后执行 dmesg. 在它的输出你应该会看到类似这样的东西:

Partition check:
hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 hda8 >
这表示 /dev/hda4 是你的 FreeBSD slice, 而 /dev/hda5, /dev/hda6, /dev/hda7/dev/hda8 是 FreeBSD 切割. 如果你的 swap 切割是在 slice 中的第二个切割, 那将会是 /dev/hda6. 你必须把下面的这几行放到你的 /etc/fstab 档中来开启 swap partition 的功能.
/dev/hda6 none swap sw 0 0
FreeBSD 可以用任何型态的切割来当作 swap 切割, 但 Linux 的 swap 切割需要特别的签名. 这个签名是用 mkswap 来建构的. FreeBSD 使用这个共用的 swap 切割时会对这个签名造成破坏, 所以你必须在每次进入 Linux 的时后执行 mkswap. 要让这个动作自动执行, 你必须找出执行 swapon 的 script 并在开机时执行. 以 Red Hat 而言, 这是 /etc/rc.d/rc.sysinit. 把下面这一行放到 swapon -a :
awk -- '/swap/ && ($1 !~ /#/) { system("mkswap "$1"") }' /etc/fstab
这将会在每次开机时, 在 /etc/fstab 中的任何 swap 切割上执行 mkswap, 除非你把它取消 (使用 ``#'' 当一行的第一个字元)

在你重新开机进入 Linux 后, 使用 free 来检查 swap 空间的大小. 你也必须重新开机进入 FreeBSD 来确认一切都如预期的运作. 如果没有, 那你可能使用了错误的切割来当作 swap 切割. 唯一的解决办法, 便是重新再安装 FreeBSD, 并再试一次. 经验是好的导师. :-)


Next Previous Contents