qemu-kvm

本文最后更新于:2024年11月5日 晚上

qemu-kvm

book

virt-manager

libvirt

virsh

qemu-img

如果你需要创建一个新的虚拟磁盘镜像,你可以使用 qemu-img 工具来完成。

1
qemu-img create -f qcow2 yql-openeuler.img 200G

virt-format

如果你已经有一个存在的 qcow2 格式的虚拟磁盘镜像,但希望对其进行格式化(即清空数据,重置为初始状态)。

  1. 安装 libguestfs-tools

    首先确保你已经安装了 libguestfs-tools 包,这个包中包含了 virt-format 工具。

    1
    sudo apt-get install libguestfs-tools   # 对于基于 Debian/Ubuntu 的系统

    或者

    1
    sudo yum install libguestfs-tools       # 对于基于 CentOS/RHEL 的系统
  2. 使用 virt-format 命令格式化 qcow2 虚拟磁盘镜像

    假设你要格式化的虚拟磁盘镜像是 /var/lib/libvirt/images/mydisk.qcow2,可以通过以下命令来执行格式化:

    1
    virt-format --format=qcow2 -a /var/lib/libvirt/images/mydisk.qcow2
    • --format=qcow2:指定要格式化为 qcow2 格式。
    • -a /var/lib/libvirt/images/mydisk.qcow2:指定要操作的虚拟磁盘镜像文件路径。
  3. 确认格式化结果

    格式化完成后,你可以使用 virt-df 命令来查看虚拟磁盘镜像的分区和使用情况,确认数据已经被清空并且恢复到初始状态。

    1
    virt-df -a /var/lib/libvirt/images/mydisk.qcow2

virt-install

CentOS

创建一个名为 yql-openeuler 的虚拟机,配置了适当的内存、CPU、磁盘、安装位置以及启动参数,以便正确连接到串口控制台和控制台输出:

1
2
3
4
5
6
7
8
9
10
11
12
virt-install \
--name yql-openeuler \
--ram 32768 \
--vcpus 64 \
--disk path=/inf/yql/yql-openeuler.qcow2,size=200 \
--location /inf/yql/openeuler-22.09-240618-x86_64-dvd.iso \
--os-type generic \
--network default \
--graphics none \
--console pty,target_type=serial \
-x 'console=ttyS0,115200n8 console=tty0' \
--extra-args 'console=ttyS0,115200n8'

参数说明:

  • --name yql-openeuler:设置虚拟机的名称为 yql-openeuler
  • --ram 32768:分配 32GB 内存给虚拟机(单位为 MB)。
  • --vcpus 64:分配 64 个虚拟 CPU 给虚拟机。
  • --disk path=/inf/yql/yql-openeuler.qcow2,size=200:指定虚拟机的磁盘文件路径和大小为 200GB。
  • --location /inf/yql/openeuler-22.09-240618-x86_64-dvd.iso:指定用于安装的 ISO 文件的位置。
  • --os-type generic:指定操作系统类型为通用类型。
  • --network default:指定虚拟机的网络接口为默认网络。
  • --graphics none:禁用图形界面。
  • --console pty,target_type=serial:设置虚拟机的控制台类型为串口控制台。
  • -x 'console=ttyS0,115200n8 console=tty0':启动参数,设置串口控制台和控制台输出。
  • --extra-args 'console=ttyS0,115200n8':额外的启动参数,设置串口控制台输出。
