7
15
2014
30

在 Arch 里使用 KVM 装 Arch

本文来自依云's Blog,转载请注明。

准备

首先检查 CPU 支持。需要 CPU 支持虚拟化的。

grep -E "(vmx|svm|0xc0f)" --color=always /proc/cpuinfo

没输出就没戏了。现在的 CPU 一般都支持的。

然后是内核支持。

zgrep CONFIG_KVM /proc/config.gz
zgrep CONFIG_VIRTIO /proc/config.gz

官方内核是支持的。

最后是用户态软件。Arch Linux 一向不怎么分包,安装 qemu 这个包就可以了。

哦对了,要安装 Arch 的话,还要准备它的安装镜像。

开始啦

一切就绪。

先创建虚拟机所用的磁盘文件。

qemu-img create -f qcow2 ArchVM.img 15G

这样就创建了一个 15G 容量的 qcow2 格式虚拟磁盘文件。之所以选用 qcow2,是因为它支持「母镜像」功能,对应于 Virtual Box 的差分存储。

然后就可以启动系统了。为了避免老是输入一长串命令,遵循 Gentoo Wiki 的建议,我们创建一个脚本:

#!/bin/sh
exec qemu-system-x86_64 -enable-kvm \
       -cpu host \
       -drive file=$HOME/ArchVM.img,if=virtio \
       -netdev user,id=vmnic,hostname=archvm,hostfwd=tcp:127.0.0.1:2222-:22 \
       -device virtio-net,netdev=vmnic \
       -m 1G \
       -curses \
       -name "Arch VM" \
       "$@"

注意到这里我已经加上了hostfwd参数,将虚拟机的 22 端口映射到 host 的 2222 端口上,方便以后通过 ssh 连接。

我这里指定了-curses参数,它将虚拟机的显示器直接使用 curses 库显示在当前终端上。当然能显示的只有显示器处于文本模式的时候,图形模式就只能知晓当前分辨率了。因为我是在服务器上使用,所以加上这个参数。当然你也可以使用 VNC 去连。

然后执行命令:

./startvm -boot once=d -cdrom path_to_file.iso

首先从光驱启动一次(once=d),重启之后恢复到默认的从硬盘启动。

系统启动啦~然后就会发现引导器 isolinux 把显示器切换到图形模式了……

终端无法显示图形模式的内容

不过还好。Arch 的引导界面我们知道。按Tab,然后输入<Space>nomodeset并回车。不然待会进系统里,KMS 之后一直是图形模式就什么也看不到了。

然后进入系统安装啦。注意硬盘设备是/dev/vda。当然也要注意安装并让 sshd 在开机时启动,虽然说有 curses 模式的「显示器」也可以用。

装好之后、重启之前还要注意一点,把/boot/grub/grub.cfg包含gfxload_video之类的地方都去掉,不然会进图形模式的。

装好后就 reboot 吧。如果一切顺利的话就能看到已经安装好的 Arch 登录提示符了。

好不容易装好了系统,当然要把它作为母镜像,所有后续的修改放子镜像上啦:

qemu-img create -f qcow2 -b ArchVM.img ArchTest.img

然后修改一下启动脚本。以后就可以用./startvm脚本启动这个虚拟机啦。

参考文章

Category: Linux | Tags: linux kvm 虚拟机 | Read Count: 18621
SuperCat 说:
Jul 16, 2014 12:25:40 AM

为啥不用virt-manager呢……libvirt可以以daemon运行KVM的,图形界面还可以用它来走qxl/spice,支持远程操作的。而且不需要写命令。

Avatar_small
依云 说:
Jul 16, 2014 12:18:07 PM

我就是不想走图形啊。

自由建客 说:
Jul 20, 2014 01:11:43 AM

kvm 在我這好慢。無論怎麼優化,安裝 Win2003 最好成績是 38 分鐘,vbox 僅要 17 分鐘。

cofm 说:
Dec 31, 2014 12:40:55 AM

你好 怎么能用kvm啊

Avatar_small
依云 说:
Dec 31, 2014 11:10:07 AM

文章第一节说的就是。

cofm 说:
Dec 31, 2014 09:52:09 PM

就是说 arch里 用qemu的 -enable-kvm 等于 qemu-kvm了吗

cofm 说:
Dec 31, 2014 10:37:34 PM

明白了 但是怎么进行管理呢 今天试了 可以用脚本开启 但是怎么能让虚拟机后台运行 想看的时候再打开呢 用了virt-manager 提示没有spice

Avatar_small
依云 说:
Dec 31, 2014 10:43:12 PM

这个我也不知道呢。反正我有 tmux,偶尔用用的话也不缺终端。

cofm 说:
Dec 31, 2014 10:45:26 PM

我想装win7 用终端肯定不够 不过还是谢谢了 我再查查

丁丁 说:
Feb 19, 2017 05:14:39 PM

virt-manager 图形方式安装,操作系统类型里面居然没有archlinux,是不支持么?

丁丁 说:
Feb 19, 2017 05:21:15 PM

host是archlinux,用KVM,在virt-manager图形界面安装archlinux,操作系统类型很多,就是没 有archlinux.

