当前位置: 首页 > backend >正文

x86版的ubuntu上使用qemu运行arm版ubuntu

一直以来接触的都是X86系列的CPU架构,从来没接触过ARM的CPU架构,今天抽空尝试一下安装一个ARM版本的Linux,选定ubuntu,即在X86架构的Ubuntu服务器上使用qemu模拟器来运行ARM版本的ubuntu。

一、 下载ARM版的ubuntu

去https://cn.ubuntu.com/download/server/arm下载最新的稳定版本,目前是ubuntu-24.04.2-live-server-arm64.iso

二、 宿主机安装qemu

sudo apt update
sudo apt install qemu-system-arm qemu-efi qemu-utils libvirt-daemon-system

三、下载 UEFI 固件(必需)

wget https://releases.linaro.org/components/kernel/uefi-linaro/latest/release/qemu64/QEMU_EFI.fd

四、创建虚拟磁盘

这里使用qcow2格式,它支持动态分配空间。

qemu-img create -f qcow2 ubuntu.img 60G

五、安装ARM版本Ubuntu

将下载的ubuntu-24.04.2-live-server-arm64.iso和QEMU_EFI.fd放在与虚拟磁盘文件ubuntu.img同一个目录下。

使用下面的指令安装系统:

sudo qemu-system-aarch64 -m 8192 -cpu max -smp 8 -M virt -bios QEMU_EFI.fd -device virtio-gpu-pci -device virtio-net-device,netdev=net0 -netdev user,id=net0,hostfwd=tcp::2622-:22 -drive file=ubuntu.img,format=qcow2,if=virtio -cdrom ubuntu-24.04.2-live-server-arm64.iso -nographic -accel tcg,thread=multi

主要参数说明:

  • -m 8192 指定8G内存
  • -cpu max 指定CPU类型,笔者有使用过cortex-a72和cortex-a53,发现都有一些问题,还是max最稳定
  • -smp 8 指定CPU核心数,这里是8核
  • -bios QEMU_EFI.fd 使用BIOS的文件
  • -netdev user,id=net0,hostfwd=tcp::2622-:22 设置网络设备,并设定虚拟机中的端口22映射到宿主机的2622端口,方便后面使用远程SSH连接
  • -drive file=ubuntu.img,format=qcow2,if=virtio 指定虚拟磁盘文件及格式
  • -cdrom ubuntu-24.04.2-live-server-arm64.iso 指定光驱文件
  • -nographic 没有图形界面,由于安装的服务器版本,不需要图形界面
  • -accel tcg,thread=multi 使用TCG及多线程加速,这里由于CPU的架构不能,不能使用-enable-kvm参数来指定KVM加速

接下来安装就类似笔者前面博文详细安装Ubuntu 21.10介绍的类似了。只不过笔者偷懒,没按照文中所述编辑分区,而是使用的Ubuntu的默认设置,导致虽然选择了使用整个磁盘,但是并没有完全使用上整个磁盘的空间,有一个使用的空间。如果在安装完成后,要想完全使用磁盘空间,参见步骤六。

安装完成后,还是使用前面的指令运行,可以看到如下画面,表示启动成功了:

在这里插入图片描述
此时可以使用远程SSH工具连接宿主机的2622号端口使用Shell。由于是使用qemu模拟的,性能与虚拟还是有差距,还是能流畅使用。

六、磁盘空间

由于安装过程中完全使用的Ubuntu的默认分区选项,导致有一部分磁盘空间未能使用上,需要将它利用起来,分配到根目录。

使用df命令查看磁盘使用情况:

mgr@ubuntua:~$ df -h
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              792M  636K  792M   1% /run
efivarfs                           256K  2.6K  254K   1% /sys/firmware/efi/efivars
/dev/mapper/ubuntu--vg-ubuntu--lv   28G  6.2G   21G  24% /
tmpfs                              3.9G     0  3.9G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/vda2                          2.0G   99M  1.7G   6% /boot
/dev/vda1                          1.1G  6.4M  1.1G   1% /boot/efi
tmpfs                              792M   12K  792M   1% /run/user/1000

可以看到磁盘只使用了30G左右,与60G的空间相差甚远。使用lsblk查看:

mgr@ubuntua:~$ lsblk
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
vda                       253:0    0   60G  0 disk 
├─vda1                    253:1    0    1G  0 part /boot/efi
├─vda2                    253:2    0    2G  0 part /boot
└─vda3                    253:3    0 56.9G  0 part └─ubuntu--vg-ubuntu--lv 252:0    0 28.5G  0 lvm  /
vdb                       253:16   0  2.7G  1 disk 
├─vdb1                    253:17   0  2.7G  1 part 
└─vdb2                    253:18   0  5.4M  1 part 

