将 Deepin 安装到 Root On ZFS
之前曾经在 Deepin 2014 尝试过 Root On ZFS,可惜失败了。最近心血来潮,打算把 Deepin 15 安装到 ZFS Root,在解决了几个小问题以后,成功。
现把流程记录如下,以作备忘。
首先需要进入 Live 环境(很简单,在 ISO 引导界面编辑一下菜单项,把 livecd-installer
内核参数改为 livecd
就行了)。
在安装 ZFS 模块之前,首先需要进行 dkms 配置,否则 ZFS 模块因为缺少必要的头文件,会安装失败。需要将以下内容写入 /etc/dkms/spl.conf
。
安装一些必要的工具:
等待安装完成,然后启用一下刚安装的 ZFS 模块,否则后续步骤无法进行。
然后开始按照需要创建分区和 zpool。为了以防万一,我将 /boot
单独分区,剩下的空间创建一个分区,并全部留给 zpool。另外,建议使用磁盘 ID 而不是块设备名来创建 zpool。具体的参数作用可以自己查找手册了解。
此时,我创建的名为 rpool
的 zpool 已经挂载到了 /mnt
。然后,根据需要创建其它 ZFS dataset。
然后,设置下 ZFS 属性。
此外,我把 swap 放在 zvol 里面,就省得单独分区了。swap 大小根据需要设定。
挂载 /boot
。
准备工作完成了,接下来开始正式安装 Deepin 15(其实就是解压 squashfs,安装程序的本质也是如此)。注意,由于语言包等附加组件是以 overlay 形式打包的,因此需要根据实际情况取舍。
等待解压过程完成,系统就算是安装好了。然后把 zpool.cache
复制到目标系统中,ZFS 的属性和挂载信息会记录在这里。
接着,我们需要 chroot 到安装好的系统里面去,进行一些必要的配置。
首先来配置 /etc/fstab
,因为 ZFS 的挂载信息全部记录于 zpool.cache
中,因此这里我们只需要配置 /boot
和 swap 的挂载信息就行了。
然后修改 /etc/hostname
,如果不存在这个文件就新建一个,内容只需要写上你喜欢的主机名就行了。
然后添加新用户,按照需求修改所属组。
设置 root 和用户密码。
通过 visudo
命令,把你的用户加入 sudoer 列表。在 root ALL=(ALL:ALL) ALL
下面添加一行:
和一开始一样,需要配置下 dkms 配置文件,将以下内容写入 /etc/dkms/spl.conf
。
除此之外,还要把以下内容写入 /usr/share/initramfs-tools/conf.d/zfs
。
然后,就可以安装 ZFS 模块了。
安装 grub,根据你的固件情况选择 grub-pc 或 grub-efi,我这里用的是 grub-pc。
先验证 grub 是否识别了 ZFS,如果没问题,就更新 grub.cfg
和 initramfs。
然后将 grub 引导代码安装到 /dev/sda
。
必须确保安装成功,否则就无法引导了。
编写 /etc/hosts
,内容如下,否则系统会出现各种奇怪的问题。里面的 Deepin 是我设置的主机名:
重新配置 locale。
然后卸载 /mnt
下挂载的所有文件系统,并且从 /dev/sda
引导。登录以后可以根据需要进行其他相关配置,本次安装完成。