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

bash 复制代码
sudo apt update
sudo apt install qemu-system-arm qemu-efi qemu-utils libvirt-daemon-system

三、下载 UEFI 固件(必需)

bash 复制代码
wget https://releases.linaro.org/components/kernel/uefi-linaro/latest/release/qemu64/QEMU_EFI.fd

四、创建虚拟磁盘

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

bash 复制代码
qemu-img create -f qcow2 ubuntu.img 60G

五、安装ARM版本Ubuntu

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

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

bash 复制代码
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命令查看磁盘使用情况:

bash 复制代码
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查看:

bash 复制代码
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命令查看:

bash 复制代码
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  Flags
        0.00GB  0.00GB  0.00GB  Free Space
 1      0.00GB  1.13GB  1.13GB  fat32              boot, esp
 2      1.13GB  3.28GB  2.15GB  ext4
 3      3.28GB  64.4GB  61.1GB
        64.4GB  64.4GB  0.00GB  Free Space

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

bash 复制代码
sudo apt install parted

查看逻辑卷ubuntu-vg

bash 复制代码
mgr@ubuntua:~$ sudo vgdisplay ubuntu-vg
  --- Volume group ---
  VG Name               ubuntu-vg
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <56.95 GiB
  PE Size               4.00 MiB
  Total PE              14578
  Alloc PE / Size       7289 / 28.47 GiB
  Free  PE / Size       7289 / 28.47 GiB
  VG UUID               SDuzTq-ozz1-weLd-M5O3-sVt0-AaCI-F9y442

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

bash 复制代码
mgr@ubuntua:~$ sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
  Size 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.

再调整文件系统:

bash 复制代码
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命令查看磁盘情况,正常了:

bash 复制代码
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

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

相关推荐
欧云服务器6 天前
怎么让脚本命令可以同时在centos、debian、ubuntu执行?
ubuntu·centos·debian
智渊AI6 天前
Ubuntu 20.04/22.04 下通过 NVM 安装 Node.js 22(LTS 稳定版)
ubuntu·node.js·vim
enjoy嚣士6 天前
Windows10下安装arm64架构的centos
qemu·aarch64 linux·arm64 linux·arm64 centos
The️6 天前
Linux驱动开发之Read_Write函数
linux·运维·服务器·驱动开发·ubuntu·交互
再战300年6 天前
Samba在ubuntu上安装部署
linux·运维·ubuntu
qwfys2006 天前
How to install golang 1.26.0 to Ubuntu 24.04
ubuntu·golang·install
代码游侠6 天前
STM32开发——基础外设
linux·运维·arm开发·stm32·单片机·嵌入式硬件·学习
木尧大兄弟6 天前
Ubuntu 系统安装 OpenClaw 并接入飞书记录
linux·ubuntu·飞书·openclaw
小虾爬滑丫爬6 天前
ubuntu上设置Tomcat 开机启动
ubuntu·tomcat·开机启动
老师用之于民6 天前
【DAY25】线程与进程通信:共享内存、同步机制及实现方案
linux·c语言·ubuntu·visual studio code