1.virsh基本管理操作
列出当前正在运行的虚拟机
查看虚拟机的信息
管理虚拟机
设置虚拟机开机自动运行
1.1 virsh基本操作
查看kvm节点(服务器)信息
] virsh nodeinfo
列出当前正在运行的虚拟机
]# virsh list (--all)
列出虚拟网络
] virsh net-list (--all)
查看指定虚拟机信息
] virsh dominfo 虚拟机名称
查看虚拟机网卡
] virsh domiflist web1
接口 类型 源 型号 MAC
-------------------------------------------------------
vnet0 network private1 virtio 52:54:00:79:51:ca
vnet1 network private2 virtio 52:54:00:bf:38:55
vnet2 network public1 virtio 52:54:00:4f:47:65
vnet3 network public2 virtio 52:54:00:e1:70:e7
接口:虚拟网卡
源:虚拟交换机
运行 | 重启 | 关闭指定虚拟机
] virsh start | reboot | shudown xxx
强制关闭指定虚拟机
] virsh destroy xxx
设置虚拟机开机自动运行
] virsh autostart (--disable) xxx
连接本地虚拟机管理系统
] virsh -c qemu:///system
连接远程虚拟机管理系统
] virsh -c qemu+ssh://root@176.233.6.40:22/system
2.qemu-img基本操作管理
创建一个新的镜像盘文件
使用后端模板文件创建一个新的镜像盘文件
查看镜像盘文件的信息
2.1 创建一个新的镜像盘文件
qemu-img命令格式:qemu-img 命令 参数 块文件名称 大小
]# qemu-img create -f qcow2 disk.img 50G //qcow2为创建的格式
Formatting 'disk.img', fmt=qcow2 size=53687091200 encryption=off cluster_size=65536 lazy_refcounts=off
2)使用后端模板文件创建一个新的镜像盘文件
备注:-b使用后端模板文件
]# qemu-img create -b disk.img -f qcow2 disk1.img
Formatting 'disk1.img', fmt=qcow2 size=53687091200 backing_file='disk.img' encryption=off cluster_size=65536 lazy_refcounts=off
3)使用后端模板文件创建一个16G的镜像盘文件
]# qemu-img create -b disk.img -f qcow2 disk2.img 16G
Formatting 'disk2.img', fmt=qcow2 size=17179869184 backing_file='disk.img' encryption=off cluster_size=65536 lazy_refcounts=off
2.2 查看镜像文件的信息
]# qemu-img info disk1.img
image: disk1.img
file format: qcow2
virtual size: 50G (53687091200 bytes)
disk size: 196K
cluster_size: 65536
backing file: disk.img
Format specific information:
compat: 1.1
lazy refcounts: false
3.创建一个虚拟网络(虚拟交换机)
创建一个名为vbr的虚拟网络
设置vbr的ip为192.168.1.254
配置vbr虚拟网络的dhcp分配地址范围100-200
启动vbr虚拟网络并用ifconfig验证
设置vbr虚拟网络开机自启动
3.1 创建一个名为vbr的虚拟网络(虚拟交换机)
]# vim /etc/libvirt/qemu/networks/vbr.xml
<network>
<name>vbr</name> //vbr为虚拟网络的名字
<uuid>eb48e4fa-01e7-4734-87ef-24e3d29633d1</uuid>
<forward mode='nat'/>
<bridge name='vbr' stp='on' delay='0'/>
<mac address='52:54:00:77:01:d6'/>
<domain name='vbr'/>
<ip address='192.168.1.254' netmask='255.255.255.0'> //ip为192.168.1.254
<dhcp>
<range start='192.168.1.100' end='192.168.1.200'/> //ip范围是100-200
</dhcp>
</ip>
</network>
3.2 启动vbr虚拟网络并用ifconfig验证
]# virsh net-define /etc/libvirt/qemu/networks/vbr.xml //定义vbr虚拟网络
]# virsh net-start vbr //启动vbr虚拟网络,ifconfig可见
]# ifconfig vbr //igconfig验证
vbr: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.254 netmask 255.255.255.0 broadcast 192.168.1.255
ether 52:54:00:b7:1c:10 txqueuelen 1000 (Ethernet)
RX packets 2460 bytes 176958 (172.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1948 bytes 532542 (520.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
3.3 设置vbr虚拟网络开机自启动
]# virsh net-autostart vbr
]# virsh net-list --all
]# virsh 进入虚拟机管理系统
]# net-list 查看虚拟网络
]# net-define vbr.xml 创建虚拟网络(必须有xml文件)
]# net-undefine vbr 删除虚拟网络
]# net-start vbr 启动虚拟网络
]# net-destroy vbr 停止虚拟网络
]# net-edit vbr 修改vbr网络配置
]# net-autostart vbr 设置vbr网络开机自启
4.xml管理
4.1 导出一个虚拟机的xml配置文件
编辑xml文件
重新定义虚拟机
删除此虚拟机
导出虚拟机xml的配置文件
1)查看xml配置文件
]# cd /etc/libvirt/qemu/
qemu]# virsh dumpxml node1 (必须有node1这个虚拟机)
qemu]# virsh dumpxml node1 > node.xml
//导出虚拟机node1的配置文件为node.xml
qemu]# ls
node.xml
virsh命令: virsh edit 虚拟机名
备注:可以修改name,memory,disk、network等字段
qemu]# virsh edit node1
<domain type='kvm'>
<name>node1</name> //node1为虚拟机的名称,可以随意修改
<uuid>76d5dc2c-5eef-4e30-8b6c-e58851814f84</uuid> //uuid可以去掉
<memory unit='KiB'>2048000</memory> //内存大小可以调整
<currentMemory unit='KiB'>2048000</currentMemory>
<disk type='file' device='disk'>
<source file='/var/lib/libvirt/images/rhel7.2.qcow2'/> //后端盘路径
.. ..
<interface type='network'>
<mac address='52:54:00:91:52:e4'/>
//mac地址和带有address字样的全部去掉
.. ..
4.2 重新定义虚拟机
1)重新定义虚拟机
qemu]# virsh define node1.xml
2)取消定义的虚拟机
qemu]# virsh undefine node1
5.安装虚拟机
配置一个网络yum,并安装一个虚拟机
制作一个虚拟机模板,包括配置yum,网卡等
5.1 配置网络yum源
]# yum -y install vsftpd
]# vim /etc/vsftpd/vsftpd.conf
listen=YES
listen_ipv6=NO
]# systemctl restart vsftpd
]# mkdir /var/ftp/centos
]# mount /iso/CentOS-7-x86_64-DVD-1708.iso /var/ftp/centos/
mount: /dev/loop1 写保护,将以只读方式挂载
]# vim /etc/yum.repos.d/dvd.repo
[dvd]
name=dvd
enabled=1
gpgcheck=0
]# yum clean all
]# yum repolist
]# cd /var/lib/libvirt/images/
images]# qemu-img create -f qcow2 node.qcow2 16G
Formatting 'node.qcow2',fmt=qcow2 size=17179869184 encryption=off cluster_size=65536 lazy_refcounts=off
5.2 安装一个虚拟机
]# virt-manager //真机操作,启动virt-manager
使用virt-manager软件选择新建虚拟机如图-1所示:
图-1
选择安装方式如图-2所示:
图-2
选择内存,cpu和自定义存储如图-3所示:
图-3
选择虚拟机名称和网络如图-4所示:
图-4
选择分区和KDUMP如图-5所示:
图-5
选择创建分区如图-6所示:
图-6
选择standard Partition如图-7所示:
创建一个根分区如图-8所示:
图-8
5.3 制作一个虚拟机模板(新建的虚拟机)
1)禁用selinux
]# vim /etc/selinux/config
SELINUX=disabled
2)卸载防火墙与NetworkManager
]# yum -y remove NetworkManager-* firewalld-* python-firewall
3)配置yum源
]# vim /etc/yum.repos.d/dvd.repo
[dvd]
name=dvd
enabled=1
gpgcheck=0
]# yum clean all
]# yum repolist
安装常用软件包
]# yum -y install net-tools vim-enhanced bridge-utils psmisc lrzsz lftp
4)导入公钥
注意:把/etc/yum.repos.d/dvd.repo的gpgcheck=0改成gpgcheck=1
]# lftp 192.168.1.254
254:~> cd centos
254:/centos> get RPM-GPG-KEY-CentOS-7
254:/centos> exit
]# rpm --import RPM-GPG-KEY-CentOS-7
5)配置网卡
]# yum -y install net-tools(安装ifconfig命令)
]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"(原来是name,删除uuid mac)
ONBOOT="yes"
IPV6INIT="no"
TYPE="Ethernet"
BOOTPROTO ="dhcp"
]# systemctl restart network
6)禁用空路由
[root@localhost ~]# vim /etc/sysconfig/network
NOZEROCONF="yes"
7) 更换UUID
]# vim /etc/fstab 修改为
/dev/vda1 / xfs defaults 0 0
8)添加console配置(替换,禁用UUID,改称系统设备名)
]# vim /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial --unit=1 --speed=115200"
GRUB_CMDLINE_LINUX="biosdevname=0 net.ifnames=0 console=ttyS0,115200n8"
GRUB_DISABLE_RECOVERY="true"
GRUB_DISABLE_LINUX_UUID="true"
GRUB_ENABLE_LINUX_LABEL="true"
9)重新生成grub.cfg
]# grub2-mkconfig -o /boot/grub2/grub.cfg
]# cat /etc/grub2.cfg(不再是uuid了)
...root=/dev/vda1...
10)安装扩展分区软件
]# yum install -y cloud-utils-growpart
11)第一次开机自动扩容(弹性扩容磁盘)
]# /usr/bin/growpart /dev/vda 1
]# /usr/sbin/xfs_growfs /
12)关闭虚拟机后执行信息清理工作(日志等)
]# virt-sysprep -d centos7.0
//真机上面操作,centos7.0为虚拟机名称
13) 查看装机之后的镜像盘
]# du -sh /var/lib/libvirt/images/node.qcow2
1.2G/var/lib/libvirt/images/node.qcow2
]# virsh undefine centos7(可以不要了,系统在node.qcow2里,要保留centos7.0.xml)
6. 离线访问虚拟机问题
利用xml文件生成一个新的虚拟机
利用guestmount实现离线访问虚拟机
6.1 用xml生成一个新的虚拟机
]# cd /etc/libvirt/qemu/
qemu]# cp centos7.0.xml local.xml
qemu]# vim local.xml
<domain type='kvm'>
<name>local</name> //修改名字
<memory unit='KiB'>2048000</memory> //修改内存
<currentMemory unit='KiB'>2048000</currentMemory>
...
<source file='/var/lib/libvirt/images/local.img'/> //img文件位置
注意:除这些外还要把mac地址删掉,带address字样的全部删除
]# cd /var/lib/libvirt/images/
images]# qemu-img create –b node.qcow2 –f qcow2 local.img
images]# virsh define /etc/libvirt/qemu/local.xml
images]# virsh start local
images]# virsh console local
6.2 guestmount实现离线访问
基本用法:guestmount -a 虚拟机磁盘路径 -i /挂载点
-a:指定虚拟磁盘
-i:挂载点
]# mkdir /mnt/kdisk
]# guestmount -a node.qcow2 -i /mnt/kdisk
]# cd /mnt/kdisk
kdisk]# ls
bin home media opt sbin tmp
boot lib misc proc selinux usr
#####################################
重点知识整理:
1. 虚拟化所支持的内部指令集:VMX--CPU支持虚拟化
2. 虚拟化主要厂商及产品
VMware VMware Workstation Vsphere esxi
Microsoft VirtualPC,Hyper-V(windows 虚拟化)
RedHat KVM(只是单台物理机虚拟化技术平台,虚拟机集群管理需要openstack,CPU支持虚拟化),RHEV(收费)
Citrix Xen(性能好,内核改动太多,安装麻烦)
Oracle Oracle VM VIirtualBox(安装包很小,功能没有kvm强大)
3. 虚拟化平台KVM/QEMU/LIBVIRTD
KVM
Linux 内核安装的一个模块,提供CPU和内存的访问支持(使用真机的CPU和内存创建虚拟机)
QEMU:虚拟化的仿真工具,通过ioctl和kvm交互完成对硬件的虚拟化支持(虚拟周边硬件,鼠标、网卡等)。
Libvirt:虚拟机启动需要很多命令(如启动总线、地址等),Libvirt一个对虚拟化管理的接口和工具,提供用户端程序virsh,virt-install,virt-manager,virt-view与用户交互(用户接口,将QEMU指令打包封装简化)。
4. 安装虚拟化服务器平台必备软件
kvm:已经集成在内核
qemu-kvm:为kvm提供底层仿真支持
libvirt-daemon:libvirtd守护进程,管理虚拟机
libvirt-client:用户端软件,提供客户端管理指令/图形管理工具virt-manager
libvirt-daemon-driver-qemu:libvirt连接qemu驱动
virt-install 系统安装工具
virt-manager 图形管理工具
virt-v2v 虚拟机迁移工具
virt-p2v 物理机迁移工具
虚拟化平台安装:
]# yum -y install qemu-kvm libvirt-daemon libvirt-client libvirt-daemon-driver-qemu
]# systemctl restart libvirtd
5. 虚拟机组成
KVM:内核虚拟化模块
QEMU:系统设备仿真
LIBVIRT:虚拟机管理程序
*.xml:虚拟机配置声明文件: /etc/libvirt/qemu/
*.img:磁盘镜像文件,虚拟机的硬盘: /var/lib/libvirt/images/
6.虚拟机通信
虚拟机之间通信:设置虚拟交换机,每个虚拟机连接虚拟交换机
虚拟机连外网:虚拟交换机连接真机交换机
7.虚拟机磁盘镜像(后端盘)文件格式
RAW:I/O效率高,只用空间大,不支持压缩、快照、后端盘复用
QCOW2:KVM默认,I/O效率较高,占用空间小,支持压缩、快照、后端盘复用
管理命令:qemu-img:create convert info snapshot
8.COW技术原理
Copy On Write,写时复制
直接映射原始盘数据内容
当原始盘的旧数据有修改时,在修改之前将旧数据存入前端盘
对前端盘的修改不会写到原始盘
##########################
- KVM之virsh管理虚拟机网卡配置
虚拟机网卡管理 virsh attach-interface 添加网卡: [root@ubuntu ~]# virsh domiflist CentOS-V6.5.23-server01 Interf ...
- KVM之virsh管理虚拟机内存
调整内存 virsh setmem 命令帮助: [root@ubuntu ~]# virsh setmem --help NAME setmem - change memory allocation ...
- KVM之virsh管理虚拟机CPU
查看虚拟机CPU数量配置 [root@ubuntu ~]# virsh vcpucount centos_server01 maximum config 2 maximum live 2 curren ...
- KVM之virsh管理虚拟机硬盘配置
新建raw格式虚拟盘 [root@ubuntu ~]# qemu-img create -f raw /data/raw/disk02.raw 5G Formatting '/data/raw/dis ...
- KVM之virsh管理Storage pool
创建基于文件夹的存储池 基于文件夹的存储池: [root@ubuntu01 ~]# mkdir /data/vm_pool [root@ubuntu01 ~]# virsh pool-create-a ...
- 菜鸟玩云计算之十五:在Ubuntu上创建和管理Redhat虚拟机
菜鸟玩云计算之十五:在Ubuntu上创建和管理Redhat虚拟机 chedou@hgdb.net 虚拟机给工作带来巨大的便利,不仅仅体现在资源的按需使用,而且配置的迁移特别方便.本文将使用Ubuntu ...
- KVM虚拟机高级设置——08 管理远程虚拟机
在搭建KVM环境——07 带GUI的Linux上安装KVM图形界面管理工具介绍了KVM图形化管理工具,这款工具除了可以管理本地KVM虚拟外,还可以管理远程KVM虚拟机. 输入113机器密码 输入yes ...
- 使用命令virsh管理网络设备,创建桥设备 和 使用virt-manager创建虚拟机
# 1:查看网卡接口 virsh iface-list Name State MAC Address ------------------------------------------------- ...
- 五十四.自定义镜像及仓库、持久化存储 、 Docker网络架构
1. 制作自定义镜像(base基础镜像,搭建共性环境) 基于centos镜像使用commit创建新的镜像文件 基于centos镜像使用Dockerfile文件创建一个新的镜像文件 1.1 使用镜像 ...
随机推荐
- VMware安装windows7系统
1.进入VMware系统,选择创建新的虚拟机 2.进入安装页面,选择自定义安装 3.选择虚拟机硬件兼容性,选择与自己软件相匹配的硬件兼容性 4.选择下一步后,选择稍后安装操作系统 5.选择客户机操作系 ...
- Python基础 第5章 条件、循环及其他语句(2)
6. 简单推导 列表推导,是一种从其他列表创建列表的方式,其原理类似于for循环. list1 = [x * x for x in range(10)] print(list1) 结果: [0, 1, ...
- java字节和字符的区别
字节: 1.bit=1 二进制数据0或1 2.byte=8bit 1个字节等于8位 存储空间的基本计量单位 3.一个英文字母=1byte=8bit 1个英文字母是1个字节,也就是8位 4.一个汉字 ...
- 剑指Offer(4)——替换空格
题目: 请实现一个函数,把字符串中的每个空格替换成"%20".例如输入“We are happy.”,则输出“We%20are%20happy.”. 思路: 如果按照顺序从前往后依 ...
- (三)使用Intent在活动中穿梭:显式和隐式Intent
一.显式Intent @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstan ...
- taglist and nerdtree
函数:function! s:Tlist_Window_Exit_Only_Window()中的winbunr(2)改为winbunr(3),即只剩2个窗口时关闭,考虑到2个窗口肯定是同时存在,所以这 ...
- JS基础_this
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- session过期,登录页面嵌套问题解决
项目主页是框架模式时,如果登录后长时间没有活动(操作),存储在session中的登录信息过期了,这时再去进行操作时,就会出现登录页面嵌套的问题,怎么解决呢? 这里介绍一种方法,只需要加上一段javas ...
- 取出List<Map<String,Object>>里面Map的key:value值
1.取出Map其中一个属性的值 Map map = new HashMap(); map.put("key1", "value1"); map.put(&quo ...
- 【翻译】--19C Oracle 安装指导
18C新功能 1.简化的基于镜像的Oracle数据库安装 从18C开始,Oracle可以作为镜像文件来下载和安装,必须解压缩镜像文件到ORACLE_HOME目录,然后执行runInst ...