Avatar_small
依云 说:
Feb 19, 2017 05:38:31 PM

没用过 virt-manager 呢。

丁丁 说:
Feb 19, 2017 06:17:13 PM

我努力,争取早日放弃图形界面 :)

丁丁 说:
Feb 19, 2017 08:21:46 PM

操作系统类型选择generic之后可以正常安装archlinux,但移动鼠标进入guest后,鼠标只能在guest里面移动,不能在host与guest之间平滑移动,需要用ctrl+alt组合键释放鼠标,才可以在host中移动鼠标。
继续努力解决中...

丁丁 说:
Feb 19, 2017 08:22:51 PM

另一个guest(windows7),鼠标平滑移动正常。

丁丁 说:
Feb 24, 2017 09:56:04 AM

依云:
我记得你好像提到过,用另一个发行版引导,可以做到图形化安装archlinux,但忘记在哪看到了,能再大概告诉我一下么?

谢啦!

Avatar_small
依云 说:
Feb 24, 2017 10:02:45 AM

还是命令行安装,只不过是同时你还可以开着浏览器什么的。

在 ArchWiki 上,你从安装教程的所在的分类找就能找到: https://wiki.archlinux.org/index.php/Install_from_existing_Linux

丁丁 说:
Feb 24, 2017 10:04:19 AM

这么快回复, 先赞一个,我这就去找..

丁丁 说:
Mar 29, 2017 05:45:10 PM

折腾好久,发现根本用不到,因为我基本是使用KVM了,host只装一次就不用再动。
以后也不折腾图形了,真心没必要。

丁丁 说:
Mar 29, 2017 05:47:38 PM

大神,KVM guest正常使用了,想让arch host所有软件都联不了互联网,只允许kvm guest可以联互联网(我只用kvm guest上网),有什么好办法没,指点则个?

Avatar_small
依云 说:
Mar 29, 2017 08:20:07 PM

不知道你的 KVM 网络是怎么配置的。要禁止访问网络的话,用 iptables 呀。可以按源 IP 限制,也可以按用户限制。

丁丁 说:
Mar 29, 2017 08:48:35 PM

很想追问,但下班了,明天再说,你休息,我先琢磨着。

丁丁 说:
Apr 05, 2017 10:34:34 AM

这几天使劲研究了一下iptables,有点复杂了,基本是按端口和ip来设定规则,无从下手的感觉。
===
我的应用环境比较简单,就一台电脑(archHost),里面kvm guest的网卡是NAT方式上网,需求主要是在Host,希望Host里面所有的软件都不能连接internet,除了kvm guest,因为我上网和下载什么的,都在guest里。当然,偶尔需要archHost滚动升级一下。
大神,指点下~

Matriks 说:
Jun 10, 2017 01:08:48 PM

收藏依云大大这篇文章,有时间就开始折腾。

忘记多久前我在找虚拟机方案的时候也看到过kvm,
看到介绍说的那么厉害的样子,也折腾了一段时间,最后因为急着用虚拟机,还是直接上的virtualbox解决问题。
现在也没重新开始学kvm,

Avatar_small
依云 说:
Jun 12, 2017 11:39:22 AM

我平时也是用 vbox 的。这次是在服务器上不方便用 vbox 所以才用了 kvm。

冰泉 说:
Oct 10, 2019 03:04:18 PM

KVM和VBOX不能一起运行呀。

我用的virt-manager作为图形管理工具,设置开机自启libvirt后,当启动VBOXd的时候就报错了。

当取消自启动libvirt,启动VBOX时使用KVM就报错了
Unable to complete install: 'internal error: process exited while connecting to monitor: ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy
2019-10-10T06:44:53.219277Z qemu-system-x86_64: failed to initialize KVM: Device or resource busy'

先入手KVM玩,回头VBOX转KVM,VBOX装个Win好像有些浪费啊。如果单纯图形占优的话好像没多大帮助(不玩游戏视频啥的),顶多装个arch不支持的exe软件而已。还有就是guest VPN代理给host使用(这个应该和仙子之前写的在vbox上代理一样吧)

上手后再尝试仙子的NO GUI安装大法。KVM毕竟可以当成一门技术栈来玩。

冰泉 说:
Oct 10, 2019 04:31:12 PM

仙子我再追问下,脱离GUI的kvm可以像Vbox一样切换应用吗?

我是用平铺桌面Bspwm,仙子上面装的arch如果带图形桌面支持直接鼠标键盘控制KVM里的系统吗?还是需要借用VNC软件冲host连到guest操作?

(仙字的博客图形验证码不支持点击切换啊,要F5页面)

Avatar_small
依云 说:
Oct 10, 2019 04:40:48 PM

可以的。QEMU 有窗口模式,不过菜单里的中文显示不出来所以建议先用英文 locale 熟悉一下,以免键鼠进虚拟机了出不来。

Avatar_small
依云 说:
Oct 10, 2019 04:41:26 PM

vbox 现在在一些情况下也会使用 kvm 了,所以大概是冲突了吧。你可以在设置里改改看。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

| Theme: Aeros 2.0 by TheBuckmaker.com