- 论坛徽章:
- 0
|
本帖最后由 ulovko 于 2012-08-29 11:17 编辑
我的FreeBSD和Funtoo Linux装在同一个硬盘上(GPT)。为了和Grub2兼容(Funtoo Linux的Grub2不包含ZFS模块,因此无法直接用Grub2来引导纯ZFS的FreeBSD),于是决定把FreeBSD的/boot或者/单独分出来,使用ufs文件系统。但是考虑到如果把/作为ufs,那么其他挂载点不太好处理,会丧失很多灵活性,因此最终决定把/boot作为ufs,用Grub2引导来引导FreeBSD的loader,达到兼容的目的。网上找到的都是基于MBR分区表的教程,经过一番摸索,终于顺利达成目标。
本文整理自以下两个网页:
FreeBSD的官方wiki:http://wiki.freebsd.org/RootOnZFS/UFSBoot
以及网友zeissoctopus的贡献:http://bbs.chinaunix.net/thread-3579216-1-1.html
我的硬盘分区情况如下:
/dev/sdc1——BIOS兼容分区
/dev/sdc2——Linux的/boot
/dev/sdc3——Linux的swap
/dev/sdc4——Linux的/
/dev/sdc5——FreeBSD的swap
/dev/sdc6——FreeBSD的/boot(UFS)
/dev/sdc7——FreeBSD的/(ZFS)
我所要做的就是把剩余的400GB空间划分给FreeBSD,并且把/boot和swap也分出来,独立于ZFS之外。
话不多说,步骤如下:
安装介质准备
下载FreeBSD-9.0-RELEASE-amd64-memstick.img,把它写入U盘。
U盘启动FreeBSD 9.0
进入LiveCD模式
不要选install选LiveCD
输入root 按 ENTER 进入Live系统(不用密码)
找出硬盘的名称,第一个AHCI硬盘通常是 /dev/ada0(FreeBSD-9.0内核内建AHCI支持)。划分出12GB空间作为swap,注意,如果是物理扇区为4KB的高级格式硬盘,要加入-a 4K参数以保证扇区对齐。- gpart add -s 12G -t freebsd-swap ada2
复制代码 给FreeBSD分出一个分区用于挂载/boot,注意,如果是物理扇区为4KB的高级格式硬盘,要加入-a 4K参数以保证扇区对齐。- gpart add -s 1G -t freebsd-ufs ada2
复制代码 剩下的容量都给ZFS,注意,如果是物理扇区为4KB的高级格式硬盘,要加入-a 4K参数以保证扇区对齐。- gpart add -t freebsd-zfs ada2
复制代码 把FreeBSD gpt的boot loader写入第一分区。(如果是我这样的Linux+FreeBSD,并且用Linux的Grub2引导的情况,这步不需要)- gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ada2
复制代码 在ZFS分区中,创建Single Pool模式的ZFS,把它命令为tank。- zpool create tank /dev/ada2p7
- zpool set bootfs=tank tank
- zfs set checksum=fletcher4 tank
复制代码 用UFS文件系统格式化以后要用做/boot的分区。使用zfs create命令,创建系统目录结构。- zfs set mountpoint=/mnt tank
- zfs create tank/usr
- zfs create tank/usr/home
- zfs create tank/var
- zfs create -o compression=on -o exec=on -o setuid=off tank/tmp
- zfs create -o compression=lzjb -o setuid=off tank/usr/ports
- zfs create -o compression=off -o exec=off -o setuid=off tank/usr/ports/distfiles
- zfs create -o compression=off -o exec=off -o setuid=off tank/usr/ports/packages
- zfs create -o compression=lzjb -o exec=off -o setuid=off tank/usr/src
- zfs create -o compression=lzjb -o exec=off -o setuid=off tank/var/crash
- zfs create -o exec=off -o setuid=off tank/var/db
- zfs create -o compression=lzjb -o exec=on -o setuid=off tank/var/db/pkg
- zfs create -o exec=off -o setuid=off tank/var/empty
- zfs create -o compression=lzjb -o exec=off -o setuid=off tank/var/log
- zfs create -o compression=gzip -o exec=off -o setuid=off tank/var/mail
- zfs create -o exec=off -o setuid=off tank/var/run
- zfs create -o compression=lzjb -o exec=on -o setuid=off tank/var/tmp
复制代码 使用zpool export和zpool import把刚才规划的ZFS挂载到/mnt,以便下一步安装系统。- zpool export tank
- zpool import -o cachefile=/tmp/zpool.cache tank
复制代码 现在,你所规划的ZFS已挂载到 /mnt,接着执行以下命令- chmod 1777 /mnt/tmp
- chmod 1777 /mnt/var/tmp
复制代码 把刚才创建的UFS分区挂载到/mnt/bootdir- mount /dev/ada2p6 /mnt/bootdir
复制代码 正式把FreeBSD 9.0安装进/mnt 中的ZFS,采用sh作为shell- sh
- cd /usr/freebsd-dist
- export DESTDIR=/mnt
- for file in base.txz lib32.txz kernel.txz doc.txz games.txz ports.txz src.txz; \ do (cat $file | tar --unlink -xpJf - -C ${DESTDIR:-/}); done
复制代码 这样一来,FreeBSD的基本系统就安装进/mnt中了,以下一步必需要做,否则你重启电脑会失败,把zpool.cache拷贝到指定位置。- cp /tmp/zpool.cache /mnt/boot/zfs/zpool.cache
复制代码 最后,为新系统编写相关的/etc/rc.conf /etc/fstab /boot/loader.conf,指示新系统由ZFS启动。注意,未重新启动之前,有关文件是放在/mnt下。
编写 rc.conf- echo 'zfs_enable="YES"' >> /mnt/etc/rc.conf
复制代码 编写 loader.conf- echo 'zfs_load="YES"' >> /mnt/boot/loader.conf
- echo 'vfs.root.mountfrom="zfs:tank"' >> /mnt/boot/loader.conf
复制代码 编写fstab- cat << EOF > /zroot/etc/fstab
- #Device Mountpoint FStype Options Dump Pass#
- /dev/ad2p6 /bootdir ufs rw 0 0
- /dev/ad2p5 none swap sw 0 0
- EOF
复制代码 进入/mnt,把boot整个文件夹移动到bootdir下面,并且把原来的boot链接到bootdir- mv boot bootdir/
- ln -s bootdir/boot /mnt/boot
- chflags -h sunlink /mnt/boot
复制代码 接着把UFS分区卸载掉。然后,把ZFS的挂载点指定为/。- zfs set readonly=on tank/var/empty
- zfs unmount -a
- zfs set mountpoint=legacy tank
- zfs set mountpoint=/tmp tank/tmp
- zfs set mountpoint=/usr tank/usr
- zfs set mountpoint=/var tank/var
复制代码 然后进行重启,设置下Grub2,添加FreeBSD的启动项。- menuentry "FreeBSD" {
- insmod part_gpt
- insmod ufs2
- set root=(hd2,6)
- kfreebsd /boot/loader
- }
复制代码 之后就可以顺利进入新装好的FreeBSD-9.0 based on UFS+ZFS了,当然,为了方便起见,可以把/usr/home连接到/。除此以外,记得设置root密码和时区。这样,你的基于GPT的UFS+ZFS FreeBSD就全部安装完成了。
|
评分
-
查看全部评分
|