可以看到vda356.9G,实际只有28.9G分配给了根目录。再使用parted命令查看:

mgr@ubuntua:~$ sudo parted /dev/vda unit GB print free
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 64.4GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: Number  Start   End     Size    File system  Name  Flags0.00GB  0.00GB  0.00GB  Free Space1      0.00GB  1.13GB  1.13GB  fat32              boot, esp2      1.13GB  3.28GB  2.15GB  ext43      3.28GB  64.4GB  61.1GB64.4GB  64.4GB  0.00GB  Free Space

可以看到vda3的结束大小为64.4GFree Space行的空间大小为0,说明不是未分区的空间,不需要分区。如果没有parted命令,使用下面命令安装:

sudo apt install parted

查看逻辑卷ubuntu-vg

mgr@ubuntua:~$ sudo vgdisplay ubuntu-vg--- Volume group ---VG Name               ubuntu-vgSystem ID             Format                lvm2Metadata Areas        1Metadata Sequence No  2VG Access             read/writeVG Status             resizableMAX LV                0Cur LV                1Open LV               1Max PV                0Cur PV                1Act PV                1VG Size               <56.95 GiBPE Size               4.00 MiBTotal PE              14578Alloc PE / Size       7289 / 28.47 GiBFree  PE / Size       7289 / 28.47 GiBVG UUID               SDuzTq-ozz1-weLd-M5O3-sVt0-AaCI-F9y442

可以看到Free PE / Size行,还有28.47G的空间,使用下面的命令扩展卷:

mgr@ubuntua:~$ sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lvSize of logical volume ubuntu-vg/ubuntu-lv changed from 28.47 GiB (7289 extents) to <56.95 GiB (14578 extents).Logical volume ubuntu-vg/ubuntu-lv successfully resized.

再调整文件系统:

mgr@ubuntua:~$ sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/ubuntu-vg/ubuntu-lv is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 8
The filesystem on /dev/ubuntu-vg/ubuntu-lv is now 14927872 (4k) blocks long.

现在使用df命令查看磁盘情况,正常了:

mgr@ubuntua:~$ df -h
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              792M  632K  792M   1% /run
efivarfs                           256K  2.6K  254K   1% /sys/firmware/efi/efivars
/dev/mapper/ubuntu--vg-ubuntu--lv   56G  6.2G   48G  12% /
tmpfs                              3.9G     0  3.9G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/vda2                          2.0G   99M  1.7G   6% /boot
/dev/vda1                          1.1G  6.4M  1.1G   1% /boot/efi
tmpfs                              792M   12K  792M   1% /run/user/1000

在这里插入图片描述

如果本文对你有帮助,欢迎点赞收藏!

http://www.xdnf.cn/news/15474.html

相关文章:

  • 学习软件测试的第十六天
  • HOOPS Communicator 2025.5.0版本更新速览:性能、测量与UI全面优化
  • 将 Vue 3 + Vite + TS 项目打包为 .exe 文件
  • Kubernetes 架构原理与集群环境部署
  • Mybatis05-动态sql
  • Java实现word、pdf转html保留格式
  • HTTP性能优化实战技术
  • 【电脑】显卡(GPU)的基础知识
  • 暑期算法训练.1
  • 【解决】联想电脑亮度调节
  • 行为模式-状态模式
  • 前端打包自动压缩为zip--archiver
  • MongoDB数据问题说明
  • 大模型在1型糖尿病肾病V期预测及治疗方案制定中的应用研究
  • 《大数据技术原理与应用》实验报告五 熟悉 Hive 的基本操作
  • 用uniapp开发鸿蒙应用(暂停更新-根据项目更新,现在项目未开始)
  • LangChain智能体开发实战:从零构建企业级AI助手
  • 17、鸿蒙Harmony Next开发:状态管理(组件拥有的状态和应用拥有的状态)
  • 3种添加视频水印的加密方式,守护视频安全!
  • OpenCV 对比度拉伸图像增强函数contrastStretching()
  • 基于UDP/IP网络游戏加速高级拥塞控制算法(示意:一)
  • 21-C#的委托简单使用-1
  • 【zynq7020】PS的“Hello World”
  • Android弹窗
  • 【C++】初识C++(1)
  • 映美打印机-URL页面打印
  • AI产品经理面试宝典第20天:AI+金融场景相关面试题及回答指导
  • 缓存穿透的“黑暗森林”假说——当攻击者学会隐藏恶意流量
  • 02 51单片机之LED闪烁
  • Knife4j快速入门