本节介绍了我如何让 Linux 和 FreeBSD 共享一个交换分区。可能还有其他方法可以获得相同的结果。如果你愿意,可以在安装 Linux 之前安装 FreeBSD,只需注意 FreeBSD 切片中分区的顺序即可。
第一步是正常安装 Linux。你必须在硬盘上为 FreeBSD 切片留下空间。你不必创建 Linux 交换分区,但如果你想要一个,请将其放在你想要为 FreeBSD 分配的空间中。这样你就可以稍后删除 Linux 交换分区,并将该空间用于 FreeBSD。
安装 Linux 后,你必须构建一个新的内核。如果这对你来说是新的,请阅读 Linux 内核 HOWTO。你必须包含 UFS 文件系统支持(只读)和 BSD 磁盘标签(FreeBSD 分区表)支持
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 交换分区,请从你的 /etc/fstab
文件中删除任何包含 swap 单词的行。确保你有一个使用新内核的工作 Linux 启动软盘。 现在你可以安装 FreeBSD 了。
按照 FreeBSD 文档中的描述安装 FreeBSD。如果你创建了 Linux 交换分区,请删除它(你可以使用 FreeBSD fdisk
程序)。注意 FreeBSD 切片中分区的顺序。如果你使用默认标签,则第二个分区将是交换分区。完成 FreeBSD 的安装并使用新的 Linux 启动软盘重启进入 Linux。
当你启动进入 Linux 后,运行 dmesg
。在输出中,你应该看到类似这样的内容
Partition check: hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 hda8 >
这意味着 /dev/hda4
是你的 FreeBSD 切片,而 /dev/hda5
、/dev/hda6
、/dev/hda7
和 /dev/hda8
是 FreeBSD 分区。如果你的交换分区是切片中的第二个分区,它将是 /dev/hda6
。
你必须将以下行放入你的 Linux /etc/fstab
文件中以启用交换分区
/dev/hda6 none swap sw 0 0
虽然 FreeBSD 可以使用任何类型的分区作为交换空间,但 Linux 需要交换分区中的特殊签名。此签名由 mkswap
创建。FreeBSD 在使用共享交换分区时会破坏此签名,因此你每次启动进入 Linux 都必须运行 mkswap
。要自动执行此操作,你必须找到在启动时运行 swapon
的脚本。在 Red Hat Linux 中,它是 /etc/rc.d/rc.sysinit
。将以下行放入该文件中,就在 swapon -a
之前
awk -- '/swap/ && ($1 !~ /#/) { system("mkswap "$1"") }' /etc/fstab
这将对 /etc/fstab
中的任何交换分区运行 mkswap
,每次启动时都运行,除非它们被注释掉(行首有“#”字符)。
当你重启进入 Linux 后,运行 free
以检查交换空间的大小。你也应该重启进入 FreeBSD 以确保一切按预期工作。如果它没有,你可能使用了错误的分区作为交换分区。解决该问题的唯一方法是重新安装 FreeBSD 并重试。经验是一位伟大的老师。 :-)