FreeBSD和Linux共享swap区

在一台电脑上安装有FreeBSD和Linux两个系统时 , 可以让这两个系统使用同一个硬盘分区作为swap区 , 节省一定的硬盘空间 。这里介绍一种实现共享swap区的方法 , 当然可能有其他方法也可以解决这一问题 。这一方法在RedHat Linux release 4.1和4.1(Linux kernel 版本2.0.29 和2.0.30)和FreeBSD2.2.2上通过测试 , 高版本的系统应该同样可以实现 。首先安装哪个系统都无所谓 , 只需要注意一下FreeBSD的slice分区的次序 。

第一步 , 安装Linux 。
按照正常的步骤安装Linux , 注意为安装FreeBSD留出硬盘空间 。安装Linux时不必设定swap分区 , 如果你想加一个swap分区 , 那么把swap分区放到为FreeBSD留出的硬盘空间上 。这样可以删除掉这个swap分区 , 然后安装FreeBSD 。
安装完Linux , 必须重新编译内核 , 加入UFS文件系统支持和BSD disklabel(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
安装新kernel并重新启动机器 。注意如果你设定了swap分区 , 删除/etc/fstab文件中包含swap的一行 。确定你有一张可以启动新内核的启动盘 。然后安装FreeBSD 。

第二步 , 安装FreeBSD 。
按照正常步骤安装FreeBSD , 如果为Linux分配了swap分区 , 可以用FreeBSD的fdisk删除掉 。注意FreeBSD的slice分区的次序 , 如果使用默认分区 , 那么第二个分区是FreeBSD的swap分区 。完成FreeBSD安装后重新启动到Linux 。

第三步 , 在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的分区 。如果FreeBSD的swap分区在这个slice上的第二个分区 , 那就是/dev/hda6 。
那么就把下面一行加入/etc/fstab中:
/dev/hda6 none swap sw 0 0
由于FreeBSD可以使用任何形式的分区作为swap分区 。而Linux需要在swap分区上设定一个特殊标识 。这个标识是是用mkswap生成的 。FreeBSD在使用swap分区时破坏了这个标识 。所以在每次启动Linux时都要运行mkswap来重新设定这个标识 。为自动完成这个工作 , 找到启动时执行swapon的script文件 。在RedHat Linux中这个文件是/etc/rc.d/rc.sysinit , 将下面一行加在swapon -a 的前面 。
awk -- "/swap/ && ($1 !~ /#/) { system("mkswap "$1"") }" /etc/fstab
这样在每次启动Linux时就会在/etc/fstab中设定的swap分区上运行mkswap 。

好了 , 完成了设定 , 可以重新启动到FreeBSD看看swap分区是否工作 , 再重新启动到Linux看看是否工作 。但愿你能顺利的设定完成 。

    推荐阅读