KVM FAQ (中文翻译)

这是 KVM 官网 FAQ 的中文非官方翻译 , 算是为开源做点贡献吧~
 

KVM 常见问题

准备使用 KVM

使用 KVM 的系统需求?
您需要一台运行最新 Linux 内核的 x86 架构的机器 , 该机器的处理器需要支持 Intel 的 VT 或者 AMD 的 SVM . Xen 有一张兼容处理器的列表 . 至于 Intel 的处理器 , 您可以查看 Intel 虚拟技术列表 .

KVM 支持 64 位的处理器吗?
是的 , KVM 支持 64 位的处理器 , 并且该 64 位的处理器可以运行 32 位或者 64 位的客户机.
请参见 "64 位的主机是否可以运行 32 位的客户机 ? 在有 PAE 的情况下是否可以 ?"

什么是 Intel VT/AMD-v/hvm?
Intel VT AMD-V 是一套为虚拟机监视器提供硬件支持的扩展指令集 . 在正常工作负载下 , 该指令集可以以实体硬件的速度运行完全隔离的虚拟机.
HVM(“硬件虚拟机技术”的英文缩写 ) 是一个常用于 X86 指令集命名中的厂商中立术语.

从何处获取 kvm 的内核模块?
请参见获取 kvm 内核模块.

如何确认我的机器有 Intel VT 或者 AMD-V ?
在最新的 Linux 内核下运行如下命令:

egrep ‘^flags.*(vmx|svm)’ /proc/cpuinfo

如果有显示 , 说明您的处理器具有 VT 功能 . 您也可以通过厂商网站查询处理器型号的名称(在/proc/cpuinfo) .
注意:
您如果在 dom0 或者 domU 下运行, 是不会在 /proc/cpuinfo 显示 vmx|svm 的.
Xen 管理程序进制了这些旗标 (vmx|svm) 以防止劫持.
一些厂商禁用了机器 BIOS 中的 VT, 这种方式下是不能重新启用 VT 的.
/proc/cpuinfo 仅从 2.6.15 (Intel) 或 2.6.16 (AMD) 版本的 Linux 内核开始显示虚拟化方面的信息. 您可以使用 uname -r 命令来查询你的内核版本.
如有疑问 , 请联系硬件厂商.

“KVM: disabled by BIOS” 错误
请在 BIOS 中检查是否有能够开启的选项 . 如果没有 , 请从厂商的网站上获取最新的 BIOS .
注意:
⠂部分计算机(比如 HP nx6320) ,在 BIOS 里面启用虚拟化后关需要重新启动计算机.
⠂部分计算机 , 在 BIOS 里面开启某些功能可能会影响 VT 的支持(比如 在 Thinkpad T500 下开启 Intel AMT 会阻止 kvm-intel 的加载 )
⠂在一些 Dell 的机器上 , 您需要取消 “Trusted Execution” , 否则 VT 不会被加载 .

如何使用 AMD-V 扩展?
modprobe kvm-amd

KVM 使用哪些用户空间工具?
KVM 使用稍作修改的 QEMU 程序来创建虚拟机 . 虚拟机在运行后也是一个普通的进程 . 您可以使用 top(1) , kill(1) , taskset(1) 以及类似的工具来管理虚拟机.

KVM 支持哪些磁盘格式?
KVM 从 QEMU 那里继承了丰富的磁盘格式 ; 它括 RAW 格式的磁盘镜像 , 原始 QEMU 格式 ,  VMware 格式以及其他的格式.

是否有虚拟机管理工具可以使用?
有,请参见管理工具.

使用 KVM

如何在普通用户权限下使用 KVM?
最简洁的方法是创建一个用户组 , 比如 kvm , 将该用户加入到 kvm 这个组中 . 然后您需要将 /dev/kvm 的拥有组修改为 kvm.
在 运行 udev 的系统上 , 您需要将下列的几行添加到您的 udev 配置文件中 , 这样它就会自动的为新创建的设备分配正确的用户组(比如 对于 ubuntu 用户 , 将下面这行添加至 /etc/udev/rules.d/40-permissions.rules).
KERNEL=="kvm", GROUP="kvm"

