天下网吧 >> 网吧天地 >> 网吧技术 >> 网吧系统 >> 正文

一山可容二虎 让Linux与FreeBSD共存

2008-4-8赛迪网佚名

  这个文档描述了如果在同一个系统上使用Linux和FreeBSD。它介绍了FreeBSD,并且讨论如果使这两个系统协同工作,比如,共享swap空间。在读些文档之前,最好有一些对于fdisk分区和Linux或FreeBSD系统的经验。这个文档使用的经验在FreeBSD 2.2.2上通过,当然对于新的版本,它依然是适用的。

  1、什么是FreeBSD?

  FreeBSD是一个免费的类Unix的操作系统,非常类似于Linux。这个主要的区别是,Linux的内核是拼凑出来的,FreeBSD是根据自由发布的4.4BSD(伯克利软件分部)发展而来的。这个现实可能导致了一些人提出FreeBSD比Linux更接近于“真正”的UNIX。FreeBSD只运行在Intel的PC系统上(i386体系);DEC Alpha和Sun Sparc平台上的ports也在此时一起被开发。NetBSD和OpenBSD都与FreeBSD非常相像,非常都可以运行在几个平台之上。*BSD的硬件的需要与Linux差不多。

  被管理FreeBSD的开发过程与Linux的开发过程并不一样。有一个核心小组对内核代码进行裁决并且领导整个工程的开发。

  如果有大的改变,则需要在电子邮件中进一步讨论。FreeBSD工程具有两个开发树(就像Linux):"-CURRENT"和"-STABLE"。"-CURRENT"开发树包括了新的特性。而"-STABLE"开发树则修证了新特性中测试出来的错误和漏洞。

  FreeBSD可以被免费地使用和发布,就如同Linux一样。在其下运行的许多部件都使用了BSD的版权。

  2、FreeBSD对于磁盘分区标记的方式

  Linux和FreeBSD标记了硬盘驱动器和分区。对于两个系统来说,对于扇区的阐述不尽相同。实际上FreeBSD的分区方式只是BSD的分区方式在PC的fdisk分区方式上的体现。因此它非常类似于其它的类Unix系统,比如NetBSD,OpenBSD,Ultrix,Digial Unix,SunOS,和Solaris。

  2.1. FreeBSD"slices"和"partitions"

  FreeBSD需要在你的PC上的硬盘上的分区表中占用四个项。在FreeBSD术语中,主分区被称为一个"slice"。使用disklabel程序在这个主分区中造成8个分区。在FreeBSD术语中,这些逻辑分区被称为“partitions"。这个概念与Linuxs管理在一个扩展分区中的逻辑分区的方式非常类似。你不可以在由Linux建立的扩展分区中安装FreeBSD。注意,Linux的fdisk程序不能在其主菜单中显示出在FreeBSD的slice中的BSD分区,但是你可以通过命令“b“来显示BSD的卷标。输出如下内容:

  bash# 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
bash#

  注意,在第一栏中的字母"a...f"。在BSD中,有三种特别的分区。字母'a'表示是root分区,'b'表示是swap分区,c是整个slice。如果您想知道详细情况,请查阅"standard"的方式。

  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

  而在一个IDE驱动器的分区(FreeBSD slices)由以下方式标记:

  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上的分区,由以下方式标记。这是默认的标记方法。如果你自定义安装FreeBSD,那么则有可能改变它。(/dev/hda4在例子中是一个FreeBSD slice)。

  Linux label FreeBSD label 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的内核必须支持UFS文件系统)

  Partition check:
hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 hda8 >

  如果你已经在/dev/sd1s3 slice上安装了FreeBSD,并且/dev/sdb2是一个Linux的扩展分区,它包括了两个逻辑分区(/dev/sdb5和/dev/sdb6),比如:

  Linux label FreeBSD label 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 >

  如果在你的FreeBSD slice中你有了问题之后,你有一个Linux的扩展分区,因为大多数Linux内核安装软盘被建立的时候没有包括UFS的支持,它们将不能识别FreeBSD的分区。在dmesg:(/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 >

  这将给出设备的错误信号,并且引起数据的丢失。我的建议是:允许在任何一个Linux扩展分区之后放入人的FreeBSD分区,并且在安装了FreeBSD之后,不要改变在Linux扩展分区中的任何逻辑分区。

  3、在Linux和FreeBSD系统上共享swap空间

  这个部分描述了如何使用Linux和FreeBSD来共享一个swap空间。有几种不同的方法可以实现它。如果你愿意,你可以在Linux安装之前安装FreeBSD,只是需要注意FreeBSD slice的分区顺序。

  3.1.1安装Linux

  第一步是正常安装Linux。你必须在硬盘上留下一些空间作为FreeBSD的slice。你不必分出一个Linux swap分区,但是如果你需要一个,将其放在你为FreeBSD安排的空间中。这个方法可以使你在以后使用FreeBSD的空间时,删除Linuxswap分区。

  当你安装了Linux后,你必须重新编译一个新的内核。如果不熟悉,请读一下Linux kernel HOWTO。你必须在内核中包入UFS文件系统支持(只读)和BSD磁盘标记(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

  安装新内核和重新启动。如果你建立了一个Linux swap分区,则需要在/etc/fstab文件中的将任何一行包括swap的关键字的行删除。确定你一个可以以新的内核工作的启动软盘。现在你可以安装FreeBSD了。

  3.2 安装FreeBSD

  遵照FreeBSD的文档,安装FreeBSD。如果你已经建立了一个swap分区,则删除Linux的swap分区,(你可以使用FreeBSD的fdisk程序)注意在FreeBSD分区中的顺序。如果你使用默认方式来标记,则第二个分区将被建立为swap分区。完成安装后,使用新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分区工作:

  /dev/hda6 none swap sw 0 0

  当FreeBSD可以使用任何一种类型的分区作为swap分区,Linux需要一个特别的标记在这个swap分区中。这个标记被mkswap程序所建立。FreeBSD会在其使用这个共享的swap分区时删除这个标记,所以你将必须每次进入Linux后,运行mkswap。为了使其可以自动运行,你必须在启动时运行swapon的脚本程序。在Red Hat Linux它们是/etc/rc.d/rc.sysinit。在下面一行放在这个文件的swapon -a之前:

  awk -- '/swap/ && ($1 !~ /#/) { system("mkswap "$1"") }' /etc/fstab

  在每次你启动时,这将会在/etc/fstab文件中的每个swap分区都被mkswap操作一次,除非被注释的行。(#是注释符号)

  当你已经重新启动了Linux后,可以检查swap空间的大小。也可以启动到FreeBSD来确定一下,所有的正常。如果不,你可能使用错误的分区作为swap分区。这个问题唯一的解决方法就是重新安装FreeBSD,并且重新试一试上面所介绍的方法。经验是一位好老师。

  4.使LILO启动FreeBSD

  可以非常容易地使用LILO启动FreeBSD。如果你需要安装LILO,则不要安装FreeBSD的启动程序(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文件系统

  非常不幸的,UFS驱动程序在Linux 2.0.xx内核中没有包括对FreeBSD的支持。当你尝试挂起一个FreeBSD文件系统,你可能会得到一信息出错信息(其实文件系统被挂起了,但是你不能在上作任何事情)这个问题在新的内核2.1.87之后,就被解决了。

  在metalab.unc.edu上有另一个UFS驱动程序,它运行在Linux 2.0.xx内核之上(xx<=30)。它被称为U2FS并且当前版本为u2fs-0.4.3.tar.gz。现在你必须重新建立一个新的内核,支持U2FS文件系统和BSD的分区格式。(见上面的"安装Linux"章节)当你使用U2FS时,你可以不选择UFS文件系统的支持。当你已经安装了这个内核,你可以挂起你的UFS文件系统(除了swap分区以外的所有FreeBSD slice):

  mount -t u2fs /dev/hda8 /mnt

  如果你使用更高版本的Linux内核2.1.87或更高,可以用:

  mount -t ufs /dev/hda8 /mnt

  从2.1.112开始,你必须加入-o ufstype=44bsd,如:

  mount -t ufs -o ufstype=44bsd /dev/hda8 /mnt

  UFS(以及U2FS)驱动程序是只读的。你只能读出UFS文件系统中的数据,但你不能写入。一个实验性的可读写的UFS驱动程序被放入到Linux内核2.1.112之后的版本中,并且代替了只读的那么个驱动程序。从2.1.127之后,向FreeBSD分区写入就被支持了。

  5.2在FreeBSD中挂起ext2fs文件系统

  在FreeBSD中挂起ext2fs文件系统,你必须首先建立一个新的内核,它要支持ext2fs。检阅一下 ,可以告诉你如何做。在你的内核配置文件中放入:

  optins "EXT2FS"

  当你已经使用这个新内核重新启动后,你可以使用以下命令以挂起ext2fs文件系统:

  mount -t ext2fs /dev/wd0s3 /mnt

  由于在FreeBSD 2.2.8或更早的版本中的一个bug,你将必须在你关闭FreeBSD系统之前将所有的ext2fs文件系统全部卸下,当然,如果你使用这些版本的话。如果你在ext2fs文件系统正挂起时关闭FreeBSD系统,FreeBSD不能与与此同时UFS文件系统同步。这将导致在FreeBSD被重新启动后运行fsck。你可以在/etc/rc.shutdown文件中输入:

  umount -a -t ext2fs

  来绕过这个问题。这个bug在FreeBSD 3.x以后就被修复了。

  6.运行外部二进制代码

  6.1在Linux下,运行FreeBSD二进制代码

  iBCS软件包支持在Linux下运行FreeBSD的二进制代码。但它太老了。我不能让它工作。如果你知道有更好的工具,请告诉我。

  6.2在FreeBSD下运行Linux的二进制代码

  FreeBSD具有运行Linux的二进制代码(a.out和ELF格式)的能力。你必须遵循以下三个步骤:

  1、必须打开Linux兼容。(在FreeBSD 2.2.2---根据版本的不同而不同)你需要在/etc/rc.conf中加入,并且修改。

  将:

  linux_enable="NO"

  改成:

  linux_enable="YES"

  然后重新启动。另一种载入对Linux二进制代码支持的方法是运行命令/usr/bin/linux。这样你就不必重新启动了,并且你并不总是有Linux二进制代码支持的装入器(比如,你需要节省内存)记住,在FreeBSD内核配置文件中加入:

  options COMPAT_LINUX

  2、如果你的Linux二进制代码被动态地连接了,你就必须安装Linux共享库。在FreeBSD 2.2{2,5,6}中都有这个库,作为linux_lib-2.4.tgz(可能已经有新的版本了)的软件包。运行:

  pkg_add /linux_lib-2.4.tgz

  是你希望将其装入的位置。你也可以从网上安装:

  pkg_add ftp://ftp.freebsd.org/pub/FreeBSD/packages-stable/All/linux_lib-2.4.tgz

  或通过重新运行/stand/sysinstall.输入"Configure","Packages"并且使用这个菜单。如果你运行静态的Linux二进制代码的连接,你需要运行以下命令:

  brandelf -t Linux

  3、安装你希望运行的Linux程序。这个程序可以安装在UFS上也可以安装在ext2fs文件系统上。(查阅“在FreeBSD在挂起ext2fs文件系统”。)

  我已经成功地将Applixware 4.3和Netscape 3.01(ELF格式)的Linux版本在FreeBSD 2.2.2运行了。(当然,我知道有一个FreeBSD的Netscape 4版本)Linux版本的Staroffice 3和4在FreeBSD下也运行非常好。StarOffice 5必须依靠Linux的内部的线程的管理方式,而不能在当前的FreeBSD下运行。关于这个话题,请查阅其它FreeBSD的文档

  7.信息资源

  http://www.image.dk/~nkbj,最新的mini-HOWTO可以在些找到,有许多种格式(包括SGML和PostScript)。你可以在http://www.futuresouth.com/~fullermd/freebsd/bsdvlin.html找到更多的关于Linux和FreeBSD的文章。

欢迎访问最专业的网吧论坛,无盘论坛,网吧经营,网咖管理,网吧专业论坛https://bbs.txwb.com

关注天下网吧微信,了解网吧网咖经营管理,安装维护:


本文来源:赛迪网 作者:佚名

声明
本文来源地址:0
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。若文章侵犯了您的相关权益,请及时与我们联系,我们会及时处理,感谢您对本站的支持!联系Email:support@txwb.com.,本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧·网吧天下
  • 本周热门
  • 本月热门
  • 阅读排行