ARM Lightweight Virtual Machine Experiment Journal

💻 ARM Lightweight Virtual Machine Experiment Journal

In the past, we often thought that ARM SoCs were only suitable for running lightweight containers like Docker and LXC, and that true virtualization required x86 servers. However, with the performance improvements of SoCs like RK3568, ARM development boards can now handle running KVM virtual machines. This time, I tried KVM + libvirt on an ARM box running Armbian, and even successfully installed a RouterOS virtual machine.

🛠️ Environment Preparation

One command to install all dependencies:

sudo apt update && sudo apt install -y   qemu-system-arm qemu-system-misc qemu-utils qemu-efi-aarch64   libvirt-daemon-system libvirt-clients virtinst   bridge-utils cloud-image-utils   cockpit cockpit-machines   ipxe-qemu qemu-system-data

👉 Key components:

  • <span>qemu-system-arm</span> → ARM64 virtualization core
  • <span>qemu-efi-aarch64</span> → ARM64 UEFI firmware
  • <span>libvirt-*</span> → Management toolset
  • <span>cockpit-machines</span> → Web management interface (:9090)
  • ARM Lightweight Virtual Machine Experiment JournalAccess the cockpit page

🌐 Network Configuration

Bridged mode allows the virtual machine to behave as if it is connected to a switch:

auto br0
iface br0 inet dhcp
    bridge_ports eth0
    bridge_stp off
    bridge_fd 0

Restart the network:

sudo systemctl restart networking

💽 Virtual Machine Disk & Firmware

sudo qemu-img create -f qcow2 /var/lib/libvirt/images/alpine.qcow2 1G
sudo cp /usr/share/AAVMF/AAVMF_VARS.fd /var/lib/libvirt/qemu/nvram/alpine_VARS.fd # This step is crucial, otherwise it won't boot

🐧 Alpine Virtual Machine Installation

  1. 1. Download Alpine ISO (aarch64)[1]
  2. 2. Use <span>virt-install</span> to create the virtual machine
  3. 3. Access the installation interface via VNC (<span>Host IP:5900</span>)
  4. ARM Lightweight Virtual Machine Experiment JournalSystem installation completed

After installation, remove the ISO and switch to booting from the hard disk.

📡 RouterOS ARM Virtual Machine

RouterOS does not officially provide an ARM version of the VM, but there is a community patch available:👉 MikroTikPatch[2]

  1. 1. Place <span>ros-arm.qcow2</span> in <span>/var/lib/libvirt/images/</span>
  2. 2. Prepare a separate NVRAM file for each VM
  3. 3. Use <span>virt-install --import</span> to directly import
  4. ARM Lightweight Virtual Machine Experiment JournalPatch version activated

💡 After completion, you can manage it using Winbox and activate the L6 license.

ARM Lightweight Virtual Machine Experiment JournalL6 license obtained

⚠️ Note: ARM virtual machines are sensitive to power outages, which can easily lead to boot failures on subsequent starts.

📊 Management Panel Experience

I tested several web frontends:

  • Virtlyst: Lightweight but requires compilation, skipped
  • WebVirtMgr: Full-featured but depends on Python, skipped
  • Kimchi: Powerful but difficult to install on ARM
  • Cockpit: Monitors VMs well, but cannot create ARM VMs
  • ARM Lightweight Virtual Machine Experiment JournalCreation of virtual machine failed to start
  • Flint: Nice interface, but ARM is basically unusable
  • ARM Lightweight Virtual Machine Experiment JournalFlint CPU and memory data is completely inaccurate, other functions are basically useless
  • PVE / PXVIRT: ARM small boxes perform poorly, not recommended

👉 Conclusion:Command line is still reliable on ARM.

📌 ARM vs x86 Virtualization Comparison

Item ARM (RK3568/Armbian) x86 (Common PC / Server)
Performance Positioning Lightweight, suitable for running small VMs like Alpine, ROS Powerful, can support production environments
Virtualization Support Limited KVM support, complex UEFI firmware and NVRAM configuration Mature and complete, can use <span>virt-install</span> directly
Management Panel Cockpit/Flint/Kimchi experiences are incomplete Rich ecosystem with PVE, VMware, Hyper-V, etc.
IO Support No PCIe passthrough, poor passthrough capability Full support for GPU/PCIe/USB/NVMe
Stability Prone to power outages, high risk of VM boot failures Stable and reliable, suitable for production environments
Power Consumption/Heat Dissipation Low power consumption, low heat, suitable for long-term operation High power consumption, but server cooling design is well done
Applicable Scenarios Experimentation, light virtual machines Home/enterprise-level virtualization, productivity environments
Ecosystem Maturity Limited resources, requires troubleshooting Many tutorials, active community, high maturity

✨ Experiment Insights

Experimenting with ARM virtual machines is essentially a “curiosity experiment”. To be honest, its practical value is not significant: poor stability, missing features, and an incomplete ecosystem make it hard to become a daily productivity tool.

But for me,the significance of experimentation is not necessarily to pursue practicality, but to explore “can it be done”.Successfully running a RouterOS virtual machine on such a small box is an achievement in itself.

Sometimes, the ARM platform is like a “tech Lego”; it imposes many limitations but also forces you to step out of your comfort zone and try various solutions. The process of encountering pitfalls and taking detours is the greatest joy of experimentation.

So the conclusion is simple:

  • • If you want stability, peace of mind, and the ability to host production tasks → use x86.
  • • If you want to challenge yourself and prove that ARM can also run VMs → experiment with ARM, enjoy the process.

⚠️ Lastly, a reminder:never use low-quality SD cards. Virtual machines on ARM put more I/O pressure than containers, and cheap cards can easily report <span>Input/output error</span><span>, and in severe cases, lead to crashes.</span><span> Don't ask me how I know. 😅</span>

Reference Links

<span>[1]</span> Alpine ISO (aarch64): https://dl-cdn.alpinelinux.org/alpine/v3.20/releases/aarch64/<span>[2]</span> MikroTikPatch: https://github.com/elseif/MikroTikPatch

Leave a Comment