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 ...
随机推荐
- Shder中实现TintColor
[Shder中实现TintColor] TintColor实现上相当于一个滤镜,若TintColor的R为0,则原图的R通道颜色应该为0.基于此,实现TintColor很容易,原图颜色直接乘以Tint ...
- 46. Permutations (Back-Track,Sort)
Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...
- 使用ES(elasticsearch) 搜索引擎
介绍 https://blog.csdn.net/andyzhaojianhui/article/details/75195296 创建语句 { "company":{ &quo ...
- xen虚拟机管理命令
#xen虚拟机管理命令 xm list:所有已知的虚拟机列表 xm create:启动一个非托管的虚拟机 xm top:提供所有虚拟机的状态概貌 xm console:打开控制台管理虚拟机 xm ne ...
- 6-Ubuntu与Windows不能相互复制
在安装Ubuntu系统后发现与Windows系统的文件不能相互复制,网上查了很多教程,发现都是不能用的,能实现的方法如下所示: 第一步: sudo apt-get autoremove open-vm ...
- Luogu 3321 [SDOI2015]序列统计
BZOJ 3992 点开这道题之后才发现我对原根的理解大概只停留在$998244353$的原根是$3$…… 关于原根: 点我 首先写出$dp$方程,设$f_{i, j}$表示序列长度为$i$当前所有数 ...
- How to setup Laravel Homestead in Windows
How to setup Laravel Homestead in Windows by JBorbón 17. March 2017 PHP 8 Developing with PHP u ...
- ASP.NET Web API之消息[拦截]处理(转)
出处:http://www.cnblogs.com/Leo_wl/p/3238719.html 标题相当难取,内容也许和您想的不一样,而且网上已经有很多这方面的资料了,我不过是在实践过程中作下记录.废 ...
- 6 scrapy框架之分布式操作
分布式爬虫 一.redis简单回顾 1.启动redis: mac/linux: redis-server redis.conf windows: redis-server.exe redis-wi ...
- 超级详细的解决方法 (CentOS7) :永久修改 mysql read-only 问题 could not retrieve transation read-only status server
一.查看mysql的事物隔离级别 SHOW VARIABLES LIKE '%iso%'; 二.临时修改事物隔离级别 SET GLOBAL tx_isolation='READ-COMMITTED'; ...