github编辑

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

ZFSBootMenu

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

自定义

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

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

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

仅支持 UEFI

本指南仅支持 UEFI 启动。

准备

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

  2. 由于最新 Live CD 的内核可能与 ZFS 不兼容,我们使用 Alpine Linux Extended,它默认自带 ZFS。 下载最新的 Alpine Linux live 镜像 extended 版本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 获取更多信息。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. 从其他计算机连接

  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. 设置分区大小:

    设置 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 维护页面arrow-up-right):

  5. 导出所有 ZFS 存储池:

  6. 重启系统:

安装后配置

  1. 安装软件包组:

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

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

最后更新于