☰
VirtualBox中安装Armbian x86:从镜像转换到系统调优全指南
2026/10/24 3:34:02 网站建设 项目流程

如果你和我一样,手里没有现成的ARM开发板,却想体验一下Armbian这套为单板电脑做了大量优化的Linux发行版,那在VirtualBox里装它的x86版本,是目前最省事也最不容易翻车的一条路。Armbian官方其实一直提供x86_64镜像,配合VirtualBox,你可以在Windows、macOS或Linux宿主机上,十来分钟就获得一个可以随时丢弃、随时快照回滚的Armbian环境。

这篇文章是写给谁的?如果你只是想跑个轻量Linux当测试机,或者你是嵌入式方向的学生、开发者,需要一个和Armbian系统行为接近的虚拟环境来验证脚本、交叉编译工具链,那这篇文章的完整流程可以直接照抄。我会把镜像选择、磁盘转换、首次启动、SSH配置、扩容和踩坑记录全部串起来讲,尽量少一句废话。

1. 在VirtualBox里跑Armbian x86版,到底解决什么问题

1.1 Armbian的定位:面向嵌入式场景的轻量Linux

Armbian本质上是一个基于Debian(也有Ubuntu基底版本)的Linux发行版,但它和普通Debian最大区别在于:它针对ARM单板电脑做了大量定制,比如预编译优化内核、自动配置硬件驱动、功耗管理脚本、以及一个非常方便的一站式配置工具armbian-config。很多玩过树莓派或各种开发板的人,对它最大的印象就是“开箱即用”——烧录镜像、插电、登录,系统已经把该调的都调好了。

很多人不知道的是,Armbian官网的下载页面里一直有一个独立的x86分类。这个x86镜像用的是通用内核,专门给那些想在普通PC服务器或虚拟机上使用Armbian的人准备。它不是模拟器,而是实实在在运行在x86架构上的一套Armbian系统,软件源、目录结构、默认配置和你在ARM板上用的大同小异。

这也是我推荐在VirtualBox里折腾它的原因:你得到的不是一个“有点像Armbian的东西”,而是Armbian本身。对于那些想熟悉Armbian操作、测试部署脚本、甚至研究它默认启用了哪些服务的人来说,这个环境足够真实。

1.2 虚拟机和真实开发板之间该怎么取舍

先泼一盆冷水:在VirtualBox里跑Armbian x86版,不能百分之百替代真实ARM开发板。最大的差异在硬件层——CPU架构不同、外设IO行为不同、GPIO/SPI/I2C这些在虚拟机里根本没有,某些内核模块的加载路径也不一样。

但虚拟化方案也有实体板子比不了的优势:

  • 快照回滚。装坏了一个服务,直接恢复快照,几秒钟回到干净状态,这在反复实验时太重要了。
  • 资源弹性。内存、CPU、磁盘都能随时调,不用重新买硬件。
  • 环境隔离。可以在主力机上开一个或多个虚拟机,互不干扰,也不影响宿主机系统。
  • 网络可控。NAT、桥接、端口转发都可以按需切换,模拟各种组网场景。

所以我的建议是:如果你是做底层驱动、内核移植、外设适配相关的工作,那必须用真实ARM硬件来验证;如果你只是写业务脚本、部署容器、学习Armbian的使用习惯,或者给团队做一个统一的开发环境镜像,那VirtualBox方案完全够用,而且效率高得多。

1.3 为什么是VirtualBox而不是其他虚拟化方案

可选方案其实不少,比如VMware Workstation、KVM、Hyper-V、甚至直接用QEMU跑ARM模拟器。但VirtualBox有几个很实在的点:

  • 完全免费,跨平台,行为一致。
  • 命令行工具VBoxManage很成熟,适合脚本化批量操作,后面转换磁盘格式就是靠它。
  • 支持嵌套虚拟化,在虚拟机里再跑Docker也没问题。
  • 磁盘镜像兼容性好,VDI格式可以直接用命令和raw/img互转。

所以这次就以VirtualBox为主。版本方面建议用最新的稳定版,不需要追求测试版。

2. 动手之前:镜像、资源规划和磁盘格式转换

2.1 下载哪个版本:认准x86_64而不是arm64

