KVM -> 虚拟机管理&console登录_02
1、KVM虚拟机管理操作
virsh命令常用参数总结
1、开机关机:
virsh list (只可以查看运行的虚拟机)
virsh list --all (全部都可以查看)
开机与关机:
virsh start centos7 //开启虚拟机centos7
virsh destroy centos7 //关闭电源模式关闭虚拟机centos7,如果跑了数据库,不允许使用destroy关闭。
virsh shutdown centos7 //正常关机
2、配置文件&备份恢复
- 磁盘文件 例: centos7.raw -> 在虚拟机的安装目录
- 配置文件 例: centos7.xml -> /etc/libvirt/qemu/centos7.xml
1、当第一次安装完成后,查看虚拟机的安装目录如下,centos2.raw是磁盘文件。
2、虚拟机的默认配置文件,/etc/libvirt/qemu/
3、备份配置文件,virsh dumpxml centos7 > centos7.xml(关机时备份)
配置文件内容如下:
[root@kvm01 opt]# virsh dumpxml web-49 <domain type='kvm' id='1'> <name>web-49</name> ----------------------------- 虚拟机名字 <uuid>3eebab41-4355-4d7e-8532-d7a0bbb6d7b0</uuid> <memory unit='KiB'>1048576</memory> ---------------------- 内存大小 <currentMemory unit='KiB'>1048576</currentMemory> <vcpu placement='static'>1</vcpu> ------------------- Cpu核心 <resource> <partition>/machine</partition> </resource> <os> <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> </features> <cpu mode='custom' match='exact' check='full'> <model fallback='forbid'>Broadwell</model> <feature policy='disable' name='hle'/> <feature policy='disable' name='rtm'/> <feature policy='require' name='hypervisor'/> <feature policy='disable' name='erms'/> <feature policy='require' name='xsaveopt'/> </cpu> <clock offset='utc'> <timer name='rtc' tickpolicy='catchup'/> <timer name='pit' tickpolicy='delay'/> <timer name='hpet' present='no'/> </clock> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> <pm> <suspend-to-mem enabled='no'/> <suspend-to-disk enabled='no'/> </pm> <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/opt/centos2.raw'/> ------------- 硬盘路径 <backingStore/> <target dev='vda' bus='virtio'/> <alias name='virtio-disk0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </disk> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <backingStore/> <target dev='hda' bus='ide'/> <readonly/> <alias name='ide0-0-0'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> <controller type='usb' index='0' model='ich9-ehci1'> <alias name='usb'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x7'/> </controller> <controller type='usb' index='0' model='ich9-uhci1'> <alias name='usb'/> <master startport='0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0' multifunction='on'/> </controller> <controller type='usb' index='0' model='ich9-uhci2'> <alias name='usb'/> <master startport='2'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x1'/> </controller> <controller type='usb' index='0' model='ich9-uhci3'> <alias name='usb'/> <master startport='4'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x2'/> </controller> <controller type='pci' index='0' model='pci-root'> <alias name='pci.0'/> </controller> <controller type='ide' index='0'> <alias name='ide'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> <controller type='virtio-serial' index='0'> <alias name='virtio-serial0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </controller> <interface type='network'> <mac address='52:54:00:82:75:2f'/> <source network='default' bridge='virbr0'/> <target dev='vnet0'/> <model type='virtio'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <serial type='pty'> <source path='/dev/pts/0'/> <target port='0'/> <alias name='serial0'/> </serial> <console type='pty' tty='/dev/pts/0'> <source path='/dev/pts/0'/> <target type='serial' port='0'/> <alias name='serial0'/> </console> <channel type='unix'> <source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-1-web-49/org.qemu.guest_agent.0'/> <target type='virtio' name='org.qemu.guest_agent.0' state='connected'/> <alias name='channel0'/> <address type='virtio-serial' controller='0' bus='0' port='1'/> </channel> <input type='tablet' bus='usb'> <alias name='input0'/> <address type='usb' bus='0' port='1'/> </input> <input type='mouse' bus='ps2'> <alias name='input1'/> </input> <input type='keyboard' bus='ps2'> <alias name='input2'/> </input> <graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0'> <listen type='address' address='0.0.0.0'/> </graphics> <video> <model type='cirrus' vram='16384' heads='1' primary='yes'/> <alias name='video0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video> <memballoon model='virtio'> <alias name='balloon0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </memballoon> </devices> <seclabel type='none' model='none'/> <seclabel type='dynamic' model='dac' relabel='yes'> <label>+107:+107</label> <imagelabel>+107:+107</imagelabel> </seclabel> </domain>
4、删除虚拟机配置
# 查看 [root@kvm ~]# virsh list --all Id 名称 状态 ---------------------------------------------------- - centos7 关闭 # 删除 [root@kvm ~]# virsh undefine centos7 域 centos7 已经被取消定义 //这是翻译 [root@kvm ~]# virsh list --all Id 名称 状态
删除虚拟机,配置文件会被删除,但是磁盘文件不会删除
5、导入虚拟机,只能恢复配置文件丢失的情况,恢复备份的配置文件
# 导入 [root@kvm ~]# virsh define centos7.xml 定义域 centos7(从 centos7.xml) //翻译内容 # 查看 [root@kvm ~]# virsh list --all Id 名称 状态 ---------------------------------------------------- - centos7 关闭
6、当磁盘文件丢失,恢复如下:
模拟:把磁盘文件改名为7.raw。提示找不到/opt/centos2.raw。
使用: virsh edit centos7(这个是虚拟机的名称) -> 查找 centos2.raw 改成 centos7.raw
注释:用virsh edit 去修改配置文件,有语法检查,如果使用centos7.xml没有语法检测。(修改用edit,自带语法检查)
3、修改虚拟机名称
开机状态下修改会报如下错误:
4、虚拟机挂起与恢复
5、查询虚拟机vnc端口
[root@kvm ~]# virsh vncdisplay centos7 :0 # :0 即 为 5900 端口,以此类推 :1为5901 。
VNC也可以使用短的端口号连接:
6、开机自启与取消开机自启
# 设置 libvirtd 服务开机自启动。
[root@kvm ~]# systemctl is-enabled libvirtd.service
enabled
设置宿主机开机虚拟机在其他
[root@kvm ~]# virsh autostart centos7
域 clsn7标记为自动开始 //翻译英文内容
# 实质为创建软连接
[root@kvm ~]# ll /etc/libvirt/qemu/autostart/centos7.xml
lrwxrwxrwx 1 root root 27 1月 22 12:17 /etc/libvirt/qemu/autostart/centos7.xml -> /etc/libvirt/qemu/centos7.xml
取消开机自启动
[root@kvm ~]# virsh autostart --disable centos7
域 clsn7取消标记为自动开始 //翻译英文内容
有软连接,就会开机自启虚拟机登录
2、kvm虚拟机console登录
注:就是执行 virsh console 的时候,宿主机可以控制虚拟机。
如果是10网段想远程控制172网段的宿主机,是无法使用VNC的(10网段只能访问10网段的,不可以访问172网段)。那这个时候我们有修改宿主机的需求,就可以使用console登录的方式。
通过连接跳板机,再通过跳板机,远程控制宿主机。
KVM宿主机:就是在宿主机上会运行大量的虚拟机,我们称之为KVM宿主机。
CentOS 7.X 版本console登录
1、使用ssh 远程登录虚拟机:ssh root@虚拟机的Ip地址。
2、 查看登录的ip
3、查看宿主机,也有相同的ip地址,因为有这块网卡的存在,才能使用ssh远程连接虚拟机。
该操作仅限centos7
centos7的kvm虚拟机: grubby --update-kernel=ALL --args="console=ttyS0,115200n8" -----> 使用命令直接插入
可以使用命令插入,也可以进入配置文件修改,(修改配置文件的100行,和114行,加入 : console=ttyS0,115200n8)
使用diff命令比较
重启完成后reboot,使用virsh console 连接虚拟机。
[root@kvm ~]# virsh console centos7 (虚拟机名字)
连接到域 centos7
换码符为 ^]
CentOS Linux 7 (Core)
Kernel 3.10.0-327.el7.x86_64 on an x86_64
centos7 login: root
Password:
Last login: Mon Jan 22 12:24:48 from 192.168.122.1
[root@clsn7 ~]# w
12:26:11 up 0 min, 1 user, load average: 0.09, 0.03, 0.01
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root ttyS0 12:26 3.00s 0.02s 0.01s w
注:ttys0是终端的名字,和配置时候的参数一致,后面的内容为频率。(串口的频率,交换机的一些内容)
CentOS 6.X 版本console登录
作业1:实现centos6的kvm虚拟机,console命令行登录?
安装一台centos6的kvm虚拟机:需要在/data目录下导入6.9的镜像
virt-install --virt-type kvm --os-type=linux --os-variant rhel6 \
--name clsn6 --memory 1124 --vcpus 1 \
--disk /data/clsn6/clsn-6.raw,format=raw,size=10 \
--cdrom /data/CentOS-6.9-x86_64-bin-DVD1.iso \
--network network=default --graphics vnc,listen=0.0.0.0,port=5901 \
--noautoconsole
新安装一台虚拟机后,是无法通过virsh console 命令连入虚拟机中的,这时我们需要开启虚拟机的console功能。
以下操作都在虚拟机中进行:
1、添加ttyS0的许可,允许root登陆:
[root@clsn6 ~]# echo "ttyS0" >> /etc/securetty
2、编辑/etc/grub.conf中加入console=ttyS0
在该文件的第16行。kernel选项后添加
[root@clsn6 ~]# sed -i '/\tkernel/s#.*#& console=ttyS0#g' /etc/grub.conf
[root@clsn6 ~]# sync # 同步配置到 /boot/grub/grub.conf
[root@clsn6 ~]# cat -n /etc/grub.conf
1 # grub.conf generated by anaconda
2 #
3 # Note that you do not have to rerun grub after making changes to this file
4 # NOTICE: You have a /boot partition. This means that
5 # all kernel and initrd paths are relative to /boot/, eg.
6 # root (hd0,0)
7 # kernel /vmlinuz-version ro root=/dev/vda3
8 # initrd /initrd-[generic-]version.img
9 #boot=/dev/vda
10 default=0
11 timeout=5
12 splashimage=(hd0,0)/grub/splash.xpm.gz
13 hiddenmenu
14 title CentOS 6 (2.6.32-696.el6.x86_64)
15 root (hd0,0)
16 kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=48532582-c271-4c0a-b55f-395fe16cd8aa rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet console=ttyS0
17 initrd /initramfs-2.6.32-696.el6.x86_64.img
3、编辑/etc/inittab
在最后一行加入内容 S0:12345:respawn:/sbin/agetty ttyS0 115200
[root@clsn6 ~]# echo 'S0:12345:respawn:/sbin/agetty ttyS0 115200' >>/etc/inittab
4、以上操作都完成后,重启虚拟机
[root@clsn6 ~]# reboot
以下操作在kvm宿主机上执行:
1、检查虚拟机的状态
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
11 clsn7 running
21 clsn6 running
2、进行连接测试
[root@kvm ~]# virsh console clsn6
连接到域 clsn6
换码符为 ^] # 注:退出virsh console连接的方法,使用组合键Ctrl+]即可
CentOS release 6.9 (Final)
Kernel 2.6.32-696.el6.x86_64 on an x86_64
clsn6 login: root
Password:
Last login: Mon Jan 22 05:44:25 on ttyS0
[root@clsn6 ~]# who
root ttyS0 2018-01-22 05:50
# 登陆成功,查看登陆接口为之前设置的ttyS0