github编辑

构建以 ZFS 为根文件系统的 Fedora

注意事项

  • 另一种在 Fedora Linux 上安装使用 ZFS 作为根文件系统的方法是使用非官方脚本 fedora-on-zfsarrow-up-right,该脚本更加自动化,能生成更接近官方 Fedora 配置的安装。fedora-on-zfs 脚本与下文方法的区别在于,它使用 Fedora 官方的 kickstart 文件之一(如 fedora-disk-minimal.ksfedora-disk-workstation.ksfedora-disk-kde.ks 等)指导安装,同时进行少量修改来增补 ZFS 功能。如有 bug,请提交至 Greg 的 GitHub 仓库 fedora-on-zfs。

ZFSBootMenu

ZFSBootMenuarrow-up-right 是一种替代引导加载程序,不受上述限制,并支持启动环境。如果计划使用 ZFSBootMenu,请勿参照本文,因为布局不兼容。安装详情请参考其官方网站。

自定义配置

除非另有说明,否则不建议在重启前自定义系统配置。

仅使用经过充分测试的池功能

应且只应使用经过充分测试的池功能。如果数据完整性至关重要,请避免使用新功能。参考示例:此评论arrow-up-right

仅支持 UEFI

本指南仅支持 UEFI。

准备工作

  1. 禁用安全启动。在启用安全启动时无法加载 ZFS 模块。

  2. 由于最新 Live CD 的内核可能与 ZFS 不兼容,我们将使用默认自带 ZFS 的 Alpine Linux Extended。 下载最新的 Alpine Linux Extended live 镜像arrow-up-right,并验证 校验和arrow-up-right,然后从该镜像启动。

    gpg --auto-key-retrieve --keyserver hkps://keyserver.ubuntu.com --verify alpine-extended-*.asc
    
    dd if=input-file of=output-file bs=1M
  3. 使用 root 用户登录,初始无密码。

  4. 配置网络:

    setup-interfaces -r
    # 必须使用选项 "-r" 以正确启动网络服务
    # 示例:
    network interface: wlan0
    WiFi name:         <ssid>
    ip address:        dhcp
    <此处按回车键完成网络配置>
    manual netconfig:  n
  5. 如果使用无线网络且未显示,请参阅 Alpine Linux wikiarrow-up-right 获取详细信息。 可使用 apk add wpa_supplicant 安装 wpa_supplicant,无需网络连接。

  6. 配置 SSH 服务器:

    setup-sshd
    # 示例:
    ssh server:        openssh
    allow root:        "prohibit-password""yes"
    ssh key:           "none""<公钥>"
  7. 设置 root 密码或 /root/.ssh/authorized_keys

  8. 从另一台计算机连接:

  9. 配置 NTP 客户端进行时间同步:

    setup-ntp busybox
  10. 设置 apk 仓库。会显示可用镜像列表,按空格键继续:

    setup-apkrepos
  11. 在本指南中,我们使用由 udev 生成的可预测磁盘名称:

    apk update
    apk add eudev
    setup-devd udev
  12. 目标磁盘 列出可用磁盘:

    find /dev/disk/by-id/

    如果使用 virtio 作为磁盘总线,请关闭虚拟机并为磁盘设置序列号。 对于 QEMU,使用:

    -drive format=raw,file=disk2.img,serial=AaBb

    对于 libvirt,编辑 domain XML。示例请参见 此页面arrow-up-right。 声明磁盘数组:

    DISK='/dev/disk/by-id/ata-FOO /dev/disk/by-id/nvme-BAR'

    单块磁盘安装使用:

    DISK='/dev/disk/by-id/disk1'
  13. 设置挂载点:

    MNT=$(mktemp -d)
  14. 设置分区大小: 设置交换分区大小(GB),如果不希望占用过多空间,可设为 1:

    SWAPSIZE=4

    设置磁盘末尾保留空间,最小 1GB:

    RESERVE=1
  15. 从 Live 镜像安装 ZFS 支持:

    apk add zfs
  16. 安装分区工具:

    apk add parted e2fsprogs cryptsetup util-linux

系统安装

  1. 分区磁盘

    注意:

    必须清除目标磁盘上全部既有的分区表和数据结构。

    对于基于闪存的存储,可以使用如下 blkdiscard 命令:

  2. 为本次安装设置临时的加密交换分区(仅本次使用)。如果可用内存容量较小,此操作非常有用:

  3. 加载 ZFS 内核模块:

  4. 创建根池

    • 不使用加密的示例:

  5. 创建根系统容器:

    创建系统数据集,使用 mountpoint=legacy 管理挂载点:

  6. 格式化并挂载 ESP(EFI 系统分区)。只有其中一个会作为 /boot 使用,之后需要设置镜像:

系统配置

  1. 下载解压 Fedora 最小根文件系统:

  2. 启用社区仓库:

  3. 生成 fstab:

  4. 切换根环境(chroot):

  5. 取消所有 shell 别名(防止干扰安装):

  6. 安装基础软件包:

  7. 安装 ZFS 软件包:

  8. 检查 ZFS 模块是否构建成功:

    如果构建失败,需要安装 LTS 内核及其头文件,然后重新构建 ZFS 模块:

    将在内核安装过程中构建 ZFS 模块。可再次使用 tail 查看构建日志。

  9. 将 ZFS 模块添加到 dracut:

  10. 将其他驱动添加到 dracut:

  11. 构建 initrd:

  12. 对于 SELinux,在重启时重新标记文件系统:

  13. 启用网络时间同步:

  14. 生成主机 ID:

  15. 安装本地化语言包,例如英文:

  16. 设置语言、键盘布局、时区和主机名:

  17. 设置 root 密码:

引导加载程序

  1. 安装 rEFInd 引导加载程序:

  2. 添加启动项:

  3. 退出 chroot 环境:

  4. 卸载文件系统并创建初始系统快照。之后可以根据此快照创建启动环境。参见 ZFS 根文件系统维护页面arrow-up-right

  5. 导出所有池:

  6. 重启系统:

安装后操作

  1. 安装软件包组:

  2. 添加新用户并配置交换分区。

  3. 挂载其他 EFI 系统分区,并设置服务以同步其内容。

最后更新于