@donghanyuan0609
2022-10-26T08:40:04.000000Z
字数 3078
阅读 467
#!/bin/bashDISK_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/bashDISK_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 nbdsudo qemu-nbd --connect=/dev/nbd0 $QCOW2_DISKsudo fdisk /dev/nbd0 -lsudo mount /dev/nbd0p2 ~/data/mountpoint# -----------------sudo umount ~/data/mountpointsudo qemu-nbd --disconnect /dev/nbd0sudo 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/sharesudo 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 ,添加:
9p9pnet9pnet_virtio
或配置 systemd.mount (好像用不了)
参考 回答
编译选项中,开启 9p 文件系统支持(以挂载共享目录):
CONFIG_NET_9P=yCONFIG_9P_FS=yCONFIG_VIRTIO_PCI=yCONFIG_NET_9P_VIRTIO=yCONFIG_9P_FS_POSIX_ACL=yCONFIG_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=yCONFIG_E1000E=yCONFIG_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: 上面的方法还是可能有问题,师兄的建议是,把源码目录直接拷到虚拟机硬盘里,在虚拟机里面完整地重新编译安装)