免费注册 查看新帖 |

Chinaunix

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

[FreeBSD] 一步步教你安装 FreeBSD 9.0 Beta1 于 GPT + ZFS [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-09 20:02 |只看该作者 |正序浏览
本帖最后由 zeissoctopus 于 2011-10-30 21:57 编辑

修正games.txz 錯誤 2011年 10 月 31 日

已知问题
FreeBSD 9.0-BETA1 虽然以全新 bsdinstaller 来安装,它可以透过 gpart 来把硬盘格式化 GPT+freebsd-zfs,但可惜它仍未支援 mount ZFS 来安装。简言之,
FreeBSD 9.0-BETA1 安装程式仍未支援 GPT+ZFS 安装。

本文范围
  • 重新划分分割表,把所有旧资料清空
  • 使用 gpt 规划硬盘分割表
  • 单颗硬盘全使用 ZFS
  • 使用 ZFS 来规划 SWAP,不必另加独立 SWAP 分区
  • 最少安装 FreeBSD Base,reboot 后可以成功由 ZFS 启动 FreeBSD。
  • 本文不包括网络设定,第三方软件安装


本文参考 2 个网页


硬件环境
Acer Aspire 1810TZ 小笔电
BIOS 3.03
4GB DDR2 RAM
320GB 硬盘

安装媒体
FreeBSD-9.0-BETA1-amd64-memstick.img

硬件准备
BIOS 中把 SATA 设为 AHCI 模式
BIOS 设定由 U 盘启动

安装媒体准备
下载 FreeBSD-9.0-BETA1-amd64-memstick.img,把它写入 U 盘

U 盘启动 FreeBSD 9.0

进入 Live 模式
不要选 install 选 Live
输入 root 按 ENTER 进入 Live 系统 ( 不用密码 )
我建议按 ALT+F2 转至另一个 console 进行续后的程序,减少受 kernel 信息的搔扰

创建一个 RAMDISK,把定 mount 于 /tmp,用来暂存下文提及必要档案 /tmp/zpool.cache
  1. umount /dev/md1
  2. mdmfs -s 512M md1 /tmp
复制代码
建立 GPT+ZFS 分割表

找出硬盘的名称,第一个 AHCI 硬盘通常是 /dev/ada0
  1. ls /dev/ad*
复制代码
检查硬盘是否有分割区
  1. gpart show ada0
复制代码
如果有分割区,使用 gpart 清空
由于每部电脑情况不同,这部份请自行 man gpart 学习有关 gpart delete 和 gpart erase 的语法

清空旧资料后,现在可以重新划分 gpt 分割表
  1. gpart create -s gpt ada0
复制代码
加入 FreeBSD Boot loader 至第一个分割区
  1. gpart add -b 34 -s 64k -t freebsd-boot ada0
复制代码
把余下全部硬盘容量都分给 ZFS 并把它配至于第二个分割区
  1. gpart add -t freebsd-zfs ada0
复制代码
把 FreeBSD gpt+zfs 的 boot loader 写入第一个分割区
  1. gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
复制代码
在第二个分割区中,创建单碟模式的 ZFS,把它命令为 zroot
  1. zpool create zroot /dev/ada0p2
  2. zpool set bootfs=zroot zroot
  3. zfs set checksum=fletcher4 zroot
复制代码
使用 zfs create 命令,创建 SWAP 于 ZFS 之中,我笔电有 4GB RAM,所以想创建一个 10GB SWAP
  1. zfs create -V 10G zroot/swap
  2. zfs set checksum=off zroot/swap
  3. zfs set org.freebsd:swap=on zroot/swap
复制代码
使用 zfs create 命令,自行创建系统目录结构
  1. zfs set mountpoint=/mnt zroot
  2. zfs create zroot/usr
  3. zfs create zroot/var
  4. zfs create -o compression=on -o exec=on -o setuid=off zroot/tmp
  5. zfs create -o compression=lzjb -o setuid=off  zroot/usr/ports
  6. zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/distfiles
  7. zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/packages
  8. zfs create -o compression=lzjb -o exec=off -o setuid=off  zroot/usr/src
  9. zfs create -o compression=lzjb  -o exec=off     -o setuid=off   zroot/var/crash
  10. zfs create -o exec=off -o setuid=off zroot/var/db
  11. zfs create -o compression=lzjb  -o exec=on -o setuid=off  zroot/var/db/pkg
  12. zfs create -o exec=off -o setuid=off   zroot/var/empty
  13. zfs create -o compression=lzjb  -o exec=off -o setuid=off  zroot/var/log
  14. zfs create -o compression=gzip -o exec=off -o setuid=off zroot/var/mail
  15. zfs create -o exec=off -o setuid=off   zroot/var/run
  16. zfs create -o compression=lzjb  -o exec=on -o setuid=off   zroot/var/tmp
复制代码
使用 zpool export 和 zpool import 把刚才规划的 ZFS mount 进 /mnt,以便下一步安装系统
  1. zpool export zroot
  2. zpool import -o cachefile=/tmp/zpool.cache zroot
复制代码
现在,你所规划的 ZFS 已 mount 到 /mnt,你可以 ls /mnt,会发现有 /mnt/usr /mnt/var /mnt/tmp,此时请完成以下命令
  1. chmod 1777 /mnt/tmp
  2. cd /mnt ; ln -s /usr/home home
  3. chmod 1777 /mnt/var/tmp
复制代码
正式安装 FreeBSD 9.0-BETA1 入 /mnt 中的 ZFS,此时以转用 sh 做 SHELL 为佳,请留意 for 那一行,因为太长,宜使用 \ 分行输入之
  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
复制代码
你已把所有 Base 档案安装入 /mnt 中的 ZFS 了,以下一步必需要做,否则你重启电脑会失败,把 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:zroot"' >> /mnt/boot/loader.conf
复制代码
编写 fstab (其实这档案不必有内容,因为一切 mount point 和 swap 都会在启动 ZFS 时自动 mount 好,这个空 fstab 是为了满足一些 系统 script 而存在而已)
  1. touch /mnt/etc/fstab
复制代码
还有最后一步!指示你的 ZFS mount 为 /
  1. zfs set readonly=on zroot/var/empty
  2. zfs unmount -a
  3. zfs set mountpoint=legacy zroot
  4. zfs set mountpoint=/tmp zroot/tmp
  5. zfs set mountpoint=/usr zroot/usr
  6. zfs set mountpoint=/var zroot/var
复制代码
恭喜你,一切大功告成,只要你输入 reboot,重新由硬盘启动 FreeBSD 9.0BETA,你便可以享受全新 FreeBSD 9.0 BETA + GPT + ZFS 的乐趣
重启后,记得以 root 登入,用 tzsetup 设定时区,用 passwd 设定 root 的密码

论坛徽章:
0
28 [报告]
发表于 2012-02-18 16:55 |只看该作者
9.0已经按这个方法安装成功,呵呵。。。

论坛徽章:
0
27 [报告]
发表于 2012-02-18 14:12 |只看该作者
有时间试试

论坛徽章:
0
26 [报告]
发表于 2012-02-15 19:03 |只看该作者
正式版的9.0可以用这个方法安装吗?)