打开Armbian官网下载页面,找到x86分类,你会看到基于不同Debian版本的构建。选的时候注意几点:

  • 认准x86_64。ARM板子用的镜像通常是arm64或armhf,下载错了在x86虚拟机里根本没法启动。
  • Server版和Desktop版的选择。Server版是纯命令行,体积小、资源占用低,适合跑服务和开发环境;Desktop版自带轻量桌面(一般是Xfce),适合想看到图形界面的情况。我的建议是:如果用途是服务器或开发调试,直接选Server版,省心;如果只是想体验一下桌面,Desktop版也行,但虚拟机配置要适当调高。
  • 基底系统选Debian还是Ubuntu。两者都行,习惯用哪套软件生态就选哪套。Debian基底对服务器场景更稳,Ubuntu基底版本更新更快。新手不用纠结,选Debian当前稳定版即可。

下载下来通常是一个扩展名为.img.xz的压缩包,体积大约一两个GB,解压后会得到一个完整的裸磁盘镜像.img,后面要用这个img来生成虚拟磁盘。

2.2 虚拟机资源配置建议

在新建虚拟机之前,先给一个我多次实测下来的配置参考,你可以按这个起点走,基本不会遇到性能瓶颈:

项目Server版Desktop版
CPU核心数22
内存2048 MB4096 MB
虚拟磁盘16 GB(动态扩展)32 GB(动态扩展)
显存16 MB128 MB
网络NATNAT
硬盘控制器SATASATA

16GB听起来不大,但Armbian的干净Server版本体占用不到2GB,装完常用工具和Docker后通常还有一大半空间。如果后面不够,可以按第4章的扩容流程扩大虚拟磁盘,所以初期不用给得太大。

2.3 用VBoxManage把img转换成vdi

拿到解压后的.img文件,第一步要把它转换成VirtualBox能直接使用的.vdi格式。为什么不直接挂载img?因为VirtualBox的存储层原生不读取img裸镜像,虽然可以通过一些间接手段绕过去,但最稳定、最不容易出问题的做法就是用官方命令行工具转换。

转换命令很简单:

VBoxManage convertfromraw Armbian_x86_64.img Armbian-x86.vdi --format VDI

整条命令的核心就是convertfromraw:它把输入文件当做一个原始磁盘镜像,按字节读取并写入到目标VDI文件里。参数--format VDI显式指定输出格式,这样在任何系统上行为都一样。

如果你在Windows下使用,安装VirtualBox时通常会把VBoxManage所在的目录加入PATH,直接在PowerShell或CMD里运行上述命令即可;如果提示找不到命令,就去VirtualBox安装目录下运行。注意文件路径里有空格时用双引号包住,比如:

VBoxManage convertfromraw "D:\Armbian\Armbian_x86_64.img" "D:\Armbian\Armbian-x86.vdi" --format VDI

转换耗时取决于镜像大小和磁盘速度,一般几分钟到十几分钟,看到进度条走完就说明成功了。转换完成后,你会得到一个大小与img展开后接近的vdi文件,这就是之后虚拟机的系统盘。

2.4 转换时容易忽略的细节

有几个细节我一开始没注意,后来都变成了实际教训:

  • 解压.img.xz之前,确认目标磁盘有充足空间。解压后的img体积通常是压缩包的几倍,再加上转换出来的vdi,一份镜像会占用两倍左右的临时空间。我建议准备至少10GB的剩余空间。
  • 转换时,Windows下可以把img和输出vdi放在不同盘,减少同盘读写造成的等待。
  • 下载的镜像文件名里带详细版本号,建议自己重命名成简洁的文件名再转换,避免后续命令行操作时路径过长出错。
  • 如果批量创建多台虚拟机,同一份img可以多次转换。转换完成后,把原始img文件留好,相当于有了一份可以反复使用的模板。
  • 想在VirtualBox里看到更多细节信息,可以先给vdi生成后动手做一次启动测试,而不是直接在上面安装软件。Armbian镜像本身是完整系统,转换完的vdi就已经是“开机即用”的,不需要像传统系统那样一步步安装,这也是它吸引人的地方。

3. 从创建虚拟机到首次登录:手把手走一遍

3.1 新建虚拟机但不添加硬盘