fedora
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
osinfo-query os | grep fedora
fedora-unknown | Fedora | unknown | http://fedoraproject.org/fedora/unknown
fedora1 | Fedora Core 1 | 1 | http://fedoraproject.org/fedora/1
fedora10 | Fedora 10 | 10 | http://fedoraproject.org/fedora/10
fedora11 | Fedora 11 | 11 | http://fedoraproject.org/fedora/11
fedora12 | Fedora 12 | 12 | http://fedoraproject.org/fedora/12
fedora13 | Fedora 13 | 13 | http://fedoraproject.org/fedora/13
fedora14 | Fedora 14 | 14 | http://fedoraproject.org/fedora/14
fedora15 | Fedora 15 | 15 | http://fedoraproject.org/fedora/15
fedora16 | Fedora 16 | 16 | http://fedoraproject.org/fedora/16
fedora17 | Fedora 17 | 17 | http://fedoraproject.org/fedora/17
fedora18 | Fedora 18 | 18 | http://fedoraproject.org/fedora/18
fedora19 | Fedora 19 | 19 | http://fedoraproject.org/fedora/19
fedora2 | Fedora Core 2 | 2 | http://fedoraproject.org/fedora/2
fedora20 | Fedora 20 | 20 | http://fedoraproject.org/fedora/20
fedora21 | Fedora 21 | 21 | http://fedoraproject.org/fedora/21
fedora22 | Fedora 22 | 22 | http://fedoraproject.org/fedora/22
fedora23 | Fedora 23 | 23 | http://fedoraproject.org/fedora/23
fedora24 | Fedora 24 | 24 | http://fedoraproject.org/fedora/24
fedora25 | Fedora 25 | 25 | http://fedoraproject.org/fedora/25
fedora26 | Fedora 26 | 26 | http://fedoraproject.org/fedora/26
fedora27 | Fedora 27 | 27 | http://fedoraproject.org/fedora/27
fedora28 | Fedora 28 | 28 | http://fedoraproject.org/fedora/28
fedora3 | Fedora Core 3 | 3 | http://fedoraproject.org/fedora/3
fedora4 | Fedora Core 4 | 4 | http://fedoraproject.org/fedora/4
fedora5 | Fedora Core 5 | 5 | http://fedoraproject.org/1mfedo/5
fedora6 | Fedora Core 6 | 6 | http://fedoraproject.org/fedora/6
fedora7 | Fedora 7 | 7 | http://fedoraproject.org/fedora/7
fedora8 | Fedora 8 | 8 | http://fedoraproject.org/fedora/8
fedora9 | Fedora 9 | 9 | http://fedoraproject.org/fedora/9
silverblue28 | Fedora Silverblue 28 | 28 | http://fedoraproject.org/silverblue/28
1
2
3
4
5
6
7
8
9
10
11
virt-install --virt-type kvm \
--name fedora \
--memory 32768 \
--vcpus=64 \
--location /data/yql/Fedora-Server-dvd-aarch64-40-1.14.iso \
--disk path=/data/yql/fedora.qcow2,size=300 \
--network network=default \
--os-type=linux \
--os-variant=fedora28 \
--graphics none \
--extra-args="console=ttyS0"
debian
1
2
3
4
5
6
7
8
9
10
11
virt-install --virt-type kvm \
--name debian \
--memory 32768 \
--vcpus=64 \
--location /data/yql/debian-12.5.0-arm64-DVD-1.iso \
--disk path=/data/yql/debian.qcow2,size=300 \
--network network=default \
--os-type=linux \
--os-variant=debian9 \
--graphics none \
--extra-args="console=ttyS0"
/dev/vda

qemu一般将--disk path=/data/yql/fedora.qcow2,size=300挂在到虚拟机的/dev/vda/dev/sda

1
2
3
4
5
6
7
8
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 300G 0 disk
|-sda1 8:1 0 600M 0 part /boot/efi
|-sda2 8:2 0 1G 0 part /boot
|-sda3 8:3 0 298.4G 0 part
|-ctyunos-root 252:0 0 70G 0 lvm /
|-ctyunos-home 252:1 0 228.4G 0 lvm /home
1
2
3
4
5
6
7
8
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
vda 8:0 0 300G 0 disk
|-vda1 8:1 0 600M 0 part /boot/efi
|-vda2 8:2 0 1G 0 part /boot
|-vda3 8:3 0 298.4G 0 part
|-ctyunos-root 252:0 0 70G 0 lvm /
|-ctyunos-home 252:1 0 228.4G 0 lvm /home

这里假设/dev/vda,现在我们来创建上面lsblk展示的分区结构。

1. 分区创建

使用 parted 创建分区:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建新的分区表
parted /dev/vda mklabel gpt

# 创建 vda1 分区,用于 /boot/efi
parted /dev/vda mkpart primary fat32 1MiB 601MiB

# 设置第一个分区为 EFI 系统分区
parted /dev/vda set 1 esp on

# 创建 vda2 分区,用于 /boot
parted /dev/vda mkpart primary xfs 601MiB 1601MiB

# 创建 vda3 分区,用于 LVM,使用剩余的空间
parted /dev/vda mkpart primary 1601MiB 100%
2. 配置文件系统

接下来,为 vda1vda2 创建文件系统:

1
2
3
4
5
# 格式化 /boot/efi 为 vfat
mkfs.vfat /dev/vda1

# 格式化 /boot 为 XFS
mkfs.xfs /dev/vda2
3. 设置 LVM

创建物理卷、卷组和逻辑卷:

1
2
3
4
5
6
7
8
9
# 创建物理卷
pvcreate /dev/vda3

# 创建卷组 ctyunos
vgcreate ctyunos /dev/vda3

# 创建逻辑卷 ctyunos-root (70G) 和 ctyunos-home (剩余空间)
lvcreate -L 70G -n root ctyunos
lvcreate -l 100%FREE -n home ctyunos

在设置 LVM 时,创建的逻辑卷可以放置在 /dev/mapper/ 下。这实际上是 LVM 的默认行为,LVM 逻辑卷会在 /dev/mapper/ 目录下自动创建符号链接,指向 /dev/<卷组名>/<逻辑卷名>

  • 卷组名称为 ctyunos
  • 逻辑卷名称为 roothome

会看到以下两个设备路径:

  • /dev/ctyunos/root/dev/mapper/ctyunos-root
  • /dev/ctyunos/home/dev/mapper/ctyunos-home

这两个路径实际上指向同一个逻辑卷设备。

4. 格式化 LVM 逻辑卷

为逻辑卷创建 XFS 文件系统:

1
2
3
4
5
# 格式化 root 逻辑卷
mkfs.xfs /dev/mapper/ctyunos-root

# 格式化 home 逻辑卷
mkfs.xfs /dev/mapper/ctyunos-home
5. 挂载分区

挂载分区和逻辑卷:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 挂载 root
mount /dev/mapper/ctyunos-root /mnt

# 创建 /mnt/home 并挂载 home
mkdir /mnt/home
mount /dev/mapper/ctyunos-home /mnt/home

# 挂载 /boot
mkdir /mnt/boot
mount /dev/vda2 /mnt/boot

# 挂载 /boot/efi
mkdir /mnt/boot/efi
mount /dev/vda1 /mnt/boot/efi
6. 更新 /etc/fstab

在安装完成或手动配置时,将这些挂载点添加到 /etc/fstab 以便系统启动时自动挂载:

1
2
3
4
/dev/mapper/ctyunos-root   /           xfs    defaults        0 0
/dev/mapper/ctyunos-home /home xfs defaults 0 0
/dev/vda2 /boot xfs defaults 0 0
/dev/vda1 /boot/efi vfat umask=0077 0 1

这些命令确保了 EFI 分区使用 vfat 文件系统,并且所有剩余空间都分配给 vda3,用于 LVM 管理。

这一章节只是为了展示qumu如何将--disk path=/data/yql/fedora.qcow2,size=300挂在到虚拟机的/dev/vda/dev/sda,并在磁盘/dev/sda上创建了用uefi引导的完整文件系统,//homelvm逻辑卷。

kickstart

ks.cfs位于/root目录下。

1
2
/root/anaconda-ks.cfg
/root/initial-setup-ks.cfg
1
2
3
4
5
6
7
8
9
10
11
12
virt-install --virt-type kvm \
--initrd-inject=/mnt/sdd1/yql/ks1.cfg \
--name wujing-zy-xfs \
--memory 32768 \
--vcpus=64 \
--location /mnt/sdd1/yql/ctyunos-2-24.07-240716-rc2-aarch64-dvd.iso \
--disk path=/mnt/sdd1/yql/wujing-zy-xfs.qcow2,size=128 \
--network network=default \
--os-type=linux \
--os-variant=centos7.0 \
--graphics none \
--extra-args="console=ttyS0 inst.ks=file:/ks1.cfg"

克隆一个虚拟机

1
virt-clone --original yql --name wujing --file wujing.qcow2

启动虚拟机

1
virsh start wujing

将虚拟机vcpu扩充到16核心

1
2
3
virsh shutdown wujing
virsh edit wujing # 修改vcpu字段
virsh start wujing

重启虚拟机后验证是否16核心:

1
nproc

删除虚拟机

使用 virsh 命令中取消定义一个带有 NVRAM 的虚拟机:

1
virsh undefine wujing --nvram

参数说明:

  • undefine 表示取消定义(即删除)一个虚拟机。
  • --nvram 选项用于指示虚拟机具有 NVRAM(非易失性随机存储器),需要一并删除。
  • wujing 是要删除的虚拟机的名称或定义文件的路径。

vcpupin

共享剪切板

共享目录

在宿主机查看虚拟机共享目录配置:

共享目录

在虚拟机上执行下方命令:

1
sudo mount -t 9p -o trans=virtio /media/wujing/data /media/wujing/data

如果在虚拟机上想启动就默认挂载,可以写入 /etc/fstab:

1
2
3
sudo cat << EOF >> /etc/fstab
/media/wujing/data /media/wujing/data 9p trans=virtio 0 0
EOF

在虚拟机上重新挂载/etc/fstab:

1
2
sudo systemctl daemon-reload
sudo mount -a

时间

网络虚拟化

