1. 程式人生 > >openstack項目【day24】:KVM部署

openstack項目【day24】:KVM部署

sed cnblogs after clas 稀疏 磁盤 ans 自己的 amp

本節內容

  1. 虛擬化支持
  2. 軟件準備
  3. 檢查CPU虛擬化支持
  4. 安裝軟件包
  5. 激活並啟動libvirtd服務
  6. 網絡模式
  7. 配置橋接網絡
  8. 驗證網絡
  9. 嘗試連接Hypervisor
  10. 創建虛擬機
  11. 虛擬機操作

一、虛擬化支持

KVM虛擬化需要CPU的硬件輔助虛擬化的支持,用來加速,在本環境中為Intel的CPU,使用的Intel VT技術。(該功能在有些主機裏面可能需要去BIOS裏面開啟)

二、軟件準備

操作系統: CentOS 7.2

軟件包: CentOS自帶yum源

關閉防火墻

關閉SELinux:將 /etc/sysconfig/selinux 中的 SELinux=enforcing 修改為 SELinux=disabled

開始安裝

三、 檢查CPU虛擬化支持

如果是用vmware workstation的虛擬機做kvm實驗的化,需要開啟嵌套虛擬化

1.在物理機BIOS設置裏開啟虛擬化功能

2.此時你的vm仍然不能開啟虛擬化,下列兩個

技術分享

3.找到這臺虛擬機存在的目錄

技術分享

4.打開該目錄找到.vmx結尾的文件,增加一行

apic.xapic.enabled = "FALSE"

5.關閉虛擬機,然後啟動,就可以勾選開啟虛擬化功能了

技術分享

進入虛擬機後查看虛擬化支持:

# grep -E ‘svm|vmx‘ /proc/cpuinfo
vmx 為Intel的CPU指令集
svm 為AMD的CPU指令集

四、安裝軟件包

[[email protected]
/* */ ~]# yum grouplist |grep ‘虛擬‘ 虛擬化主機 [[email protected] ~]# yum -y groupinstall ‘虛擬化主機‘
[[email protected] 桌面]# lsmod |grep kvm
kvm_intel 138567 0
kvm 441119 1 kvm_intel
#以上輸出說明內核模塊加載成功,其中: kvm作為核心模塊,協同QEMU實現整個虛擬化環境的正常運行。 kvm_intel作為平臺(Intel)獨立模塊,激活KVM環境的CPU硬件虛擬化支持

kvm相關安裝包及其作用

qemu-kvm:主要的KVM程序包,該軟件包主要包含KVM內核模塊和基於KVM重構後的QEMU模擬器。KVM模塊作為整個虛擬化環境的核心工作在系統空間,負責CPU和內存的調度。QEMU作為模擬器工作在用戶空間,負責虛擬機I/O模擬。
qemu-img:主要用來QEMU磁盤鏡像的管理,如新建一塊磁盤鏡像給虛擬機。
libvirt:提供Hypervisor和虛擬機管理的API。
libvirt-client:KVM客戶端命令行管理工具virsh,負責虛擬機的啟動、停止和管理等。

libvirt-daemon:libvirtd守護進程,作為客戶端管理工具跟Hypervisor和虛擬機之間的橋梁。
libvirt-daemon-driver-xxx:從名字來看屬於libvirtd服務的驅動文件,作為libvirtd服務跟Hypervisor不同對象(如qemu模擬器,網絡,存儲等)間的接口。

libvirt-python:python的libvirt庫
python-virtinst:創建虛擬機所需要的命令行工具和程序庫

virt-install:創建和克隆虛擬機的命令行工具包。
virt-manager:圖形界面的KVM管理工具。
virt-top:虛擬機統計命令
virt-viewer:GUI連接程序,連接到已配置好的虛擬機

bridge-utils:網橋管理工具包,負責橋接網絡的創建、配置和管理等工作。

五、激活並啟動libvirtd服務

systemctl enable libvirtd 
systemctl start libvirtd 

六、網絡模式

詳見http://blog.csdn.net/cooling88/article/details/52203998

NAT方式:

virbr0網橋相當於一個hub或交換機,eth0相當於路由器,virbr0-nic相當於交換機virbr0上的一個接口,這個接口連接一根網線到路由器eth0

技術分享

技術分享

Bridge的方式:

br0網橋相當於一個hub或交換機,eth0相當於相當於交換機br0上的一個接口,這個接口連接一根網線到物理網絡

