使用qemu制作linux系统虚拟机

制作 QEMU 镜像(虚拟磁盘)的方法主要分为两种:创建空白镜像(用于后续安装操作系统)和基于现有文件 / 目录生成镜像(如打包文件系统)。以下是详细步骤,涵盖常见场景和工具。

1. 创建空白镜像(最常用,安装系统)

QEMU 提供 qemu-img 工具创建空白镜像,支持多种格式(qcow2 推荐,支持动态扩容、快照等功能)。

1.1 基础命令(创建空白镜像)
# 创建 qcow2 镜像格式(动态扩容,初始体积小,最大容量 20GB)
qemu-img create -f qcow2 /path/to/your/image.qcow2 20G

# 其他格式(按需选择):
# raw 格式(原生格式,性能略好,不支持快照,体积固定)
qemu-img create -f raw /path/to/your/image.raw 20G
# vmdk 格式(兼容 VMware)
qemu-img create -f vmdk /path/to/your/image.vmdk 20G

参数说明

  • -f qcow2:指定镜像格式(qcow2 是 QEMU 原生推荐格式,动态增长,节省空间)。
  • 20G:指定镜像最大容量(实际占用空间随数据增加而增长,不会一开始就占满 20GB)。
1.2 使用空白镜像安装操作系统

创建空白镜像后,需通过 ISO 镜像启动虚拟机并安装系统:

# 以 x86_64 架构为例,从 ISO 安装系统到空白镜像
qemu-system-x86_64 \
  -hda /path/to/your/image.qcow2 \  # 空白镜像(目标磁盘)
  -cdrom /path/to/os-install.iso \  # 操作系统安装镜像(如 Ubuntu ISO)
  -m 2048 \                          # 分配 2GB 内存
  -smp 2 \                           # 2 核 CPU
  -enable-kvm                        # 启用 KVM 加速(可选,提升安装速度)

启动后按提示完成系统安装,安装完成后,镜像即可直接用于启动虚拟机。

2. 基于现有文件 / 目录生成镜像(打包文件系统)

若需将本地文件或目录打包成 QEMU 镜像(如嵌入式系统的根文件系统),步骤如下:

2.1 创建固定大小的 raw 镜像(先分配空间)
# 创建 1GB 的 raw 格式镜像(用于存放文件系统)
qemu-img create -f raw /path/to/filesystem.img 1G
2.2 格式化镜像并挂载(需 root 权限)

将镜像格式化为 ext4、FAT 等文件系统,然后挂载到本地目录,以便复制文件:

# 1. 格式化镜像为 ext4 文件系统(根据需求选择 ext3、fat32 等)
sudo mkfs.ext4 /path/to/filesystem.img

# 2. 创建挂载点目录
mkdir -p ./mnt

# 3. 挂载镜像到本地目录(loop 设备模拟磁盘)
sudo mount -o loop /path/to/filesystem.img ./mnt

# 4. 复制文件到镜像中(例如复制根文件系统内容)
sudo cp -r /path/to/your/files/* ./mnt/

# 5. 卸载镜像(完成后必须执行)
sudo umount ./mnt
2.3 (可选)转换为 qcow2 格式(节省空间)

raw 格式体积固定,可转换为 qcow2 动态格式:

qemu-img convert -f raw -O qcow2 /path/to/filesystem.img /path/to/filesystem.qcow2

3. 制作可启动的定制化镜像(以 Linux 为例)

若需制作包含内核、 initramfs 和根文件系统的可启动镜像(如嵌入式设备),步骤如下:

3.1 准备组件
  • 编译好的 Linux 内核(如 bzImage 或 vmlinuz)。

  • 根文件系统镜像(如上述步骤生成的 filesystem.qcow2)。

  • (可选)initramfs(初始化内存文件系统)。

3.2 启动命令(直接指定内核和镜像)

无需安装系统,直接通过内核启动镜像:

qemu-system-x86_64 \
  -kernel /path/to/bzImage \        # 内核文件路径
  -hda /path/to/filesystem.qcow2 \  # 根文件系统镜像
  -append "root=/dev/sda rw console=ttyS0" \  # 内核参数(指定根设备为 /dev/sda,允许读写)
  -serial stdio \                    # 将虚拟机串口输出到终端(方便调试)
  -m 512 \
  -enable-kvm

4. 镜像管理常用命令

  1. 查看镜像信息

    qemu-img info /path/to/image.qcow2
  2. 扩容镜像(qcow2/raw 支持)

    # 将镜像最大容量扩容到 30GB(需先卸载镜像内的文件系统)
    qemu-img resize /path/to/image.qcow2 +10G  # 增加 10GB
  3. 创建快照(qcow2 支持)

    qemu-img snapshot -c snap1 /path/to/image.qcow2  # 创建名为 snap1 的快照
    qemu-img snapshot -l /path/to/image.qcow2        # 列出所有快照

5. 注意事项

  • 格式选择:日常使用优先选 qcow2(动态扩容、快照支持);需兼容其他虚拟化软件(如 VMware)选 vmdk

  • 权限问题:挂载镜像和复制文件时需用 sudo,避免文件权限错误导致虚拟机启动失败。

  • 嵌入式场景:若制作嵌入式设备镜像(如 ARM 架构),需确保内核、设备树(.dtb)与镜像匹配(参考前文 ARM 启动命令)。

    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
    红包 添加红包
    表情包 插入表情
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    DeeplyMind

    你的鼓励将是我创作的最大动力

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值