zfs only

之前在vmware下尝试过安装一个gpt格式的zfs only的freebsd,因为总觉得慢,想把它迁移出来。在/boot下很早以前就发现有一个叫zfsboot的工具,但是我一直不晓得怎么用。

今天在wiki上发现一篇介绍这个的文章 《Root on ZFS configuration (zfsboot)》,决定试下。上次我拿我那个128M的U盘在UFS的基础上做了一个精简版的freebsd,今天又用wget从ftp下载了安装光盘的base目录,然后用它启动我的thinkpad t400,安装bsd。

我并没有严格按照wiki上说的去做,于是遇到了两次失败。

第一次是boot0选完主分区之后就提示Boot Error。查zfsboot的源代码,在btx loader部分发现是因为它没有在分区表中找到类型为freebsd的主分区。呃……我是拿PQ分的区,然后用gpart分的slice,PQ分区的时候无法把主分区的类型设置成freebsd,之后一直也忘了这么做。结论:如果没有在mbr中给分区设置正确的分区类型,完全可以正常的使用这个分区,只是无法引导而已,boot2会报错。

接着,用gpart modify 分区类型后,顺利走到了mount root filesystem的地方。然后卡住了。据我推测,可能是因为zpool的状态不对。事情是这样的,这个U盘在虚拟机里面用过。我曾在虚拟机里建过2个zpool。一个名为syspool(在虚拟机的虚拟硬盘上),一个名为zroot(在物理硬盘的第四个分区上),两个都不是位于这个U盘上。之后拿这个U盘启动我的笔记本,最初一切都正常,只有zroot一个zpool。后来某次,我删除了zroot下所有的zfs,然后重建zroot.重启之后我发现zfs list为空,然后zpool list中出现了2个zpool(syspool和zroot),并且状态都是不可恢复的错误态。我把这两个destroy掉之后,再执行zpool import,然后就可以把zroot正确的import进来。执行zpool export zroot && zpool import zroot,然后重启,问题依旧。胡乱折腾了几次之后,突然就没再出现过这种异常了。

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