技術分享

技術分享

嘗試著從下圖總找出上述所說

技術分享

七、配置橋接網絡

默認情況下所有虛擬機只能夠在host內部互相通信,如果需要通過局域網訪問虛擬機,需要創建一個橋接網絡。

1.停止NetworkManager服務

# systemctl stop NetworkManager
該服務開啟的情況下直接去修改網卡的配置文件會造成信息的不匹配而導致網卡激活不了。

2.修改以太網卡配置文件

(修改前先備份)

# cd /etc/sysconfig/network-scripts
# vi ifcfg-eth0

DEVICE=eth0 

BOOTPROTO=static  

ONBOOT=yes  

BRIDGE=br0  

HWADDR=b8:ae:ed:7d:9d:11  

NM_CONTROLLED=no

原有的以太網絡不需要配置IP地址,指定橋接的網卡設備(如br0)即可。

3.修改橋接網卡配置文件

# cd /etc/sysconfig/network-scripts
# vi ifcfg-br0

TYPE=Bridge  

HWADDR=b8:ae:ed:7d:9d:11  

BOOTPROTO=static  

DEVICE=br0  

ONBOOT=yes  

IPADDR=192.168.2.10   

NETMASK=255.255.255.0  

GATEWAY=192.168.2.1  

DNS1=202.103.24.68  

NM_CONTROLLED=no

#橋接網卡的需要配置IP地址,當然也可以用DHCP。需要註意的是橋接網卡br0中DEVICE的名字一定要與以太網卡eno1中BRIDGE對應。

強調

1 #網卡配置文件中NM_CONTROLLED參數設置為no
2 
3 #執行:
4 
5 [[email protected] ~]# systemctl stop NetworkManager
6 [[email protected] ~]# systemctl disable NetworkManager

開啟主機IP地址轉發

# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl -p 

重啟網絡服務

# systemctl restart network

ps:針對NAT網路須知

需要掌握iptables:

技術分享

技術分享

詳細規則參考:http://blog.csdn.net/yu_xiang/article/details/9218589

1 #源地址轉換:內部訪問外部
2 iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 58.20.51.66
3 iptables-t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE
4 
5 #目標地址轉換:外部訪問內部
6 iptables -t nat -A PREROUTING -d 202.103.96.112 -j DNAT --to-destination 192.168.0.112

八、 驗證網絡

# ip a

eno1:   mtu 1500 qdisc pfifo_fast master br0 state UP

br0:      mtu 1500 qdisc noqueue state UP 
            inet 192.168.2.10/24 brd 192.168.2.255 scope global br0

截取了部分輸出,eno1和br0網卡都處於激活狀態,eno1橋接到br0,br0被分配了靜態IP地址。

九、嘗試連接Hypervisor

# virsh -c qemu:///system list

# virsh list

    Id    Name                    State
----------------------------------------

(由於沒有創建虛擬機,所以沒有條目顯示)

十、創建虛擬機

方法一:# virt-manager

針對這種方法,我們可以在服務端部署vncserver,然後用VNC Viewer來連接它的桌面,然後用圖形化去創建虛擬機

部署vncserver

#安裝X-Windows圖形界面
yum -y groupinstall "X Window System"
yum -y install gnome-classic-session gnome-terminal nautilus-open-terminal control-center liberation-mono-fonts
#設置默認啟動圖形界面
unlink /etc/systemd/system/default.target
ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
reboot

#安裝vnc服務
yum install tigervnc-server -y
#配置vnc
cp /lib/systemd/system/[email protected] /etc/systemd/system/vncserver@:1.service
vim /etc/systemd/system/vncserver@\:1.service
#修改內容
#ExecStart=/sbin/runuser -l root -c "/usr/bin/vncserver %i"
#PIDFile=/root/.vnc/%H%i.pid

#重啟systemd
systemctl daemon-reload

#為root用戶設置密碼
vncpasswd
systemctl enable vncserver@:1.service
systemctl start vncserver@:1.service

#添加防火墻規則,放行vncserver
firewall-cmd --permanent --add-service vnc-server
systemctl restart firewalld.service

#客戶端連接
#打開vncviewer客戶端工具,然後訪問地址是:服務端ip:1

技術分享

方法二:virt-install

1:粗糙版:執行完了,並不能立即安裝操作系統

#要有橋brctl add-br br0
#安裝選項可用virt-install --help查看,寫的非常清楚

