Linux+FreeBSD mini-HOWTO 中譯版 作者: Niels Kristian Bech Jensen, [1]nkbj@image.dk 譯者: [2]黃則榮 [3]tjhuang@technologist.com v1.4, 23 January 1998 翻譯日期: 17 March 1998 _________________________________________________________________ 這份文件途述如何在一個系統中使用 Linux 和 FreeBSD. 它介紹 FreeBSD, 並討 論這兩個系統如何互相影響, 如一起分享 swap 空間. 你在讀這份文件之前, 應 該要有使用 Linux 與做硬碟分割的經驗. 如果你對這篇文件有任何的評論, 問 題, 與建議, 請不要猶豫, 寫封電子郵件給我. 我也希望聽聽有同時使用 Linux 和 NetBSD 或 OpenBSD 經驗的人說說. _________________________________________________________________ 1. 什麼是 FreeBSD? 2. FreeBSD 標示硬碟的方式 * 2.1 FreeBSD ``slices'' 和 ``partitions'' * 2.2 Linux 和 FreeBSD 中的硬碟與切割區標示. 3. 在 Linux 和 FreeBSD間分享 Swap 空間 * 3.1 安裝和準備 Linux * 3.2 安裝 FreeBSD * 3.3 在 Linux 中設定 FreeBSD 的 swap 切割 4. 使用 LILO 來啟動 FreeBSD 5. 架構檔案系統 * 5.1 在 Linux 中架構 UFS 檔案系統 * 5.2 在 FreeBSD上架構 ext2fs 檔案系統 6. 執行外來的執行檔 * 6.1 在 Linux 下執行 FreeSBD 的執行檔 * 6.2 在 FreeBSD 下執行 Linux 的執行檔 7. 參考文獻於其他有趣的文件 8. 感謝和版權 * 8.1 Disclaimer * 8.2 Copyright _________________________________________________________________ 1. 什麼是 FreeBSD? FreeBSD 和 Linux 一樣是個免費的, 如同 unix 般的作業系統. 最主要的差異 是, Linux 是自首到尾從新發展的, 而 FreeBSD 是基於 4.4BSD (柏克來大學軟 体 Distribution) 自由 redistribution 的那一個部份而來. 這個部份也被稱為 4.4BSD-lite. 這個事實也許會使人這麼想: FreeBSD 比 Linux 更近於'真正' 的unix. FreeBSD 只能在 Intel PC 平台上(i386或更高)執行. 而移植到 DEC Alpha 平台的版本目前正在被討論. FreeBSD 對硬体的需求與 Linux 非常的相 像. FreeBSD 的發展與 Linux 比較起來是比較封閉的. 主要的決定是由一個開發人員 所成立的中心團隊負責. 大的改變先在mail-list 上事先做討論. FreeBSD 有兩 個發展樹, (如同 Linux 一般) : ``-current'' 和 ``-stable". 新功能的發展 在``-current"發展樹中, 而``-stable"樹中的改變主要都是己除去 bug 的了. FreeBSD 如同 Linux一般可自由免費的使用與(re-)散發. 系統的大部份是在BSD 版權下發行, 而其他的則是在 GNU GPL 或 GNU LPGL 下. 你可以在 [4]FreeBSD Inc. 下找到更多的資訊或是下載整個系統. 最新 ``-stable"的版本和 ``-current"發展程式碼可以在 [5]Walnut Creek CDROM 購 得. (他們是使用 FreeBSD 來提供 web 和 ftp 服務) 2. FreeBSD 標示硬碟的方式 Linux 和 FreeBSD 使用兩種不同的方式來標示與切割硬碟. 2.1 FreeBSD ``slices'' 和 ``partitions'' FreeBSD 只需要用硬碟上的一個主硬碟切割區. 這個主切割區在 FreeBSD 的術語 中被稱為 ``slice''. 然後它用 disklabel 這個程式在這個主硬碟切割區中製造 邏輯切割區. 這些邏輯切割區在 FreeBSD 的術語中被稱為``partitions''. 這個 觀念與 Linux (和 DOS) 處理括充切割區中的邏輯切割區是非常相像的. 注意: Linux fdisk 程式的主功能表中並不會將 FreeBSD slice 中的 partitions 顯示 出來, 但是你可以使用命令 'b' 來顯示 BSD 磁碟標籤的訊息. 它的輸出將如這 樣 : (/dev/hda4 是 FreeBSD 的 slice): # fdisk /dev/hda Command (m for help): p Disk /dev/hda: 64 heads, 63 sectors, 621 cylinders Units = cylinders of 4032 * 512 bytes Device Boot Begin Start End Blocks Id System /dev/hda1 * 1 1 27 54400+ 83 Linux native /dev/hda2 28 28 55 56448 83 Linux native /dev/hda3 56 56 403 701568 83 Linux native /dev/hda4 404 404 621 439488 a5 BSD/386 Command (m for help): b Reading disklabel of /dev/hda4 at sector 1624897. BSD disklabel command (m for help): p 8 partitions: # size offset fstype [fsize bsize cpg] a: 64512 1624896 4.2BSD 0 0 0 # (Cyl. 404 - 419) b: 104832 1689408 swap # (Cyl. 420 - 445) c: 878976 1624896 unused 0 0 # (Cyl. 404 - 621) e: 64512 1794240 4.2BSD 0 0 0 # (Cyl. 446 - 461) f: 645120 1858752 4.2BSD 0 0 0 # (Cyl. 462 - 621) BSD disklabel command (m for help): q # 在第一個欄位中的字母 `a'...`f' 與下面 FreeBSD slice 的例子中的是相同 的. 字母`b'指的是 swap partition, 而`c'指的是整個 slice. 閱讀 FreeBSD 文件以便獲取指定這些字母給不同切割型態的``標準方法" 的更多資訊. 2.2 Linux 和 FreeBSD 中的硬碟與切割區標示. Linux 和 FreeBSD 中的硬碟是如下列方法標示的: Linux FreeBSD First IDE drive /dev/hda /dev/wd0 Second IDE drive /dev/hdb /dev/wd1 First SCSI drive /dev/sda /dev/sd0 Second SCSI drive /dev/sdb /dev/sd1 FreeBSD slice 是如下方法標示: (/dev/hda 為範例): Linux FreeBSD First primary partition /dev/hda1 /dev/wd0s1 Second primary partition /dev/hda2 /dev/wd0s2 Third primary partition /dev/hda3 /dev/wd0s3 Fourth primary partition /dev/hda4 /dev/wd0s4 FreeBSD slice 中的 partitions 如下述方法標示 (/dev/hda4 是例子中的 FreeBSD slice ): Linux label FreeBSD label Default FreeBSD mount point /dev/hda5 /dev/wd0s4a / /dev/hda6 /dev/wd0s4b swap /dev/hda7 /dev/wd0s4e /var /dev/hda8 /dev/wd0s4f /usr 如果你在 Linux中執行 dmesg 你將會看到如下 (Linux 的 kernel 必須有 UFS 支援才能奏效. 看 [6]安裝並準備 Linux) 部份: Partition check: hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 hda8 > 如果你在 /dev/sdb3 slice 中安裝 FreeBSD, 而且 /dev/sdb2 是一個含有兩個 邏輯切割的 Linux 擴充切割 (/dev/sdb5 及 /dev/sdb6), 之前的例子看起來將 如同這樣: Linux label FreeBSD label Default FreeBSD mount point /dev/sdb7 /dev/sd1s3a / /dev/sdb8 /dev/sd1s3b swap /dev/sdb9 /dev/sd1s3e /var /dev/sdb10 /dev/sd1s3f /usr 在 dmesg 的輸出中看起來將如 Partition check: sdb: sdb1 sdb2 < sdb5 sdb6 > sdb3 < sdb7 sdb8 sdb9 sdb10 > 如果你有一個 Linux 延伸磁區在 FreeBSD slice 之後, 你便有了麻煩. 因為大 多數的 Linux 核心安裝磁片沒有內含UFS 支援, 它們認不得 FreeBSD slice 中 的 partitions. 看到的(/dev/hda3 是 FreeBSD slice 而 /dev/hda4 是 Linux 延伸切割) Partition check: hda: hda1 hda2 hda3 < hda5 hda6 hda7 hda8 > hda4 < hda9 hda10 > 出現成: Partition check: hda: hda1 hda2 hda3 hda4 < hda5 hda6 > 這會導致錯誤的設施指定, 並會令資料遺失. 我的建議是 永遠把你的 FreeBSD slice 放在任何 Linux 延伸切割之後, 並且不要在安裝 FreeBSD 後, 改變 Linux 延伸切割中的任何邏輯切割. 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, 並再 試一次. 經驗是好的導師. :-) 4. 使用 LILO 來啟動 FreeBSD 你可以非常容易的使用 LILO 來啟動 FreeBSD. 如果你要使用 LILO, 不要安裝 FreeBSD 的 boot loader (Booteasy). 在你的/etc/lilo.conf 檔中加入下列這 幾行, 並執行 lilo ( FreeBSD slice 是在 /dev/hda4): other=/dev/hda4 table=/dev/hda label=FreeBSD 如果你把 FreeBSD 安裝在第二顆 SCSI 硬碟中, 使用類似這樣的設定(FreeBSD slice 在 /dev/sdb2): other=/dev/sdb2 table=/dev/sdb loader=/boot/chain.b label=FreeBSD 5. 架構檔案系統 5.1 在 Linux 中架構 UFS 檔案系統 不幸的, Linux 核心對 UFS 的支援有問題. 當你試著去架構 UFS 檔案系統時, 只會得到一些錯誤訊息(檔案系統事實上已經被架上去了, 但你卻不能讀到任何東 西). 所幸 Linux 2.0.xx 核心 (xx<30) 有一個新 (ALPHA) 版本的 UFS 檔案系 統支援, 在 [7]SunSite. 這被稱為 U2FS, 而目前的版本是 u2fs-0.4.3.tar.gz. U2FS 是用下列的方式來安裝(假設u2fs-0.4.3.tar.gz 是存 放在/usr/src): cd /usr/src tar xvzf u2fs-0.4.3.tar.gz patch -p0 -E < u2fs-0.4.3.patch Linux 2.0.31 或更新的核心(u2fs-0.4.4.tar.gz), 與最新的 2.1.xx 核心適用 的 U2FS版本, 可以在 [8]這個網站 找到. 現在你必須重新建立支援 U2FS 檔案 系統 和 BSD disklabel 的核心. 參考 [9]安裝和準備 Linux 來得到更多的資 料. 當使用U2FS時, 你可以忽略核心的 UFS 檔案系統 支援. 當完成新的核心安 裝後, 你可以使用如下列的指令來架構你的 UFS 檔案系統(所有在 FreeBSD slice 中的切割, 除了 swap 切割. mount -t u2fs /dev/hda8 /mnt 這個 UFS 支援是唯讀的. 那即是你可以自UFS 檔案系統中讀取,但你不能對其作 寫入. 5.2 在 FreeBSD上架構 ext2fs 檔案系統 要在 FreeBSD 中架構 ext2fs 檔案系統, 你要先建立一個支援 ext2f 的核心. 請參照 FreeBSD 的文件來明白如何進行. 放這幾行 options "EXT2FS" 在你新核心的設定檔中. 在完成使用新的核心來開機後, 你可以用下列這幾行來 架構你的 ext2fs 檔案系統 mount -t ext2fs /dev/wd0s3 /mnt 注意: 你不能把 ext2fs 檔案系統架構在 FreeBSD 的延伸切割中. 基於 FreeBSD 的某些錯誤, 你必須在關閉 FreeBSD 前卸下所有的 ext2fs 檔案 系統. 如果你在有 ext2fs 檔案系統未卸下前就關閉 FreeBSD, FreeBSD 便不能 sync UFS 檔案系統. 這會導致FreeBSD下次啟動時 fsck 被執行. 這個錯誤據報 告說已在``-current" 發展樹中被修正. 6. 執行外來的執行檔 6.1 在 Linux 下執行 FreeSBD 的執行檔 iBCS package 有提供在 Linux 下執行 FreeBSD 執行檔的支援; 但它已太老舊且 沒有人維護. 我不能成功讓它動作. 如果你幸運地叫它動起來, 請你告訴我. 6.2 在 FreeBSD 下執行 Linux 的執行檔 FreeBSD 有能力來執行 Linux 的執行檔, 包括 a.out 和ELF 型式. 要這麼做, 你必須要採取下列三個步驟: 1. 你必須開啟與 Linux 相容的機制. 要這麼做 (in FreeBSD 2.2.2 --- 其他 版本的細節可能不同) 你要修改你的/etc/rc.conf 檔案, 並修改 linux_enable="NO" 成 linux_enable="YES" 2. 你必須安裝 Linux 共享的程式庫. 它們在 FreeBSD 2.2.2 中被包含成為 packagelinux_lib-2.4.tgz (更新的版本可能已經出來了.) 執行這個命令 pkg_add /linux_lib-2.4.tgz 來安裝這個package. 是這個package存放的目錄. 3. 安裝你要執行的 Linux 程式. 這些程式可任意安裝在 UFS 或 ext2fs 檔案 系統中. 看章節 [10]在 FreeBSD 上架構 ext2fs 檔案系統 來獲取在 FreeBSD 中使用 ext2fs 檔案系統的更多資訊. 我已成功地使用這些方法在 FreeBSD 2.2.2 執行 Linux 版的 Applixware 4.3 和 Netscape 3.01 (兩個都是 ELF 格式), (是的, 我知道有 FreeBSD 版的 Netscape 4.) 讀 FreeBSD 的文件來了解有關這個主題. 7. 參考文獻於其他有趣的文件 最新版的這份 mini-HOWTO 能夠在 [11]我的 homepage 中找著, 有數種格式 (包 括 SGML 與 PostScript.) 這份文件已被 Mr. Teruyoshi Fujiwara 翻譯成日 文, 成為 [12]JF project 的一部份. FreeBSD 手冊與 FreeBSD FAQ 被與 FreeBSD 一起散發. 它們也可以在 [13]FreeBSD Inc. 中被找著. 這個網站也有很多關於 FreeBSD 的其他資訊. Linux Kernel HOWTO 被散發成為 [14]The Linux Documentation Project 的一 部份. 8. 感謝和版權 感謝 [15]*BSD 丹麥使用者群成員的回答一位 FreeBSD 新手的問題, 也感謝 Mr. Takeshi Okazaki 讓我注意到U2FS 的存在. 8.1 Disclaimer 雖然這文件內容所提供的訊息是被相信正確的, 作者本人將不為文件中的內容負 責. 請自己承擔使用這些技巧和範例的風險. 8.2 Copyright Copyright (c) 1997, 1998 by Niels Kristian Bech Jensen. This document may be distributed only subject to the terms and conditions set forth in [16]the LDP license. 版權 Copyright (c) 1997, 1998 by Niels Kristian Bech Jensen. 這份文件只可在遵守 [17]the LDP license 的條文和條 件下被散發. References 1. mailto:nkbj@image.dk 2. http://www.geocities.com/ResearchTriangle/7856/ 3. mailto:tjhuang@technologist.com 4. http://www.freebsd.org/ 5. http://www.cdrom.com/ 6. file://localhost/tmp/zh-sgmltools.30891/Linux+FreeBSD.txt.html#installlinux 7. ftp://sunsite.unc.edu/pub/Linux/ALPHA/ufs/ 8. http://www.image.dk/~nkbj/u2fs/ 9. file://localhost/tmp/zh-sgmltools.30891/Linux+FreeBSD.txt.html#installlinux 10. file://localhost/tmp/zh-sgmltools.30891/Linux+FreeBSD.txt.html#ext2fs 11. http://www.image.dk/~nkbj/ 12. ftp://jf.linux.or.jp/pub/JF/other-formats/ 13. http://www.freebsd.org/ 14. http://sunsite.unc.edu/LDP/ 15. http://hotel.prosa.dk/bsd-dk/ 16. http://sunsite.unc.edu/LDP/LICENSE.html 17. http://sunsite.unc.edu/LDP/LICENSE.html