fnOS飞牛NAS部署 KVM 虚拟化,安装Cockpit ,在Web界面管理虚拟机,不影响fnOS更新

fnOS飞牛NAS部署 KVM 虚拟化,安装Cockpit 实现在Web界面管理虚拟机,支持硬件直通和虚拟机快照功能,不影响fnOS更新,Debian系统通用KVM教程:

1. 安装 KVM虚拟化组件

首先,更新软件列表和系统包:

sudo apt update && sudo apt upgrade -y

安装 KVM 及相关工具软件:

sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils

运行以下命令检查 KVM 是否成功安装:

sudo systemctl status libvirtd

如果服务正在运行,KVM 安装成功。

2. 安装 Cockpit管理工具

安装 Cockpit 及其虚拟机管理插件:

sudo apt install cockpit cockpit-machines

启动 Cockpit 服务:

sudo systemctl start cockpit

安装完成后即可打开浏览器,输入以下地址访问Cockpit

http://<您的服务器IP>:9090

使用您的fnOS用户名和密码登录,就可以管理服务器和虚拟机了。

3.关闭Apparmor对Libvirt安全限制

Libvirt在执行和访问系统文件的时候会被Apparmor阻挡,因此为了确保Libvirt始终有必须的权限,必须禁用apparmor

ln -s /etc/apparmor.d/usr.sbin.libvirtd /etc/apparmor.d/disable/ apparmor_parser -R /etc/apparmor.d/usr.sbin.libvirtd

执行完成后reboot重启机器。

4.创建Bridge网络,使虚拟机通过bridge0桥接到物理网络

在Cockpit Web管理界面进行操作

5.安装虚拟机(以OpenWrt为例)

在Cockpit Web管理界面进行操作(这一步需先创建虚拟机存储池)

6.解决虚拟机网桥不通的问题

解决虚拟机无法 ping 通网桥(如 bridge0)内其他主机的问题,需要在 nftables 的规则中添加放行 bridge0 网桥的规则。具体步骤如下:

1. 允许 bridge0 网桥的流量,在 filter 表的 FORWARD 链中添加规则,以允许通过 bridge0 网桥的流量,这样可以确保来自虚拟机的流量可以通过网桥转发到其他主机:

nft add rule ip filter FORWARD iifname "bridge0" accept nft add rule ip filter FORWARD oifname "bridge0" accept

2. 保存规则,使用 nftables 提供的保存功能将当前规则保存到配置文件中:

sudo nft list ruleset > /etc/nftables.conf

3.确保 nftables 服务在启动时加载配置:

sudo systemctl enable nftables

7.解决虚拟机开机无法自动启动的问题

虚拟机无法自动启动原因是libvirtd服务过早启动,fnOS的存储和挂载点未准备好,导致虚拟机存储池vmdisk未能挂载,虚拟机无法访问到磁盘文件,我们可以修改libvirtd.service启动服务,增加判断,当fnOS存储目录可以访问时,再启动libvirtd,这样就可以让虚拟机正常自动启动。

编辑libvirtd.service文件:

sudo nano /lib/systemd/system/libvirtd.service

[Service]中找到这一行:

ExecStart=/usr/sbin/libvirtd $LIBVIRTD_ARGS

修改为改为:

ExecStart=/bin/bash -c 'while [ ! -d /vol1/1000/vmdisk ]; do sleep 5; done; /usr/sbin/libvirtd $LIBVIRTD_ARGS'

增加了对/vol1/1000/vmdisk路径访问到判断,路径可以按自己的修改

至此,教程结束,虚拟机一切功能正常,fnOS更新不会影响虚拟机的使用,虚拟机的磁盘文件在飞牛的存储池内,也能保证虚拟机数据的安全性。

调整虚拟机关机超时时间(可选)

有些虚拟机不支持acpid 或者无法安装ga代理工具,可能出现无法响应关机命令,造成fnOS关机或者重启过慢。

可以修改 /etc/default/libvirt-guests文件中的相关设置,调整关机超时时间减少等待,配置文件也可以控制虚拟机关机的相关动作,默认的关机时间为300s,即5分钟:

SHUTDOWN_TIMEOUT=300

根据自己情况修改,修改完成后,重新启动 libvirt 服务生效:

