1. 程式人生 > 其它 >Linux Virsh 控制虛擬機器

Linux Virsh 控制虛擬機器

virsh 命令對虛擬的控制

Virsh 命令對虛擬機器操作

參考文件

virsh define 建立虛擬機器

1. 首先需要建立一個稀疏映象

# 校驗映象是否正確
qemu-img check 映象名

# 建立一個qcow2的稀疏檔案虛擬磁碟檔案,就是說剛創建出來的檔案並沒有8G,它會隨著資料的增多慢慢增加,直到80G;

qemu-img create -f qcow2 -b /path/name.qcow2 -o backing_fmt=qcow2 /path/new_name.qcow2 80G

# 引數說明: 
	#  -f: 指定映象格式, 
	#  -o:指定選項 
	#  /root/kvm.qcow2 表示指定建立的虛擬磁碟路徑 
	#  80G指定磁碟大小;
	#  backing_fmt, 設定後端映象的映象格式

2. 建立一個 xml 檔案

Python 生成一個 uuid 作為虛擬機器的 uuid

import uuid

# 基於時間戳生成一個 uuid
def get_uuid():
    instance = uuid.uuid1()
    return instance
<domain type='kvm'>
    <name>generic</name>
    <uuid>f3a9ac9b-32fc-4fe0-bb63-8a970db3b50d</uuid>
    <memory unit='KiB'>10485760</memory>
    <currentMemory unit='KiB'>10485760</currentMemory>
    <vcpu placement='static'>8</vcpu>
    <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='partial'>
        <model fallback='allow'>Broadwell</model>
    </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='qcow2'/>
            <source file='/var/lib/libvirt/images/generic.qcow2'/>
            <target dev='hda' bus='ide'/>
            <address type='drive' controller='0' bus='0' target='0' unit='0'/>
        </disk>
        <disk type='file' device='cdrom'>
            <driver name='qemu' type='raw'/>
            <target dev='hdb' bus='ide'/>
            <readonly/>
            <address type='drive' controller='0' bus='0' target='0' unit='1'/>
        </disk>
        <controller type='usb' index='0' model='ich9-ehci1'>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
        </controller>
        <controller type='usb' index='0' model='ich9-uhci1'>
            <master startport='0'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
        </controller>
        <controller type='usb' index='0' model='ich9-uhci2'>
            <master startport='2'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
        </controller>
        <controller type='usb' index='0' model='ich9-uhci3'>
            <master startport='4'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
        </controller>
        <controller type='pci' index='0' model='pci-root'/>
        <controller type='ide' index='0'>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
        </controller>
        <controller type='virtio-serial' index='0'>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
        </controller>
        <interface type='network'>
            <mac address='52:54:00:29:5b:67'/>
            <source network='default'/>
            <model type='rtl8139'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
        </interface>
        <serial type='pty'>
            <target type='isa-serial' port='0'>
                <model name='isa-serial'/>
            </target>
        </serial>
        <console type='pty'>
            <target type='serial' port='0'/>
        </console>
        <channel type='spicevmc'>
            <target type='virtio' name='com.redhat.spice.0'/>
            <address type='virtio-serial' controller='0' bus='0' port='1'/>
        </channel>
        <input type='mouse' bus='ps2'/>
        <input type='keyboard' bus='ps2'/>
        <graphics type='spice' autoport='yes'>
            <listen type='address'/>
            <image compression='off'/>
        </graphics>
        <sound model='ich6'>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
        </sound>
        <video>
            <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
        </video>
        <redirdev bus='usb' type='spicevmc'>
            <address type='usb' bus='0' port='1'/>
        </redirdev>
        <redirdev bus='usb' type='spicevmc'>
            <address type='usb' bus='0' port='2'/>
        </redirdev>
        <memballoon model='virtio'>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
        </memballoon>
    </devices>
</domain>

3. 建立虛擬機器

virsh define ./instance_xml_name.xml

virsh 其他操作

  • 刪除虛擬機器
# 先關機 在刪除 
virsh destroy  虛擬機器名稱
virsh undefine 虛擬機器名稱 
  • 關閉虛擬機器
virsh shutdown 虛擬機器名稱
  • 強制關閉虛擬機器
virsh destory 虛擬機器名稱

virsh 虛擬機器快照

  • 建立虛擬機器快照
virsh snapshot-create-as 虛擬機器名稱 快照名稱
# domain 是指虛擬機器的名字
# snapshot-name 是指快照的名字
  • 檢視快照列表和詳情資訊
virsh snapshot-list 虛擬機器名稱 快照名稱
  • 恢復快照
virsh snapshot-revert 虛擬機器名稱 快照名稱
  • 刪除快照
virsh snapshot-delete 虛擬機器名稱 快照名稱

virsh lv卷:作為虛擬機器後端儲存

檢視虛擬機器的虛擬磁碟

$ virsh domblklist <虛擬機器名稱>

掛載一個 LV 作為虛擬機器硬碟

$ virsh attach-disk instance_name /dev/vg_name/lv_name vde --driver qemu

$ virsh <虛擬機器名字> <掛載的lv> <lv 所在的硬碟> 
	--derver <裝置驅動 qemu> 
	--mode <掛載的型別>  # --mode shareable
	
OPTIONS
    [--domain] <string>  domain name, id or uuid
    [--source] <string>  source of disk device
    [--target] <string>  target of disk device 一般為vdb,vdc...
    --driver <string>  driver of disk device
    --mode <string>  mode of device reading and writing
    --subdriver 映象檔案的格式

解除安裝一塊虛擬磁碟

# 解除安裝某一臺虛擬機器上的虛擬磁碟
$ virsh detach-device <虛擬機器名稱> <target:一般為 sdb sdbc>

# 
$ virsh domlblist <虛擬機器名稱>