FreeBSD 9.0 的 GPT 纯 ZFS 安装

FreeBSD 9.0 的 GPT 纯 ZFS 安装

注意

由于 FreeBSD 9.0 采用了新的 bsdinstall,官方的 WIKI 指出,原先的 GPT ZFS boot 安装方法可能会不适用(未验证),故有此文。

本文介绍的是基于 GPT 以 ZFS 为根分区安装 FreeBSD 9.0-Release。
本文基于 官网这篇文章 翻译而来,并且实际操作过。
原文修订日期(注意更新): 2012-05-01 19:57:09 by PaulChvostek

4K对齐:

下文出现 gpart add 的地方增加参数 -a 4k
创建 zpool 之前,执行 gnop create -S 4096 ada0p3(第三个分区,-S为大写)
创建 zpool 时,/dev/gpt/disk0 改为 ada0p3.nop
zpool export 之后 import 之前,执行 gnop destroy ada0p3.nop

步骤

1.从 FreeBSD 的 CD1安装盘/DVD安装盘/USB Memstick 启动

2.进入安装界面后,到了 「Partitioning」(分区)这一步时,选择 「Shell」 选项

3.创建分区

#1.将硬盘设为 GPT 分区格式。
#
gpart create -s gpt ada0 #假设你有两块硬盘,这是第一块。
gpart create -s gpt ada1 #没有第二块硬盘则略过。
#2.在第一块硬盘上,分别创建标签(label)名为 boot0, swap0, disk0 这三个分区,最后把引导码写入第1个分区,即 boot0。
#
#gpart add:添加分区
#    -s 指定分区大小,-t 指定分区类型,
#    -l 指定标签名字,可以自由取名,记得前后一致,
#    ada0 是 /dev 下面的设备名字,这里是第一块硬盘。
#
#gpart bootcode: 安装引导码
#    -b -p (无需改动,照抄即可)
#    -i 指定分区的编号,从1开始。这里第一个创建的是 boot0,要写入 boot0, 所以是1。
#
gpart add -s 64K -t freebsd-boot -l boot0 ada0
gpart add -s 8G -t freebsd-swap -l swap0 ada0
gpart add -t freebsd-zfs -l disk0 ada0
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
#针对第二块硬盘,没有则略过。
gpart add -s 64K -t freebsd-boot -l boot1 ada1
gpart add -s 8G -t freebsd-swap -l swap1 ada1
gpart add -t freebsd-zfs -l disk1 ada1
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1
#3.创建 zpool 和 zfs
#
#「zroot」是zpool的名字,可随意起名,注意保持一致。
#如果你有两块硬盘,可用 mirror(RAID 1) 模式组建。
zpool create -o altroot=/mnt zroot mirror /dev/gpt/disk0 /dev/gpt/disk1
#如果你只有一块硬盘
zpool create -o altroot=/mnt zroot /dev/gpt/disk0
#下列分区跟据需要自行修改
zfs create zroot/tmp
chmod 1777 /mnt/tmp
zfs create zroot/usr
zfs create zroot/var
zfs create zroot/home
exit

4.退出 shell 之后,继续安装

5.当问及「create partitions」(创建分区)时,选择「Shell」,然后直接输入 exit (刚才我们已经分好了)

6.安装和配置结束后,选择「Live CD」选项,以用户名 root 登录

7.修正挂载点和 cachefile(zpool缓存文件,记录了存储池的所有配置信息)

echo ‘zfs_enable="YES"’ >> /mnt/etc/rc.conf
echo ‘zfs_load="YES"’ >> /mnt/boot/loader.conf
echo ‘vfs.root.mountfrom="zfs:zroot"’ >> /mnt/boot/loader.conf
zfs unmount -a
zpool export zroot
zpool import -o cachefile=/tmp/zpool.cache -o altroot=/mnt zroot
zfs set mountpoint=/ zroot
cp /tmp/zpool.cache /mnt/boot/zfs/
zfs unmount -a
zpool set bootfs=zroot zroot
zpool set cachefile=” zroot
zfs set mountpoint=/tmp zroot/tmp
zfs set mountpoint=/usr zroot/usr
zfs set mountpoint=/var zroot/var
zfs set mountpoint=/home zroot/home

8.输入 reboot,完成安装

 

原文链接:https://wiki.freebsdchina.org/doc/z/gptzfsboot

在GPT盘的ZFS上安装FreeBSD8

在GPT盘的ZFS上安装FreeBSD8

本文参考了Installing FreeBSD Root on ZFS using GPT

通过DVD或者Memstick启动,选择Fixit。

硬盘gpt分区

创建gpt盘

gpart create -s gpt ad0

创建引导区

gpart add -s 64K -t freebsd-boot ad0

创建swap分区(标记label,避免将来硬盘接口改变导致无法识别)

gpart add -s 8G -t freebsd-swap -l swap0 ad0

创建用于zfs的分区

gpart add -t freebsd-zfs ad0

写入freebsd的zfs引导

gpart bootcode -b /mnt2/boot/pmbr -p /mnt2/boot/gptzfsboot -i 1 ad0

创建zpool

加载zfs模块

kldload /mnt2/boot/kernel/opensolaris.ko
kldload /mnt2/boot/kernel/zfs.ko

创建zpool

mkdir /boot/zfs
zpool create zroot ad0p3
zpool set bootfs=zroot zroot

创建zfs分区(计划通过md加载/tmp,所以在这里没有建立/tmp)

zfs create zroot/var
zfs create zroot/usr
zfs create zroot/home

安装系统

export DESTDIR="/zroot"
cd /dist/8.*
cd base && ./install.sh
cd ../lib32 && ./install.sh
cd ../manpages && ./install.sh
cd ../src && ./install.sh all
cd ../kernels && ./install.sh generic
cp -Rlpv /zroot/boot/GENERIC/* /zroot/boot/kernel/

配置基础系统和zfs引导配置

chroot /zroot

基础配置文件

/etc/src.conf

LOADER_ZFS_SUPPORT=YES

/boot/loader.conf

zfs_load="YES"
vfs.root.mountfrom="zfs:zroot"
vfs.root.mountfrom.options="rw"
vfs.zfs.prefetch_disable=0

/etc/rc.conf

hostname="gptzfsboot.freebsd.org"
defaultrouter="10.0.0.1"
ifconfig_re0="inet 10.0.0.1 netmask 255.255.255.0"
tmpmfs="YES"
tmpsize="512M"
zfs_enable="YES"

/etc/resolv.conf

nameserver 8.8.8.8

/etc/fstab

/dev/gpt/swap0 none swap sw 0 0

编译安装支持zfs的bootloader

mount -t devfs devfs /dev
export DESTDIR=""
cd /usr/src/sys/boot/
make obj && make depend && make
cd i386/loader
make install

基础的设置命令

passwd

tzsetup

cd /etc/mail && make aliases

退出chroot

umount /dev
exit

完成安装

cp /boot/zfs/zpool.cache /zroot/boot/zfs/
export LD_LIBRARY_PATH=/mnt2/lib
zfs unmount -a
zfs set mountpoint=legacy zroot
zfs set mountpoint=/usr zroot/usr
zfs set mountpoint=/var zroot/var
zfs set mountpoint=/home zroot/home
exit

原文链接:http://wiki.freebsdchina.org/doc/z/8_gpt_zfs