sudo systemctl restart libvirtd

虚拟机的快照功能(可选)

如果需要使用快照功能,需要使用下面命令将img格式的磁盘文件转换为qcow2格式:

qemu-img convert -f raw -O qcow2 /path/to/source.img /path/to/destination.qcow2

使用iptables解决虚拟机网桥不通的方法

无需再次操作,仅供参考,无需操作,教程已用nf实现:

1.放行bridge0流量:

sudo iptables -A FORWARD -i bridge0 -j ACCEPT sudo iptables -A FORWARD -o bridge0 -j ACCEPT

2.安装iptables-persisten使tiptables规则持久化保存:

sudo apt install iptables-persistent

虚拟机配置数据的备份

  • 虚拟机创建好以后,配置文件存放在/etc/libvirt/qemu/ 路径下

  • 可以使用sh脚本配合crontab计划任务,定时对此路径下的文件进行备份,当系统意外崩溃损坏后重装后,可以导入虚拟机的配置文件,快速恢复虚拟机。

  • 配置文件不是非常重要,就是些虚拟机的CPU核心数、内存、磁盘路径、系统等硬件信息。根据自己情况进行备份即可,相比之下虚拟磁盘文件是最重要的,有虚拟磁盘重建虚拟机也就是分分钟的事。

  • 所以不建议在系统盘创建存储空间存放数据,虚拟磁盘等重要的用户数据应该存放在带有效验恢复能力的RAID1 RAID5等阵列中,加以保护。

飞牛注意事项

  • 建议把飞牛OS安装在独立的硬盘上,不要在系统盘上再创建存储空间存储数据。

  • 按上面做法,在系统盘损坏或者系统损坏重装后,至少不会丢失存储空间的数据。

  • 存储空间建议使用RAID1 RAID5等具有效验恢复能力的阵列存储,提升安全性。

  • 此操作需要具备一定的Linux和网络基础知识,不建议新手对fnOS底层进行修改操作。

  • fnOS仍在测试阶段,可能发生数据丢失损毁的情况,不建议存放重要数据。

  • 虚拟机内不建议存放重要数据,以免虚拟文件损坏导致数据丢失。

  • 无论如何,重要的数据使用冷备份、网盘备份等多重备份才能确保其安全性。

硬件直通的配置

一般情况下的配置

新版的内核和KVM,其实无需过多的配置,很多文件的操作和修改是无用的,在硬件正常的支持的情况下,只需要在grub文件的CMDLINE增加intel_iommu=on参数,开启vt-d功能,大部分硬件就能够正常直通:

  1. 编辑 GRUB 配置

sudo nano /etc/default/grub

  1. 找到 GRUB_CMDLINE_LINUX_DEFAULT,并添加 intel_iommu=on

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on i915.force_probe=7d55"

原有的参数不清楚的不要动,保持不变,把intel_iommu=on插入其中即可。

  1. 更新 GRUB

sudo update-grub

  1. 重启系统

sudo reboot

通过上述步骤,大部分设备就可以正常直通了,虚拟机添加了pci设备后,在启动虚拟机时,KVM其实可以自动启用vfio相关模块,将设备驱动卸载,绑定VFIO驱动实现直通,无需额外人为操作干预。

需要屏蔽驱动的配置方法

但如果某些设备被系统占用,无法解除,可以去检查宿主机是否正在使用这个设备,确认宿主不需要这个设备的情况下,可以在设备在开机时绑定到VFIO或者屏蔽指定硬件驱动加载,确保直通能够成功。

例如nvidia显卡就需要屏蔽驱动:

编辑blacklist屏蔽N卡驱动nouveau,并增加允许不安全中断参数:

nano /etc/modprobe.d/blacklist.conf

增加参数:

blacklist nouveau options vfio_iommu_type1 allow_unsafe_interrupts=1

编辑完成后更新initramfs:

update-initramfs -u -k all

重启生效:

reboot

上述完成后,N卡就能够正常直通了,目前N卡已经解除了对虚拟化的限制,直接使用最新的驱动就可以,不会再出现错误代码43的情况。

开机绑定VFIO的方式

某些设备直通失败,可能是系统在开机时进行了调用和加载,可以采用vfio绑定的方式来确保直通能够成功,先让系统开机加载vfio模块,编辑modules文件:

nano /etc/modules

增加下面3个参数

vfio vfio_pci vfio_iommu_type1 vfio_virqfd #Linux内核高于6.2可以不加 飞牛就不需要

编辑完成后更新initramfs:

update-initramfs -u -k all

重启生效:

reboot

重启后检查是否加载成功:

lsmod | grep vfio

需要将设备绑定到VFIO的话,先检查设备ID:

ls -nn

例如:

00:17.0 SATA controller [0106]: Intel Corporation 200 Series PCH SATA controller [AHCI mode] [8086:a282]

最后面的8086:a282就是设备ID

编辑屏蔽文件conf,只要在/etc/modprobe.d/路径下的conf文件,都会加载生效:

nano /etc/modprobe.d/vfio.conf

加入屏蔽如下参数,ID就是上面获得的:

options vfio-pci ids=8086:a282

如果还需要绑定其他设备,把id加到后面,使用逗号分隔即可。例如:

options vfio-pci ids=10de:249d,10de:228b

编辑完成后更新initramfs:

update-initramfs -u -k all

重启生效:

reboot

完成上述操作后,一般就能直通成功。

其他情况

如果直通还有问题,可以在grub的cmdline再增加下面参数:

pcie_acs_override=downstream,multifunction vfio_iommu_type1.allow_unsafe_interrupts=1

允许PCIe ACS 覆盖和VFIO不安全的中断,编辑后,记得更新grub

直通总结

总之硬件直通是一个复杂的工作,跟linux内核也有着关系,不同硬件直通起来会有不同的情况,有些硬件直通起来就很容易,基本上不用配置什么,有些硬件就比较容易失败,需要我们反复进行尝试,一般情况下服务器平台就很容易,使用品牌主板的台式机Desktop平台就比移动端和低功耗平台容易些,最后,祝大家都能直通成功,打造自己完美的NAS系统。

卸载KVM虚拟化及Cockpit

有朋友问怎么卸载,其实反向操作,移除软件包就可以了:

1. 停止虚拟机和 Cockpit 服务

首先,确保所有正在运行的虚拟机已停止,然后停止 Cockpit 服务:

sudo systemctl stop cockpit

2. 卸载 KVM 虚拟化

卸载 KVM 相关的软件包:

sudo apt-get purge qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils

3. 卸载 Cockpit 和 cockpit-machines

卸载 Cockpit 及其虚拟机管理插件:

sudo apt-get purge cockpit cockpit-machines

4. 清理配置文件

如果需要,可以删除相关的配置文件和目录:

# 清理 KVM 相关配置 sudo rm -rf /etc/libvirt/ sudo rm -rf /var/lib/libvirt/ # 清理 Cockpit 相关配置 sudo rm -rf /etc/cockpit/ sudo rm -rf /var/lib/cockpit/

5. 更新包列表

最后,更新包列表,清理未使用的包:

sudo apt-get autoremove sudo apt-get autoclean

完成上述步骤后,KVM虚拟化、Cockpitcockpit-machines 将从系统中完全卸载,相关依赖和配置数据也全部清理完成。。

杂七杂八的闲聊

有朋友担心虚拟化性能有损耗,我这边进行了实测,单核性能虚拟机是物理机的98.9%,性能损失不到1.1% ,多核性能虚拟机是物理机的96.6%,损失不到3.4% 。这样的损耗符合KVM的表现,甚至比UNRAID系统的虚拟机还要好一些,日常使用几乎没有区别无法感知。

fnOS飞牛NAS部署 KVM 虚拟化,安装Cockpit ,在Web界面管理虚拟机,不影响fnOS更新插图
虚拟机CPU-Z跑分
fnOS飞牛NAS部署 KVM 虚拟化,安装Cockpit ,在Web界面管理虚拟机,不影响fnOS更新插图1
物理安装CPU-Z跑分

CPU和直通的显卡等硬件,性能都不会有太大的损耗。只有虚拟磁盘性能相比物理设备性能下降较为严重,这会影响到网心云等对IO要求高的CDN业务的用户,可以考虑直通物理磁盘,或者开启缓存加速writeback来提升磁盘性能。

原文链接:https://www.bilibili.com/read/cv38979505/?opus_fallback=1

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享