For the complete documentation index, see llms.txt. This page is also available as Markdown.

构建以 ZFS 为根文件系统的 Rocky Linux

ZFSBootMenu

ZFSBootMenu 是一种替代的引导加载器,不存在上述限制,并且支持启动环境。如果计划使用 ZBM,请不要参照本文,因为磁盘布局不兼容。有关安装详情,请参考其官方网站。

自定义

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

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

应仅使用经过充分测试的 ZFS 存储池功能。如果数据完整性至关重要,应避免使用新功能。参见,例如 此评论

仅支持 UEFI

本指南仅支持 UEFI 启动。

准备

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

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

    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 wiki 获取更多信息。wpa_supplicant 可通过 apk add wpa_supplicant 安装,无需网络连接。

  6. 配置 SSH 服务器

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

  8. 从其他计算机连接

    ssh root@192.168.1.91
  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 参见 示例页面。 声明磁盘数组

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

    单盘安装使用

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

    MNT=$(mktemp -d)
  14. 设置分区大小:

    设置 swap 大小(GB),如果不希望 swap 占用过多空间,可设为 1

    SWAPSIZE=4

    设置磁盘末端保留空间(最少 1GB)

    RESERVE=1
  15. 从 live 系统安装 ZFS 支持

    apk add zfs
  16. 安装分区工具

    apk add parted e2fsprogs cryptsetup util-linux

安装系统

  1. 分区磁盘

    注意:必须清除目标磁盘上所有已有的分区表和数据结构。 对于闪存存储,可使用以下 blkdiscard 命令:

  2. 为本次安装设置临时加密 swap(仅用于安装)。当可用内存较小时非常有用:

  3. 加载 ZFS 内核模块

  4. 创建根池

    • 未加密示例:

  5. 创建根系统容器

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

  6. 格式化并挂载 ESP。只使用其中一个作为 /boot,其余可稍后设置镜像:

系统配置

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

  2. 启用社区仓库

  3. 生成 fstab

  4. chroot 进入安装环境

  5. 取消所有 shell 别名,以免干扰安装

  6. 安装基础软件包

  7. 安装 ZFS 软件包

  8. 将 ZFS 模块添加到 dracut

  9. 将其他驱动添加到 dracut

  10. 生成 hostid

  11. 构建 initrd

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

  13. 安装语言包(例如英文)

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

  15. 设置 root 密码

引导加载器

  1. 安装 rEFInd 引导加载器:

  2. 添加启动项:

  3. 退出 chroot:

  4. 卸载文件系统并创建初始系统快照(稍后可从此快照创建启动环境,参考 Root on ZFS 维护页面):

  5. 导出所有 ZFS 存储池:

  6. 重启系统:

安装后配置

  1. 安装软件包组:

  2. 添加新用户并配置 swap。

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

最后更新于