Linux 中使用 virsh 管理 KVM 虚拟机 (转)
术语
虚拟化指的是:在相同的物理(硬件)系统上,同时运行多个操作系统,且这几个系统相互隔离的可能性,而那个硬件在虚拟化架构中被称作宿主机(host)。虚拟机监视器(也被称为虚拟机管理程序(hypervisor))虚拟机(被称为 guest)由底层的硬件来供给虚拟资源(举几个例子来说,如 CPU,RAM,存储介质,网络接口等)。
考虑到这一点就可以清楚地看出, 虚拟化的主要优点是节约成本(在设备和网络基础设施,及维护工作等方面)和显著地减少容纳所有必要硬件所需的物理空间。
检查硬件要求并安装软件包
一、硬件要求
为了设置 KVM Kernel-based Virtual Machine(基于内核的虚拟机)虚拟化,你的 CPU 必须能够支持它。你可以使用下面的命令来查看你的系统是否满足这个要求:
# grep -E 'svm|vmx' /proc/cpuinfo
在下面的截图中,我们可以看到当前的系统(带有一个 AMD 的微处理器)支持虚拟化,svm 字样的存在暗示了这一点。假如我们有一个 Intel 系列的处理器,我们将会看到上面命令的结果将会出现 vmx 字样。

另外,你需要在你宿主机的硬件(BIOS 或 UEFI)中开启虚拟化。
二、安装软件包
- qemu-kvm 是一个开源的虚拟机程序,为 KVM 虚拟机监视器提供硬件仿真,而 qemu-img 则提供了一个操纵磁盘镜像的命令行工具。
- libvirt 包含与操作系统的虚拟化功能交互的工具。
- libvirt-python 包含一个模块,它允许用 Python 写的应用来使用由 libvirt 提供的接口。
- libguestfs-tools 包含各式各样的针对虚拟机的系统管理员命令行工具。
- virt-install 包含针对虚拟机管理的其他命令行工具。
命令如下:
# yum update && yum install qemu-kvm qemu-img libvirt libvirt-python libguestfs-tools virt-install
一旦安装完成,请确保你启动并开启了 libvirtd 服务:
# systemctl start libvirtd.service
# systemctl enable libvirtd.service
三、网络桥接设置
默认情况下,每个虚拟机将只能够与放在相同的物理服务器上的虚拟机以及宿主机自身通信。要使得虚拟机能够访问位于局域网或因特网中的其他机器,我们需要像下面这样在我们的宿主机上设置一个桥接接口(比如说 br0):
1、命令操作
# 临时生效
yum -y install bridge-utils
brctl addbr br0
brctl addif br0 <ifname1>
brctl addif br0 <ifname2>
# 永久生效
nmcli conn add type bridge con-name br0 ifname br0 ipv4.method manual ipv4.address xxx ipv4.gateway xxx ipv4.dns 223.5.5.5 connection.autoconnect yes
nmcli device connect br0
nmcli connection up br0
nmcli device set br0 managed yes autoconnect yes
nmcli connection add type bridge-slave ifname <if1> master br0
nmcli connection add type bridge-slave ifname <if2> master br0
2、配置文件
1、 添加下面的一行到我们的 NIC 主配置中(类似 /etc/sysconfig/network-scripts/ifcfg-enp0s3 这样的文件):
BRIDGE=br0
2、 使用下面的内容(注意,你可能需要更改 IP 地址,网关地址和 DNS 信息)为 br0 创建一个配置文件(/etc/sysconfig/network-scripts/ifcfg-br0):
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.0.18
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
NM_CONTROLLED=no
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=br0
ONBOOT=yes
DNS1=8.8.8.8
DNS2=8.8.4.4
四、设置数据包转发
最后在文件/etc/sysctl.conf 中设置:
net.ipv4.ip_forward = 1
来开启包转发并加载更改到当前的内核配置中:
# sysctl -p
注意,你可能还需要告诉 firewalld 让这类的流量应当被允许通过防火墙。假如你需要这样做,记住你可以参考这个系列的 使用 firewalld 和 iptables 来控制网络流量。
创建虚拟机镜像
默认情况下,虚拟机镜像将会被创建到 /var/lib/libvirt/images 中,且强烈建议你不要更改这个设定,除非你真的需要那么做且知道你在做什么,并能自己处理有关 SELinux 的设定(这个话题已经超出了本教程的讨论范畴,但你可以参考这个系列的第 13 部分 使用 SELinux 来进行强制访问控制,假如你想更新你的知识的话)。
这意味着你需要确保你在文件系统中分配了必要的空间来容纳你的虚拟机。
下面的命令将使用位于 /home/gacanepa/ISOs目录下的 rhel-server-7.0-x86_64-dvd.iso 镜像文件和 br0 这个网桥来创建一个名为 tecmint-virt01 的虚拟机,它有一个虚拟 CPU,1 GB(=1024 MB)的 RAM,20 GB 的磁盘空间(由/var/lib/libvirt/images/tecmint-virt01.img所代表):
# virt-install \
--network bridge=br0
--name tecmint-virt01 \
--ram=1024 \
--vcpus=1 \
--disk path=/var/lib/libvirt/images/tecmint-virt01.img,size=20 \
--graphics none \
--cdrom /home/gacanepa/ISOs/rhel-server-7.0-x86_64-dvd.iso
--extra-args="console=tty0 console=ttyS0,115200"
假如安装文件位于一个 HTTP 服务器上,而不是存储在你磁盘中的镜像中,你必须将上面的 -cdrom 替换为 -location,并明确地指出在线存储仓库的地址。
至于上面的 –graphics none 选项,它告诉安装程序只以文本模式执行安装过程。假如你使用一个 GUI 界面和一个 VNC 窗口来访问主虚拟机控制台,则可以省略这个选项。最后,使用 –extra-args 参数,我们将传递内核启动参数给安装程序,以此来设置一个串行的虚拟机控制台。
现在,所安装的虚拟机应当可以作为一个正常的(真实的)服务来运行了。假如没有,请查看上面列出的步骤。
管理虚拟机
作为一个系统管理员,还有一些典型的管理任务需要你在虚拟机上去完成。注:下面所有的命令都需要在你的宿主机上运行:
1. 列出所有的虚拟机:
# virsh list --all
你必须留意上面命令输出中的虚拟机 ID(尽管上面的命令还会返回虚拟机的名称和当前的状态),因为你需要它来执行有关某个虚拟机的大多数管理任务。
2. 显示某个虚拟机的信息:
# virsh dominfo [VM Id]
3. 开启,重启或停止一个虚拟机操作系统:
# virsh start | reboot | shutdown [VM Id]
4. 假如网络无法连接且在宿主机上没有运行 X 服务器,可以使用下面的命令来访问虚拟机的串行控制台:
# virsh console [VM Id]
注:这需要你添加一个串行控制台配置信息到 /etc/grub.conf 文件中(参考刚才创建虚拟机时传递给-extra-args选项的参数)。
5. 修改分配的内存或虚拟 CPU:
首先,关闭虚拟机:
# virsh shutdown [VM Id]
为 RAM 编辑虚拟机的配置:
# virsh edit [VM Id]
然后更改
<memory>[内存大小,注意不要加上方括号]</memory>
使用新的设定重启虚拟机:
# virsh create /etc/libvirt/qemu/tecmint-virt01.xml
最后,可以使用下面的命令来动态地改变内存的大小:
# virsh setmem [VM Id] [内存大小,这里没有括号]
对于 CPU,使用:
# virsh edit [VM Id]
然后更改
<cpu>[CPU 数目,这里没有括号]</cpu>
至于更深入的命令和细节,请参考 RHEL 5 虚拟化指南。
via: http://www.tecmint.com/kvm-virtualization-basics-and-guest-administration/
作者:Gabriel Cánepa
译者:FSSlc
校对:wxy
Linux 中使用 virsh 管理 KVM 虚拟机 (转)的更多相关文章
- 管理KVM虚拟机(二)
管理KVM虚拟机 工具:libvirt 官网:http://libvirt.org/ 介绍:Libvirt 库是一种实现 Linux 虚拟化功能的 Linux® API,它支持各种虚拟机监控程序,包括 ...
- [GUI] Linux中的图形管理
转:http://www.cnblogs.com/yongpenghan/p/4555619.html 做了一段时间linux下与QT事件相关的工作,经常会遇到X11,总是苦于无法完全理解其与linu ...
- Linux 桌面玩家指南:07. Linux 中的 Qemu、KVM、VirtualBox、Xen 虚拟机体验
特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...
- CentOS7系列--5.1CentOS7中配置和管理KVM
CentOS7配置和管理KVM 安装与配置虚拟化软件KVM ( Kernel-based Virtual Machine ) + QEMU,它要求计算机的CPU支持Intel VT or AMD-V功 ...
- LInux中的物理内存管理
2017-02-23 一.伙伴系统 LInux下用伙伴系统管理物理内存页,伙伴系统得益于其良好的算法,一定程度上可以避免外部碎片为何这么说?先回顾下Linux下虚拟地址空间的分布. 在X86架构下,系 ...
- 使用 libvirt创建和管理KVM虚拟机
1. libvirt介绍 Libvirt是一个软件集合,便于使用者管理虚拟机和其他虚拟化功能,比如存储和网络接口管理等等.Libvirt概括起来包括一个API库.一个 daemon(libv ...
- 使用Wok管理kvm虚拟机
[Centos7.4] !!!测试环境我们首关闭防火墙和selinux [root@localhost ~]# systemctl stop firewalld [root@localhost ~]# ...
- 使用virsh管理KVM虚拟化主机
开机关机等操作 1. 使用virsh list 显示所有的虚拟机 [root@desktop1 ~]# virsh list --all Id Name State ----------------- ...
- 在linux中使用包管理器安装node.js
网上文章中,在linux下安装node.js都是使用源码编译,其实node的github上已经提供了各个系统下使用各自的包管理器(package manager)安装node.js的方法. 1. 在U ...
随机推荐
- 8-matlab-gui-显示图片有坐标刻度问题
在图片上显示图片时,总是有图片,一遍做法是使得刻度为空就可了: 在你的每一个axes的CreateFcn函数中添加一下代码即可:set(hObject,'xTick',[]);set(hObject, ...
- Makefiles in Linux
http://www.codeproject.com/Articles/31488/Makefiles-in-Linux-An-Overview
- 牛掰的python与unix
python的中心哲学 Python 2.7.5 (default, Nov 6 2016, 00:28:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on ...
- Linux System V Semaphore semget多进程同时创建缺陷解决方法
System V Semaphore的创建过程缺陷是创建与赋初值由两个函数完成,这会导致两个进程同时创建的话会出现竞争和不一致状态,即使是使用了IPC-EXCL标记. 示例: oflag = IPC- ...
- python实现中文字符繁体和简体中文转换-乾颐堂
需求:把中文字符串进行繁体和简体中文的转换: 思路:引入简繁体处理库,有兴趣的同学可以研究一下内部实现,都是python写的 1.下载zh_wiki.py及langconv zh_wiki.py:ht ...
- windows10 查看进程端口的情况
以程序 winnfsd.exe 为例: 1 查看进程号 PID C:\Users\leo>tasklist|findstr winnfsd.exe winnfsd.exe ...
- 怎样才能做好SNS社区网站
顺应历史潮流,大批的网络社区SNS(Social Networking Services)发展起来. SNS旨在构建一个网络上的人际关系网,让公众足不出户即可实现社交意愿.SNS满足了人的交流欲望,成 ...
- 安装wampserver后,在www文件夹下面写php文件,而在网页里输入localhost而无法打开php文件时解决办法汇总
wampserver安装后,在www文件夹下面写入xx.PHP文件,然后在网页里输入localhost:xx.PHP. 你可能会遇到如下三种情况: 情形一:网页上显示空白,按F12,出现404的错误. ...
- swoole多进程操作
多个任务同时执行 将顺序执行的任务,转化为并行执行(任务在逻辑上可以并行执行) 比如,我们要对已知的用户数据进行判断,是否需要发送邮件和短信,如果需要发送则发送. 不使用多进程时,我们首先判断是否发送 ...
- 团体程序设计天梯赛L1-019 谁先倒 2017-03-22 17:35 33人阅读 评论(0) 收藏
L1-019. 谁先倒 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳 ...