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

QEMU 引导时分离内核和文件系统

文章目录

    • 概要
    • 新建空 IMG
    • 初始化磁盘
    • 挂载磁盘、复制文件系统
    • 启动新的Host
    • 小结

概要

前文 RISCV 虚拟化环境搭建 中我们详细记录了搭建 RISCV 虚拟化环境的流程。

其中,启动 RISCVUbuntu Host 的命令为:

qemu-system-riscv64 -machine virt -nographic -m 8192 -smp 6 -bios opensbi/build/platform/generic/firmware/fw_jump.bin -kernel u-boot/u-boot -device virtio-net-device,netdev=eth0 -netdev user,id=eth0,hostfwd=tcp::6666-:22 -device virtio-rng-pci -drive file=./ubuntu-22.04-preinstalled-server-riscv64+unmatched.img,format=raw,if=virtio

但当我们需要修改内核,重新编译并升级内核时就很不方便。考虑到虚拟机内部编译非常慢,我们会在外部的 X86_64 主机中交叉编译好然后通过 scp 命令把文件夹共享到虚拟机中,再通过 make install 的方式升级内核。

上述过程当我们要频繁更新内核时很不方便。于是本文中我们会把文件系统单独复制出来到新的 IMG 文件中。QEMU 启动时不再使用 U-BOOT 引导,直接使用 -kernel Image 的形式更方便我们在外部环境随时更新内核而不用对其余部分做任何修改。

新建空 IMG

1:在前文的环境目录下通过以下命令新建一个 IMG 用于复制文件系统。

qemu-img create -f raw new-disk.img 40G

2:在 QEMU 启动 RISCV Host 的命令中加入我们新建的磁盘,引导系统。如下所示:

qemu-system-riscv64 -machine virt -nographic -m 8192 -smp 6 -bios opensbi/build/platform/generic/firmware/fw_jump.bin -kernel u-boot/u-boot -device virtio-net-device,netdev=eth0 -netdev user,id=eth0,hostfwd=tcp::6666-:22 -device virtio-rng-pci -drive file=./ubuntu-22.04-preinstalled-server-riscv64+unmatched.img,format=raw,if=virtio -device virtio-rng-pci -drive file=./new-disk.img,format=raw,if=virtio

初始化磁盘

1:在启动的 Ubuntu 中输入命令可以看到新的磁盘 /dev/vdb

sudo fdisk -l

2:使用 fdisk 工具为磁盘进行分区。

sudo fdisk /dev/vdb
  • 在 fdisk 的终端中键入命令 n 新建分区。输入 p 来创建主分区(主分区一般为 primary 类型)。随后一路默认。

  • 在 fdisk 的终端中键入命令 p 查看分区表,确认新分区已经创建。如果您看到类似下面的输出,说明您的新分区已经正确创建:

Device     Boot Start      End  Sectors Size Id Type
/dev/vdb1        2048 83886079 83884032  40G 83 Linux
  • 如果一切正确,在 fdisk 的终端中输入 w 来写入分区表并退出 fdisk

3:使用命令 sudo mkfs.ext4 /dev/vdb1 格式化新分区。

挂载磁盘、复制文件系统

1:格式化完成后,您可以挂载新的分区。创建挂载点并将新分区挂载到该目录:

sudo mkdir /mnt/new-disk
sudo mount /dev/vdb1 /mnt/new-disk

2:复制文件系统,排除不必要的文件:

sudo rsync -avx --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*"} / /mnt/new-disk

3:修改 Linux system’s filesystem table 配置文件 fstab,即 sudo vim /mnt/new-disk/etc/fstab 编辑这个文件,修改为以下内容:

/dev/vda        /        ext4   discard,errors=remount-ro       0 1

4:卸载磁盘镜像

sudo umount /mnt/new-disk

启动新的Host

由于新的文件系统已经构建完。我们可以使用新的命令来通过 QEMU 引导 Ubuntu。

qemu-system-riscv64 -machine virt -nographic -m 8192 -smp 6 -bios opensbi/build/platform/generic/firmware/fw_jump.bin -kernel ./Image -device virtio-net-device,netdev=eth0 -netdev user,id=eth0,hostfwd=tcp::6666-:22 -device virtio-rng-pci -device virtio-rng-pci -drive file=./new-disk.img,format=raw,if=virtio -append "root=/dev/vda1"

这时候,当我们修改内核在外部 X86_64 环境重新交叉编译之后就可以直接拷贝到 QEMU 这边替换掉 Image 文件,直接启动,非常方便。

小结

完结撒花!!!


http://www.kler.cn/a/597913.html

相关文章:

  • Shell中sed的用法
  • 安防监控视频平台EasyNVR级联视频上云系统EasyNVS出现“Login error”报错的原因排查
  • 基于TCN-BiLSTM-Attention的序列数据预测(功率预测、故障诊断)模型及代码详解
  • 常⻅中间件漏洞--Tomcat
  • bootstrap 表格插件bootstrap table 的使用经验谈!
  • Rocky Linux 软件安装:Last metadata expiration check:
  • 某视频的解密下载
  • 潮流霓虹酸性渐变液体流体扭曲颗粒边缘模糊JPG背景图片设计素材 Organic Textures Gradients Collection
  • 1. 找不能被3、5和7整除的数并存入列表。
  • 深入理解Linux中的SCP命令:使用与原理
  • centos 7 部署ftp 基于匿名用户
  • Android 图片加载框架:Picasso vs Glide
  • LeetCode Hot 100 - 子串 | 560.和为K的子数组、239.滑动窗口最大值、76.最小覆盖子串
  • 算法设计:拒绝偷懒,追求卓越
  • 01、聊天与语言模型
  • go的hooks如何写
  • go-zero学习笔记
  • 河南大学数据库实验6
  • 为WordPress自定义一个留言板
  • Nginx请求头Hos头攻击