kvm磁盘管理

kvm虚拟机虚拟磁盘格式转换

各种格式说明介绍

row:裸格式,占用空间较大,不支持快照功能,性能较好,不方便传输(顺序读写) 50G 2G 传输50G
qcow2:cow 占用空间小,支持快照,性能比raw差一点,方便传输(随机读写) 50G 2G 传输2G
qemu-img
info 查看虚拟磁盘信息
create 创建虚拟磁盘文件
qemu-img create test.raw 5G
qemu-img create -f qcow2 test.qcow2 5G
resize 调整虚拟磁盘容量大小
qemu-img resize test.raw +5G
qemu-img resize test.qcow2 5G
不管是什么格式的虚拟磁盘,不能缩容
convert 转换磁盘格式 1.#创建一块qcow2的虚拟硬盘(仅测试使用,无实际意义) [root@qiudao /opt]# mkdir /data
[root@qiudao /opt]# cd /data/
[root@qiudao /data]# qemu-img create -f qcow2 centos7.qcow2 2G
Formatting 'centos7.qcow2', fmt=qcow2 size=2147483648 encryption=off cluster_size=65536 lazy_refcounts=off
[root@qiudao /data]# ll -h
total 196K
-rw-r--r-- 1 root root 193K 2019-07-23 10:58 centos7.qcow2 #查看当前虚拟机硬盘信息 [root@qiudao /data]# qemu-img info /data/centos7.qcow2
image: /data/centos7.qcow2
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false #转换格式,语法说明 [root@qiudao /data]# qemu-img --help |grep convert
convert [-c] [-p] [-q] [-n] [-f fmt] [-t cache] [-T src_cache] [-O output_fmt] [-o options] [-s snapshot_name] [-S sparse_size] filename [filename2 [...]] output_filename 2.#转换原有磁盘格式 [root@qiudao /opt]# qemu-img convert -f raw -O qcow2 centos7.raw centos7.qcow2 #转化之后,要想使用,要修改kvm虚拟机的主配置文件 [root@qiudao /opt]# virsh edit centos7 32 <disk type='file' device='disk'>
33 <driver name='qemu' type='qcow2'/> #将原来的raw改成qcow2
34 <source file='/opt/centos7.qcow2'/> #将原来的raw改成qcow2
35 <target dev='vda' bus='virtio'/>
36 <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
37 </disk> 3.#删除原磁盘文件
[root@qiudao /opt]# rm -f centos7.raw 4.#启动kvm虚拟机
[root@qiudao /opt]# virsh start centos7 5.#连接测试
[root@qiudao /opt]# virsh console centos7

kvm在线热添加硬盘

#进入/opt目录下,添加一块硬盘

[root@qiudao ~]# cd /opt/
[root@qiudao /opt]# ll
total 10003908
-rw-r--r-- 1 qemu qemu 3916431360 2019-07-22 22:03 CentOS-6.8-x86_64-bin-DVD1.iso
-rw-r--r-- 1 qemu qemu 1752956928 2019-07-24 01:04 centos7.qcow2
-rw-r--r-- 1 qemu qemu 4588568576 2019-07-22 17:58 CentOS-7-x86_64-DVD-1810.iso #添加5G硬盘
[root@qiudao /opt]# qemu-img create -f qcow2 /opt/centos7-add01.qcow2 5G
Formatting '/opt/centos7-add01.qcow2', fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 lazy_refcounts=off #查看信息
[root@qiudao /opt]# qemu-img info centos7-add01.qcow2
image: centos7-add01.qcow2
file format: qcow2
virtual size: 5.0G (5368709120 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false #给kvm虚拟机centos7热添加硬盘
[root@qiudao /opt]# virsh attach-disk centos7 /opt/centos7-add01.qcow2 vdb --live --cache=none --subdriver=qcow2 #临时生效
Disk attached successfully [root@qiudao /opt]# virsh attach-disk centos7 /opt/centos7-add01.qcow2 vdb --live --cache=none --subdriver=qcow2 --config #永久生效,最好写绝对路径
vdb #第二块硬盘 --live #热添加 --cache=none #宿主机对客户机的镜像的读写cache开启,off表示关闭 --subdriver #驱动类型 #vnc查看添加结果
[root@kvm01 opt]# virsh console centos7 [root@centos7 ~]# lsblk #剥离磁盘 [root@kvm01 opt]# virsh detach-disk centos7 vdb
Disk detached successfully [root@kvm01 opt]# virsh console centos7
Connected to domain centos7
Escape character is ^] [root@centos7 ~]# lsblk

