這一個篇幅描述我如何讓 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 的順序.
第一步是如平常一樣的安裝 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 了.
依 FreeBSD 文件中所描述的方式來安裝你的 FreeBSD.
如果你有建構 Linux swap 切割, 把它刪除, (你可以使用 FreeBSD 的fdisk
程式.)
注意一下 FreeBSD slice 中 partitions 的順序.
如果你使用預設的標籤編碼, 第二個 partition 將是swap 切割. 完成 FreeBSD 的安裝,
並使用Linux的開機片 重新開機進入 Linux.
在進入 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, 並再試一次. 經驗是好的導師. :-)