基于GPT和ZFS的FreeBSD安装(2)

硬盘规划
在开始安装之前,先规划一下硬盘的分配。虽然说在ZFS里分区神马的都是浮云,全都可以动态调整,但是还是有一些问题需要考虑。

第一是GPT。随着硬盘容量的不断增加,老式的MBR分区已经不能满足需要,所以GPT将要或者已经成为主流。第二是AF扇区(即所谓4KiB扇区)将要或者已经成为大容量硬盘的标准格式,老式的512B扇区格式虽然还被AF硬盘所兼容,但是在AF硬盘上用512B扇区格式(所谓512e模式)效率会比较低,见这篇文章

所以我是这么规划这个1T的硬盘的(实际容量932G):

boot: 64K
swap: 4G
zroot: 16G
tank: 912G这是四个GPT分区,其中boot为引导区,swap为交换分区,zroot和tank是两个ZFS Pool分区。之所以要分两个zpool,是因为上面所说的AF硬盘问题。其中zroot作为系统的根ZFS,因为在系统未装载完成前,暂时不能支持4KiB扇区,所以只能放在zroot里,并且使用传统512B扇区格式。tank为用户ZFS,把home、ports、src什么的都放在这里,这个是使用4KiB扇区的。

虽然FreeBSD早就支持GPT分区了,但是sysinstall里带的还是老式的fdisk分区工具,加上因为zroot也是一个ZFS分区,sysinstall里也没法搞,所以以下的安装过程是全手动的。

首是在启动完成运行sysinstall的时候选择Fixit-USB进入Fixit模式(提示符为:fixit#)

安装:GPT分区
手动使用gpart分区:

gpart create -s gpt ad4
gpart add -s 64K -t freebsd-boot ad4
gpart add -s 4G -t freebsd-swap -l swap0 ad4
gpart add -s 16G -t freebsd-zfs -l zroot ad4
gpart add -t freebsd-zfs -l tank ad4
gpart bootcode -b /mnt2/boot/pmbr -p /mnt2/boot/gptzfsboot -i 1 ad4

其中ad4是我用U盘启动后硬盘的名字,请自己在启动后检查你的硬盘名字并加以替换。

以上命令分别为创建GPT分区表,创建boot分区、swap分区、zroot分区、tank分区,写入GPT引导记录。其中除boot分区以外全都加上了label,以方便后续操作使用。

安装:创建ZFS
首先需要加载相关zfs模块:

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

其中geom_nop是为了后面使用4KiB分区格式使用的。

然后先创建系统zpool:

mkdir /boot/zfs
zpool create zroot /dev/gpt/zroot
zpool set bootfs=zroot zroot

再创建支持4KiB的tank zpool:

gnop create -S 4096 /dev/gpt/tank
zpool create tank /dev/gpt/tank.nop
zdb -C tank  # 检查ashift=12说明4KiB成功
zpool export tank
gnop destroy /dev/gpt/tank.nop
zpool import tank
zdb -C tank # 再次检查ashift仍然为12做法是先创建一个虚拟的gnop设备,指定使用4KiB格式,注意那个 tank.nop。创建后检查ashift参数是否为12,如果还是9(对就512B格式)说明不对,请检查后重做。确认无误后导出zpool,删除gnop设备再重新导入zpool,再次检查ashift参数无误后这个使用4KiB的zpool就算创建成功了。

创建zfs分区,因为系统不支持4KiB格式,所以就把root整个放在zroot里了(/tmp除外,这个将在后面用md加载),不过home还是放到了tank里:

zfs create tank/home

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/20975.html