在线扩容磁盘的大小

#增加硬盘大小,生产环境中,只加不减

[root@qiudao /opt]# qemu-img resize /opt/centos7-add01.qcow2 +5G
Image resized.
[root@qiudao /opt]# qemu-img info /opt/centos7-add01.qcow2
image: /opt/centos7-add01.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 260K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false #再重新给centos7热添加硬盘
[root@qiudao /opt]# virsh attach-disk centos7 /opt/centos7-add01.qcow2 vdb --live --cache=none --subdriver=qcow2 #最好写绝对路径
Disk attached successfully #控制台登录 [root@kvm01 opt]# virsh console centos7
Connected to domain centos7
Escape character is ^] [root@centos7 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 10G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 9G 0 part
├─centos-root 253:0 0 8G 0 lvm /
└─centos-swap 253:1 0 1G 0 lvm [SWAP]
vdb 252:16 0 10G 0 disk #格式化操作,创建文件系统 [root@centos7 ~]# mkfs.xfs /dev/vdb
meta-data=/dev/vdb isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0 #挂载使用
[root@centos7 ~]# mount /dev/vdb /opt/
[root@centos7 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 8.0G 1007M 7.1G 13% /
devtmpfs 988M 0 988M 0% /dev
tmpfs 1000M 0 1000M 0% /dev/shm
tmpfs 1000M 8.5M 992M 1% /run
tmpfs 1000M 0 1000M 0% /sys/fs/cgroup
/dev/vda1 1014M 133M 882M 14% /boot
tmpfs 200M 0 200M 0% /run/user/0
/dev/vdb 10G 33M 10G 1% /opt

普通分区的扩容

1检查是否挂载,有卸载,剥离出来
2.外面添加
qemu-img resize web02.add.qcow2 15G
3.挂载
virsh console centos7
mount /dev/vdb /opt/
4.跟新文件系统,调整元数据
xfs_growfs /opt

根分区扩容

#根分区扩容
1.先关机,存在快照,删除快照 2.扩容根分区 [root@kvm01 opt]# qemu-img resize /opt/centos7.qcow2 +10G
Image resized. 3.登录进行从新分区
virsh console centos7
[root@qiudao /opt]# fdisk /dev/vda
删除原有的分区,重新创建分区
partprobe #通知内核系统分区发生变化
4.重启
reboot
5.跟新文件系统
[root@centos7 ~]# xfs_growfs /dev/centos/root #更新文件系统
具体详见:RAID&LVM有关磁盘的故障

kvm快照管理(写实复制,相当于创建分支)

基本命令

#创建
virsh snapshot-create centos7
#查看
virsh snapshot-list centos7
#恢复
virsh snapshot-revert centos7 --snapshotnanme +时间戳
#删除
virsh snapshot-delete centos7 --snapshotname +时间戳 #注意:raw格式的磁盘无法创建快照,qcow2支持快照,并且快照就保存在qcow2的磁盘文件中
1.#创建快照
[root@qiudao ~]# virsh snapshot-create centos7
Domain snapshot 1563866292 created #开机状态下的快照
[root@kvm01 opt]# virsh snapshot-create centos7
Domain snapshot 1575391158 created
[root@kvm01 opt]# ll /var/lib/libvirt/qemu/snapshot/centos7/
total 16
-rw------- 1 root root 4951 Dec 4 00:39 1575390933.xml
-rw------- 1 root root 4973 Dec 4 00:39 1575391158.xml #查看主机快照列表
[root@qiudao ~]# virsh snapshot-list centos7
Name Creation Time State
------------------------------------------------------------
1563866292 2019-07-23 15:18:12 +0800 running #查看快照信息
[root@qiudao ~]# virsh snapshot-info centos7 --snapshotname 1563866292
Name: 1563866292
Domain: centos7
Current: yes
State: running
Location: internal
Parent: -
Children: 0
Descendants: 0
Metadata: yes #模拟虚拟机故障,登陆虚拟机,进行删除操作。
[root@qiudao ~]# virsh console centos7
[root@centos7 ~]# rm -rf /* #登录测试
[root@qiudao ~]# virsh console centos7
Connected to domain centos7
Escape character is ^] -bash: /bin/rm: No such file or directory
[root@centos7 ~]# ll
-bash: /bin/ls: No such file or directory
[root@centos7 ~]# ls
-bash: /bin/ls: No such file or directory #还原快照
[root@qiudao ~]# virsh snapshot-revert centos7 1563866292 #登录测试
[root@qiudao ~]# virsh console centos7
Connected to domain centos7
Escape character is ^] CentOS Linux 7 (Core)
Kernel 3.10.0-957.el7.x86_64 on an x86_64 centos7 login: root
Password:
Last login: Tue Jul 23 11:33:15 on ttyS0
[root@centos7 ~]# ll
total 4
-rw-------. 1 root root 1161 Jul 22 20:52 anaconda-ks.cfg #快照配置文件位置
[root@qiudao ~]# tree /var/lib/libvirt/qemu/snapshot/
/var/lib/libvirt/qemu/snapshot/
└── centos7
└── 1563866292.xml #删除快照
[root@qiudao ~]# virsh snapshot-delete centos7 1563866292
Domain snapshot 1563866292 deleted

