免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 26873 | 回复: 20
打印 上一主题 下一主题

[FreeBSD] 【系统安装】基于UFS+ZFS的FreeBSD混合文件系统方案 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-30 12:47 |只看该作者 |倒序浏览
本帖最后由 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支持)。
  1. ls /dev/ad*
复制代码
划分出12GB空间作为swap,注意,如果是物理扇区为4KB的高级格式硬盘,要加入-a 4K参数以保证扇区对齐。
  1. gpart add -s 12G -t freebsd-swap ada2
复制代码
给FreeBSD分出一个分区用于挂载/boot,注意,如果是物理扇区为4KB的高级格式硬盘,要加入-a 4K参数以保证扇区对齐。
  1. gpart add -s 1G -t freebsd-ufs ada2
复制代码
剩下的容量都给ZFS,注意,如果是物理扇区为4KB的高级格式硬盘,要加入-a 4K参数以保证扇区对齐。
  1. gpart add -t freebsd-zfs ada2
复制代码
把FreeBSD gpt的boot loader写入第一分区。(如果是我这样的Linux+FreeBSD,并且用Linux的Grub2引导的情况,这步不需要)
  1. gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ada2
复制代码
在ZFS分区中,创建Single Pool模式的ZFS,把它命令为tank。
  1. zpool create tank /dev/ada2p7
  2. zpool set bootfs=tank tank
  3. zfs set checksum=fletcher4 tank
复制代码
用UFS文件系统格式化以后要用做/boot的分区。
  1. newfs /dev/ada2p6
复制代码
使用zfs create命令,创建系统目录结构。
  1. zfs set mountpoint=/mnt tank
  2. zfs create tank/usr
  3. zfs create tank/usr/home
  4. zfs create tank/var
  5. zfs create -o compression=on -o exec=on -o setuid=off tank/tmp
  6. zfs create -o compression=lzjb -o setuid=off  tank/usr/ports
  7. zfs create -o compression=off -o exec=off -o setuid=off tank/usr/ports/distfiles
  8. zfs create -o compression=off -o exec=off -o setuid=off tank/usr/ports/packages
  9. zfs create -o compression=lzjb -o exec=off -o setuid=off  tank/usr/src
  10. zfs create -o compression=lzjb  -o exec=off     -o setuid=off   tank/var/crash
  11. zfs create -o exec=off -o setuid=off tank/var/db
  12. zfs create -o compression=lzjb  -o exec=on -o setuid=off  tank/var/db/pkg
  13. zfs create -o exec=off -o setuid=off   tank/var/empty
  14. zfs create -o compression=lzjb  -o exec=off -o setuid=off  tank/var/log
  15. zfs create -o compression=gzip -o exec=off -o setuid=off tank/var/mail
  16. zfs create -o exec=off -o setuid=off   tank/var/run
  17. zfs create -o compression=lzjb  -o exec=on -o setuid=off   tank/var/tmp
复制代码
使用zpool export和zpool import把刚才规划的ZFS挂载到/mnt,以便下一步安装系统。
  1. zpool export tank
  2. zpool import -o cachefile=/tmp/zpool.cache tank
复制代码
现在,你所规划的ZFS已挂载到 /mnt,接着执行以下命令
  1. chmod 1777 /mnt/tmp
  2. chmod 1777 /mnt/var/tmp
复制代码
把刚才创建的UFS分区挂载到/mnt/bootdir
  1. mount /dev/ada2p6 /mnt/bootdir
复制代码
正式把FreeBSD 9.0安装进/mnt 中的ZFS,采用sh作为shell
  1. sh
  2. cd /usr/freebsd-dist
  3. export DESTDIR=/mnt
  4. 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拷贝到指定位置。
  1. cp /tmp/zpool.cache /mnt/boot/zfs/zpool.cache
复制代码
最后,为新系统编写相关的/etc/rc.conf /etc/fstab /boot/loader.conf,指示新系统由ZFS启动。注意,未重新启动之前,有关文件是放在/mnt下。
编写 rc.conf
  1. echo 'zfs_enable="YES"' >> /mnt/etc/rc.conf
复制代码
编写 loader.conf
  1. echo 'zfs_load="YES"' >> /mnt/boot/loader.conf
  2. echo 'vfs.root.mountfrom="zfs:tank"' >> /mnt/boot/loader.conf
复制代码
编写fstab
  1. cat << EOF > /zroot/etc/fstab
  2. #Device                       Mountpoint              FStype  Options         Dump    Pass#
  3. /dev/ad2p6                    /bootdir                ufs     rw              0       0
  4. /dev/ad2p5                    none                    swap    sw              0       0
  5. EOF
