经过一番折腾和查资料,终于搞定了ZFS手动分区并安装操作系统的问题,在此分享一下。
这个wiki里面已经写的很明白了,不想看我的可以去这里看。 https://wiki.freebsd.org/RootOnZFS/GPTZFSBoot
之前的安装步骤就不赘述了,到了分区这里,请选择最后一项“shell”,通过第三项手动分区成功了一次,但是分区里压根就没用到zpool池,这搞了个毛线。有通过这种方式弄成的可以交流一下。
我会先附上操作截图,然后在截图下面会附上每个命令和命令的作用。图中操作时,我已经cd到了/dev下。
gpart destroy da0
#清空磁盘da0。
gpart create -s gpt da0
#在磁盘da0上创建GPT分区表。
gpart add -a 4k -s 512M -t efi da0
#在磁盘da0上创建一个存储块为4k,空间大小为512兆的efi分区,用于写入UEFI引导文件。
newfs_msdos -F 32 -c 1 da0p1
#将分区da0p1格式化为fat32格式,每簇大小为1。
mount -t msdosfs -o longnames da0p1 /mnt
#将分区da0p1以长名称、msdos文件系统挂载到/mnt。
mkdir -p /mnt/efi/boot
#递归创建目录。
cp /boot/loader.efi /mnt/efi/boot/bootx64.efi
#将UEFI引导文件复制到引导目录。
umount /mnt
#卸载/mnt目录。
gpart add -a 4k -s 7G -t freebsd-swap da0
#在磁盘da0上创建一个存储块为4k,大小为7GB,文件系统类型为freebsd-swap的分区,该分区用于挂载swap。
gpart add -a 4k -t freebsd-zfs da0
#在磁盘da0上创建一个存储块为4k,大小为全部剩余空间,文件系统类型为freebsd-zfs的分区,该分区用于挂载zpool池。
gpart show -p da0
#用于查看指定磁盘的分区信息,确定zfs分区名称。有十足把握知道名称的这个命令没有必要执行。
mount -t tmpfs tmpfs /mnt
#挂载tmpfs分区到/mnt目录,tmpfs分区干嘛使的,自己去查资料吧。这里不说了。
zpool create -o altroot=/mnt zroot da0p3
#创建名为zroot的存储池,并把da0p3分区加入存储池。zroot可以写其他的。
如果磁盘不是新的,之前有过装过系统,则会出现类似我截图中的报错信息。这里只需要按照提示,加上-f参数就OK了。
zfs set compress=on zroot
#对存储池zroot启用压缩功能。
zfs create -o mountpoint=none zroot/root
#创建挂载点为none的数据集root。
zfs create -o mountpoiny=none zroot/root/default
#意义同上,主要是为了保存/目录。乖乖的按照wiki里的敲,不要想着把这一条省略掉,别问我为啥知道。
mount -t zfs zroot/root/default /mnt
#将数据集zroot/root/default以zfs文件系统类型挂载到/mnt目录。
zfs create -o mountpoint=/tmp -o exec=on -o setuid=off zroot/tmp
#创建数据集zroot/tmp,挂载点/tmp,关闭setuid权限,这个exec是啥?我不太清楚,也没查到啥有用的信息 ,文件重定向??请知道的朋友帮忙解惑。
这里我就不一一解释了,基本都是大同小异,-o canmount表示可被挂载属性。这里我就需要这些分区。需要啥建啥就行了。
这里几个命令就不详细说了,就说下第一个,因为freebsd的home目录是在/usr下的,所以这里建了一个软链。
zpool set bootfs=zroot/root/default zroot
#配置存储池引导环境。
cat << EOF > /tmp/bsdinstall_etc/fstab
#创建fstab文件,下面的内容就不说了,Linux下fstab也应该都折腾过吧,这也和那差不多。
此时shell阶段的配置就暂时告一段落了,执行exit退出shell模式,安装又会回到简单图形下,愉快得开始往磁盘写文件。
后面的操作和之前UFS的方式一样。但是,到如下图的时候得选择yes重新进入shell模式进行配置。
需要对zfs进行最后的配置操作。
sysrc zfs_enable="YES"
#配置zfs开机自启动。
后面发现上图中的echo 'zfs_load="YES"' >> /boot/loader.conf可以不执行。
执行完以上命令后执行exit退出shell模式。安装界面会提示reboot,按下回车,开始freebsd从入坑到死在坑里的旅行吧。
=========还没完呢!!!=========
最后想起来还有点要说的,wiki里第一小节创建bootcode的时候有下图中红框的内容。
这也是创建引导的方式,但这个是用于非UEFI+GPT模式的,UEFI+GPT模式就用a方式。
如果使用简单图形安装过程中的ZFS自动分区,安装程序也会创建这个文件系统类型为freebsd-boot的/boot目录,但实际UEFI+GPT模式不需要创建这个目录。