克隆

手动克隆

1.关机
[root@kvm01 opt]# virsh shutdown centos7-clone
2.到户配置信息
[root@kvm01 opt]# virsh dumpxml centos7 >centos7.3bak
3.拷贝
cp 磁盘(注意快照也会)
[root@kvm01 opt]# cp centos7.qcow2 web02.qcow2
4.修改路径
[root@kvm01 opt]# vim centos7.3bak
编辑如下几个配置文件
vi /etc/libvirt/qemu/centos7.xml
<name>centos7</name>
<uuid>ec29ba5d-863f-4317-b4dd-c7e1f23260d9</uuid> #删掉
<source file='/opt/centos7.qcow2'/>
<mac address='52:54:00:6a:e9:e4'/> #删掉
5.导入配置
[root@kvm01 opt]# virsh define centos7.3bak
6.启动kvm
[root@kvm01 opt]# virsh start web02
7.进入kvm
[root@kvm01 opt]# virsh console web02
8.测试 连接
ifup eth0 #启动网卡

完整克隆

[root@qiudao /opt]# virsh shutdown centos7        #只有关机状态才能克隆

Domain centos7 is being shutdown

[root@qiudao /opt]# virsh list --all

## Id Name State

- centos6 shut off
- centos7 shut off --auto-clone     #从原始客户机配置中自动生成克隆名称和存储路径。 -o                #原始客户机名称;必须为关闭或者暂停状态。 [root@qiudao /opt]# virt-clone --auto-clone -o centos7 -n centos7-v1 Allocating 'centos72-clone.qcow2' | 10 GB 00:01:01 Clone 'centos7-v1' created successfully. [root@qiudao /opt]# virsh list --all ## Id Name State - centos6 shut off
- centos7 shut off
- centos7-v1 shut off        #克隆主机名称 [root@qiudao /opt]# ll
total 11851148
-rw-r--r-- 1 qemu qemu 3916431360 2019-07-22 22:03 CentOS-6.8-x86_64-bin-DVD1.iso
-rw------- 1 root root 1468268544 2019-08-30 21:07 centos7-clone.qcow2     #克隆机的镜像文件 -rw-r--r-- 1 root root 1752956928 2019-08-30 21:05 centos7.qcow2
-rw-r--r-- 1 root root 11534336 2019-08-30 21:05 centos7-add01.qcow2
-rw-r--r-- 1 qemu qemu 4588568576 2019-07-22 17:58 CentOS-7-x86_64-DVD-1810.iso [root@qiudao /opt]# ll /etc/libvirt/qemu/
total 20
drwxr-xr-x 2 root root 6 2019-07-23 10:28 autostart
-rw------- 1 root root 3906 2019-07-22 22:11 centos6.xml
-rw------- 1 root root 4377 2019-08-30 21:06 centos7-v1.xml        #克隆机的配置文件 -rw------- 1 root root 4365 2019-07-23 16:23 centos7.xml
drwx------ 3 root root 42 2019-07-22 17:03 networks