如何使 KVM 发挥最佳性能?
请参见配置 KVM 页.

KVM 是否稳定?
KVM 可以稳定运行 , 并用于生产环境 . 和其他大多数开源项目一样 , 开发版的稳定性要低于正式版本.

KVM 的稳定性是否足以在日常环境中进行使用?
是的 . 我们持续对最常用的操作系统和配置情况进行测试 , 如果发生任何崩溃 , 我们的开发人员会尽快修补它 . 请查看 Guest Support Status  和 Host Support Status 来获取更多的信息 . 请更新这些条目以分享您的成功经验 , 以便新的用户可以从中受益.

KVM 在实际的生产环境中表现如何?
在 生产环境中 , 建议您使用在您的 Linux 发行版中附带的 KVM 模块. 正如上面所提到的那样 , 虽然最新版本的某些新特性很具有诱惑力 , 但是它们也可能会带来一些难以预知的问题 . 您最好能够在一些非关键性的生产活动中使用开发版本 , 这样在您决定部署最新版时就会对其稳定性有更多的了解 .

如果使用 kill -9 命令来结束一个虚拟机进程会发生什么?
从客户机的角度来讲 , 这就相当于您直接拔了电源线 . 从主机的角度讲 , 这一命令将杀死相应进程并释放所有被其占用的资源.

怎样为客户机设置网络连接?
您可以参考 Networking 这个维基页面来获取客户机网络设置方面的最常用信息 . 您还可以参考 QEMU 的文档.

怎样找到更多的相关文档?
QEMU 的文档涵盖了大部分使用方面的问题 . 同时还有一个更加详细的 FAQ.

排错

怎样检查 KVM 虚拟机的运行速度是否落后于未进行硬件加速的 QEMU 虚拟机?
如果您觉得由 KVM 模块提供的硬件加速并没有起到作用 , 可以按照以下步骤来进行检查.
首先 , 确保您没有如下的信息:

qemu-system-x86_64 -hda myvm.qcow2
open /dev/kvm: No such file or directory
Could not initialize KVM, will disable KVM support

在这种情况下 , 请检查 :
⠂模块被正确载入 lsmod | grep kvm
⠂您的输出信息上没有出现 "KVM: disabled by BIOS"
⠂/dev/kvm 存在并且您有权限使用

其他的诊断方法
如果您能够使用 QEMU 监视器 (Ctrl-Alt-2 , 使用 Ctrl-Alt-1 回到 VM) , 输入 “info kvm” 命令 , 应该得到 "KVM support: enabled" 这一结果.
⠂ 虚 拟机启动后在主机上执行 lsmod|grep kvm,其右端的输出结果应该只包括非零值。这里的值对应于特定的结构模块 (比如 kvm_intel , kvm_amd) , 显示了虚拟机使用的模块的号码 . 例如 , 如果在一台使用了 vt 技术的机器上运行两个使用 KVM 模块的虚拟机 , 它会显示:

lsmod|grep kvm
kvm_intel              44896  2
kvm                   159656  1 kvm_intel

使用 VNC 时出现 “rect too big” 信息
当连接到一个 VNC 终端时 , 出现“rect too big” 信息 , 然后 VNC 会话断开.
这种情况发生是由于 VNC 协议本身的缺陷导致的(更多信息请查看 this thread ). 如果您在使用 TigerVNC , 您可以通过关闭正在运行中的像素编码选项来避免这个问题 , 转而使用 vncviewer 选项中的 -AutoSelect=0 命令. 您或许应当检查 vncviewer 的 man 手册中的编码选项 , 这样就可以禁用程序根据连接速度自动选定的编码方式.

