qemu
创建:2023-10-27 17:48
更新:2023-11-22 10:01

QEMU(quick emulator)是一款由法布里斯·贝拉(Fabrice Bellard)等人编写的通用且免费的可执行硬件虚拟化的(hardware virtualization)开源仿真器(Emulator)。1

下载与文档

下载:https://www.qemu.org/download/
文档:https://qemu.weilnetz.de/doc/latest/
参数:https://qemu.weilnetz.de/doc/latest/system/invocation.html

常用命令

## create 
qemu-img create -f qcow2 debian.qcow2 8G 

## backing file
qemu-img create -b debian.qcow2 -F qcow2 -f qcow2 debian-snap.qcow2 8G
qemu-img commit debian-snap.qcow2  ## 会合并到 debian.qcow2 释放自身占用的存储空间

## run
qemu-system-x86_64 -m 2G -accel tcg -smp 2 -hda debian.qcow2 -netdev user,id=n1 -device virtio-net,netdev=n1

## resize
qemu-img resize rhel6u3-a.img +2G 
qemu-img resize rhel6u3-b.img -1G ## qcow2格式文件不支持缩小镜像的操作

## 压缩
qemu-img convert -c -O qcow2 data.qcow2 data1.qcow2

## snap 
qemu-img snapshot -c snapshot01 test.qcow2  //创建
qemu-img snapshot -l test.qcow2             //查看
qemu-img snapshot -a snapshot01 test.qcow2  //revert到快照点
qemu-img snapshot -d snapshot01 test.qcow2  //删除

qemu 安装启动 debian

debain有构建好的qcow2镜像,可以直接使用。对于其他系统,可以在此镜像基础上使用docker构建对应的环境。
https://cloud.debian.org/images/cloud/bookworm/latest/
下载nocloud版本即可

启动

# 先扩容
qemu-img resize debian.qcow2  +80G

amd64

#!/bin/bash

qemu-system-x86_64 -m 8G -accel whpx -smp 4 \
    -net nic \
    -net user,hostfwd=tcp::2002-:22 \
    -hda debian-11-nocloud-amd64-20230912-1501.qcow2

aarch64、arm64:需要在qemu中将视图切换到serial才能看到系统启动

#!/bin/bash

qemu-system-aarch64 \
  -M virt \
  -cpu host \
  -accel hvf \
  -smp 4 \
  -m 4G \
  -net nic \
  -net user,hostfwd=tcp::2022-:22 \
  -bios QEMU_EFI.fd \
  -drive id=hd0,media=disk,if=none,file=./debian-11-nocloud-arm64-20230912-1501.qcow2 \
  -device virtio-scsi-pci \
  -device scsi-hd,drive=hd0 

启动后绪操作

切换阿里源

sed -i 's/http:\/\/deb.debian.org/https:\/\/mirrors.aliyun.com/' /etc/apt/sources.list
sed -i 's/http:\/\/security.debian.org/https:\/\/mirrors.aliyun.com/' /etc/apt/sources.list
apt update

sshd服务需要重装

apt remove openssh-server
apt install openssh-server

vim /etc/ssh/sshd_config  ## 打开密码登录
systemctl restart sshd

## 解决sudo告警问题
vim /etc/hosts # 在 localhost 后边添加 debian

添加用户

useradd -s /bin/bash -m -p "123456" dev
usermod -aG sudo dev
echo "dev ALL=(ALL) NOPASSWD:ALL" | tee /etc/sudoers.d/dev

设置时区

su dev
echo "TZ='Asia/Shanghai'; export TZ" >> ~/.profile
source ~/.profile

安装docker

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

sudo groupadd docker
sudo chgrp docker /var/run/docker.sock
sudo gpasswd -a dev docker
sudo usermod -aG docker dev
id
newgrp ## 如果id命令显示出没有docker组,使用这个刷新下

## 设置代理
vim ~/.docker/config.json,对于root则是 vim /etc/docker/daemon.json
{
    "registry-mirrors": [
        "https://registry.docker-cn.com",
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn"
  ]
}

改变磁盘大小

如果后续要改变磁盘大小,需要进行如下操作:

## 扩充大小
qemu-img resize rhel6u3-a.img +2G 
## 挂载
sudo cfdisk
wirte
quit

sudo mkdir /data
sudo mkfs.ext4 /dev/sda3
sudo mount /dev/sda3 /data

## 开机自动挂载 !!!!!
sudo vim /etc/fstab
## 添加
/dev/sda3 /data ext4 defaults 0 0
## 或者直接使用
sudo apt-get install cloud-guest-utils
sudo growpart /dev/vda 1

桥接网卡

-net nic -net tap,ifname=tap0

需要安装tap0网卡