作者: Niels Kristian Bech Jensen, nkbj@image.dk 译者: 黄则荣 tjhuang@technologist.com v1.4, 23 January 1998 翻译日期: 17 March 1998
-------------------------------------------------------------------------------- 这份文件途述如何在一个系统中使用 Linux 和 FreeBSD. 它介绍 FreeBSD, 并讨论这两个系统如何互相影响, 如一起分享 swap 空间. 你在读这份文件之前, 应该要有使用 Linux 与做硬碟分割的经验. 如果你对这篇文件有任何的评论, 问题, 与建议, 请不要犹豫, 写封电子邮件给我. 我也希望听听有同时使用 Linux 和 NetBSD 或 OpenBSD 经验的人说说. -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
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 下.
你可以在 FreeBSD Inc. 下找到更多的资讯或是下载整个系统. 最新 ``-stable"的版本和 ``-current"发展程式码可以在 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 支援才能奏效. 看 安装并准备 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 档案系统支援, 在 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版本, 可以在 这个网站 找到. 现在你必须重新建立支援 U2FS 档案系统 和 BSD disklabel 的核心. 参考 安装和准备 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 型式. 要这麽做, 你必须要采取下列三个步骤:
你必须开启与 Linux 相容的机制. 要这麽做 (in FreeBSD 2.2.2 --- 其他版本的细节可能不同) 你要修改你的/etc/rc.conf 档案, 并修改 linux_enable="NO"
成 linux_enable="YES"
你必须安装 Linux 共享的程式库. 它们在 FreeBSD 2.2.2 中被包含成为 packagelinux_lib-2.4.tgz (更新的版本可能已经出来了.) 执行这个命令 pkg_add /linux_lib-2.4.tgz
来安装这个package. 是这个package存放的目录. 安装你要执行的 Linux 程式. 这些程式可任意安装在 UFS 或 ext2fs 档案系统中. 看章节 在 FreeBSD 上架构 ext2fs 档案系统 来获取在 FreeBSD 中使用 ext2fs 档案系统的更多资讯. 我已成功地使用这些方法在 FreeBSD 2.2.2 执行 Linux 版的 Applixware 4.3 和 Netscape 3.01 (两个都是 ELF 格式), (是的, 我知道有 FreeBSD 版的 Netscape 4.) 读 FreeBSD 的文件来了解有关这个主题. -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
7. 参考文献於其他有趣的文件 最新版的这份 mini-HOWTO 能够在 我的 homepage http://www.image.dk/~nkbj/中找著, 有数种格式 (包括 SGML 与 PostScript.) 这份文件已被 Mr. Teruyoshi Fujiwara 翻译成日文, 成为 JF project 的一部份.
FreeBSD 手册与 FreeBSD FAQ 被与 FreeBSD 一起散发. 它们也可以在 FreeBSD Inc. http://www.freebsd.org/中被找著. 这个网站也有很多关於 FreeBSD 的其他资讯.
Linux Kernel HOWTO 被散发成为 The Linux Documentation Project (http://sunsite.unc.edu/LDP/)的一部份.
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
8. 感谢和版权 感谢 *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 the LDP license. 版权 Copyright (c) 1997, 1998 by Niels Kristian Bech Jensen. 这份文件只可在遵守 the LDP license 的条文和条件下被散发.
-------------------------------------------------------------------------------- |