论坛徽章:
0
25 [报告]
发表于 2011-10-30 21:54 |只看该作者
今天按照LZ的步骤来做,发现几个细节问题。
第一,在创建freebsd-boot和freebsd-zfs之时,由于目前新的硬盘都是物理扇区4KB的高级格式硬盘,最好加上-a 4K参数,以便于扇区的对齐。

你說的是,原文對象是舊512 扇區硬盤,新4K 使用者需要適合調整參數

第二,在
cd /mnt ; ln -s /usr/home home
复制代码
这步,如果按照LZ的指令来做,/mnt下面的home软连接是指向LiveCD里面的/usr/home,而不是/mnt里面的/usr/home,此处是否有不妥?

reboot 後,/mnt 就變成真正 / 以上命令是針對安裝完成 reboot 後環境。 當然,還有其他實現方法,例如用ZFS 當然可以用ZFS 創建 home

第三,在把base释放到/mnt这一步,档案名称应当是games.txz而不是game.txz。
其他地方待验证。

對,多謝指正

現在已到9.0-Rc1 本文或多或少過時

论坛徽章:
0
24 [报告]
发表于 2011-10-30 19:22 |只看该作者
本帖最后由 oily1314 于 2011-10-30 19:42 编辑

今天按照LZ的步骤来做,发现几个细节问题。
第一,在创建freebsd-boot和freebsd-zfs之时,由于目前新的硬盘都是物理扇区4KB的高级格式硬盘,最好加上-a 4K参数,以便于扇区的对齐。
第二,在
  1. cd /mnt ; ln -s /usr/home home
