前言
R6S买回来已经服役了好一阵子了,因为rk3588(s)的性能实际上是非常充裕的,纯性能比较跟n100基本没差,只用来跑op纯纯的暴殄天物行为,于是尝试在op里跑docker装个immich啥的备份照片,rsync再异地备份啥的,尝试压榨一下R6S的价值。
奈何op的bash实在是不好用,外加直接跑docker会被各种打洞,虽然用iptables能拦住但是感觉还是很不爽,于是这个想法便诞生了。但是那个时候精力在别的项目上,加上虚拟机、配网这块确实不熟悉,不知道现在aarch64的虚拟化做得这么好了,于是搁置到了现在。
废话少说,先上拓扑图
前置准备/注意事项/事前劝退
根据拓扑图不难看出来,如果你想照抄这个配置,你的宿主机需要有3个或以上的物理网口,这是最基础的硬件需求。如果你的机子是2个/1个物理网口,那么你将需要在lan口/wan口配置网桥让宿主机和op虚拟机共用,这部分设置并不在本文的范围内,但是你可以参考这篇教程,里面就有单网卡/双网卡主路由模式拓扑和网桥的配置。其余的注意事项有:
- 下文如无特殊情况,Armbian宿主机将简称为宿主机,虚拟机将简称为imm
- 本文适用的是使用armv8/aarch64处理器的机型,但是思路都是一样的,自己找对镜像就行
- 请事先确认你打算在imm使用的DDDD插件是支持nftables/firewall4的
- 本文的R6S使用的系统固件是Armbian_24.11.2_Nanopi-r6s_noble_vendor_6.1.75_gnome-kisak_desktop.img,你可以在R6S的Armbian固件下载页找到它,v6.12版本还没开启kvm,所以没采用
- 默认光猫使用桥接模式
- 默认已经将无线路由器配置成纯AP模式,DHCP等工作都将交给imm
- 需要利用插拔物理网线、ip a命令、查看物理mac地址等方式搞清楚哪个网口是哪个
- 需要敲命令行进行基础配网,因为把宿主机24.04系统使用的NetworkManager干掉之后,网络设置界面将不再可用
- 需要使用nano和vi文本编辑器进行基础的文本修改和保存
- 需要至少2根网线,如果宿主机需要联网/需要远程登录宿主机那就是3根
- 都走光了没?居然还没走,你就是折腾王。
总体流程
- 宿主机安装Armbian(这一步省略)
- 宿主机安装QEMU
- 宿主机配网
- 宿主机QEMU配置并启动KVM虚拟机
- imm配网
- 上机测试,大功告成
Step1 – 宿主机安装Armbian
安装过程省略,这里提一嘴安装和初始upgrade完之后请第一时间确认宿主机内核到底开没开kvm支持,不支持就换个支持的内核或固件,检查方式如下:
ls -l /dev/kvm
dmesg | grep kvm
如果有类似如下的输出,那就是kvm开了:
root@nanopi-r6s:~# ls -l /dev/kvm
dmesg | grep kvm
crw-rw----+ 1 root kvm 10, 232 Feb 12 10:00 /dev/kvm
[ 11.343094] kvm [1]: IPA Size Limit: 40 bits
[ 11.343114] kvm [1]: GICv3: no GICV resource entry
[ 11.343118] kvm [1]: disabling GICv2 emulation
[ 11.343122] kvm [1]: GIC system register CPU interface enabled
[ 11.349502] kvm [1]: vgic interrupt IRQ9
[ 11.354999] kvm [1]: VHE mode initialized successfully
Step2 – 宿主机安装QEMU
安装QEMU/KVM依赖:
sudo apt-get install -y qemu-system-arm qemu-utils qemu-efi-aarch64 ipxe-qemu libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager seabios vgabios gir1.2-spiceclientgtk-3.0 xauth
安装xrdp(用来在win远程rdp连接宿主机用):
sudo apt-get install -y xrdp xorgxrdp
装完之后能在应用抽屉里找到Virtual Machine Manager,打开看看有没有什么奇怪报错,没有的话继续。
Step3 – 宿主机配网
首先需要确认物理网口对应系统里的网卡名字,最简单粗暴的就是插拔法,先进入宿主机的设置-网络界面,这里是会显示网卡名字的,我的R6S的1G LAN|2.5G LAN|2.5G WAN分别对应系统的wan|lan2|lan1。务必在这个时候就搞清楚网卡的对应关系,另外也可以把网口跟mac的对应关系记一下。
将宿主机Ubuntu24.04使用的netplan切回去使用/etc/network/interfaces配置,因为我不会netplan怎么配。
备份netplan配置:
sudo cp /etc/netplan/*.yaml /etc/netplan/backup/
安装ifupdown:
apt-get update
apt-get install ifupdown net-tools
屏蔽systemd-networkd服务,让netplan不再生效:
sudo systemctl mask systemd-network
检查NetworkManager是不是启用了,如果有enable/start字样就是启动了,使用Macvtap需要停用NetworkManager:
systemctl status NetworkManager.service
停用NetworkManager:
systemctl stop NetworkManager.service
systemctl disable NetworkManager.service
init 6
init 6
完了之后应该会自动重启,没有的话最好也手动重启一下。
宿主机配网:
nano /etc/network/interfaces.d/br0(br0可以随便起别的名也行)
# /etc/network/interfaces.d/br0
auto lo
iface lo inet loopback
# wan setup
auto wan
iface wan inet static
address 192.168.11.233 # 给宿主机固定下来一个ip,方便以后连接
netmask 255.255.255.0
gateway 192.168.11.1 # 一般来说是填预留给imm的ip
dns-nameservers 192.168.11.1 # 一般来说是填预留给imm的ip
# lan1 setup
allow-hotplug lan1
iface lan1 inet manual
pre-up ifconfig $IFACE up
pre-down ifconfig $IFACE down
# lan2 setup
allow-hotplug lan2
iface lan2 inet manual
pre-up ifconfig $IFACE up
pre-down ifconfig $IFACE down
保存退出,把网线怼进wan口(对应物理的1G LAN口):
systemctl restart networking.service
配置宿主机网口的DNS(Armbian/Ubuntu24限定,其他系统请自行搜索配置办法):
resolvectl dns wan 192.168.11.1
如果你现在的网络环境也是在192.168.11.xxx这段的话,应该是可以正常上网的,也证明interfaces配置正常生效了,请根据实际的网络环境调整配置文件里的相关ip。
Step4 – 宿主机QEMU配置并启动虚拟机
在宿主机下载可用的imm固件镜像压缩包并双击解压出来,这里给R6S使用的是armsr/armv8分支,注意请下载带有efi字样的img镜像,ext4跟squashfs我选择的是ext4。qcow2后缀的固件镜像引导过不去,不知道为啥,但是知道img镜像能正常引导就行。
镜像准备好之后,打开Virtual Machine Manager,先在设置里启用XML编辑:
开始创建虚拟机,创建流程参考:
继续配置固件引导、绑定核心、添加另外一张网卡、开启自启动:


<vcpu placement = 'static' cpuset='4-7'>4</vcpu>
<cputune>
<vcpupin vcpu='0' cpuset='4'/>
<vcpupin vcpu='1' cpuset='5'/>
<vcpupin vcpu='2' cpuset='6'/>
<vcpupin vcpu='3' cpuset='7'/>
<emulatorpin cpuset='4-7'/>
</cputune>
如果你的处理器是大小核架构的话(比如rk3399、rk3588(s)这种),核心一定要绑定,不然虚拟机基本上都是起不来的,会报错,大小核的问题。


确定都配置好了,点击左上角Begin Installation,如果看到进引导了,那虚拟机就平安无事起来了~
Step5 – imm配网、上机
虚拟机启动之后,看见网口之类的配置命令输出就可以敲几下回车,不出意外你应该就能看到imm的大LOGO,成功进到imm的ssh里了。

首先,跟宿主机一样,需要确定imm内的网卡对应关系,在给QEMU添加网卡的时候你应该有注意到这里会显示网卡的MAC地址,在imm系统里执行命令:
ip a
对应输出里的网卡名字+MAC地址跟QEMU里的MAC地址,你就能搞清楚对应关系,这里假设宿主机的lan1/lan2分别对应imm里的eth0/eth1。
imm配网:
vi /etc/config/network
config interface 'loopback'
option device 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'
config globals 'globals'
option ula_prefix '****:****:****::/48'
option packet_steering '1'
# 上面这两段一开始就有的,不用碰,对应添加如下内容
config device
option name 'eth1'
config interface 'lan'
option device 'eth1'
option proto 'static'
option ipaddr '192.168.11.1' # 这里会作为imm的后台访问地址
option netmask '255.255.255.0'
option ip6assign '60'
config device
option name 'eth0'
config interface 'wan'
option device 'eth0'
option proto 'pppoe'
option username '宽带账号'
option password '宽带密码'
option ipv6 'auto'
:wq
保存退出编辑器,万事俱备了。按照拓扑图插好网线上机测试,因为lan已经配好了,所以你应该能很顺利地进到imm的web后台,后面的就不展开了,自己爱折腾什么折腾什么。
结语
我猜在x86跟arm小主机之间纠结,最后选择了n100之流的人应该占了90%以上吧。但是我还是那句,x86的公模小主机,太丑啦!不过友善现在把R6S卖得挺贵的,我觉得这也是高配arm少人折腾的原因之一,算你机子1000,tf卡250都1250了,确实在x86能配到差不多配置用ssd的机子,但是,太丑啦!(我这辈子就是给友善的壳子害了)
你可以从拓扑图里看出来这样的配置,宿主机可以当作是跟虚拟机一点关系都没有,整体配置完成之后宿主机就作为一个普通的设备接在虚拟机/交换机后面了,这样的设置可以完全不用设置转发什么的就能让宿主机用上虚拟机的网络。如果设置网桥的话就需要折腾了,理论上不难,就是我没找到现成的参考资料,理论上这部分用x86来玩的人应该很多,但是他们的宿主机基本上都不是Linux环境,还是不好找参考。
性能方面没做过详细测试,千兆跑满是基本盘,然后尝试过在宿主机里开着一个4k视频(Armbian的Chromium是支持R6S硬解4k的),本地网络正常使用看直播跟bt啥的,都没什么问题,看monitor负载也不怎么高,总之就是R6S肯定能hold得住。



宿主机/虚拟机系统更新
还没试过,等有新系统出来了就试试,做好备份一般也出不了什么事。
宿主机系统迁移
因为要确保不作死把网给搞炸,所以我R6S的系统一直有双卡双待,算上emmc甚至可以说是三卡三待,这次我在一张128g的闪迪红灰上验证测试完确实是可行之后,就得把系统迁移去512g的闪迪红黑卡上开始长期使用测试,因此这里会涉及到一次系统迁移。
不过说是迁移,win的话只要你用Diskgenius打开armbian的卡你就会发现,卡里就只有一个主要的ext4数据分区,然后前面留16m后面留2g空闲,应该基本上都是这样的结构。于是迁移你只需要将中间的ext4分区整个搬过去另外一张卡,然后扩容就结束了,就这么简单。
如果使用Diskgenius迁移完直接扩容的话,有机会会提示bitmap中有标记为已使用的未用inode
然后不给你扩,解决办法很简单,直接把卡插上R6S开机进armbian,armbian里是有装好Gparted分区软件的,直接用这玩意拉一下确定扩容就行。
疑难解决
网口速率只有百兆
暂时只碰到过一次,虚拟机第一次起来的时候不知道为什么lan1/lan2的握手速率是100Mbps,导致测速卡在10m/s上不去,直接整机重启就好了,之后也没问题,确认是网线质量不过关,换了根超五就好了,所以你还应该检查一下网线跟水晶头过不过关,重新插拔。
Xrdp连接黑屏/蓝屏/闪退
电脑跟宿主机都重启就好了,问就是重启。
最后,我很菜,欢迎给本文纠错打补丁,同时祝你折腾得开心。
下期预告


其实都撑住了,网络没明显体感的影响,牛。
已知Armbian系统的R6S的npu是打了驱动工作正常的,已知immich可以利用rk3588(s)的npu加速基于大模型的图像、人脸识别分类,那么~immich应该只适配了闭源的mali驱动,但是6.1的内核用的是开源的Panthor驱动且不能切过去mali,因此硬件加速可能部分不work/全部不work,不过软解性能也不差啦,反正还是得部署immich的,下期见!
发表回复