[笔记] 使用 qemu 创建虚拟磁盘并安装 grub

之前使用 wsl 进行了直接创建虚拟磁盘并安装 grub,现在希望能够直接借助 qemu 的工具创建虚拟磁盘文件并安装 grub,由于需要用到 nbd(net block device网络块设备) 模块,在 wsl 中并不支持,因此这里使用到了 Hypver-V 虚拟机创建了一个 Ubuntu 系统,在系统中安装了 qemu 和 grub 的相关软件进行操作:

apt install -y qemu-utils qemu-system-x86_64 grub2

nbd 介绍

nbd全称 Net Block Device网络块设备,是 Linux 中的一个模块用于加载网络上的块设备,由于使用到了网络,因此拥有较大的兼容性,同时由于通过网络进行传输,因此磁盘传输速度受限于网络带宽.这里主要用到该模块加载 qemu 的虚拟磁盘文件.

首先需要通过 qemu 工具创建一块 qcow2 格式的虚拟磁盘文件:

# 创建一块大小为 128MB 的虚拟磁盘文件
qemu-img create -f qcow2 hd.img 128M

要将格式为qcow2的虚拟磁盘挂载到Linux系统上,需要加载nbd内核模块:

modprobe nbd max_part=8
# max_part=8 指定虚拟设备数量这里指定为 8

使用qemu-nbd命令将虚拟磁盘映射为块设备文件(例如,/dev/nbd0):

qemu-nbd --connect=/dev/nbd0 hd.img

这将将disk.qcow2文件映射为/dev/nbd0设备文件。如果的虚拟磁盘文件名和设备文件名不同,需要相应地更改命令。

使用 mkfs.ext4 格式化块设备:

root@node01:/home/ghimi/code/demo01# mkfs.ext4 /dev/nbd0
mke2fs 1.47.0 (5-Feb-2023)
Discarding device blocks: done                            
Creating filesystem with 16384 4k blocks and 16384 inodes

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (1024 blocks): done
Writing superblocks and filesystem accounting information: done

将虚拟磁盘挂载到创建的目录:

mount /dev/nbd0 /mnt

这将将虚拟磁盘挂载到了/mnt目录。

然后我们就可以使用 grub-install 命令安装 grub 到设备上了:

grub-install --boot-directory=/mnt/boot --no-floppy --force --target i386-pc /dev/nbd0
# --boot-directory 指定启动目录
# --no-floppy 设置没有软盘
# --force 只要没有发生错误,就继续写入,如果不指定 --force 可能会安装报错
# /dev/loop0 指定写入的磁盘文件,这里填刚刚通过 losetup -a 查询到的关联的回环设备文件
# --target i386-pc 指定目标设备文件为 x86 系统

在完成 grub 的安装后,我们就可以通过 qemu 命令指定我们的虚拟磁盘启动了:

qemu-system-x86_64 -hda /dev/nbd0 --nographic
# -hda 指定虚拟磁盘,这里指定了我们挂载后的nbd设备块文件
# --nographic 由于没有图形界面,这里指定该选项可以通过命令行启动

在这里插入图片描述
当然,这里我们是使用的 /dev/nbd0 加载后的块设备进行的启动,我们还可以先将该块设备卸载,然后直接指定虚拟磁盘文件进行启动:

# 移除关联挂载
umount /mnt
# 移除虚拟磁盘设备关联
qemu-nbd --disconnect /dev/nbd0
# 直接指定虚拟磁盘设备文件启动
qemu-system-x86_64 -hda hd.img --nographic

如果完成了对虚拟磁盘的操作,可以通过以下步骤卸载虚拟磁盘:

  1. 卸载虚拟磁盘:
sudo umount /mnt/qcow_mount
  1. 断开虚拟磁盘的映射:
sudo qemu-nbd --disconnect /dev/nbd0

这将断开虚拟磁盘的映射,并卸载nbd设备。

参考资料

相关推荐

  1. [笔记] wsl2 下使用 qemu/grub 模拟系统启动(多分区)

    2024-01-04 14:38:02       56 阅读
  2. 使用qemu-nbd挂载qcow2/raw磁盘文件

    2024-01-04 14:38:02       66 阅读
  3. 虚拟环境创建笔记

    2024-01-04 14:38:02       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-04 14:38:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-04 14:38:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-04 14:38:02       82 阅读
  4. Python语言-面向对象

    2024-01-04 14:38:02       91 阅读

热门阅读

  1. SQL注入学习笔记

    2024-01-04 14:38:02       49 阅读
  2. ElementUi中table组件使用row-class-name修改指定行

    2024-01-04 14:38:02       62 阅读
  3. Qt的三大机制(面试)

    2024-01-04 14:38:02       51 阅读
  4. 【嵌入式——C语言】动态内存申请

    2024-01-04 14:38:02       73 阅读
  5. LeetCode每周五题_2024/01/01~2024/01/05

    2024-01-04 14:38:02       58 阅读
  6. MATLAB --- dlmread( )函数的用法

    2024-01-04 14:38:02       66 阅读
  7. clickhouse-client INSERT CSV/TSV时跳过错误行

    2024-01-04 14:38:02       58 阅读
  8. Linux中经常使用的相关命令

    2024-01-04 14:38:02       61 阅读
  9. elasticsearch7.17.9两节点集群改为单节点

    2024-01-04 14:38:02       61 阅读