virt-install --name guest1-centos7-64 --memory 1024 --arch x86_64 --vcpus 2 --os-variant=rhel7 --disk /var/lib/libvirt/images/guest1-centos7-64.img,device=disk,bus=virtio,size=20,sparse=true --network bridge=br0 --noautoconsole --location=/iso/CentOS-7.0-1406-x86_64-DVD.iso

  註釋

virt-install \              #安裝選項可用virt-install --help查看
--name=guest1-centos7-64 \  #虛擬機名稱
--ram=1024 \                #內存大小以MB為單位
--arch=x86_64 \             #cpu架構
--vcpus=2 \                 #虛擬機cpu的個數
--check-cpu \               #檢查確定vcpu是否超過物理cpu個數,超過則發出警告
--os-type=linux \           #要安裝的操作系統類型,例如linux,unix,windows
--os-variant=centos7.2 \    #要安裝的操作系統版本
--disk path=/var/lib/libvirt/images/guest1-centos7-64.img,device=disk,bus=virtio,size=20,sparse=true \ #虛擬機所用的磁盤文件或鏡像文件,size以G為單位
#--diskpath=/data/new.img,format=qcow2,size=10,bus=virtio \ #後面會講到制作qcow2格式的鏡像
#--nonsparse --network bridge=br0 \              #指定網絡,采用網橋
--noautoconsole \           #不自動開啟控制臺
--location=http://example1.com/installation_tree/RHEL5.6-Serverx86_64/os \ #指定安裝操作系統給的鏡像位置
#--pxe \    #也可以是無人值守安裝
#--graphics #指定安裝通過哪種類型,可以是vnc,也可以沒有圖形,在這裏我們沒有使用圖形直接使用文本方式

2:改進版:在命令行直接文本的方式裝系統

必須先做如下操作:

#針對Centos7+kvm為了執行console功能,即在控制臺以文本的方式控制vm
#在虛機裏運行
[[email protected] ~]# grubby --update-kernel=ALL --args="console=ttyS0"
[[email protected] ~]# reboot

然後才可以在命令行安裝操作系統

virt-install --name test1 --memory 1024 --arch x86_64 --vcpus 2 --os-type linux --os-variant=rhel7 --disk /data/kvm/test02.qcow2,format=qcow2,size=10,bus=virtio --network bridge=virbr0 --location=/iso/CentOS-7.0-1406-x86_64-DVD.iso --graphics none --console pty,target_type=serial --extra-args ‘console=ttyS0,115200n8 serial‘

方法三 使用 qemu-img 和 qemu-kvm 命令行方式安裝

(1)創建一個空的qcow2格式的鏡像文件

qemu-img create -f qcow2 windows-master.qcow2 10G

(2)啟動一個虛機,將系統安裝盤掛到 cdrom,安裝操作系統

qemu-kvm  -hda  windows-master.qcow2  -m  512  -boot d  -cdrom /home/user/isos/en_winxp_pro_with_sp2.iso

(3)現在你就擁有了一個帶操作系統的鏡像文件。你可以以它為模板創建新的鏡像文件。使用模板的好處是,它會被設置為只讀所以可以免於破壞。

qemu-img create -b windows-master.qcow2 -f  qcow2   windows-clone.qcow2

(4)你可以在新的鏡像文件上啟動虛機了

qemu-kvm  -hda  windows-clone.qcow2  -m 400

十一、虛擬機操作

開關虛擬機

virsh start guest1-centos7-64     #開機
virsh shutdown guest1-centos7-64  #關機
virsh destroy guest1-centos7-64   #強制關閉電源
virsh list --all                  #查看虛擬機狀態

遠程管理虛擬機(qemu+ssh連接)

#在被管理的機器上
yum -y install virt-viewer
export DISPLAY=被管理機IP:0.0
virt-virt-viewer -c qemu///system guest1-centos7-64 #本地管理虛擬機,獲取system權限,註意qemu後是三個/

#在管理機上
virt-viewer -c qemu+ssh:[email protected]/system guest1-centos7-64 #遠程linux通過virt-viewer+ssh管理虛擬機guest1-centos7-64

制作鏡像文件

參考 http://www.361way.com/kvm-qcow2-preallocation-metadata/3354.html 示例:qemu-img create -f qcow2 -opreallocation=metadata /data/test02.img 10G;

raw格式與qcow2格式的對比:

