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