连接克隆

#Kvm手动克隆虚拟机:
前提:关机状态下
1:创建基于链接克隆的虚拟磁盘文件
qemu-img create -f qcow2 -b old_disk new_disk
  
2:备份centos7的虚拟机配置文件,另存为centos7-v2 3:修改centos7-v2的虚拟机配置文件     a:<name>centos7-v2</name>
    b:删除uuid
    c:删除mac address
    d:修改虚拟机磁盘路径 4:导入centos7-v2 5:检查是否正常启动 6:编写自动化脚本
[root@kvm01 opt]# cat link_clone.sh
#!/bin/bash
Old_name=$1
New_name=$2
#1.关闭宿主机
virsh shutdown $Old_name &>/dev/null
sleep 3
#2.导出宿主机配置信息
virsh dumpxml $Old_name > /opt/${New_name}.xml
#3.创建基于宿主机的磁盘文件
qemu-img create -f qcow2 -b /opt/${Old_name}.qcow2 /opt/${New_name}.qcow2 &>/dev/null
#4.编辑配置文件
sed -i "s#$Old_name#$New_name#g" /opt/${New_name}.xml
sed -i '/uuid/d' /opt/${New_name}.xml
sed -i '/mac address/d' /opt/${New_name}.xml
#5.导入配置
virsh define /opt/${New_name}.xml &>/dev/null #6.启动测试
virsh start $New_name &>/dev/null #执行测试
[root@kvm01 opt]# sh link_clone.sh centos7 lb01 #7.console登录 virsh console $New_name #一键创建连接克隆
[root@qiudao /opt]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web05 --memory 1024 --vcpus 1 --disk /opt/web05.qcow2 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
本地硬盘 web05.qcow2
--boot #指定启动路径
hd 磁盘

kvm虚拟机的桥接网络

NAT连接

问题:用户访问跟我们的业务的ip地址不一样

前期测试

#查看交换机
[root@kvm01 opt]# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.5254004f87a6 yes virbr0-nic
vnet0
#查看内核转换参数
[root@kvm01 opt]# sysctl -a|grep ipv4|grep forward
net.ipv4.ip_forward = 1 #开启
sysctl net.ipv4.ip_forward = 1 可以手动控制

新创建的kvm-NAT

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web05 --memory 1024 --vcpus 1 --disk /opt/web05.qcow2 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

前期准备

#创建一个桥接网络,执行命令