raw的優勢如下:

  1. 簡單,是轉為其他虛擬機格式的通用中間格式,並能夠到處到其他引進模擬器中去
  2. 在支持稀疏文件的系統上,根據實際使用量來占用空間,而非原先設定的最大值(比如設定最高20GB,而實際只使用3GB)
  3. 以後能夠改變空間的最大值(把最高值20GB提高到200GB,qcow2也可以,不過要轉換為raw)
  4. 能夠直接被宿主機掛載,不用開虛擬機即可在宿主機和vm之間進行數據傳輸(此時不能開機)
  5. 直接讀寫虛擬機硬盤裏的文件

qocw2性能更好:

  1. 即使在不支持稀疏的文件系統上,也可以獲得最小的空間
  2. 可以動態擴大,支持寫時復制
  3. AES加密
  4. zlib壓縮
  5. 支持多重虛擬機快照
  6. 然而raw的很多優勢,必須是在關機是才可以用,如直接掛載。而在生成環境不可能讓你這麽做。
  7. raw格式不能做快照,後面有說明,需要轉換為qcow2格式,如果要使用qcow2格式的虛擬磁盤,需要事先創建qcow2格式的虛擬磁盤。
1. 開始安裝kvm
a. 檢查你的系統是否支持虛擬化
grep -Ei ‘vmx|svm‘ /proc/cpuinfo
如果有輸出內容,則支持,其中intelcpu支持會有vmx,amd cpu支持會有svm

b. 通過yum安裝虛擬化的軟件包
yum install -y kvmvirt-*  libvirt  bridge-utils qemu-img
說明:
kvm:軟件包中含有KVM內核模塊,它在默認linux內核中提供kvm管理程序
libvirts:安裝虛擬機管理工具,使用virsh等命令來管理和控制虛擬機。
bridge-utils:設置網絡網卡橋接。
virt-*:創建、克隆虛擬機命令,以及圖形化管理工具virt-manager
qemu-img:安裝qemu組件,使用qemu命令來創建磁盤等。




c. 檢查kvm模塊是否加載
lsmod |grep kvm
正常應該是:
kvm_intel             55496  3
kvm                  337772  1 kvm_intel

如果沒有,需要執行 
modprobe kvm-intel
還沒有就重啟一下試試

d. 配置網卡
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0 ifcfg-br0
分別編輯eth0和br0
ifcfg-eth0改成如下:
DEVICE=eth0
HWADDR=00:0C:29:55:A7:0A
TYPE=Ethernet
UUID=2be47d79-2a68-4b65-a9ce-6a2df93759c6
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
BRIDGE=br0


ifcfg-br0改成如下:
DEVICE=br0
#HWADDR=00:0C:29:55:A7:0A
TYPE=Bridge
#UUID=2be47d79-2a68-4b65-a9ce-6a2df93759c6
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.11.17
NETMASK=255.255.255.0
GATEWAY=192.168.11.1
DNS1=202.106.0.20

說明:我的虛擬機是橋接模式,所以設置br0的ip和我的真機同樣的網段,包括網關也是我路由器的ip,大家可以根據自己的環境去配置,目的是為了讓虛擬機可以上網。

/etc/init.d/network restart
查看網卡如下:
br0       Linkencap:Ethernet  HWaddr 00:0C:29:55:A7:0A
          inetaddr:192.168.11.17  Bcast:192.168.11.255  Mask:255.255.255.0
          inet6addr: fe80::20c:29ff:fe55:a70a/64 Scope:Link
          UPBROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RXpackets:141326 errors:0 dropped:0 overruns:0 frame:0
          TXpackets:90931 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
          RXbytes:456024940 (434.8 MiB)  TX bytes:10933593 (10.4 MiB)

eth0      Linkencap:Ethernet  HWaddr 00:0C:29:55:A7:0A
          inet6addr: fe80::20c:29ff:fe55:a70a/64 Scope:Link
          UPBROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RXpackets:341978 errors:0 dropped:0 overruns:0 frame:0
          TXpackets:90946 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000
          RXbytes:468848861 (447.1 MiB)  TX bytes:10934699 (10.4 MiB)

lo        Linkencap:Local Loopback
          inetaddr:127.0.0.1  Mask:255.0.0.0
          inet6addr: ::1/128 Scope:Host
          UPLOOPBACK RUNNING  MTU:65536  Metric:1
          RXpackets:0 errors:0 dropped:0 overruns:0 frame:0
          TXpackets:0 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
          RXbytes:0 (0.0 b)  TX bytes:0 (0.0 b)

