虚拟化——KVM
一、虚拟化介绍
1.1 了解虚拟化
VMware Workstation就是虚拟化;
虚拟化简单讲,就是把一台物理计算机虚拟成多台逻辑计算机,每个逻辑计算机里面可以运行不同的操作系统,相互不受影响,这样就可以充分利用硬件资源;
关键词Hypervisor(VMM) 虚拟机管理器;
虚拟化技术分为全虚拟化和半虚拟化
- 早期的CPU硬件不支持虚拟化,虚拟机上的操作系统(guestos)要想使用cpu资源,需要通过VMM来翻译指令,这个过程比较耗费资源,这种虚拟化技术叫做全虚拟化(VMware Workstation)
- 半虚拟化技术通过修改guestos内核,让guestos可以直接使用CPU资源,而不需要翻译指令了,从而节省了资源,但修改内核比较鸡肋(XEN) 后续cpu厂商直接支持虚拟化,不需要通过VMM翻译指令了,无所谓半虚拟化和全虚拟化
参考 http://itoedr.lofter.com/post/1472ba_69c62fa
1.2 常见虚拟化软件
- VMware系列:VMware workstation、VMware vsphere(VMware esxi)、VMware Fusion(Mac)
- Xen 开源 半虚拟化
- XenServer 商业,厂商Ctirx,基于Xen的
- KVM 开源 基于linux内核模块
- Hyper-V 商业,厂商微软
- Openvz 开源 基于linux 虚拟机和宿主机共用一个内核
- VirtualBox 开源 Sun公司开发 Oracle收购Sun
参考资料:http://developer.huawei.com/ict/forum/thread-23385-1-1.html
1.3 虚拟化的架构
参考资料: http://developer.huawei.com/ict/forum/thread-23385-1-1.html
二、KVM介绍
- KVM是以色列初创公司Qumranet开发,2008年9月RedHat公司收购了Qumranet
- KVM是Linux内核的一个模块,它把Linux内核变成了一个Hypervisor
- KVM是完全开源的,RedHat基于KVM的虚拟化解决方案叫做RHEV
- KVM在Linux操作系统里面以进程的形式出现,由标准的Linux调度程序进行调度,这使得KVM能够使用Linux内核的已有功能;
- 只有一个KVM内核模块还不能实现虚拟化的全部功能,就好比操作系统只有内核还不能成为一个完整的操作系统一样;
- QEMU是一个开源的虚拟化软件,纯软件,可以虚拟化所以的硬件,性能不强
- KVM基于QEMU开发了一个能够运行在用户空间的工具QEMU-KVM
- 磁盘、网络设备等都是通过QEMU-KVM这个工具模拟出来的
- KVM和QEMU-KVM通信是通过/dev/kvm实现的
- libvirt是用来管理KVM虚拟机的API,其命令为virsh
KVM的架构图
三、Centos7上安装KVM
试验环境,windows上安装VMware,再安装CentOS系统,在上面再安装KVM,然后再KVM上安装CentOS;
新增一个40G磁盘,内存设为4G;
勾选下列设置,开启虚拟化设置;注意VMware 10这个版本不行,需要更新一下;
查看此机器是否支持虚拟化;vmx是英特尔CPU,svm是AMD的CPU
[root@ying06 ~]# grep -i 'vmx\|svm' /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm 3dnowprefetch tpr_shadow vnmi ept vpid fsgsbase smep arat
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm 3dnowprefetch tpr_shadow vnmi ept vpid fsgsbase smep arat
把新增的40G磁盘的格式化,挂载;
[root@ying06 ~]# fdisk -l
磁盘 /dev/sda:32.2 GB, 32212254720 字节,62914560 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000be1b7
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 411647 204800 83 Linux
/dev/sda2 411648 8222719 3905536 82 Linux swap / Solaris
/dev/sda3 8222720 62914559 27345920 83 Linux
磁盘 /dev/sdb:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
[root@ying06 ~]# mkfs.ext4 /dev/sdb //ext4格式
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdb is entire device, not just one partition!
无论如何也要继续? (y,n) y
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
2621440 inodes, 10485760 blocks
524288 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2157969408
320 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[root@ying06 ~]# blkid /dev/sdb //查看磁盘是否格式化
/dev/sdb: UUID="2bf24443-9435-48dd-a59a-a72b7272d2df" TYPE="ext4"
创建挂载目录,并挂载;
[root@ying06 ~]# mkdir /kvm_data
[root@ying06 ~]# mount /dev/sdb /kvm_data/^C
[root@ying06 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 27G 2.9G 24G 11% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.7M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 197M 113M 84M 58% /boot
tmpfs 379M 0 379M 0% /run/user/0
[root@ying06 ~]# mount /dev/sdb /kvm_data/
[root@ying06 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 27G 2.9G 24G 11% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.7M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 197M 113M 84M 58% /boot
tmpfs 379M 0 379M 0% /run/user/0
/dev/sdb 40G 49M 38G 1% /kvm_data
写入挂载磁盘的信息,让其开机启动
[root@ying06 ~]# vim /etc/fstab
/dev/sdb /kvm_data ext4 defaults 0 0 //增加此行配置
关闭防火墙,和关闭iptables规则;
[root@ying06 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
[root@ying06 ~]# getenforce
Disabled
此时安装KVM;
[root@ying06 ~]# yum install -y virt-* libvirt bridge-utils qemu-img
四、配置网卡
创建ifcfg-br0 网卡配置信息;
[root@ying06 network-scripts]# cp ifcfg-ens33 ifcfg-br0
[root@ying06 network-scripts]# vim ifcfg-br0
TYPE=b=Bridge //桥接
BOOTPROTO=none
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.112.152
NETMASK=255.255.255.0
PREFIX=24
GATEWAY=192.168.112.2
DNS1=119.29.29.29
DNS1=8.8.8.8
把原来的网卡连接到br0
[root@ying06 network-scripts]# vim ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=none
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0
重启网络,bro网卡生效;
[root@ying06 network-scripts]# systemctl restart network
[root@ying06 network-scripts]#
[root@ying06 network-scripts]# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.112.152 netmask 255.255.255.0 broadcast 192.168.112.255
inet6 fe80::20c:29ff:fe52:d6f4 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:52:d6:f4 txqueuelen 1000 (Ethernet)
RX packets 28 bytes 1886 (1.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 25 bytes 2406 (2.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 00:0c:29:52:d6:f4 txqueuelen 1000 (Ethernet)
RX packets 329741 bytes 478510623 (456.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 40478 bytes 4197035 (4.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
检查KVM模块是否加载:lsmod|grep kvm
[root@ying06 ~]# lsmod|grep kvm
kvm_intel 170086 0
kvm 566340 1 kvm_intel
irqbypass 13503 1 kvm
启动libvirtd服务
[root@ying06 ~]# systemctl start libvirtd
[root@ying06 ~]# ps aux |grep libvirtd
root 5092 1.9 0.3 700156 14624 ? Ssl 22:30 0:00 /usr/sbin/libvirtd
root 5246 0.0 0.0 112720 984 pts/1 S+ 22:30 0:00 grep --color=auto libvirtd
[root@ying06 ~]# ps aux |grep libvirtd
root 5092 0.7 0.3 700156 14624 ? Ssl 22:30 0:00 /usr/sbin/libvirtd
root 5248 0.0 0.0 112720 984 pts/1 R+ 22:30 0:00 grep --color=auto libvirtd
查看桥接网卡信息
[root@ying06 ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c2952d6f4 no ens33
virbr0 8000.5254003470ef yes virbr0-nic
五、创建虚拟机安装
把之前下载的CentOS官方镜像,放在/tmp/下,因为等下配置时候,需要加载它;
[root@ying06 tmp]# ls /tmp/CentOS-7-x86_64-DVD-1708.iso
/tmp/CentOS-7-x86_64-DVD-1708.iso
用命令安装;
[root@ying06 tmp]# virt-install --name=feng01 --memory=512,maxmemory=1024 --vcpus=1,maxvcpus=2 --os-type=linux --os-variant=rhel7 --location=/tmp/CentOS-7-x86_64-DVD-1708.iso --disk path=/kvm_data/feng01.img,size=10 --bridge=br0 --graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0"
命令解释:
• virt-install:安装指令; --name=feng01 :指定虚拟机的名称; --memory=512,maxmemory=1024 : 定义虚拟机内存大小512M,最大为1024M,可以热调节内存; --vcpus=1,maxvcpus=2 :定义cpu核心为1个,最大2个; --os-type=linux :定义操作系统为linux; --os-variant=rhel7 : 指定系统版本号; --location=/tmp/CentOS-7-x86_64-DVD-1708.iso :指定安装镜像的路径;可以写网络链接 --disk path=/kvm_data/feng01.img,size=10: 虚拟磁盘的路径,大小为10G; --bridge=br0: 定义网络模式为桥接,与宿主机共用一个网段; --graphics=none :定义开启图形,不开启; --console=pty,target_type=serial: 开启终端,以及其属性 --extra-args="console=tty0 console=ttyS0" : 定义终端的属性;
安装后,进行一些语言、密码等配置,就可以进去虚拟机了;
CentOS Linux 7 (Core)
Kernel 3.10.0-693.el7.x86_64 on an x86_64
localhost login: root
密码:
进入虚拟机后,查看IP,需要自动获取IP;dhclient eth0
[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:e1:ec:85 brd ff:ff:ff:ff:ff:ff
[root@localhost ~]# dhclient eth0
[root@localhost ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:e1:ec:85 brd ff:ff:ff:ff:ff:ff
inet 192.168.112.128/24 brd 192.168.112.255 scope global dynamic eth0
valid_lft 1788sec preferred_lft 1788sec
inet6 fe80::5054:ff:fee1:ec85/64 scope link
valid_lft forever preferred_lft forever
[root@localhost ~]# ping www.qq.com
PING https.qq.com (183.3.226.35) 56(84) bytes of data.
64 bytes from 183.3.226.35 (183.3.226.35): icmp_seq=1 ttl=128 time=15.4 ms
64 bytes from 183.3.226.35 (183.3.226.35): icmp_seq=2 ttl=128 time=13.6 ms
64 bytes from 183.3.226.35 (183.3.226.35): icmp_seq=3 ttl=128 time=13.0 ms
--- https.qq.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 13.022/14.040/15.498/1.061 ms
[root@localhost ~]# yum install -y net-tools
此时联网后,用yum安装net-tools,就可以使用ifconfig
[root@localhost ~]# yum install -y net-tools
[root@localhost ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.112.128 netmask 255.255.255.0 broadcast 192.168.112.255
inet6 fe80::5054:ff:fee1:ec85 prefixlen 64 scopeid 0x20<link>
ether 52:54:00:e1:ec:85 txqueuelen 1000 (Ethernet)
RX packets 3411 bytes 13324729 (12.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2921 bytes 164961 (161.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 256 bytes 22272 (21.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 256 bytes 22272 (21.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
查看内存,以及磁盘使用情况;
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 480M 108M 126M 6.6M 245M 208M
Swap: 1.0G 0B 1.0G
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/vda3 8.0G 963M 7.1G 12% /
devtmpfs 487M 0 487M 0% /dev
tmpfs 497M 0 497M 0% /dev/shm
tmpfs 497M 6.6M 490M 2% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/vda1 1014M 119M 896M 12% /boot
tmpfs 49M 0 49M 0% /run/user/0
回到宿主机,使用top命令,可以看到qemu进程,说明kvm就是linux系统的一个进程;
[root@ying06 ~]# top
top - 23:05:57 up 4:57, 1 user, load average: 0.05, 0.12, 0.22
Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3873760 total, 204456 free, 720848 used, 2948456 buff/cache
KiB Swap: 3905532 total, 3905532 free, 0 used. 2827648 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5526 qemu 20 0 1560892 574036 9344 S 0.3 14.8 0:29.05 qemu-kvm
5717 root 20 0 161960 2212 1552 R 0.3 0.1 0:00.07 top
1 root 20 0 43520 3812 2448 S 0.0 0.1 0:02.49 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
查看kvm进程,所以说虚拟机就是系统里面一个进程;
[root@ying06 ~]# ps aux |grep kvm
root 491 0.0 0.0 0 0 ? S< 18:08 0:00 [kvm-irqfd-clean]
qemu 5526 3.9 14.8 1560892 574036 ? Sl 22:54 0:29 /usr/libexec/qemu-kvm -name feng01 -S -machine pc-i440fx-rhel7.0.0,accel=kvm,usb=off,dump-guest-core=off -cpu Westmere-IBRS -m 1024 -realtime mlock=off -smp 1,maxcpus=2,sockets=2,cores=1,threads=1 -uuid c11da007-5972-4bad-8380-0d04e46d9fa1 -display none -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-2-feng01/monitor.sock,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=delay -no-hpet -no-shutdown -global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 -boot strict=on -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x4.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x4.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x4.0x2 -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x5 -drive file=/kvm_data/aminglinux01.img,format=qcow2,if=none,id=drive-virtio-disk0 -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -drive if=none,id=drive-ide0-0-0,readonly=on -device ide-cd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 -netdev tap,fd=26,id=hostnet0,vhost=on,vhostfd=28 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:e1:ec:85,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -chardev socket,id=charchannel0,path=/var/lib/libvirt/qemu/channel/target/domain-2-feng01/org.qemu.guest_agent.0,server,nowait -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=org.qemu.guest_agent.0 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7 -msg timestamp=on
root 5535 0.0 0.0 0 0 ? S 22:54 0:00 [kvm-pit/5526]
root 5748 0.0 0.0 112720 984 pts/1 R+ 23:07 0:00 grep --color=auto kvm
六、虚拟机管理
- 查看虚拟机列表,只能看到运行的虚拟机:virsh list
[root@ying06 ~]# virsh list
Id 名称 状态
----------------------------------------------------
2 feng01 running
- 查看虚拟机列表,包括未运行的虚拟机: virsh list --all
[root@ying06 ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
2 feng01 running
[root@ying06 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 27G 7.8G 19G 30% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.7M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 197M 115M 83M 59% /boot
tmpfs 379M 0 379M 0% /run/user/0
/dev/sdb 40G 1.3G 36G 4% /kvm_data
[root@ying06 ~]# ls /kvm_data/ //磁盘位置
aminglinux01.img lost+found
- 关闭虚拟机:virsh shutdown feng01
[root@ying06 kvm_data]# virsh shutdown feng01
域 feng01 被关闭
[root@ying06 kvm_data]# virsh list --all
Id 名称 状态
----------------------------------------------------
- feng01 关闭
- 强制停止,类似stop :virsh destroy feng01
- 彻底销毁虚拟机,会删除虚拟机配置文件: virsh undefine feng01
- 开启虚拟机: virsh start feng01
[root@ying06 kvm_data]# virsh start feng01
域 feng01 已开始
[root@ying06 kvm_data]# virsh list --all
Id 名称 状态
----------------------------------------------------
4 feng01 running
- 进入指定虚拟机:virsh console feng01
[root@ying06 kvm_data]# virsh console feng01
连接到域 feng01
换码符为 ^]
CentOS Linux 7 (Core)
Kernel 3.10.0-693.el7.x86_64 on an x86_64
localhost login:
- 查看虚拟机的配置文件: ls /etc/libvirt/qemu
[root@ying06 ~]# ls /etc/libvirt/qemu
feng01.xml networks
[root@ying06 ~]# ls /etc/libvirt/qemu/networks/
autostart default.xml
[root@ying06 ~]# vim /etc/libvirt/qemu/feng01.xml //feng01虚拟机的配置文件
- 开机启动指定的虚拟机:virsh autostart feng01
[root@ying06 ~]# virsh autostart feng01
- 取消开机启动:virsh autostart --disable feng01
[root@ying06 ~]# virsh autostart --disable feng01
- 挂起虚拟机(相当于windows睡眠):virsh suspend feng01
[root@ying06 ~]# virsh suspend feng01
域 feng01 被挂起
[root@ying06 ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
1 feng01 暂停
- 恢复挂起的虚拟机:virsh resume feng01
[root@ying06 ~]# virsh resume feng01
域 feng01 被重新恢复
[root@ying06 ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
1 feng01 running
[root@ying06 ~]#
七、克隆虚拟机
克隆虚拟机前需要先关机;
按feng01机器克隆feng02机器: virt-clone --original feng01 --name feng02 --file /kvm_data/feng02.img
- --original feng01 :克隆源
- --name feng02 ;克隆机器的名字
- --file /kvm_data/feng02.img : 文件放在那里
[root@ying06 ~]# virsh shutdown feng01 //关机
域 feng01 被关闭
[root@ying06 ~]# ls /kvm_data/
feng01.img lost+found
[root@ying06 ~]# virt-clone --original feng01 --name feng02 --file /kvm_data/feng02.img
正在分配 'feng02.img' | 10 GB 00:00:42
成功克隆 'feng02'。
[root@ying06 ~]# ls /kvm_data/
feng01.img feng02.img lost+found
[root@ying06 ~]# virsh list --all //现在有两个机器
Id 名称 状态
----------------------------------------------------
- feng01 关闭
- feng02 关闭
[root@ying06 ~]# virsh start feng02
域 feng02 已开始
配置网络,需要用dhclient eth0 自动获取IP
[root@localhost ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 52:54:00:f6:36:2a txqueuelen 1000 (Ethernet)
RX packets 8 bytes 648 (648.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 64 bytes 5568 (5.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 64 bytes 5568 (5.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost ~]# dhclient eth0
[root@localhost ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.112.129 netmask 255.255.255.0 broadcast 192.168.112.255
inet6 fe80::5054:ff:fef6:362a prefixlen 64 scopeid 0x20<link>
ether 52:54:00:f6:36:2a txqueuelen 1000 (Ethernet)
RX packets 32 bytes 4169 (4.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 62 bytes 6776 (6.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 64 bytes 5568 (5.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 64 bytes 5568 (5.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
此时宿主机可以连接此虚拟机
[root@ying06 ~]# ssh 192.168.112.129
The authenticity of host '192.168.112.129 (192.168.112.129)' can't be established.
ECDSA key fingerprint is SHA256:Nh7yjmpxKcHTY6ah3tFNH8KANamwqa0YofsKZEvKOqY.
ECDSA key fingerprint is MD5:e4:63:8b:8d:f6:3c:f3:9b:18:24:cb:66:8b:67:d2:42.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.112.129' (ECDSA) to the list of known hosts.
root@192.168.112.129's password:
Last login: Fri Oct 12 00:28:03 2018
[root@localhost ~]# w
00:31:03 up 3 min, 2 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root ttyS0 00:28 39.00s 0.04s 0.04s -bash
root pts/0 192.168.112.152 00:30 6.00s 0.02s 0.01s w
八、虚拟机快照管理
快照就如同VMware里面的快照一样,在KVM虚拟机里面,raw格式的虚拟磁盘不支持做快照,qcow2支持
创建快照:virsh snapshot-create feng01
[root@ying06 ~]# virsh snapshot-create feng01
已生成域快照 1539302577
查看feng01.img磁盘信息,里面有Snapshot list一栏,就是其快照;
[root@ying06 ~]# qemu-img info /kvm_data/feng01.img
image: /kvm_data/feng01.img
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 1.2G
cluster_size: 65536
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 1539302577 0 2018-10-12 08:02:57 00:00:00.000
Format specific information:
compat: 1.1
lazy refcounts: true
查看快照feng01机器的快照清单
[root@ying06 ~]# virsh snapshot-list feng01
名称 生成时间 状态
------------------------------------------------------------
1539302577 2018-10-12 08:02:57 +0800 shutoff
查看当前快照版本:virsh snapshot-current feng01
[root@ying06 ~]# virsh snapshot-current feng01
<domainsnapshot>
<name>1539302577</name>
<state>shutoff</state>
<creationTime>1539302577</creationTime>
<memory snapshot='no'/>
<disks>
.....以下省略
查看所有快照配置文件,再创建快照,并删除;
[root@ying06 ~]# ls /var/lib/libvirt/qemu/snapshot/ //快照的目录
feng01
[root@ying06 ~]# ls /var/lib/libvirt/qemu/snapshot/feng01/
1539302577.xml
[root@ying06 ~]# virsh snapshot-create feng01 //针对feng01机器再创建一个快照
已生成域快照 1539303581
[root@ying06 ~]# ls /var/lib/libvirt/qemu/snapshot/feng01/
1539302577.xml 1539303581.xml
[root@ying06 ~]# virsh snapshot-list feng01 //查看feng01机器的快照清单
名称 生成时间 状态
------------------------------------------------------------
1539302577 2018-10-12 08:02:57 +0800 shutoff
1539303581 2018-10-12 08:19:41 +0800 shutoff
[root@ying06 ~]# virsh snapshot-delete feng01 1539303581 //删除快照
已删除域快照 1539303581
[root@ying06 ~]# virsh snapshot-list feng01
名称 生成时间 状态
------------------------------------------------------------
1539302577 2018-10-12 08:02:57 +0800 shutoff
[root@ying06 ~]# ls /var/lib/libvirt/qemu/snapshot/feng01/
1539302577.xml
九、磁盘格式
虚拟磁盘常用格式raw、qcow2;
- raw格式的磁盘性能比qcow2要好;
- raw格式的磁盘无法做快照;
- raw文件大小和我们指定空间大小一样;qcow2文件比较小,需要多少,用多少。
- 创建新磁盘
查看feng01.img磁盘的配置情况:qemu-img info /kvm_data/feng01.img
[root@ying06 kvm_data]# qemu-img info /kvm_data/feng01.img
image: /kvm_data/feng01.img
file format: qcow2
virtual size: 10G (12882804736 bytes)
disk size: 1.2G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: true
创建格式为raw,大小为2G的新磁盘;
[root@ying06 kvm_data]# qemu-img create -f raw /kvm_data/feng01_2.img 2G
两种查看方法不同,新磁盘的大小也不一样;
[root@ying06 kvm_data]# du -sh *
0 feng01_2.img //新增的磁盘显示为0
196K feng01_2.qcow2
1.3G feng01.img
1.2G feng02_3.raw
1.2G feng02.img
16K lost+found
[root@ying06 kvm_data]# ls -lh
总用量 3.6G
-rw-r--r-- 1 root root 2.0G 10月 12 09:26 feng01_2.img //新磁盘为2G
-rw-r--r-- 1 root root 193K 10月 12 09:57 feng01_2.qcow2
-rw------- 1 root root 11G 10月 12 09:22 feng01.img
-rw-r--r-- 1 root root 10G 10月 12 10:38 feng02_3.raw
-rw------- 1 root root 1.2G 10月 12 09:22 feng02.img
drwx------ 2 root root 16K 10月 11 21:55 lost+found
- 磁盘格式转换
把qcow2格式的磁盘转换为raw格式;下面命令就是把qcow2格式的磁盘feng02.img转换为raw格式的磁盘为feng02_3.raw
[root@ying06 kvm_data]# qemu-img convert -O raw /kvm_data/feng02.img /kvm_data/feng02_3.raw
- 给虚拟机更换磁盘
编辑feng02虚拟机的配置文件;
[root@ying06 kvm_data]# virsh edit feng02 //编辑feng02虚拟机的配置文件
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/> //把磁盘格式由qcow2改为raw格式
<source file='/kvm_data/feng02_3.raw'/> //并把磁盘feng02.img改为feng02_3.raw
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
也可以直接在配置文件中更改;(实质就是用vim查看的)
[root@ying06 kvm_data]# ls /etc/libvirt/qemu //虚拟主机的配置文件的目录
feng01.xml feng02.xml networks
[root@ying06 kvm_data]# vim /etc/libvirt/qemu/feng02.xml //等同于命令:virsh edit feng02
开启feng02虚拟机;可以看到feng02主机磁盘由feng02.img更换为feng02_3.raw
[root@ying06 kvm_data]# virsh start feng02
域 feng02 已开始
[root@ying06 kvm_data]# ls -lh
总用量 3.6G
-rw-r--r-- 1 root root 2.0G 10月 12 09:26 feng01_2.img
-rw-r--r-- 1 root root 193K 10月 12 09:57 feng01_2.qcow2
-rw------- 1 root root 11G 10月 12 09:22 feng01.img
-rw-r--r-- 1 qemu qemu 10G 10月 12 10:38 feng02_3.raw //看qemu,此时虚拟机启动加载的硬盘
-rw------- 1 root root 1.2G 10月 12 09:22 feng02.img
drwx------ 2 root root 16K 10月 11 21:55 lost+found
[root@ying06 kvm_data]# virsh snapshot-create feng02 //创建快照,显示raw格式的硬盘不支持快照
错误:不支持的配置:存储类型 vda 不支持磁盘 raw 的内部快照
十、磁盘扩容
生产中,遇到业务的增加,磁盘不够用,虚拟机磁盘可以扩容,也可以新增加磁盘。这两种操作方式;
10.1 磁盘扩容(raw)
给虚拟磁盘扩容2G:qemu-img resize /kvm_data/feng02_3.raw +2G
[root@ying06 kvm_data]# qemu-img resize /kvm_data/feng02_3.raw +2G
Image resized.
[root@ying06 kvm_data]# qemu-img info /kvm_data/feng02_3.raw //查看虚拟磁盘配置信息
image: /kvm_data/feng02_3.raw
file format: raw //磁盘格式为raw
virtual size: 12G (12884901888 bytes) //虚拟磁盘尺寸为12G,比之前增加2G
disk size: 1.2G //真实尺寸为1.2G
进入feng02虚拟主机,用fdisk -l查看磁盘情况,磁盘10G,还没有生效;
[root@ying06 kvm_data]# virsh console feng02
连接到域 feng02
换码符为 ^]
CentOS Linux 7 (Core)
Kernel 3.10.0-693.el7.x86_64 on an x86_64
localhost login: root
密码:
Last login: Fri Oct 12 09:18:32 on ttyS0
[root@localhost ~]# fdisk -l
磁盘 /dev/vda:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a72f6
设备 Boot Start End Blocks Id System
/dev/vda1 * 2048 2099199 1048576 83 Linux
/dev/vda2 2099200 4196351 1048576 82 Linux swap / Solaris
/dev/vda3 4196352 20971519 8387584 83 Linux
重启一下feng02虚拟主机,使增加的磁盘生效;
[root@ying06 kvm_data]# virsh shutdown feng02
域 feng02 被关闭
[root@ying06 kvm_data]# virsh start feng02
域 feng02 已开始
[root@ying06 kvm_data]# virsh console feng02
localhost login: root
密码:
Last login: Fri Oct 12 11:37:04 on ttyS0
[root@localhost ~]#
[root@localhost ~]# fdisk -l
磁盘 /dev/vda:12.9 GB, 12884901888 字节,25165824 个扇区 //已经生效12G
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a72f6
设备 Boot Start End Blocks Id System
/dev/vda1 * 2048 2099199 1048576 83 Linux
/dev/vda2 2099200 4196351 1048576 82 Linux swap / Solaris
/dev/vda3 4196352 20971519 8387584 83 Linux
扩从的磁盘,因为已经存在内容,需要再分区,但是只是能把它作为新增的分区;这样才能够利用。这样整个操作比较麻烦;为了更方便,可以新增加一个硬盘,然后按要求分区、格式化、挂载,就能够利用了;
再新创建一个5G的硬盘
[root@ying06 kvm_data]# qemu-img create -f raw /kvm_data/feng02_2.img 5G
Formatting '/kvm_data/feng02_2.img', fmt=raw size=5368709120
[root@ying06 kvm_data]# qemu-img info feng02_2.img //格式为raw
image: feng02_2.img
file format: raw
virtual size: 5.0G (5368709120 bytes)
disk size: 0 //新硬盘,所以实际尺寸为0
[root@ying06 kvm_data]# ls -l
总用量 3730188
-rw-r--r-- 1 root root 2147483648 10月 12 09:26 feng01_2.img
-rw-r--r-- 1 root root 197120 10月 12 09:57 feng01_2.qcow2
-rw------- 1 root root 10747838464 10月 12 09:22 feng01.img
-rw-r--r-- 1 root root 5368709120 10月 12 12:08 feng02_2.raw //新增加的5G硬盘
-rw-r--r-- 1 qemu qemu 12884901888 10月 12 12:03 feng02_3.raw
-rw------- 1 root root 1272709120 10月 12 09:22 feng02.img
drwx------ 2 root root 16384 10月 11 21:55 lost+found
编辑feng02虚拟主机的配置文件:virsh edit feng02
[root@ying06 kvm_data]# virsh edit feng02 //复制磁盘的配置文件,作为另一个磁盘的配置
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/kvm_data/feng02_3.raw'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/kvm_data/feng02_2.raw'/> //把磁盘的路径改为新增的feng02_2.raw
<target dev='vdb' bus='virtio'/> //vda 改为 vdb
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/> //表示slot,要与原来磁盘与区别
</disk>
重启feng02虚拟主机,此时可以看到feng02_2.raw 和 feng02_3.raw属主、数组都为qeum,说明已经扩容成功;
[root@ying06 kvm_data]# virsh shutdown feng02
域 feng02 被关闭
[root@ying06 kvm_data]# virsh start feng02
域 feng02 已开始
[root@ying06 kvm_data]# ls -l
总用量 3730192
-rw-r--r-- 1 root root 2147483648 10月 12 09:26 feng01_2.img
-rw-r--r-- 1 root root 197120 10月 12 09:57 feng01_2.qcow2
-rw------- 1 root root 10747838464 10月 12 09:22 feng01.img
-rw-r--r-- 1 qemu qemu 5368709120 10月 12 12:08 feng02_2.raw
-rw-r--r-- 1 qemu qemu 12884901888 10月 12 12:22 feng02_3.raw
-rw------- 1 root root 1272709120 10月 12 09:22 feng02.img
drwx------ 2 root root 16384 10月 11 21:55 lost+found
进入feng02主机内,用fdisk -l命令,查看磁盘情况,发现有个新磁盘 /dev/vdb
[root@ying06 kvm_data]# virsh console feng02
连接到域 feng02
换码符为 ^]
localhost login: root
密码:
Last login: Fri Oct 12 11:42:36 on ttyS0
[root@localhost ~]#
[root@localhost ~]# fdisk -l
磁盘 /dev/vda:12.9 GB, 12884901888 字节,25165824 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a72f6
设备 Boot Start End Blocks Id System
/dev/vda1 * 2048 2099199 1048576 83 Linux
/dev/vda2 2099200 4196351 1048576 82 Linux swap / Solaris
/dev/vda3 4196352 20971519 8387584 83 Linux
磁盘 /dev/vdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
10.2 磁盘扩容(qcow2)
feng01.img磁盘因为有快照,所以不能够扩容;
[root@ying06 kvm_data]# qemu-img resize /kvm_data/feng01.img +2G
qemu-img: Can't resize an image which has snapshots
qemu-img: This image does not support resize
查看feng01虚拟主机的快照情况;并把其删除,然后再扩容
[root@ying06 kvm_data]# virsh snapshot-list feng01
名称 生成时间 状态
------------------------------------------------------------
1539302577 2018-10-12 08:02:57 +0800 shutoff
[root@ying06 kvm_data]# virsh snapshot-delete feng01 1539302577 //删除快照
已删除域快照 1539302577
[root@ying06 kvm_data]# qemu-img resize /kvm_data/feng01.img +2G //扩容成功
Image resized.
查看feng01.img磁盘的信息,发现为12G,增加了2G;
[root@ying06 kvm_data]# qemu-img info /kvm_data/feng01.img
image: /kvm_data/feng01.img
file format: qcow2
virtual size: 12G (12884901888 bytes)
disk size: 1.2G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: true
进入feng01虚拟机,查看磁盘情况,增加成功;
[root@ying06 kvm_data]# virsh start feng01
域 feng01 已开始
[root@ying06 kvm_data]# virsh console feng01
连接到域 feng01
换码符为 ^]
localhost login: root
密码:
Last login: Fri Oct 12 09:10:26 on ttyS0
[root@localhost ~]# fdisk -l
磁盘 /dev/vda:12.9 GB, 12884901888 字节,25165824 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a72f6
设备 Boot Start End Blocks Id System
/dev/vda1 * 2048 2099199 1048576 83 Linux
/dev/vda2 2099200 4196351 1048576 82 Linux swap / Solaris
/dev/vda3 4196352 20971519 8387584 83 Linux
虽然总磁盘扩容了,但是设备上却没有显示;现在把其重新分区;
[root@localhost ~]# fdisk /dev/vda
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n //新创分区
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): p //类型为 主分区;
已选择分区 4
起始 扇区 (20971520-25165823,默认为 20971520): //自动识别,回车
将使用默认值 20971520
Last 扇区, +扇区 or +size{K,M,G} (20971520-25165823,默认为 25165823): //默认,回车
将使用默认值 25165823
分区 4 已设置为 Linux 类型,大小设为 2 GiB //自动识别分区大小为 2G,就是刚才扩容的分区
命令(输入 m 获取帮助):p //打印磁盘情况
磁盘 /dev/vda:12.9 GB, 12884901888 字节,25165824 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a72f6
设备 Boot Start End Blocks Id System
/dev/vda1 * 2048 2099199 1048576 83 Linux
/dev/vda2 2099200 4196351 1048576 82 Linux swap / Solaris
/dev/vda3 4196352 20971519 8387584 83 Linux
/dev/vda4 20971520 25165823 2097152 83 Linux //此为扩容分分区2G
现在同样新增加一个5G硬盘;(操作和raw格式硬盘,一样)
[root@ying06 kvm_data]# qemu-img create -f qcow2 /kvm_data/feng01_3.img 5G
Formatting '/kvm_data/feng01_3.img', fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 lazy_ref
编辑feng1虚拟主机配置文件,为新硬盘配置信息
[root@ying06 kvm_data]# virsh edit feng01
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/kvm_data/feng01.img'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/kvm_data/feng01_3.img'/>
<target dev='vdb' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</disk>
查看新硬盘feng01_3.img
[root@ying06 kvm_data]# ls -lh
总用量 3.6G
-rw-r--r-- 1 root root 2.0G 10月 12 09:26 feng01_2.img
-rw-r--r-- 1 root root 193K 10月 12 09:57 feng01_2.qcow2
-rw-r--r-- 1 root root 193K 10月 12 15:35 feng01_3.img //此时并没有加载此磁盘
-rw------- 1 qemu qemu 11G 10月 12 15:54 feng01.img
-rw-r--r-- 1 root root 5.0G 10月 12 12:08 feng02_2.raw
-rw-r--r-- 1 root root 12G 10月 12 15:54 feng02_3.raw
-rw------- 1 root root 1.2G 10月 12 09:22 feng02.img
drwx------ 2 root root 16K 10月 11 21:55 lost+found
开启feng01虚拟机,可以看到已经加载上feng01_3.img这个新硬盘;
[root@ying06 kvm_data]# virsh start feng01
域 feng01 已开始
[root@ying06 kvm_data]# ls -lh
总用量 3.6G
-rw-r--r-- 1 root root 2.0G 10月 12 09:26 feng01_2.img
-rw-r--r-- 1 root root 193K 10月 12 09:57 feng01_2.qcow2
-rw-r--r-- 1 qemu qemu 193K 10月 12 15:35 feng01_3.img //已经加载上次硬盘
-rw------- 1 qemu qemu 11G 10月 12 15:55 feng01.img
-rw-r--r-- 1 root root 5.0G 10月 12 12:08 feng02_2.raw
-rw-r--r-- 1 root root 12G 10月 12 15:54 feng02_3.raw
-rw------- 1 root root 1.2G 10月 12 09:22 feng02.img
drwx------ 2 root root 16K 10月 11 21:55 lost+found
进入虚拟机 ,可以查看此磁盘vdb
[root@localhost ~]# fdisk -l
磁盘 /dev/vda:12.9 GB, 12884901888 字节,25165824 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a72f6
设备 Boot Start End Blocks Id System
/dev/vda1 * 2048 2099199 1048576 83 Linux
/dev/vda2 2099200 4196351 1048576 82 Linux swap / Solaris
/dev/vda3 4196352 20971519 8387584 83 Linux
磁盘 /dev/vdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
对于磁盘 /dev/vdb 可以按需要分区,格式化,然后挂载就可以访问;
有关磁盘分区,格式化,挂载, 请参考我的文章 Linux磁盘管理
十一、调整虚拟机的cpu、内存和网卡
11.1 调整虚拟机的cpu、内存
查看虚拟机的简单配置: virsh dominfo feng01
[root@ying06 ~]# virsh dominfo feng01
Id: 7
名称: feng01
UUID: c11da007-5972-4bad-8380-0d04e46d9fa1 //uid
OS 类型: hvm
状态: running
CPU: 1 //cpu核心为1
CPU 时间: 22.4s
最大内存: 1048576 KiB //最大内存
使用的内存: 524288 KiB //使用内存
持久: 是
自动启动: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0
[root@ying06 ~]# virsh dominfo feng02
Id: -
名称: feng02
UUID: 34ed01ea-1523-49d5-aed8-2371f5171ccb
OS 类型: hvm
状态: 关闭
CPU: 1
最大内存: 1048576 KiB
使用的内存: 524288 KiB
持久: 是
自动启动: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0
内存和CPU,可以在配置文件中更改:virsh edit feng01 ;不过更改完需要重启;
[root@ying06 ~]# virsh edit feng01
<name>feng01</name>
<uuid>c11da007-5972-4bad-8380-0d04e46d9fa1</uuid>
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>824288</currentMemory>
<vcpu placement='static' current='2'>2</vcpu>
可以动态更改CPU核心和使用内存:
[root@ying06 ~]# virsh setvcpus feng01 2 //把虚拟主机feng01的CPU核心改为2个
[root@ying06 ~]# virsh setmem feng01 800m //把其使用内存改为800M,总共1G,只能在小于1G
[root@ying06 ~]# virsh dominfo feng01 //立即查看,就可以看到更改的结果
Id: 8
名称: feng01
UUID: c11da007-5972-4bad-8380-0d04e46d9fa1
OS 类型: hvm
状态: running
CPU: 2
CPU 时间: 19.7s
最大内存: 1048576 KiB
使用的内存: 819200 KiB
持久: 是
自动启动: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0
但是这样更改,只能在本次使用,如果关机,重启,就会失效,必须把这个配置写入此虚拟主机的配置文件;
[root@ying06 ~]# virsh dumpxml feng01 > /etc/libvirt/qemu/feng01.xml
[root@ying06 ~]# virsh shutdown feng01
[root@ying06 ~]# virsh start feng01
虚拟机重启之后,其配置文件已经变为,我们设置的内容。
[root@ying06 ~]# virsh edit feng01
<name>feng01</name>
<uuid>c11da007-5972-4bad-8380-0d04e46d9fa1</uuid>
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>819200</currentMemory> //内存更改为800M
<vcpu placement='static'>2</vcpu> //cpu核心变为2个
<resource>
进入feng01虚拟机内,查看内存,也约为800M,再次说明之前更改的配置已经生效;
[root@ying06 ~]# virsh console feng01
连接到域 feng01
换码符为 ^]
CentOS Linux 7 (Core)
Kernel 3.10.0-693.el7.x86_64 on an x86_64
localhost login: root
密码:
Last login: Fri Oct 12 15:59:32 on ttyS0
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 768M 83M 573M 6.5M 110M 544M
Swap: 1.0G 0B 1.0G
一般情况,配置虚拟机的时候尽量为了扩容的准备,方便以后在一定内存内动态的调整;
11.2 调整虚拟机的内存
查看虚拟机的网卡:virsh domiflist feng01
[root@ying06 ~]# virsh domiflist feng01
接口 类型 源 型号 MAC
-------------------------------------------------------
vnet0 bridge br0 virtio 52:54:00:e1:ec:85
设置一个新的网卡:virsh attach-interface feng01 --type bridge --source virbr0
其命令的参数解释:
--type bridge :网络模式为 bridge
--source virbr0 : 网络来源为nat模式(virbr0类似vmware的vmnet8 )
--source br0 :则网络模式为桥接
[root@ying06 ~]# virsh attach-interface feng01 --type bridge --source virbr0
成功附加接口
[root@ying06 ~]# virsh domiflist feng01
接口 类型 源 型号 MAC
-------------------------------------------------------
vnet0 bridge br0 virtio 52:54:00:e1:ec:85
vnet1 bridge virbr0 rtl8139 52:54:00:4a:78:c0
[root@ying06 ~]# virsh attach-interface feng01 --type bridge --source br0
成功附加接口
[root@ying06 ~]# virsh domiflist feng01
接口 类型 源 型号 MAC
-------------------------------------------------------
vnet0 bridge br0 virtio 52:54:00:e1:ec:85
vnet1 bridge virbr0 rtl8139 52:54:00:4a:78:c0
vnet2 bridge br0 rtl8139 52:54:00:0d:62:e2
进入feng01虚拟主机内,可以看到ens9和ens10两个新网卡;
- ens9就是nat模式,和宿主机上virbr0网卡网段同为122网段;
- ens10就是桥接模式,网段还是122网段;
[root@ying06 ~]# virsh console feng01
连接到域 feng01
换码符为 ^]
[root@localhost ~]# ifconfig
ens9: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.122.149 netmask 255.255.255.0 broadcast 192.168.122.255
inet6 fe80::7e2a:4c53:e5fb:1b70 prefixlen 64 scopeid 0x20<link>
ether 52:54:00:4a:78:c0 txqueuelen 1000 (Ethernet)
RX packets 23 bytes 2569 (2.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 65 bytes 6266 (6.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens10: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.112.130 netmask 255.255.255.0 broadcast 192.168.112.255
inet6 fe80::1ed4:775f:55c8:4e3f prefixlen 64 scopeid 0x20<link>
ether 52:54:00:0d:62:e2 txqueuelen 1000 (Ethernet)
RX packets 33 bytes 2913 (2.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 13 bytes 1454 (1.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 52:54:00:e1:ec:85 txqueuelen 1000 (Ethernet)
RX packets 288 bytes 40679 (39.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 452 bytes 39328 (38.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 452 bytes 39328 (38.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
退出虚拟机,回到宿主机上,查看网卡配置;virbr0的网段就是122网段。
[root@ying06 ~]# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.112.152 netmask 255.255.255.0 broadcast 192.168.112.255
inet6 fe80::20c:29ff:fe52:d6f4 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:52:d6:f4 txqueuelen 1000 (Ethernet)
RX packets 8841 bytes 809897 (790.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 6030 bytes 817990 (798.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 00:0c:29:52:d6:f4 txqueuelen 1000 (Ethernet)
RX packets 9174 bytes 967938 (945.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 6389 bytes 873595 (853.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 41 bytes 3196 (3.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 41 bytes 3196 (3.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:34:70:ef txqueuelen 1000 (Ethernet)
RX packets 51 bytes 4146 (4.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 20 bytes 2515 (2.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
vnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::fc54:ff:fee1:ec85 prefixlen 64 scopeid 0x20<link>
ether fe:54:00:e1:ec:85 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 230 bytes 34272 (33.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
vnet1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::fc54:ff:fe4a:78c0 prefixlen 64 scopeid 0x20<link>
ether fe:54:00:4a:78:c0 txqueuelen 1000 (Ethernet)
RX packets 58 bytes 5702 (5.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 49 bytes 4255 (4.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
vnet2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::fc54:ff:fe0d:62e2 prefixlen 64 scopeid 0x20<link>
ether fe:54:00:0d:62:e2 txqueuelen 1000 (Ethernet)
RX packets 13 bytes 1454 (1.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 37 bytes 3504 (3.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
虽然这些网卡配置好了,但是重启之后,就会消失,若需要保存,则把这些配置写入虚拟主机的配置文件中。
[root@ying06 ~]# virsh domiflist feng01
接口 类型 源 型号 MAC
-------------------------------------------------------
vnet0 bridge br0 virtio 52:54:00:e1:ec:85
vnet1 bridge virbr0 rtl8139 52:54:00:4a:78:c0
vnet2 bridge br0 rtl8139 52:54:00:0d:62:e2
[root@ying06 ~]# virsh domiflist feng01 > /etc/libvirt/qemu/feng01.xml
十二、迁移虚拟机
迁移虚拟主机前,需要关闭虚拟主机;
[root@ying06 ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- feng01 关闭
- feng02 关闭
拷贝feng01虚拟主机涉及的磁盘
[root@ying06 ~]# virsh domblklist feng01
目标 源
------------------------------------------------
vda /kvm_data/feng01.img
vdb /kvm_data/feng01_3.img
hda -
[root@ying06 kvm_data]# cp feng01.img feng03.img
[root@ying06 kvm_data]# cp feng01_3.img feng03_3.img
迁移虚拟主机的配置文件
[root@ying06 ~]# virsh dumpxml feng01 > /etc/libvirt/qemu/feng03.xml
此时配置文件是feng01主机的,此时需要更改以下新的配置文件name、UUID、路径不一样也需要修改
[root@ying06 kvm_data]# vim /etc/libvirt/qemu/feng03.xml
<domain type='kvm'>
<name>feng03</name> //name改为定义的feng03
<uuid>c11da007-5972-4bad-8380-0d04e46d9fa3</uuid> //uuid也改动一个数字即可,比如最后一个改为3
<memory unit='KiB'>1048576</memory>
查看所有虚拟主机却没有发现feng03主机;需要定义feng03主机:virsh define /etc/libvirt/qemu/feng03.xml
[root@ying06 kvm_data]# virsh define /etc/libvirt/qemu/feng03.xml ^C
[root@ying06 kvm_data]# virsh list --all
Id 名称 状态
----------------------------------------------------
- feng01 关闭
- feng02 关闭
[root@ying06 kvm_data]# virsh define /etc/libvirt/qemu/feng03.xml
定义域 feng03(从 /etc/libvirt/qemu/feng03.xml)
[root@ying06 kvm_data]# virsh list --all
Id 名称 状态
----------------------------------------------------
- feng01 关闭
- feng02 关闭
- feng03 关闭 //此时虚拟主机列表,看到feng03主机的状态
因为腾讯云主机不能主持KVM虚拟化,所以模拟本机,思路步骤都一样。
我这里用的是复制,而到远程主机,rsync备份过去;
rsync -av /kvm_data/feng01.img /kvm_data/feng03.img //把该磁盘文件以及配置文件,拷贝到远程机器上
在远程上,可以不用更改这些配置文件,以及名称,因为两者不相互干涉。