打开VirtualBox,点击“新建”按钮,按下面的方式填写:

  • 名称:随意,比如Armbian-x86。
  • 类型:Linux。
  • 版本:Debian (64-bit)或Ubuntu (64-bit),按你下载的镜像基底选,选错了一般也不影响启动,但建议选对应项。
  • 内存大小:按第2章的表格分配。
  • 处理器:在后续的系统设置里调整为2。
  • 虚拟硬盘:这一步选择“不添加虚拟硬盘”。因为我们要用转换好的vdi,而不是让VirtualBox新建一个空白盘。

创建完成后,进入“设置 -> 存储”,在存储树里选中SATA控制器,点击添加硬盘图标,选择“选择现有磁盘”,然后选中刚才转换好的Armbian-x86.vdi。确保这张虚拟硬盘挂在SATA控制器下,端口选0。

接着到“设置 -> 系统 -> 主板”,把“启动顺序”里的“硬盘”挪到第一位;如果原先检测到空光驱,也要保证硬盘在光驱前面。最后到“设置 -> 系统 -> 处理器”,核数改成2。启动方式保持默认的BIOS,Armbian的x86镜像对传统BIOS引导支持最好,UEFI不是不行,但我实测下来默认BIOS最省事。

3.2 首次启动会看到什么

点击“启动”按钮,等待虚拟机屏幕出现文字。如果一切正常,你会看到内核日志滚动,然后进入MOTD(每日提示)界面。这里有个Armbian的老传统:默认账号是root,默认密码是1234,首次登录系统会强制你修改密码,然后询问要不要创建一个普通用户,之后还会让你设置语言、时区、键盘布局。

注意几个小细节:

  • 默认密码是1234,这是公开约定,但不是让你一直用这个密码。第一次登录后不设新密码,后面很多操作都做不了。
  • 普通用户建议创建,日常操作尽量用普通用户,需要管理员权限再sudo。
  • 语言和键盘布局,服务器场景一般选英文,避免终端下出现乱码;如果你的使用场景需要中文界面,Desktop版可以在安装完系统后另外安装中文字体和相关语言包,不要一上来就在初始化阶段选中文,否则某些TTY显示会很难受。

如果你的镜像版本较新,首次引导时还会自动扩展根分区到整个虚拟磁盘大小,这期间可能会自动重启一次,是正常现象,不用紧张。重启后再登录,系统提示会变得干净很多。

对于Desktop版,差别在于登录后会看到图形登录界面,账号密码就是你刚创建的普通用户,而不是root。图形界面本身是Xfce,轻量流畅,但VirtualBox虚拟显卡的3D加速效果就不要抱太高期望了。

3.3 初始化向导这样设计的原因

很多人不理解为什么Armbian不直接给一个安装器,而是要用户第一次登录后手动改密码。这其实是嵌入式设备的实际需求:SD卡或eMMC上的镜像需要做到“烧录即启动”,所以出厂镜像必须有一个统一的凭证,而首次登录强制改密能保证这个默认凭证不会一直留存在你的系统里。

理解了这个逻辑,你在虚拟机里用Armbian时就会少很多疑惑:它本质上不是“安装”一个系统,而是在虚拟磁盘上直接运行一个已经写好的系统镜像。所以第2章的img转换,其实就是扮演了“烧录”镜的角色。这也是为什么整个过程比传统安装系统更快、更直接。

4. 系统落地后的调优:SSH、armbian-config、磁盘和快照

4.1 用端口转发解决NAT下的SSH访问

虚拟机刚开机时网络默认走NAT模式,虚拟机可以访问外网,但宿主机和虚拟机之间不能直接通过SSH连接。两种解决办法:一种是直接把网卡改成桥接模式,让虚拟机在局域网里获得独立IP;另一种是保留NAT,然后设置端口转发。

我更推荐在初期用端口转发,因为宿主机IP和端口完全可控,不用管局域网环境:

在VirtualBox的“设置 -> 网络 -> 高级 -> 端口转发”里,添加一条规则:

  • 名称:ssh
  • 协议:TCP
  • 宿主机IP:127.0.0.1
  • 宿主机端口:2222
  • 子系统IP:(留空)
  • 子系统端口:22

保存后,在宿主机终端执行:

ssh root@127.0.0.1 -p 2222

输入root密码即可登录。这样做的优点是端口固定、不依赖虚拟机IP变化。缺点是宿主机上其它人也无法直接通过这个端口访问虚拟机内容,所以安全性好一些。如果你要跑的是一些需要对外提供服务的程序,后期建议改成桥接模式,让虚拟机直接暴露在局域网里。