virbr0    Linkencap:Ethernet  HWaddr 52:54:00:14:EF:D5
          inetaddr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
          UPBROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RXpackets:0 errors:0 dropped:0 overruns:0 frame:0
          TXpackets:0 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
          RXbytes:0 (0.0 b)  TX bytes:0 (0.0 b)



e. 啟動或重啟libvirtd服務和messagebus 服務
/etc/init.d/libvirtd start
/etc/init.d/messagebus restart

此時可以查看網絡接口列表
brctl show 結果如下:
bridge name     bridgeid               STPenabled     interfaces
br0            8000.000c2955a70a       no             eth0
virbr0         8000.52540014efd5       yes            virbr0-nic


2. 創建虛擬機
mkdir /data/   //創建一個存儲虛擬機虛擬磁盤的目錄,該目錄所在分區必須足夠大

virt-install --name  aming1 --ram 512 --disk path=/data/aming1.img,size=30 --vcpus 1 --os-type linux --os-variant rhel6 --network bridge=br0 --graphics none --console pty,target_type=serial --location‘http://mirrors.163.com/centos/6.7/os/i386/‘ --extra-args ‘console=ttyS0,115200n8 serial‘ 


說明:
--name  指定虛擬機的名字
--ram 指定內存分配多少
--disk path 指定虛擬磁盤放到哪裏,size=30 指定磁盤大小為30G,這樣磁盤文件格式為raw,raw格式不能做快照,後面有說明,需要轉換為qcow2格式,如果要使用qcow2格式的虛擬磁盤,需要事先創建qcow2格式的虛擬磁盤。參考  http://www.361way.com/kvm-qcow2-preallocation-metadata/3354.html   示例:qemu-img create -f qcow2 -opreallocation=metadata  /data/test02.img 10G;  

--diskpath=/data/test02.img,format=qcow2,size=10,bus=virtio
--vcpus 指定分配cpu幾個
--os-type 指定系統類型為linux
--os-variant 指定系統版本
--network  指定網絡類型
--graphics 指定安裝通過哪種類型,可以是vnc,也可以沒有圖形,在這裏我們沒有使用圖形直接使用文本方式
--console 指定控制臺類型
--location 指定安裝介質地址,可以是網絡地址,也可以是本地的一個絕對路徑,(--location ‘/mnt/‘, 其中/mnt/下就是我們掛載的光盤鏡像mount /dev/cdrom /mnt)如果是絕對路徑,



已有本地鏡像可以



virt-install 
--name  test02 
--ram 512 
--diskpath=/data/kvm/test02.qcow2,format=qcow2,size=10,bus=virtio 
--vcpus 1 
--os-type linux 
--os-variant rhel7 
--network bridge=br0 
--graphics none 
--console pty,target_type=serial
--location ‘/data/CentOS.iso‘ 
--extra-args‘console=ttyS0,115200n8 serial‘





會出現文本方式的安裝界面,選擇時區,安裝包的選擇(默認 Minial install)、root密碼設置,創建新用戶,以及網絡配置。在此沒看見有,註意設置一下DNS。



最後安裝完,reboot就進入剛剛創建的虛擬機了。要想退回到宿主機,ctrl  ] 即可。

virsh list 可以列出當前的子機列表。

virsh start test01  啟動test01

virsh console test01  可以進入指定的子機





3. 克隆虛擬機
virt-clone --original test01 --name template--file /data/clone1.img  
如果子機test01還未關機,則需要先關機,否則會報錯:
ERROR    必須暫停或者關閉有要克隆設備的域。
關閉子機的方法是:
virsh shutdown test01

說明:默認,我們沒有辦法在宿主機直接shutdown自己,我們需要借助於子機上的acpid服務才可以,這個服務說白了就是讓宿主機可以去調用子機的電源關閉的接口。所以,子機上需要安裝並啟動acpid服務。
先登錄子機:
virsh console test01
登錄後,安裝acpid服務:
yum install -y acpid 
啟動:
/etc/init.d/acpid start
按ctrl ] 退出來
此時再執行 virsh shutdowntest01 就可以啦。

克隆完後,virsh list all 就會發現clone1 這個子機,通過命令 
virsh start clone1 可以開啟該子機。



4. virsh 常用操作
a. 開啟子機
virsh start test01
也可以在開啟的同時連上控制臺
virsh start test01 --console

b. 關閉子機
virsh shutdown test01 (這個需要借助子機上的acpid服務)
另外一種方法是 
virsh destroy test01 

c. 讓子機隨宿主機開機自動啟動
virsh autostart test01
解除自動啟動
virsh autostart --disable test01 

d. 列出子機
virsh list  //只能列出啟動的子機
virsh list --all  //可以把所有子機都列出來

e. 刪除子機
virsh destroy clone1
virsh undefine clone1
rm -f /data/clone1.img

f. 掛起子機
virsh suspend test01

h. 恢復子機
virsh resume test01



5. 快照管理
a. 創建快照
virsh snapshot-create test01
會報錯:
unsupported configuration: internal snapshot fordisk vda unsupported for storage type raw
這是因為raw格式的鏡像不能做快照,所以需要先轉換一下格式

b. 磁盤鏡像轉換格式
先查看當前子機磁盤鏡像格式
qemu-img info /data/test01.img  
結果是:
image: /data/test01.img
file format: raw
virtual size: 30G (32212254720 bytes)
disk size: 1.6G


把raw格式轉換為qcow格式(其實是復制了一份):
qemu-img convert -f raw -O qcow2 /data/test01.img/data/test01.qcow2

qemu-img info /data/test01.qcow2   //再次查看格式,結果如下
image: /data/test01.qcow2
file format: qcow2
virtual size: 30G (32212254720 bytes)
disk size: 1.1G
cluster_size: 65536


現在我們還需要編輯子機配置文件,讓它使用新格式的虛擬磁盤鏡像文件
virsh edit test01  //這樣就進入了該子機的配置文件(/etc/libvirt/qemu/test01.xml),跟用vim編輯這個文件一樣的用法
需要修改的地方是:
      <driver name=‘qemu‘type=‘raw‘ cache=‘none‘/>
      <sourcefile=‘/data/test01.img‘/>

改為:
      <driver name=‘qemu‘type=‘qcow2‘ cache=‘none‘/>
      <sourcefile=‘/data/test01.qcow2‘/>


c. 繼續創建快照
virsh snapshot-create test01  //這次成功了,提示如下
Domain snapshot 1437248443 created


列出快照:
virsh snapshot-list test01

查看當前子機的快照版本:
virsh snapshot-current test01

test01子機的快照文件在  /var/lib/libvirt/qemu/snapshot/test01/  目錄下


d.  恢復快照
首先需要關閉子機
virsh destroy test01

確認子機是否關閉
virsh domstate test01
關閉

vish snapshot-list test01  //結果是
名稱              Creation Time            狀態
------------------------------------------------------------
1437248443          2015-07-19 03:40:43 +0800 shutoff
1437248847          2015-07-19 03:47:27 +0800 running


virsh snapshot-revert test01  1437248443

e. 刪除快照
virsh snapshot-delete test01  1437248847



6. 磁盤擴容

a. 對於raw格式的虛擬磁盤擴容

qemu-img info /data/kvm/test03.img //本身只有9G

1.  image: /data/kvm/test03.img

2.  file format: raw

3.  virtual size: 9.0G (9663676416 bytes)

4.  disk size: 1.1G




qemu-img resize /data/kvm/test03.img +2G

qemu-img info /data/kvm/test03.img //現在增加了2G

1.  image: /data/kvm/test03.img

2.  file format: raw

3.  virtual size: 11G (11811160064 bytes)

4.  disk size: 1.1G

5.   




virsh destroy test03  //關閉test03虛擬機
virsh start test03  //開啟test03虛擬機
virsh console test03  //進入虛擬機

fdisk -l   查看已經磁盤分區已經增加
[[email protected] ~]# fdisk -l



但是磁盤掛載的空間並沒有增加
[[email protected] ~]# df -h

Filesystem           Size  Used Avail Use%Mounted on

/dev/mapper/VolGroup-lv_root

                    6.5G  579M  5.6G  10% /

tmpfs               250M     0  250M   0%/dev/shm

/dev/vda1            477M  26M  427M   6% /boot








因為新增加的空間還沒有劃分使用。所以要繼續分區:
[[email protected] ~]# fdisk /dev/vda

1.  WARNING: DOS-compatible mode is deprecated.It‘s strongly recommended to

2.          switch off the mode (command ‘c‘) and change display units to

