2006年12月27日星期三

FreeBSD ,Linux 共用Swap分区

在一台电脑上安装有FreeBSD和Linux两个系统时,可以让这两个系统使用同一个硬盘分区作为swap区,节省一定的硬盘空间。这里介绍一种实现共享swap区的方法,当然可能有其他方法也可以解决这一问题。这一方法在RedHat Linux release 4.1和4.1(Linux kernel 版本2.0.29 和2.0.30)和FreeBSD2.2.2上通过测试,高版本的系统应该同样可以实现。

首先安装哪个系统都无所谓,只需要注意一下FreeBSD的slice分区的次序。
第一步,安装Linux。
按照正常的步骤安装Linux,注意为安装FreeBSD留出硬盘空间。安装Linux时不必设定swap分区,如果你想加一个swap分区,那么把swap分区放到为FreeBSD留出的硬盘空间上。这样可以删除掉这个swap分区,然后安装FreeBSD。
安装完Linux,必须重新编译内核,加入UFS文件系统支持和BSD disklabel(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
安装新kernel并重新启动机器。注意如果你设定了swap分区,删除/etc/fstab文件中包含swap的一行。确定你有一张可以启动新内核的启动盘。然后安装FreeBSD。
第二步,安装FreeBSD。
按照正常步骤安装FreeBSD,如果为Linux分配了swap分区,可以用FreeBSD的fdisk删除掉。注意FreeBSD的slice分区的次序,如果使用默认分区,那么第二个分区是FreeBSD的swap分区。完成FreeBSD安装后重新启动到Linux。


第三步,在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的分区。如果FreeBSD的swap分区在这个slice上的第二个分区,那就是/dev/hda6。
那么就把下面一行加入/etc/fstab中:
/dev/hda6 none swap sw 0 0


由于FreeBSD可以使用任何形式的分区作为swap分区。而Linux需要在swap分区上设定一个特殊标识。这个标识是是用mkswap生成的。FreeBSD在使用swap分区时破坏了这个标识。所以在每次启动Linux时都要运行mkswap来重新设定这个标识。为自动完成这个工作,找到启动时执行swapon的script文件。在RedHat Linux中这个文件是/etc/rc.d/rc.sysinit,将下面一行加在swapon -a 的前面。
awk -- '/swap/ && ( !~ /#/) { system("mkswap """) }' /etc/fstab


这样在每次启动Linux时就会在/etc/fstab中设定的swap分区上运行mkswap。
好了,完成了设定,可以重新启动到FreeBSD看看swap分区是否工作,再重新启动到Linux看看是否工作。但愿你能顺利的设定完成。

巧用Grub重新引导FreeBSD

    前天,因为我的XP中了病毒,一气之下,重装了.让我郁闷的是重装后BSD无法引导了.

 

    如果当时有光盘的话,我还可以用BSD光盘来修复一下,可是眼下没有BSD光盘,没有任何系统启动盘,怎么呢?

 

    这时我想到了Grub,我可不可以用Grub来引导呢?于是上网查找了一下Grub的用法,脑子一亮,想到了办法.

 

*原理:我一般先说原理的,请大家习惯,因为这比直接告诉你结果更有效 :)

 

    Grub引导无非就是先指定一个root(*也就是根目录),然后指定一下引导kernel.至于Grub中的那些什么clainloader什么的都没多少用处,大家不要被纸老虎吓到.

 

    按上面的原理,我们先来指定root,这个意思就是说让你指定BSD启动区的安装位置.我的BSD是安装在ad0s3上的,也就是说是硬盘的第三个分区,如果你是个细心的人,你应该发现在BSD下用df 的话会看到你的BSD分区是/dev/ad0s3a /dev/ad0s3e /ad0s3f 等.而且,你的BSD的/一般都会是/dev/ad0s3a.所以在这里我们就要指定Grub的root/dev/ad0s3a.

 

    但在写到Grub中时要注意,Grub的硬盘指定方法是不一样的.比如硬盘的第2个分区,用Grub来表示就应该是hd(0,1),像BSD这样有slince的系统,就要指定slince,比如我的是在第一个硬盘的第三分区的a上,那就是hd(0,2,a)

 

    接下来,我们要指定Grub要调用的kernel是哪一个.我的是在/boot/loader(实际上一般情况下,你的也应该是).

 

那么完整的FreeBSD引导菜单应该写作:

#########################################

title FreeBSD                #只是标题而已   #####

root hd(0,2,a)               #BSD的安装sline#####

kernel /boot/loader     #Grub要调用的kernel#

########################################

 

 

如果你也跟我一样,没有BSD的光盘,也没有工具盘的话,就用这个方法来引导吧.

FreeBSD 控制台彩色 HowTo

这是我从 CU上收集来的,有些我自己也还没有试过:
1 delphij大侠的方法:
把下面的代码加入到你的 /etc/csh.cshrc:

程序代码:

setenv LSCOLORS ExGxFxdxCxegedabagExEx
setenv CLICOLOR yes
set prompt = '[%B%n@%m%b] %B%~%b%# '
set autolist
bindkey "^W" backward-delete-word
bindkey -k up history-search-backward
bindkey -k down history-search-forward

然后再执行:

sed -i.bak -E s/set\ prompt/#set\ prompt/g /root/.cshrc

*注:上面这段话其实就是把把原来的~/.cshrc存为~/.cshrc.bak然后把新的~/.cshrc里的 set prompt一节加上“#”来注销,学过shell的应该知道。

然后logout,再login,就可以看到了。set prompt一节并不必要。


2 在/boot/loader.conf添加loader_color="yes" 可以使精灵达到这种效果!
3 

程序代码:

options SC_NORM_ATTR=(FG_GREENBG_BLACK)
options SC_NORM_REV_ATTR=(FG_YELLOWBG_GREEN)
options SC_KERNEL_CONS_ATTR=(FG_REDBG_BLACK)
options SC_KERNEL_CONS_REV_ATTR=(FG_BLACKBG_RED)
options VESA
options SC_PIXEL_MODE

然后在/etc/rc.conf里加上
allscreens_flags="-g 100x37 VESA_800x600"

把你的终端设置成800x600的。(不过这个我试过,似乎会出错,这个800x600你不加也可以。)

这里我要说明的是第3种方法,大家可以看到上面的FG_GREEN,那么是不是说我们就只能用这几种颜色呢?答案当然是否定的,例如我想换成浅蓝色怎么办?

#vidcontrl show

这时你可以看到很多种颜色的列表,后面的英文就是你要改的,比如浅蓝cyan,那么,前景色就是FG_CYAN,这样就可以了,当然你也可以选其他的,比如女孩子喜欢粉红,有人喜欢深绿,Just Do It Yourself