怎样对网络进行设置以便其他机器可以访问客户机? 或者客户机网络失效的问题应当怎样处理?
KVM 使用 QEMU 作为它的设备模拟器 . 请参见 QEMU network wiki page 获取详细的网络设置指导.
您也可以参看管理员网络模式页面以及网桥页面.

在 Intel 主机上启动虚拟机时遇到 “Exception 13” 或者 “Exception 12” 这样的信息时应当怎样处理?
请参见 Intel Real Mode Emulation Problems.

使用中遇到 “rtc interrupts lost” 的错误信息 , 并且客户机运行缓慢?
在您客户机的 .config 文件下设置 CONFIG_HPET_EMULATE_RTC=y

在安装了 VMware/Parallels/VirtualBox  之后载入 KVM 模块时系统锁死.
不 管是 Intel VT 还是 AMD-V 都没有提供判断软件当前在使用硬件虚拟化扩展的机制 . 这就意味着如果您同时装载了两个内核模块试图使用硬件虚拟化扩展时 , 就会发生错误 . 如果 KVM 发生异常时您正在使用另一种虚拟化软件 , 请在上报 bug 前确认在没有为其他虚拟化软件加载内核模块时仍然会出现这一问题 .

安装 Kubuntu 时 , QEMU/KVM 并没有挂起 , 却不在屏幕上显示任何信息.
请尝试带上 -std-vga 选项运行 kvm . 如果客户机系统像 Kubuntu/Ubuntu 一样使用 framebuffer 模式的话 , 这一做法是有效的.