3.          sectors (command ‘u‘).

4.   

5.  Command (m for help): p

6.   

7.  Disk /dev/vda: 11.8 GB, 11811160064 bytes

8.  16 heads, 63 sectors/track, 22885 cylinders

9.  Units = cylinders of 1008 * 512 = 516096bytes

10.Sector size(logical/physical): 512 bytes / 512 bytes

11.I/O size(minimum/optimal): 512 bytes / 512 bytes

12.Diskidentifier: 0x000099f3

13. 

14.  Device Boot      Start        End      Blocks  Id  System

15./dev/vda1  *           3       1018      512000  83  Linux

16.Partition 1does not end on cylinder boundary.

17./dev/vda2           1018      <font color="#ff0000">16645</font>    7875584   8e  Linux LVM

18.Partition 2does not end on cylinder boundary.

19. 

20.Command (mfor help):<font color="#ff0000"> n</font>

21.Commandaction

22.  e   extended

23.  p   primary partition (1-4)

24.p

25.Partitionnumber (1-4): <font color="#ff0000">3</font>

26.Firstcylinder (1-22885, default 1): <fontcolor="#ff0000">16646</font>

27.Lastcylinder, +cylinders or +size{K,M,G} (16646-22885, default 22885):

28.Usingdefault value 22885

29. 

30.Command (mfor help): p

31. 

32.Disk/dev/vda: 11.8 GB, 11811160064 bytes

33.16 heads, 63sectors/track, 22885 cylinders

34.Units =cylinders of 1008 * 512 = 516096 bytes

35.Sector size(logical/physical): 512 bytes / 512 bytes

36.I/O size(minimum/optimal): 512 bytes / 512 bytes

37.Diskidentifier: 0x000099f3

38. 

39.  Device Boot      Start        End      Blocks  Id  System

40./dev/vda1  *           3       1018      512000  83  Linux

41.Partition 1does not end on cylinder boundary.

42./dev/vda2           1018      16645     7875584   8e  Linux LVM

43.Partition 2does not end on cylinder boundary.

44.<fontcolor="#ff0000">/dev/vda3          16646       22885    3144960   83  Linux</font>

45. 

46.Command (mfor help): w

47.Thepartition table has been altered!

48. 

49.Callingioctl() to re-read partition table.

50. 

51.WARNING:Re-reading the partition table failed with error 16: Device or resource busy.

52.The kernelstill uses the old table. The new table will be used at

53.the nextreboot or after you run partprobe(8) or kpartx(8)

54.Syncingdisks.




然後再把這個/dev/vda3 加入到lvm裏面去:

ls  /dev/vda3 如果沒有這個分區,需要重啟一下。

[[email protected] ~]# pvcreate/dev/vda3

1.    <spanstyle="line-height: 1.5; ">Physical volume "/dev/vda3" successfullycreated</span>




[[email protected] ~]# pvs

1.  PV        VG       Fmt  Attr PSize PFree

2.    /dev/vda2 <fontcolor="#ff0000"> VolGroup</font> lvm2a--  7.51g    0

3.    /dev/vda3          lvm2 ---  3.00g 3.00g




[[email protected] ~]# vgextendVolGroup /dev/vda3

1.  Volume group "VolGroup"successfully extended




[[email protected] ~]# vgs

1.  VG       #PV #LV #SNAttr   VSize  <fontcolor="#ff0000">VFree</font>

2.    VolGroup   2  2   0 wz--n- 10.50g <fontcolor="#ff0000">3.00g</font>




[[email protected] ~]# lvs

1.  LV      VG      Attr       LSize   PoolOrigin Data%  Meta%  Move Log Cpy%Sync Convert

2.    lv_root VolGroup-wi-ao----   6.71g

3.    lv_swap VolGroup -wi-ao----816.00m




[[email protected] ~]# lvextend -l +100%FREE /dev/VolGroup/lv_root

1.  Size of logical volume VolGroup/lv_rootchanged from 6.71 GiB (1718 extents) to 9.71 GiB (2485 extents).

2.    Logical volume lv_rootsuccessfully resized




[[email protected] ~]# df -h

1.  Filesystem           Size  Used Avail Use% Mounted on

2.  /dev/mapper/VolGroup-lv_root

3.                      6.5G  618M  5.6G  10% /

4.  tmpfs                250M    0  250M   0% /dev/shm

5.  /dev/vda1            477M   26M  427M   6% /boot