复制代码
这步,如果按照LZ的指令来做,/mnt下面的home软连接是指向LiveCD里面的/usr/home,而不是/mnt里面的/usr/home,此处是否有不妥?似乎会导致
  1. zfs umount -a
复制代码
这一步出现device busy而无法umount的情况。
第三,在把base释放到/mnt这一步,档案名称应当是games.txz而不是game.txz。
其他地方待验证。

论坛徽章:
0
23 [报告]
发表于 2011-10-26 21:51 |只看该作者
1. 不支持EFI也能引导的,要设置GPT兼容MBR模式
2. 可以
3. 直接一个pool里划分就行了,后面附的网址有全 ...
axlrose 发表于 2011-10-26 10:40



    非常感谢!

    不过又来了一个小问题:设置GPT兼容MBR,是给"空"硬盘分区的时候,在分区工具里设置吗?(我现在用Gparted-livecd分区,PQ早不用了,先前给一块160G SATA移动硬盘分了GTP,不过当时没注意看有没有兼容"MBR"选项)

论坛徽章:
0
22 [报告]
发表于 2011-10-26 10:40 |只看该作者
1. 不支持EFI也能引导的,要设置GPT兼容MBR模式
2. 可以
3. 直接一个pool里划分就行了,后面附的网址有全ZFS安装方法
4. 跟传统的FS不同,没看到格式化的,详细介绍还得看ZFS手册

附网址 http://wiki.freebsdchina.org/feature/z/zfs
现在官方也整WIKI,真是不错  http://wiki.freebsd.org/  

可能回复有误,仅供参考,那个oracle的ZFS 手册强烈建议看看
目前只是virtualbox上折腾了一下,想到实体机笔记本上搞的话,最讨厌的就是XP不支持GPT了
另外因为乱整搞得进livecd, zpool import 加载不了pool了,还得折腾,建议最好在虚拟机玩熟先,免得
搞得重要数据
目前使用的是9.0 RC1的ISO

论坛徽章:
0
21 [报告]
发表于 2011-10-25 07:59 |只看该作者
有几个问题请教一下:
1.Google得GPT好像要主板支持EFI启动的,好像目前也没多少主板支持,至少我08年的DELL本不支持.
2.我预留了一个80G的主分区给BSD,不知道单分区能不能用ZFS装BSD
3.如果单分区装BSD,还有必要划分/boot  /usr /opt /tmp /var /home 等分slice吗?(linux下习惯了单独分区,不过遇到点麻烦,建立/home slice的时候说无法建立.我是最后建立/home的,我硬盘上还有ubuntu 占7个分区,不知道这slice是不是跟SATA的16个分区限制有关?)
4.ZFS文件系统好像不像其他的ext等等,不是只要格式化就可以,看楼主上面讲还有建立zpool什么的.网上搜得的ZFS一般都是百科或者维基上搜的,都是介绍特性的,没有使用方法啊,请问楼主这样的资料哪里可以找?

谢谢!

盼复!

论坛徽章:
0
20 [报告]
发表于 2011-09-11 15:30 |只看该作者
本帖最后由 vity 于 2011-09-11 23:04 编辑

重新做一遍成功了。问题出在 cachefile 文件没有拷贝过去,这是根文件下的分区信息表文件,启动时需要通过这个文件查找所有的pool,系统启动阶段自动导入。这个文件也可以在最后的时候用 zpool set cachefile=/mnt_to/mypool/boot/zfs/zpool.cache mypool 备份。另外, 挂载根目录和挂载其他目录一样可以写到 fstab中,文件类型zfs,没必要写配置入 loader.conf中。

------------走回头路的,看下边---------------
1,出现 mountroot不能进入的时候,试着输入 zfs:mypool 或者 zfs:mypool/sysboot ,关键是那个bootfs记录的pool的名字。
2,如果确实什么也看不出来问题,找不到毛病,那就liveCD启动,这是拯救模式,以前的硬盘上的数据都在,无需从零开始。
zpool import 看看硬盘上的zpool还在不在,如果有,提示可以 import的,执行
zpool import mypool 如果不行,提示加 -f ,则执行
zpool import -f mypool
数据应该就回来了,然后执行
zfs list 看看怎么挂载的。
然后把错误的设置改回来就是了。
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP