@donghanyuan0609
2022-10-26T16:40:04.000000Z
字数 3078
阅读 235
#!/bin/bash
DISK_IMG="$HOME/data/fastswap.qcow2"
ISO="$HOME/data/ubuntu-20.04.5-live-server-amd64.iso"
sudo qemu-system-x86_64 -m 64G -enable-kvm \
-hda $DISK_IMG \
-cdrom $ISO \
-net user,hostfwd=tcp::10022-:22 \
-net nic \
-vnc :1
用 remmina 连接 VNC ,端口 5901,remmina 支持 SSH Tunnel 代理,如果用非 ssh 方式的 socks5 代理,可以用 proxychains:
proxychains4 -f ict_proxy.conf -q /usr/bin/remmina
#!/bin/bash
DISK_IMG="$HOME/data/fastswap.qcow2"
sudo qemu-system-x86_64 -m 64G -enable-kvm \
-hda $DISK_IMG \
-cpu host,+monitor \
-smp cpus=20 \
-fsdev local,security_model=passthrough,id=fsdev0,path=${SHARED_FOLDER} \
-device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=hostshare \
-net user,hostfwd=tcp::10022-:22 \
-net nic \
-vnc :1
sudo ${QEMU_PATH}/qemu-system-x86_64 -m 64G -enable-kvm \
-kernel $KERNEL \
-append "root=/dev/sda2 earlyprintk=ttyS0 console=ttyS0 nopti nokaslr mitigations=off systemd.unified_cgroup_hierarchy=1" \
-cpu host \
-smp cpus=20 \
-hda $DISK_IMG \
-fsdev local,security_model=passthrough,id=fsdev0,path=${SHARED_FOLDER} \
-device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=hostshare \
-net nic \
-net user,hostfwd=tcp::10022-:22 \
-vnc :1 \
-gdb tcp::1235
# 其中 `-fsdev` 和 `-device` 这两行是用来共享目录的
这个方式用于连 init
都出错的情况下用,如果要在虚拟机里跑应用还是要在虚拟机里完整编译安装内核。
注意:挂载时需要保证虚拟机是关闭的。
sudo modprobe nbd
sudo qemu-nbd --connect=/dev/nbd0 $QCOW2_DISK
sudo fdisk /dev/nbd0 -l
sudo mount /dev/nbd0p2 ~/data/mountpoint
# -----------------
sudo umount ~/data/mountpoint
sudo qemu-nbd --disconnect /dev/nbd0
sudo rmmod nbd
QEMU >=7.2 : Changelog
取消了 slirp 的默认支持,需要在编译 QEMU 时手动开启
configure 添加选项: --enable-slirp
,host 安装 libslirp-dev
。
官方文档:9psetup
virtfs
../../../configure --target-list=x86_64-softmmu --enable-debug --enable-virtfs --enable-slirp
需要安装依赖库 libcap
, libattr
,如果缺失了会提示
重新编译 qemu 。
virtfs
-fsdev local,security_model=passthrough,id=fsdev0,path=/path/to/share \
-device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=hostshare
其中 /path/to/share
替换成实际的共享目录
sudo mkdir -p /mnt/share
sudo mount -t 9p -o trans=virtio,version=9p2000.L hostshare /mnt/share
加到 /etc/fstab
中:
# <file system> <mount point> <type> <options> <dump> <pass>
hostshare /mnt/share 9p trans=virtio,version=9p2000.L 0 0
其中 hostshare 是 qemu 启动参数中的 mount_tag
设定的值
更新 /etc/initramfs-tools/modules
,添加:
9p
9pnet
9pnet_virtio
或配置 systemd.mount (好像用不了)
参考 回答
编译选项中,开启 9p 文件系统支持(以挂载共享目录):
CONFIG_NET_9P=y
CONFIG_9P_FS=y
CONFIG_VIRTIO_PCI=y
CONFIG_NET_9P_VIRTIO=y
CONFIG_9P_FS_POSIX_ACL=y
CONFIG_NET_9P_DEBUG=y
安装 libcgroup1
和 cgroup-tools
,在内核启动选项(GRUB_CMDLINE_LINUX_DEFAULT
)中添加:
systemd.unified_cgroup_hierarchy=1
执行 sudo update-grub
后重启,即可只使用 cgroup v2。
查看是否只开启了 cgroup v2: mount | grep cgroup
,只有 v2 条目就正确。
添加编译选项:
CONFIG_LOCALVERSION="-prof" # 给内核版本号加个标记
CONFIG_LOCALVERSION_AUTO=y
查看版本号:include/generated/utsrelease.h
需要开启 E1000 支持
CONFIG_E1000=y
CONFIG_E1000E=y
CONFIG_E1000E_HWTS=y
需要往文件系统里安装内核模块,源代码也要拷贝到文件系统中
# 先挂载 qcow2 rootfs
# ------
# 安装内核模块 (在 host 上)
sudo make -j$(nproc) INSTALL_MOD_STRIP=1 modules_install INSTALL_MOD_PATH=~/data/rootfs
# 拷贝源代码 (在 host 上)
sudo cp -r ~/linux-5.11 ~/data/rootfs/home/ubuntu/
# 需要用 root 拷贝,拷过去之后在 guest 上 sudo chown
# ------
# 卸载 rootfs
进入 guest 后,找到 lib/modules/[当前内核版本]/
,修一下失效的软链接。
(update: 上面的方法还是可能有问题,师兄的建议是,把源码目录直接拷到虚拟机硬盘里,在虚拟机里面完整地重新编译安装)