忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT 视频 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
123下一页
最近访问板块 发新帖
查看: 20579 | 回复: 20

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

论坛徽章:
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.png

评分

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

查看全部评分

论坛徽章:
2
双子座
日期:2014-05-18 22:44:102015年迎新春徽章
日期:2015-03-04 09:58:11
发表于 2012-07-30 12:56 |显示全部楼层
wood大神吧 哈哈

论坛徽章:
0
发表于 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
发表于 2012-07-30 13:07 |显示全部楼层
回复 3# oily1314


    看我头像 名称 哈哈

论坛徽章:
12
2015亚冠之北京国安
日期: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-03-12 20:52:17午马
日期:2014-03-01 08:37:27射手座
日期:2014-02-19 19:26:54子鼠
日期:2013-11-30 09:03:56寅虎
日期:2014-05-10 09:50:35狮子座
日期:2013-09-08 08:37:5215-16赛季CBA联赛之同曦
日期:2016-01-28 19:52:03
发表于 2012-07-30 13:11 |显示全部楼层
感谢分享 支持! ^_^

论坛徽章:
0
发表于 2012-07-30 14:02 来自手机 |显示全部楼层
精華文章,學習了

论坛徽章:
0
发表于 2012-07-30 18:17 |显示全部楼层
双系统,复杂啊

论坛徽章:
27
技术图书徽章
日期:2013-09-02 19:59:502015年亚洲杯之阿曼
日期:2015-03-05 21:12:582015元宵节徽章
日期: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:00
发表于 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
发表于 2012-08-03 01:21 |显示全部楼层
折腾过一回gpt分区安装Linux + FreeBSD,后来再装第二个LINUX不知怎么的搞坏分区表了

论坛徽章:
0
发表于 2012-08-13 23:27 |显示全部楼层
帮顶!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

【有奖调查】AI时代如何迎接未知挑战?

人工智能一直在医疗行业扮演着重要角色,最早的专家系统和后来的基因诊断都是人工智能技术在医疗的行业探索。近年来,随着深度学习等技术的进步,人工智能在医疗行业的应用领域不断扩展,医学影像智能诊断、语音电子病历、癌症智能诊断等均已逐渐成为热门发展方向。
而作为人工智能重要推动力的深度学习技术的快速发展却亟需认知系统的强力支撑。
----------------------------------------
活动时间:2017年5月15日-6月5日

调查入口>>
  

北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP