在一台電腦上安裝有FreeBSD和Linux兩個系統時,可以讓這兩個系統使用同一個硬盤分區作為swap區,節省一定的硬盤空間。這裡介紹一種實現共享swap區的方法,當然可能有其他方法也可以解決這一問題。。首先安裝哪個系統都無所謂,只需要注意一下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看看是否工作。但願你能順利的設定完成。