在TrueNAS系统中安装PVE内核

前言

在NAS存储系统中,TrueNAS Scale 的可玩性非常的高,包括 K3s,Docker 等容器服务及虚拟化服务等也一应俱全。但在虚拟化系统中,仍然有一个更强的存在,那就是 PVE(Proxmox VE) 。当然,我们可以选择PVE套虚拟化 TrueNAS Scale , 或者 TrueNAS Scale 套虚拟化 PVE, 但都会有一定的损耗。但是我发现无论是 PVE 还是 TrueNAS Scale, 都是基于 Debian 系统的,那么有没有可能同时在物理机上跑起来 PVE 和 TrueNAS Scale 呢?经过我 一小时 的简单摸索,给出了如下方案。

注意:本文仅为实验性测试,不保证安装后TrueNAS Scale稳定性

解决方案

基于 Debian 12 AMD64

1. 更改 TrueNAS 设置

  1. 打开 TrueNAS SSH

    1. 进入你的 TrueNAS 管理面板
    2. 系统设置 -> 服务 -> SSH, 运行中与自启打勾
    3. 用户凭证 -> root -> 编辑 -> 禁用密码取消打勾,并在下方设置密码
    4. SSH 登录 TrueNAS
  2. 给予 root 用户权限

    chmod +x /usr/bin/*
    chmod +x /usr/sbin/*

2. 更改 Hosts

一般情况下主机名通过 /etc/hosts 解析。
默认的Hosts文件可能如下:

127.0.0.1       truenas.local truenas   
# 这里是默认的truenas hostname, 也可能是你所设置的hostname
# 查看位置: TrueNAS Web 仪表盘 -> 主机名
127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

# STATIC ENTRIES

我们需要把第一行主机名解析成网口上的IP(上游DHCP所分配的IP,一般默认为静态)
并且要把第一行放到第二行下,如下:

127.0.0.1       localhost
192.168.31.138 truenas.local truenas

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

# STATIC ENTRIES

若您不知道自己的IP地址也可以使用如下指令:

hostname --ip-address
192.168.31.138 # 这里应该会返回您的IP地址

为了防止 TrueNAS 开机自动替换 Hosts 文件,还需要做以下操作:

  1. 复制正常的hosts文件,然后配置开机脚本,进行替换。

    cp /etc/hosts /opt
  2. 添加一个启动脚本。

    echo '#!/bin/bash' >>/etc/rc.local
    echo 'cp /opt/hosts /etc/hosts && systemctl start pvestatd' >>/etc/rc.local
  3. 给脚本执行权限。

    chmod +x /etc/rc.local

3. 添加 PVE 源并更新

  1. 在终端执行如下指令之一,若国内访问建议使用 国内源

    • 官方源:

      echo "deb [arch=amd64] http://download.proxmox.com/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list
      wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
    • 国内源:

      echo "deb [arch=amd64] http://mirrors.ustc.edu.cn/proxmox/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list
      wget https://mirrors.ustc.edu.cn/proxmox/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
  2. 更新系统软件包:

    apt -y update && apt -y full-upgrade

    您的系统可能会有如下警告,是由于TrueNAS系统的软件包Public Key放到了默认的文件中,但Debian官方不建议这么做,可以忽视:

    W: http://apt.tn.ixsystems.com/apt-direct/cobia/23.10.0/pcm/dists/bookworm/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.

    同时还会有一条PVE软件包的错误,是由于没有企业认证,不影响公开软件包,可以忽视:

    E: Failed to fetch https://enterprise.proxmox.com/debian/pve/dists/bookworm/InRelease  401  Unauthorized [IP: 103.76.41.50 443]

4. 更改 initramfs zfs 挂钩脚本

  1. 执行以下脚本,将 MODULES=most 添加至 /usr/share/initramfs-tools/conf-hooks.d/zfs 文件:

    echo "MODULES=most" >> /usr/share/initramfs-tools/conf-hooks.d/zfs
  2. 安装过程中可能会找不到 modules 文件,不影响安装,也可以自己 touch 一个:

    touch /etc/initramfs-tools/modules

5. 安装 PVE 内核

不多说,直接 Bash 命令安装:

apt install pve-kernel-6.2

systemctl reboot #重启系统

6. 安装 PVE 包

若上一部正常安装完成,没有任何 Error ,我们就可以正式安装 PVE 环境了!

  1. 卸载不兼容的包

    apt autoremove -y  qemu-system-common qemu-system-data qemu-system-gui qemu-system-x86 qemu-utils
  2. 安装 PVE

    apt update && apt --no-install-recommends --no-install-suggests install proxmox-ve openssl open-iscsi chrony
    # PVE 官方安装了 postfix 邮件收发服务器,但是与 TrueNAS 的 exim4 不兼容,故未安装
  3. 您可以删除为安装添加的无订阅存储库。

    rm /etc/apt/sources.list.d/pve-install-repo.list
  4. 建议:删除 os-prober

    os-prober 软件包扫描主机的所有分区以创建双引导 GRUB 条目。但扫描的分区还可以包括分配给虚拟机的分区,而虚拟机不希望将其添加为启动项。

    在您未配置双系统或多系统的前提下,可安全执行删除命令

    apt remove os-prober

7. 配置 PVE 网络

  1. 登录 PVE

    ip:8006

  2. 数据中心下方 truenas -> 系统 -> 网络 -> 创建 -> Linux Bridge

    编辑:Linux Bridge
    编辑:Linux Bridge

    其中,IPv4填写你的主机IP地址(大多为您面板的访问IP),网关填写您上级路由网关,桥接端口填写分配地址的网口名称。

    若为多网口设备,请参考司波图 PVE AIO 教程:https://gitee.com/spoto/PVE_Generic_AIO

8. PVE 挂载 TrueNAS zfspool

  1. 数据中心 -> 存储 -> 添加 zfs , ID随便写一个方便记忆的, zfs池选择想要挂载的zfs池。
  2. 完成(我也不知道为啥我要分两条)。

Troubleshooting

  1. PVE 内核启动失败

    如果内核启动失败,错误日志为error: bad shim signature.

    确保 BIOS 中 Secure Boot(安全启动) 为关闭状态。

  2. ipcc_send_rec[1] failed

    如果你看到类似的日志: ipcc_send_rec[1] failed: Connection refused

    请确保你的 /etc/hosts 文件配置正确。

  3. 由于 NTPsec Hook 导致网络启动失败

    安装 chrony 代替原本的NTP服务

    apt install chrony

  4. RRD错误

    表现在PVE的监控不正确,如时间异常。

    解决方法:创建一个rrd文件夹

    mkdir -p /var/lib/rrdcached/db/
    systemctl restart pvedaemon

参考资料

  1. Install Proxmox VE on Debian 12 Bookworm:https://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_12_Bookworm
  2. TrueNAS scale 集成PVE:https://foxi.buduanwang.vip/virtualization/pve/2901.html/
  3. 司波图 / 通用PVE AIO安装教程:https://gitee.com/spoto/PVE_Generic_AIO