4.2 armbian-config:一个小而全的维护入口

登录系统后,值得第一时间认识一下armbian-config:

sudo armbian-config

这是一个命令行动态菜单工具,也是Armbian的精华之一。里面能做的事情很多,我实际用得比较多的几个:

  • 网络配置。可以手动设置静态IP、DNS,不需要再去手写配置文件。
  • 软件源切换。可以自动选择一个更快的镜像源,这比手动改/etc/apt/sources.list方便。
  • 安装额外软件。它内置了一个“Softy”分类,可以快速安装Docker、一些常用服务工具,省去自己找官方安装脚本的麻烦。
  • 系统设置。时区、语言、主机名、自动更新策略,都能在一个界面里改。

这个工具的菜单结构在不同版本里会有细微差异,但逻辑很清晰:System管系统层,Network管网络,Software管软件安装。你要是懒得记那么多命令行,大部分日常维护工作都可以通过它完成。

4.3 给虚拟磁盘扩容:命令行和Guest内分区调整

虚拟磁盘16GB不够用的时候,直接在系统内往外扩是可行的。先关闭虚拟机,在宿主机上执行:

VBoxManage modifymedium disk "Armbian-x86.vdi" --resize 32768

后面数字的单位是MB,32768就是32GB。这条命令会把vdi的容量上限改成32GB,但虚拟机里的分区不会自动变大,还需要到系统内做一次分区调整。

启动虚拟机,先查看当前分区状态:

lsblk

假设你的根分区是/dev/sda1,那么需要把分区表扩到磁盘末尾,再把文件系统扩大。可以先安装必要工具:

sudo apt update sudo apt install cloud-guest-utils

然后执行:

sudo growpart /dev/sda 1 sudo resize2fs /dev/sda1

第一条命令调整分区,第二条命令调整ext4文件系统。执行完再用df -h验证,你会发现根分区容量已经变成扩容后的数值了。如果分区号不是1,根据lsblk的实际结果修改数字即可。

4.4 快照:反复折腾的后悔药

虚拟机方案比物理机舒服的地方,快照一定排在前面。在VirtualBox的主界面选择虚拟机,点击“备份 -> 生成备份”即可创建快照。

创建快照前建议先关机,或者至少确保系统里的文件系统处于一致状态。有了快照之后,你可以放心地去改软件源、装Docker、跑一些可能搞崩系统的实验。一旦系统不对劲,直接恢复快照,整个状态就回到创建点。

我个人的使用习惯是:

  1. 刚装好并初始化完系统后,打一个“初始干净状态”的快照,永久留着。
  2. 后续做每一轮实验前,再打一个临时快照,实验结束后确认不要就直接回滚。
  3. 对确定要长期保留的状态,单独再打一个稳定快照并命名清楚。

快照不是越多越好,因为每个快照都会占用额外的磁盘空间,而且快照链越长,系统运行时的IO开销越明显。所以我的策略是重要节点保存,中间过程尽量不用快照,靠手动执行脚本来保证可重复性。

5. 踩坑记录:黑屏、网络不通、Guest Additions编译失败

5.1 启动即黑屏或卡死的排查路径

如果你第一次点“启动”,屏幕一直黑着,或者提示FATAL: Could not read from the boot medium! System halted,不要慌,按顺序排查:

  • 确认vdi确实挂载在了SATA控制器下,并且端口设置为0。VirtualBox如果没有检测到可引导设备,就会提示无法读启动介质。
  • 确认启动顺序里硬盘排在光驱之前。有时候新建虚拟机会自动生成一个空光驱,启动时先去认光驱,找不到盘又没能正确跳到硬盘,就会卡住。
  • 确认转换出来的vdi文件不是0字节。如果convertfromraw没跑完就中断,文件大小会明显不对,重新转换一次即可。
  • 如果系统能进入内核日志但屏幕全黑,尝试Ctrl+Alt+F1到F6切换到其他TTY。Desktop版偶发显示服务起不来,但后台SSH可能是通的。

黑屏问题里,我最开始犯的一个低级错误是:新建虚拟机时选错了系统版本,导致固件类型和内核引导方式不匹配,后来统一选Debian 64-bit并保持默认BIOS,问题就消失了。所以如果一切设置都对,把“版本”改成Debian试试。