[root@qiudao ~]# virsh iface-bridge eth0 br0
Created bridge br0 with attached device eth0
Bridge interface br0 started #查看
[root@qiudao ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="none"
IPADDR="10.0.0.100"
NETMASK="255.255.255.0"
GATEWAY="10.0.0.254"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
DHCPV6C="no"
STP="on"
DELAY="0"
[root@qiudao ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE="br0" #查看桥接网络信息 [root@qiudao ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c2990428b yes eth0
virbr0 8000.5254007cc337 yes virbr0-nic

桥接模式

新创建的,走桥接模式

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web05 --memory 1024 --vcpus 1 --disk /opt/web05.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

修改桥接模式

#关闭主机centos7

[root@qiudao ~]# virsh shutdown centos7
Domain centos7 is being shutdown [root@qiudao ~]# virsh list --all
Id Name State
----------------------------------------------------
- centos6 shut off
- centos7 shut off
- centos7-v1 shut off #修改配置文件 [root@qiudao ~]# virsh edit centos7 74 <interface type='bridge'> #类型修改为bridge
75 <mac address='52:54:00:59:9d:20'/>
76 <source bridge='br0'/> #类型和名称 77 <model type='virtio'/>
78 <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
79 </interface> #启动主机 [root@qiudao ~]# virsh start centos7
Domain centos7 started [root@qiudao ~]# virsh list --all
Id Name State
----------------------------------------------------
2 centos7 running
- centos6 shut off
- centos7-v1 shut off #连接修改网卡信息 [root@qiudao ~]# virsh console centos7 [root@centos7 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet"
BOOTPROTO="none"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
IPADDR="10.0.0.101"
NETMASK="255.255.255.0"
GATEWAY="10.0.0.254"
DNS1="223.5.5.5" #重启网络 [root@centos7 ~]# systemctl restart network
[root@centos7 ~]# systemctl stop NetworkManager
[root@centos7 ~]# systemctl disable NetworkManager
systemctl start libvirtd
#配置dns解析
[root@webvirtmgr ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 223.5.5.5
nameserver 223.6.6.6 #测试上网 [root@centos7 ~]# ping baidu.com
PING baidu.com (39.156.69.79) 56(84) bytes of data.
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=1 ttl=128 time=29.5 ms
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=2 ttl=128 time=30.5 ms #本地直接连接kvm虚拟机 [C:\~]$ ssh root@10.0.0.101 Connecting to 10.0.0.101:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'. Last failed login: Fri Aug 30 23:46:16 CST 2019 from 10.0.0.1 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Fri Aug 30 23:26:26 2019
[root@centos7 ~]#

热添加网卡,内存,cpu

1.kvm添加网卡
virsh attach-interface web04 --type bridge --source br0 --model virtio #临时
virsh attach-interface web04 --type bridge --source br0 --model virtio --config #永久
#剥离网卡
detach-interface web04 --type bridge --mac +地址 #查看挂载硬盘
virsh # domblklist web02
Target Source
------------------------------------------------
vda /opt/web02.qcow2
hda -
#查看mac地址
virsh # domiflist web02
Interface Type Source Model MAC
-------------------------------------------------------
vnet0 bridge br0 virtio 52:54:00:9e:c8:b7
vnet3 bridge br0 virtio 52:54:00:f4:f3:9a 2.热添加内存
#连接克隆
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web01 --memory 512,maxmemory=2048 --vcpus 1 --disk /opt/web01.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
#添加内存
virsh setmem web02 1024M --live
#登录kvm,查看
free -m 3.添加cpu
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web01 --memory 512,maxmemory=2048 --vcpus 1,maxvcpus=10 --disk /opt/web01.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
#进入kvm查看cpu核数
lscpu
#添加核数
virsh setvcpus web02 2

最新文章

  1. win7的6个网络命令
  2. SQL SERVER中如何在声明游标的语句中,用变量做表名
  3. WLAN信道
  4. Unity3D核心类型一览
  5. c++读写二进制文件
  6. 我与C++的不解情缘
  7. 编码为multipart/form-data自定义类型(包括文件)如何自动绑定到webapi的action的参数里
  8. Android crash特殊位置定位
  9. java.sql.SQLException: ORA-00911: 无效字符 解决方案
  10. BZOJ 1034: [ZJOI2008]泡泡堂BNB( 贪心 )
  11. ArcGIS网络分析之Silverlight客户端最近设施点分析(四)
  12. 利用libcurl进行post
  13. 华为笔试题--LISP括号匹配 解析及源码实现
  14. 工作中git 操作汇总
  15. hdu 3308 最长连续上升区间
  16. Angular Taskmgr 登录
  17. MySQL--9存储引擎
  18. rgferg
  19. 【剑指offer】规则二维数组查找
  20. vue之v-for

热门文章

  1. IDEA必备插件系列 - Key Promoter X(快捷键使用提示)
  2. Docker 自建私有Registry 私有仓库
  3. c语言I博客专业06
  4. 洛谷P2085——最小函数值
  5. 关于小码哥kylin
  6. 一句话总结flux,以及我们为何需要flux
  7. 基于串口通信做my_printf时遇到的坑儿
  8. wait notify notifyAll await signal signalAll 的理解及示例
  9. 使用g++编译器扩大程序可用栈空间
  10. 60%的人不懂Python进程Process,你懂吗?