显示虚拟化

KVM性能优化

ksm

VIFO透传

qemu

qemu monitor

x86_64下qemu虚拟x86_64

arm64下qemu虚拟arm64

x86_64下qemu虚拟arm64

kunpeng 920

1
2
3
4
5
6
7
8
9
10
/usr/libexec/qemu-kvm \
-smp 8 \
-enable-kvm \
-cpu host \
-m 16G \
-machine virt-rhel7.6.0,gic-version=3 \
-drive file=/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw,if=pflash,format=raw \
-drive file=/var/lib/libvirt/qemu/nvram/wujing_VARS.fd,if=pflash,format=raw \
-hda /data_vm/wujing/virsh/wujing/wujing.qcow2 \
-nographic

该命令配置和启动一个基于 ARM 架构(aarch64)的虚拟机,并将所有输出重定向到当前终端。以下是该命令的详细解析:

  1. /usr/libexec/qemu-kvm:指定使用 qemu-kvm 可执行文件来启动虚拟机,通常位于 /usr/libexec/ 目录下。

  2. -smp 8:为虚拟机分配 8 个虚拟 CPU。

  3. -enable-kvm:启用 KVM 硬件加速,利用主机的 CPU 资源来提升虚拟机的性能。

  4. -cpu host:配置虚拟机的 CPU 设置,使其与主机的 CPU 一致,以便最大限度地利用主机 CPU 的特性。

  5. -m 16G:分配 16GB 内存给虚拟机。

  6. -machine virt-rhel7.6.0,gic-version=3:指定虚拟机的机器类型为 virt-rhel7.6.0,并设置 ARM 架构的中断控制器 GIC 的版本为 3。

  7. -drive file=/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw,if=pflash,format=raw:指定用于 UEFI 引导的固件文件(这是一个 pflash 设备),通常用于 ARM 架构系统的引导。

  8. -drive file=/var/lib/libvirt/qemu/nvram/wujing_VARS.fd,if=pflash,format=raw:指定虚拟机的 NVRAM 文件(另一个 pflash 设备),用于存储 UEFI 固件变量和配置。

  9. -hda /data_vm/wujing/virsh/wujing/wujing.qcow2:指定虚拟机的硬盘镜像文件为 wujing.qcow2,这是虚拟机的主存储设备,包含操作系统和数据。

  10. -nographic:禁用虚拟机的图形输出,将所有输出(包括引导信息和操作系统日志)重定向到当前终端,使其适合在非图形界面或远程 SSH 环境中使用。

Mac OSX

buildroot

loongarch

openstack

vmware

VMware 共享文件夹

  1. 列出共享文件夹

    1
    2
    vmware-hgfsclient
    code
    • 这个命令列出所有在 VMware 虚拟机中配置的共享文件夹。在你的情况下,它显示了名为 code 的共享文件夹。
  2. 创建挂载点目录

    1
    mkdir -p /mnt/hgfs
    • 这个命令创建了一个挂载点目录 /mnt/hgfs,如果目录已经存在则不会有任何效果。-p 选项确保目录的父目录也被创建(如果不存在)。
  3. 挂载共享文件夹

    1
    sudo vmhgfs-fuse .host:/ /mnt/hgfs -o subtype=vmhgfs-fuse,allow_other
    • 这个命令使用 vmhgfs-fuse 挂载 VMware 虚拟机中的共享文件夹到 /mnt/hgfs 目录。
    • .host:/ 表示挂载主机的共享文件夹。
    • -o subtype=vmhgfs-fuse,allow_other 是挂载选项,subtype 指定了文件系统的类型,allow_other 允许其他用户访问挂载点。
  4. 取消挂载共享文件夹

    1
    umount /mnt/hgfs
    • 这个命令取消了之前挂载到 /mnt/hgfs 目录的文件系统。
  5. 将挂载设置添加到 /etc/fstab

    1
    .host:/ /mnt/hgfs fuse.vmhgfs-fuse defaults,allow_other 0 0
    • 这个命令将挂载配置添加到 /etc/fstab 文件中,以便在系统启动时自动挂载共享文件夹。
    • fuse.vmhgfs-fuse 是文件系统类型,defaults,allow_other 是挂载选项,0 0 表示不进行文件系统检查,也不进行备份。

总结:这些命令用于配置 VMware 的共享文件夹,使其在虚拟机中可用,并在系统启动时自动挂载。

wine

Arch Linux


qemu-kvm
https://realwujing.github.io/linux/kernel/qemu/qemu-kvm/
作者
Wu Jing
发布于
2024年4月2日
许可协议