5.2 网络不通:先确认DHCP服务在不在

系统能登录但没法上网,这是ARM和x86虚拟机环境里都会碰到的问题。先用ip a看看网卡有没有拿到IP。如果只有lo,没有任何eth0或enp0s3,说明网卡没被启用,或者DHCP客户端没跑起来。

常见原因有两个:

  • systemd-networkd没启动。执行:
sudo systemctl status systemd-networkd

如果状态是inactive,就启用并启动它:

sudo systemctl enable --now systemd-networkd
  • NetworkManager和systemd-networkd冲突。Armbian不同版本默认用的网络管理器不一样,两个同时启用会互相抢网卡。我的建议是二选一,同时启用反而更容易出问题。

如果在NAT模式下怎么都拿不到IP,可以先把网络改成桥接模式试一下,排除VirtualBox的NAT服务本身的问题。改桥接后拿到局域网IP,通常说明问题出在DHCP客户端的配置上,回到上面两步去排查。

5.3 VirtualBox增强功能装不上的正确处理姿势

很多人装完Linux虚拟机第一件事是装Guest Additions(增强功能),在Armbian里这件事没那么顺利。主要原因是Armbian用的是定制内核,和VirtualBox提供的增强功能模块不一定兼容,编译时经常因为内核头文件版本不匹配失败。

如果只是想用SSH、跑服务,我明确建议不要折腾Guest Additions,直接用SSH或sftp传文件,对Server版来说完全够用。如果确实需要共享剪贴板、动态分辨率这些桌面增强功能,正确的安装顺序是:

sudo apt update sudo apt install build-essential linux-headers-$(uname -r)

然后挂载Guest Additions的ISO,执行:

sudo sh /media/cdrom/VBoxLinuxAdditions.run

编译过程如果报错,大概率还是内核头文件没配对。另外要注意,每次Armbian升级内核后,增强功能模块可能需要重新安装一遍,属于重复劳动。所以我的最终建议是:Desktop版可以试一次,Server版直接跳过,不影响任何实际使用。

5.4 快照回滚后SSH指纹冲突

使用快照后,虚拟机的SSH主机密钥也会跟着恢复到快照创建时的那一对。如果你之前已经在宿主机上连接过这台虚拟机,恢复快照后再连接时,SSH客户端会提示REMOTE HOST IDENTIFICATION HAS CHANGED,因为它检测到主机的密钥和之前记录的不一致。

这不是什么大问题,只是提醒你环境可能发生了变化。解决办法是删除宿主机known_hosts里对应的旧条目:

ssh-keygen -R "[127.0.0.1]:2222"

然后重新连接,输入密码即可。这个现象在频繁测试快照时很容易遇到,知道原因之后就不会误判成被入侵或者网络攻击了。

5.5 其它几个容易被忽略的小问题

  • 时间不对。虚拟机刚启动时如果硬件时钟设置不对,时间和宿主机差很多。建议在VirtualBox系统设置里把“硬件时钟使用UTC时间”打开,然后在系统内用timedatectl设置正确的时区。
  • 键盘布局变成乱码。初始化时键盘布局选错了,会导致密码里的特殊符号输入不对。如果已经进了系统,用sudo dpkg-reconfigure keyboard-configuration重新配置。
  • 快照后磁盘空间变小。快照会记录每次修改的差异,如果频繁打快照,vdi文件在宿主机上会不断膨胀。清理不用的快照并做一次“整理”可以释放空间。

一个实际建议

这套VirtualBox加Armbian x86的组合,我用了挺长一段时间,最大的感受是它提供了一个“可以随便折腾但不会弄坏主力机”的沙盒。日常我会用它来验证部署脚本、跑一些定时任务、测试Docker容器编排,偶尔也会在快照环境里做软件包的鲁棒性测试。它不能替代真实ARM板的底层开发验证,但作为学习和开发的日常环境,性价比极高。

如果非要再给你一个最实用的小建议:把转换好的vdi文件单独存一份作为“母盘”,不要在上面做任何修改。需要新环境时直接复制一份vdi出来挂到新虚拟机上,比每次重新解压镜像、重新初始化快得多。这套工作流跑顺之后,你会发现在VirtualBox里养Armbian,比想象中稳得多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询