[[email protected] ~]# resize2fs /dev/VolGroup/lv_root

1.  resize2fs 1.41.12 (17-May-2010)

2.  Filesystem at /dev/VolGroup/lv_root ismounted on /; on-line resizing required

3.  old desc_blocks = 1, new_desc_blocks = 1

4.  Performing an on-line resize of/dev/VolGroup/lv_root to 2544640 (4k) blocks.

5.  The filesystem on /dev/VolGroup/lv_root isnow 2544640 blocks long.


[[email protected] ~]# df -h

1.  Filesystem           Size  Used Avail Use% Mounted on

2.  /dev/mapper/VolGroup-lv_root

3.                      <fontcolor="#ff0000">9.5G  </font>618M  8.4G   7% /

4.  tmpfs                250M    0  250M   0% /dev/shm

5.  /dev/vda1            477M   26M  427M   6% /boot




另外,如果是增加磁盤,思路是: 
創建磁盤: qemu-img create -fraw  /data/kvm/test03_2.img 5G
關閉虛擬機: virsh destroy test03
編輯配置文件: virsh edittest03  增加如下:

1.  <disk type=‘file‘device=‘disk‘>     

2.    <driver name=‘qemu‘type=‘raw‘ cache=‘none‘/>      

3.    <source file=‘/data/kvm/test03_2.img‘/>     

4.    <target dev=‘vdb‘bus=‘virtio‘/>      

5.  </disk>


開啟虛擬機:virsh start test03
進入虛擬機:virsh console test03
分區: fdisk /dev/vdb
格式化(略)
掛載(略)
當然也可以按照上面的思路把 /dev/vdb1 加入到 lvm裏面去


b. qcow2格式
步驟基本上和raw一樣。如果提示 This image format doesnot support resize, 檢查一下你qemu-img create的時候,是否有加  preallocation=metadata 選項,如果有,就不能resize了。





7. 調整cpu和內存查看子機配置:
virsh dominfo test02
virsh edit  test02
修改:
  <memoryunit=‘KiB‘>524288</memory>
  <currentMemoryunit=‘KiB‘>524288</currentMemory>
  <vcpuplacement=‘static‘>1</vcpu>

為:
  <memoryunit=‘KiB‘>624288</memory>
  <currentMemoryunit=‘KiB‘>624288</currentMemory>
  <vcpuplacement=‘static‘>2</vcpu>


重啟虛擬機:
virsh destroy test02
virsh start test02





8. 不重啟虛擬機在線增加網卡
virsh domiflist test02  查看test02子機的網卡列表
virsh attach-interface test02 --type bridge--source br0   //命令行增加一塊網卡
virsh dumpxml test02 >/etc/libvirsh/qemu/test02.xml   //命令行增加的網卡只保存在內存中,重啟就失效,所以需要保存到配置文件中,其中/etc/libvirsh/qemu/test02.xml 為test02子機的配置文件
virsh console test02 //進入虛擬機後,執行
ifconfig -a
發現多了一個網卡  eth1





9. 虛擬機遷移

該方式要確保虛擬機是關機狀態。
virsh shutdown test02
virsh dumpxml test02 >/etc/libvirt/qemu/test03.xml  // 如果是遠程機器,需要把該配置文件拷貝到遠程機器上
virsh domblklist test02  //查看test02子機的磁盤所在目錄
Target     Source
------------------------------------------------
vda       /data/add1.qcow2
rsync -av /data/add1.qcow2/data/test03.qcow2   //如果是遷移到遠程,則需要把該磁盤文件拷貝到遠程機器上
vi /etc/libvirt/qemu/test03.xm  //因為是遷移到本機,配置文件用的是test02子機的配置,不改會有沖突,所以需要修改該文件,如果是遠程機器不用修改
修改domname:
  <name>test03</name>
修改uuid(隨便更改一下數字,位數不要變)
<uuid>77bb10bd-3ad8-8899-958d-756063002969</uuid>
修改磁盤路徑:
    <disk type=‘file‘device=‘disk‘>
      <driver name=‘qemu‘type=‘raw‘ cache=‘none‘/>
      <source file=‘/data/test03.qcow2‘/>
      <target dev=‘vda‘bus=‘virtio‘/>
      <address type=‘pci‘domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x05‘ function=‘0x0‘/>
    </disk>

virsh list --all   //會發現新遷移的test03子機

openstack項目【day24】:KVM部署