点击客户端操作系统窗口时鼠标被固定住 , 或者鼠标在客户机中无法正常显示和使用 , 这种情况应当如何处理?
根据 #qemu 维基的说明, 请尝试用这种方式运行 kvm/qemu
-usb -usbdevice tablet
如果这样没有效果 , 请尝试下面的方法:
$ export SDL_VIDEO_X11_DGAMOUSE=0
(参考自 http://wiki.clug.org.za/wiki/QEMU_mouse_not_working )

KVM 综合信息

KVM 和 Xen 有什么差异?
Xen 是个外部的管理程式 ; 它能够控制虚拟机并且给多个客户机分配资源 . 而 KVM 是Linux 的一部分, 它使用通常的 Linux 作业系统和内存管理 . 这意味着 KVM 体积更小 , 更易使用 , 功能更强大 ; 比如 KVM 能够交换客户机到硬盘以释放内存.
KVM 只能运行在支持 x86 架构的机器上 , 而 Xen 还能通过使用一项叫半虚拟化的技术在非 x86 架构的机器上运行修改过的操作系统 . KVM 不支持 CPU 的半虚拟化 , 但是可能支持一些设备驱动的半虚拟化来提高设备的输入输出性能.

KVM 和 VMawre 有什么差异?
VMware 是专有软件产品 . KVM 是遵守 GPL ­的自由软件.

KVM 和 QEMU 有什么差异?
QEMU 使用模拟器而 KVM 使用处理器扩展 (HVM)  实现虚拟化.

KVM 是否有移植到 Windows 的版本?
没有官方的版本.
但是 Kazushi Takahashi 正在实施一个叫做 WinKVM 的试验性的版本 , 点击这里获取.

KVM 支持哪些内核版本?
这个取决于您在使用的 KVM 版本 . 最新发行的 KVM 应该能支持目前所有较新的内核 (2.6.17 及以上版本), 旧版本的 KVM 甚至可以支持更旧的内核.

运行 KVM 需要多少内存?
您需要足够的内存来让客户机以及主机运行顺畅 , 1GB 对主机来说可能是最低配置.

客户机支持动态内存管理吗?
这是个涉及到好几个方面的广泛话题.
A. KVM 只在客户机需要时才为其分配内存 , 但是内存一旦被分配就会保持被占用的状态 . 一些客户机 (比如微软的客户机) 在启动的时清空所有的内存 . 所以他们会占用所有的内存.
B . 某些客户机有 (目前只有 Linux ) 气球驱动 (Balloon Driver) , 主机可以强制客户机分配出一部分内存并不再使用它们 , 然后主机就可以释放掉这部分内存 . 主机通过气球监控命令 (Ballon Monitor Command) 来控制这一过程.
C. 一些客户机 (目前只有 RHEL5.3 / CentOS 5.4) 有一种称作 KSM 的特性 , 这一特性可以合并不同的页面数据 ; 这一过程需要主机内核和较新版本 KVM 的支持 . 一些客户机(尤其是大部分的 Windows ) 会清空内存 , 这样页面数据就无法有效进行合并 . 启用 KSM 特性需要使用 ksmctl 命令 ; 另外 , Fedora 12 中所包含的 ksmtuned 服务可以根据可用空闲内存的数量来动态地调整 KSM 的优先级.

在 KVM 虚拟机中可以运行什么操作系统?
KVM 虚拟机可以运行多种操作系统 , 请参考 Guest Support Status 获取详细信息 . 注意有一些 Linux 发行版在使用 Intel 处理器的机器上启动时会被挂起 . 解决方法是在 grub 里面取消开机画面.

KVM 在不关闭虚拟机的情况下支持从一个主机上的虚拟机迁移到另一个主机上去吗?
支持 . 请参考 Migration 获取详细信息 .

KVM 支持从 AMD 的主机迁移到 Intel 主机的吗?
支 持 . 32 位不支持 NX (或者 XD) 的主机可能有问题 , 但是对于 64 的主机来说应该是没问题的 . 32 位客户机应该可以迁移到 32 位或者 64 位的主机上 . 如果迁移过程中的一台主机不支持 NX  , 您可以考虑在支持 NX 的那台主机上启动客户机时取消 NX  . 您可以通过在客户机上加入 "-cpu qemu64,-nx"  参数来实现.

64 位的主机是否可以运行 32 位的客户机 ? 在有 PAE 的情况下是否可以?
KVM 支持在 64 位的主机上运行 32 位的客户机 , 并支持任何 PAE 和非 PAE 的客户机-主机组合 . 唯一不支持的组合是在 32 位的主机上安装 64 位的客户机 . 如果您在运行 Windows 的虚拟机 , 在您的客户机上启动 PAE 遇到了问题 , 请您查看 Windows PAE Workaround.

在客户机系统上可以使用 USB 设备吗?
是的 , 与在 QEMU 上的做法相同.

是否可以在 KVM 下获取高清或宽屏 (比如 1680 x 1050) 分辨率?
您可以在启动 VM 时使用 -vga std 参数以获得更高的分辨率和宽屏显示 .
如果您想使用的分辨率不支持 , 您可以修改相应的源文件 (请参考http://article.gmane.org/gmane.comp.emulators.kvm.devel/13557 ) , 或者如果您不会修改, 可以发邮件到 KVM 的邮件列表 .
如果您希望使用 Windows 系统作为客户机并且不想使用非 GPL 的代码,那么您可以使用 VBEMP X86 项目(http://www.bearwindows.boot-land.net/vbemp.htm) 所提供的驱动 , 这一项目基于 ReactOS 的源代码.

KVM 支持 SMP 主机吗?
是的.

KVM 支持 SMP 客户端机吗?
是的 ! 通过加上 -smp 选项可支持多达 16 个 CPU.

KVM 注册商标了吗?
没有.

谢谢大美女卡罗斯姐姐的呕心沥血牺牲陪女友的时间帮我修改 :P

  • http://www.zypatroon.com zypatroon

    各种抗议技术文…

    • http://blog.ibfsu.com Carlos Gong

      +1

  • Cryincold

    哇~~原来已经有人译过了!我也译了一遍。晕。。。