1. 为什么要在 VirtualBox 里装一台 Armbian x86
Armbian 这个发行版,玩过开发板的人应该都不陌生。它天生是给 ARM 板卡准备的,以轻量、稳定、软件源更新及时出名。但很多人不知道的是,Armbian 官方其实也发布 x86 版本的镜像,也就是说,你完全可以在普通的 PC 上,甚至在 VirtualBox 里创建一个 Armbian x86 虚拟机。这个组合有个很实际的价值:不需要买任何开发板硬件,就能提前体验 Armbian 特有的配置体系和软件管理方式;在给真实板子部署服务之前,可以先在虚拟机里把脚本、依赖、网络配置全部验证一遍,再拿到真机上跑。
我最早碰 Armbian x86 虚拟机,是因为要给一块 ARM 板子做系统适配,来回刷机太痛苦,而且有些测试动作本身就有风险。后来想到先在 VirtualBox 里建一台同样逻辑的虚拟机,把安装流程、软件依赖、脚本行为都确认清楚,再平移到真机,效率一下子提升了不少。整篇文章会把完整流程写出来:从镜像下载、磁盘转换、虚拟机创建,到首次登录、分区扩容、网络配置,最后是常见问题排查。整个过程没有特别复杂的技术点,但很多细节不实际踩过一遍,确实容易卡住。
在动手之前,先理清一个核心认知:Armbian 走的不是“用 ISO 引导安装”的路线,它更像一个“完整磁盘镜像”,下载解压后得到的 .img 文件就是一块完整的系统盘,你要做的是把这块盘“放”进虚拟机里让虚拟硬盘直接引导。只要理解这一点,后面所有操作都会顺理成章。
2. 准备阶段:镜像下载与基础环境
2.1 镜像版本怎么选
打开 Armbian 官网的下载页面,在架构选择里找到 x86-64,就能看到对应的镜像。文件名一般类似Armbian_25.02.0_X86-64_bookworm_current_6.12.x.img.xz,其中几个关键信息值得注意。
一是系统基底。镜像会基于 Debian 或 Ubuntu,我优先推荐 Debian 版本,比如 bookworm。原因很简单:Debian 基底更干净、更稳,社区维护周期长,跑服务器类任务不会出现 Ubuntu 那种频繁升级带来的意外行为。
二是内核版本。标注为 current 的是当前稳定内核,标注为 lts 的是长期维护内核。在虚拟机里没有硬件兼容性的压力,选 current 即可,内核新一些,对 VirtualBox 虚拟网卡、虚拟显卡的驱动支持也更完整。
三是版本类型。Armbian 提供 server、minimal、desktop 几类,server 是纯命令行、组件最克制,desktop 带 XFCE 桌面环境。我强烈建议选 server 版,虚拟机的意义在于验证业务和配置,桌面环境既占用资源,又增加一层不必要的复杂性。真需要图形界面,后面用 armbian-config 一键装一个 XFCE 是非常成熟的做法。
下载完成后,你拿到的通常是.img.xz压缩文件,需要先解压成.img。Windows 下用 7-Zip 就能解压,Linux 或 macOS 下用命令:
xz -d Armbian_25.02.0_X86-64_bookworm_current_6.12.x.img.xz解压出来的.img文件可能有三四个 GB,这是一个完整磁盘镜像。可以把它理解为“一张被整体打包的 SD 卡”,里面已经分好区、写好了引导程序、装好了基础系统。Argbian 官方对 x86 平台的做法,就是把这张卡变成一块硬盘,然后启动。
2.2 VirtualBox 与常用工具准备
VirtualBox 建议使用 6.1 以上版本,7.x 更佳。7.x 对 UEFI 引导、VMSVGA 显卡控制器、桥接网络的兼容性都更好,遇到问题的概率会低一些。
除了图形界面,还需要一个命令行工具:VBoxManage。它随 VirtualBox 一起安装,Windows 下位于 VirtualBox 安装目录内,Linux 下通常在/usr/bin/VBoxManage。转换磁盘格式、扩容虚拟磁盘、查看磁盘列表,这些操作用命令行比 GUI 直观高效得多。后面我会频繁用到它。
另外建议准备一个能编辑文本文件的基础环境。因为 Armbian 安装后,你要改软件源、改 SSH 配置、改时区设置,这些都离不开文本编辑器。系统自带 nano,很多人更习惯 vim,后面装一下就行。
这里顺便解释一个容易混淆的点:.img、.iso、.vdi三者关系。.img是原始磁盘镜像,直接对应块设备;.iso是光盘镜像,虚拟机光驱加载它然后引导安装;.vdi是 VirtualBox 的虚拟硬盘格式。“把 .img 当作 .iso 挂载”是新手最常见的错误,永远引导不起来。正确做法是先把它转换成.vdi,挂到 SATA 控制器上,让虚拟机当作硬盘启动。
3. 核心操作:镜像转换与虚拟机创建
3.1 把 .img 转换成 VirtualBox 的 .vdi
这一步是整个流程中技术含量最高、也是最多人卡住的地方。用 VBoxManage 转换比较简单:
VBoxManage convertfromraw Armbian_25.02.0_X86-64_bookworm_current_6.12.x.img armbian.vdi --format VDIconvertfromraw的意思是“从原始镜像转换”,它会遍历整个.img文件,把里面的数据完整封装进.vdi。转换过程需要一点时间,耐心等待即可。完成后可以用下面命令确认新磁盘的信息:
VBoxManage list hdds这条命令会列出所有 VirtualBox 已知的虚拟磁盘,包括刚才生成的 armbian.vdi,重点关注它的容量标识是否正常。
这里有个必须提前处理的点:生成的.vdi大小和原始.img几乎一样。Armbian 官方的 x86 镜像并不大,系统分区通常只占其中一部分,如果你直接拿这个 vdi 创建虚拟机,后续装软件、跑服务、写日志,很快就会发现空间不够。所以建议在转换完成后立刻扩容:
VBoxManage modifymedium disk armbian.vdi --resize 20480这条命令把虚拟磁盘扩容到 20 GB,单位是 MB。注意,这时候分区表和文件系统还停留在原始大小,扩容出来的空间是“未分配”状态,需要等 Armbian 启动后手动扩展系统分区。这是正常现象,不是错误,我会在第四部分详细讲。
如果你是命令行爱好者,也可以完全通过 VBoxManage 创建虚拟机并挂载磁盘,全程不打开图形界面。不过多数人习惯用 GUI,那就在 VirtualBox 新建虚拟机,然后选“使用已有虚拟硬盘文件”,指向刚才生成的 armbian.vdi 即可。
3.2 创建虚拟机并完成关键参数配置
在 VirtualBox 主界面点击“新建”,按下述参数配置:
- 名称:随意,比如 Armbian-x86
- 类型:Linux
- 版本:Debian (64-bit),因为 Armbian 基于 Debian,选这个最贴近
- 内存:2048 MB 起步,虚拟机内跑编译或容器的话可以给到 4096 MB
- CPU:2 核足够,Armbian 本身很轻量
- 虚拟硬盘:选择“使用已有虚拟硬盘文件”,然后浏览选择 armbian.vdi
创建完成后,进入“设置”里做两个细节调整。
第一个是存储控制器。确保 armbian.vdi 挂在 SATA 控制器下,而不是 IDE 控制器。Armbian 镜像里的引导程序默认会探测 SATA 设备,如果挂在 IDE 下,有概率出现找不到根分区的情况。VirtualBox 默认新建的控制器就是 SATA,一般不需要动,但值得检查一下。
第二个是启动模式。Armbian x86 镜像使用 GRUB 引导,同时支持传统 BIOS 和 UEFI。建议先保持默认的传统 BIOS。如果启动后黑屏,或者停在“No bootable device”附近,再去“设置 -> 系统 -> 主板”里勾选“启用 EFI”试试。这两种引导模式对应不同的 GRUB 安装方式,换一次等于换了引导路径,通常两种里有一种能用。
如果你更喜欢纯命令行,也可以用这几条命令完成同样的效果:
VBoxManage createvm --name "Armbian-x86" --ostype Debian_64 --register VBoxManage modifyvm "Armbian-x86" --memory 2048 --cpus 2 VBoxManage storagectl "Armbian-x86" --name "SATA" --add sata --controller IntelAhci VBoxManage storageattach "Armbian-x86" --storagectl "SATA" --port 0 --device 0 --type hdd --medium armbian.vdi这样创建的虚拟机和 GUI 操作完全等价,适合批量创建或脚本化部署的场景。
3.3 首次启动:默认账号与初始密码
一切配置就绪后,点击“启动”。Armbian 没有传统安装向导,开机过程会看到内核日志快速滚动,首次启动比后续稍慢,因为要生成 SSH 主机密钥、初始化系统服务。
看到登录提示后,使用默认凭证登录:
- 用户名:root
- 密码:1234
第一次登录会强制修改 root 密码。按提示先输入当前密码 1234,然后输入两遍新密码。紧接着系统会询问是否创建一个普通用户,我建议创建。日常操作用普通用户,需要提权时使用 sudo,能有效避免在 root 下误操作搞坏系统。
到这里实际上已经完成了“安装”这个动作。比想象中简单对吧?但这时候系统还处于比较原始的状态:网络可能是通的,也可能不是;时区不对;软件源没有优化;磁盘空间可能尚未扩展。接下来才是让系统真正好用的关键阶段。
4. 初始化配置:让 Armbian 真正可用
4.1 网络连接与 SSH 远程访问
VirtualBox 默认给虚拟机提供 NAT 网络。在 NAT 模式下,虚拟机可以访问外部互联网,但宿主机和外部设备没法主动连入虚拟机。这种模式适合临时测试,但如果你和我一样,习惯从宿主机开终端操作虚拟机,就需要配置端口转发或者改用桥接模式。
配置端口转发的方法:VirtualBox 主界面选中虚拟机,进入“设置 -> 网络 -> 高级 -> 端口转发”,添加一条规则:
- 名称:ssh
- 协议:TCP
- 主机 IP:127.0.0.1
- 主机端口:2222
- 子系统端口:22
这样在宿主机执行ssh -p 2222 root@127.0.0.1,就能连接到虚拟机里的 Armbian。这个玩法不仅限于 SSH,如果要在虚拟机里跑 Web 服务、API 服务,同样可以通过端口转发把宿主机的 8080 映射到虚拟机的 80,直接通过宿主机访问。
如果希望虚拟机成为局域网内的一台独立主机,被其他设备直接访问,更好的办法是把网络模式改成“桥接网卡”。桥接模式下,虚拟机会从路由器获取一个与宿主机同网段的 IP,其他机器直接访问这个 IP 就行。注意桥接模式对宿主机网卡环境有要求,如果宿主机连接的是不稳的 Wi-Fi,虚拟机的网络也会跟着波动。
进入系统后先确认网络状态:
ip addr如果在 NAT 模式下拿到的是 10.0.2.x 开头的地址,说明网络已经通了。Armbian 默认开启 SSH 服务,root 密码修改后即可远程登录。如果想禁用 root 远程登录,编辑/etc/ssh/sshd_config,将PermitRootLogin改为 no,然后重启 ssh:
sudo systemctl restart ssh4.2 软件源优化与系统升级
Armbian 的软件源由两部分组成:Debian/Ubuntu 的系统源,以及 Armbian 自己的源。默认配置指向官方服务器,在某些网络环境下速度不太理想,建议替换为国内镜像。
Debian 系统源一般位于/etc/apt/sources.list。新版可能使用/etc/apt/sources.list.d/下的文件,执行ls /etc/apt/sources.list.d/确认一下。用 sed 替换可以避免手工改错:
sudo sed -i 's|http://deb.debian.org|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.listArmbian 自身源一般在/etc/apt/sources.list.d/armbian.list,同样可以换成对应的国内镜像地址,也可以暂时保持官方源。大部分时候瓶颈在 Debian 源,Armbian 源本身的流量压力不大。
替换完成后更新缓存并升级系统:
sudo apt update sudo apt upgrade首次升级可能会拉取不少内核包和依赖包,耐心等待。升级完之后建议重启一次,让新内核与驱动真正生效:
sudo reboot这里想多提醒一句:Armbian 的升级策略与普通 Debian 略有差异,它有可能在apt upgrade时更新内核,但不太会主动切换内核版本。如果你看到内核版本更新了但系统没变,这是 Armbian 的设计取舍,不用慌。
4.3 时区、语言与基础工具
默认时区不是中国时区,时间显示会差好几个小时,如果后面要做定时任务或查看日志,时间不对会带来很多困扰。设置时区:
sudo timedatectl set-timezone Asia/Shanghai执行完再用date确认一下。
语言环境默认英文,如果确实需要中文环境,可以用dpkg-reconfigure locales勾选相关语言,然后locale-gen。不过我的建议是保持英文环境。原因很实际:很多命令行工具、错误日志、开发环境针对英文 locale 做了最佳适配,切到中文后偶尔会出现显示错乱或字符编码问题。在服务器场景,英文环境是更稳妥的选择。
接下来装一批常用工具:
sudo apt install vim htop curl wget git tree这组工具覆盖了远程编辑、系统监控、网络请求、代码管理等日常操作,没有一个是多余的。
Armbian 还有一个招牌工具叫armbian-config,交互式配置界面,可以管理网络、系统服务、软件安装、硬件参数等。第一次使用建议运行看看:
sudo armbian-config在纯命令行环境里,它能省去大量手动编辑配置文件的功夫。比如想安装桌面环境,在它的 Software 菜单里可以直接选装 XFCE;想配置无线网络、调整 CPU 调优策略,也都能在菜单里完成。这是 Armbian 区别于普通 Debian 的重要特色。
4.4 分区扩容:别让磁盘空间卡死你
前面说到,官方镜像的磁盘分区通常只有几个 GB,而虚拟磁盘已经扩到了 20 GB。查看当前分区状态:
df -h lsblk大概率会看到/dev/sda1还保持着原始的较小容量,而整个/dev/sda已经是 20 GB。这时需要手动扩展系统分区。
Armbian 官方镜像的磁盘通常使用 GPT 分区表。扩展根分区的标准流程如下,全程需要用 fdisk 操作:
- 进入 fdisk 编辑分区表:
sudo fdisk /dev/sda- 输入
p查看当前分区布局,记住根分区的起始扇区,这个数字至关重要。 - 输入
d删除根分区。注意,删除分区不等于删除数据,只要后续新建分区的起始扇区保持不变,文件系统数据原封不动。 - 输入
n新建分区。fdisk 会要求输入起始扇区,此时输入刚才记录的起始扇区,结束扇区直接回车使用默认值,也就是磁盘末尾。 - 如果 fdisk 提示分区类型,选择 Linux filesystem,对应的类型代码为 20,然后写入分区表。
上面这组操作有几个容易出错的地方。一是 GPT 分区分区号的选择,如果原来的分区号是 1,新建时默认可能给 1,或者要求指定,按原来编号继续用即可;二是修改分区表之前,强烈建议先做一次快照,万一起始扇区填错,至少还有回退空间。虚拟机嘛,这就是比真机舒服的地方。
分区表写入后,让内核重新读取:
sudo partprobe /dev/sda然后扩展文件系统:
sudo resize2fs /dev/sda1结束后执行df -h,根分区容量应该已经变成 20 GB。
如果你的 Armbian 版本较新,它可能内置了自动扩容逻辑,首次启动时就已经完成了分区扩展。先看df -h,如果显示的就是完整大小,那这一步可以完全跳过。
5. 常见问题与排查实录
5.1 虚拟机启动后黑屏、卡 GRUB 或找不到引导设备
这是转换镜像玩法里出现频率最高的问题,我自己第一次操作也栽过跟头。
优先检查三个地方:
- 虚拟硬盘是否挂在 SATA 控制器下。如果是在 IDE 控制器下,改成 SATA 再试。
- 引导模式与镜像是否匹配。传统 BIOS 起不来,换成“启用 EFI”;EFI 起不来,关闭 EFI 再试。
- 显卡控制器设置。如果启动到了 GRUB 菜单但进入系统后黑屏,尝试把“设置 -> 显示 -> 显卡控制器”改成 VMSVGA,Argbian 对 VMSVGA 的 framebuffer 兼容性通常更好。
顺带说一个很多新手会犯的错:拿到 .img 文件后直接把它挂载为虚拟机的“光驱”,期待像装 Ubuntu 那样出现安装界面。这是行不通的。.img 是磁盘镜像,不是 ISO 光盘镜像,必须转换成虚拟硬盘来接。
5.2 网络不通,怎么一步步排查
先确认虚拟机网络模式。NAT 模式下,如果宿主机本身不联网,虚拟机肯定也上不了网。桥接模式下,确认桥接的是正在使用的物理网卡,别选成虚拟网卡。
然后进系统执行:
ip addr ip route看是否拿到了 IP,有没有默认路由。如果网关不通,多半是网络模式或网卡配置的问题;如果网关通但外网不通,重点排查 DNS。检查/etc/resolv.conf,必要时可以临时设置 DNS:
echo "nameserver 223.5.5.5" | sudo tee /etc/resolv.conf还有一个细节:VirtualBox 的“网络”设置里,如果网卡状态被设置成“未连接”,配置再好也不会有网络。每次修改网络设置后,检查一下“连接”状态是否勾选。
5.3 apt update 报错:签名失效或源不可用
执行apt update时提示某些仓库缺少数字签名,或者拉取某个源失败,通常有三种原因:
- 源地址写错了。再去
/etc/apt/sources.list和/etc/apt/sources.list.d/检查一遍,确保没有打错镜像地址。 - 源里加入了不匹配的发行版组件。比如在 Debian bookworm 里混入了 sid 的仓库,会出现大量 404 和签名错误,把不相关的仓库行注释掉就好。
- Armbian 公钥过期或缺失。新版 Armbian 使用
/etc/apt/trusted.gpg.d/下的独立公钥文件,不要再用老式的apt-key。可以试着重新导入:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 你的KEYID不过这是兼容性做法,新系统更推荐直接下载 Armbian 的公钥文件放到trusted.gpg.d/。
遇到这类问题不要急着全删重来,先备份原有源配置,再一条一条排除,恢复起来会快很多。
5.4 时间总是不对
虚拟机的时间问题一般有两个原因:时区没设置,或者时间同步服务没启用。
先设置时区:
sudo timedatectl set-timezone Asia/Shanghai如果只是慢了几分钟,多半是 NTP 同步没开启。安装 chrony:
sudo apt install chrony sudo systemctl enable --now chrony时间问题在写日志、做定时任务、联网请求时最为致命,尤其是用 cron 做定时采集或备份的场景,时间戳错乱会直接导致数据被错误覆盖。建议在 Armbian 刚装完就顺手解决。
6. 实操心得与扩展方向
整套流程走下来,我最大的感受是 Armbian 的 x86 虚拟机比想象中靠谱,也比想象中朴素。
靠谱在于,它和 ARM 板上的 Armbian 几乎保持同样的目录结构、同样的配置命令、同样的包管理逻辑。你在虚拟机里练习的每一套操作,都能几乎原样平移到真实的开发板上。对于那些做嵌入式边缘设备、NAS 系统、软路由调优的人来说,这个价值非常大。你可以先在一台虚拟机上把部署脚本、依赖关系、驱动加载逻辑全部摸透,再交付到真机,省下来的调试时间非常可观。
朴素在于,它没有传统发行版那种“安装向导”的体验,整个启动方式更像“把整块盘插上就开机”。默认密码 1234、首次强制改密、无图形配置页面,这套交互逻辑本来面向开发板用户,第一次接触的人会不太习惯。但只要抓住“镜像就是完整磁盘”这个核心,所有怪异感都会消失。
后续扩展方面,我实际试过几个比较实用的方向:
- 把虚拟机模拟成一台轻量内网服务器,跑 Nginx、MySQL、frp 这类服务,先把配置在虚拟机里验证,再迁移到真实设备。
- 在 Armbian 虚拟机里做 ARM 交叉编译。系统依赖干净,用 apt 安装工具链很方便,比宿主机上折腾跨平台环境舒服很多。
- 通过桥接网络把虚拟机当作局域网主机,用来做定时抓取、自动化测试、脚本跑批,资源占用很低,长期开着也不心疼。
最后分享一个实操习惯:每次改动系统关键配置之前,先在 VirtualBox 里给虚拟机拍个快照。改崩了,一键回滚;改成功了,再删掉旧快照释放空间。在 Armbian 这种高度定制、而且分区表可能被手动调整过的系统里,快照比任何事情都让人安心。
我自己的经验是,一旦把 Armbian x86 虚拟机跑顺了,很多原本需要在真机上来回验证的事情都可以丢给它。轻量、干净、可复制,这几点让它非常适合作为日常 Linux 实验环境。如果你正打算用 Armbian 做点什么,不妨先在这台虚拟机里试一试再上车。