复制代码
进入/mnt,把boot整个文件夹移动到bootdir下面,并且把原来的boot链接到bootdir
  1. mv boot bootdir/
  2. ln -s bootdir/boot /mnt/boot
  3. chflags -h sunlink /mnt/boot
复制代码
接着把UFS分区卸载掉。
  1. umount /mnt/bootdir
复制代码
然后,把ZFS的挂载点指定为/。
  1. zfs set readonly=on tank/var/empty
  2. zfs unmount -a
  3. zfs set mountpoint=legacy tank
  4. zfs set mountpoint=/tmp tank/tmp
  5. zfs set mountpoint=/usr tank/usr
  6. zfs set mountpoint=/var tank/var
复制代码
然后进行重启,设置下Grub2,添加FreeBSD的启动项。
  1. menuentry "FreeBSD" {
  2.     insmod part_gpt
  3.     insmod ufs2
  4.     set root=(hd2,6)
  5.     kfreebsd /boot/loader
  6. }
复制代码
之后就可以顺利进入新装好的FreeBSD-9.0 based on UFS+ZFS了,当然,为了方便起见,可以把/usr/home连接到/。
  1. ln -sf /usr/home /home
复制代码
除此以外,记得设置root密码和时区。
  1. passwd
  2. tzsetup
复制代码
这样,你的基于GPT的UFS+ZFS FreeBSD就全部安装完成了。

评分

参与人数 2可用积分 +10 收起 理由
ulovko + 2 赞!感谢分享 ^_^
gvim + 8 赞一个!

查看全部评分

论坛徽章:
2
双子座
日期:2014-05-18 22:44:102015年迎新春徽章
日期:2015-03-04 09:58:11
2 [报告]
发表于 2012-07-30 12:56 |只看该作者
wood大神吧 哈哈

论坛徽章:
0
3 [报告]
发表于 2012-07-30 13:03 |只看该作者
leeqiand 发表于 2012-07-30 12:56
wood大神吧 哈哈

LZ是BSD小菜鸟……

论坛徽章:
2
双子座
日期:2014-05-18 22:44:102015年迎新春徽章
日期:2015-03-04 09:58:11
4 [报告]
发表于 2012-07-30 13:07 |只看该作者
回复 3# oily1314


    看我头像 名称 哈哈

论坛徽章:
13
15-16赛季CBA联赛之同曦
日期:2016-01-28 19:52:032015亚冠之北京国安
日期:2015-10-07 14:28:19NBA常规赛纪念章
日期:2015-05-04 22:32:03处女座
日期:2015-01-15 19:45:44卯兔
日期:2014-10-28 16:17:14白羊座
日期:2014-05-24 15:10:46寅虎
日期:2014-05-10 09:50:35白羊座
日期:2014-03-12 20:52:17午马
日期:2014-03-01 08:37:27射手座
日期:2014-02-19 19:26:54子鼠
日期:2013-11-30 09:03:56狮子座
日期:2013-09-08 08:37:52
5 [报告]
发表于 2012-07-30 13:11 |只看该作者
感谢分享 支持! ^_^

论坛徽章:
0
6 [报告]
发表于 2012-07-30 14:02 来自手机 |只看该作者
精華文章,學習了

论坛徽章:
0
7 [报告]
发表于 2012-07-30 18:17 |只看该作者
双系统,复杂啊

论坛徽章:
29
技术图书徽章
日期:2013-09-02 19:59:502015元宵节徽章
日期:2015-03-06 15:51:332015小元宵徽章
日期:2015-03-06 15:57:20操作系统版块每日发帖之星
日期:2015-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17操作系统版块每日发帖之星
日期:2015-09-21 06:20:002015亚冠之水原三星
日期:2015-10-30 00:06:07数据库技术版块每日发帖之星
日期:2015-12-24 06:20:0015-16赛季CBA联赛之上海
日期:2016-01-07 10:32:07操作系统版块每日发帖之星
日期:2016-01-08 06:20:00操作系统版块每日发帖之星
日期:2016-05-18 06:20:00IT运维版块每日发帖之星
日期:2016-07-23 06:20:00
8 [报告]
发表于 2012-08-01 13:25 |只看该作者
收下了,有时间再说

论坛徽章:
4
天秤座
日期:2015-01-09 16:08:43狮子座
日期:2015-01-10 12:54:442015年亚洲杯之卡塔尔
日期:2015-01-29 23:02:232015亚冠之卡尔希纳萨夫
日期:2015-10-17 10:41:11
9 [报告]
发表于 2012-08-03 01:21 |只看该作者
折腾过一回gpt分区安装Linux + FreeBSD,后来再装第二个LINUX不知怎么的搞坏分区表了

论坛徽章:
0
10 [报告]
发表于 2012-08-13 23:27 |只看该作者
帮顶!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP