work——内容

使用virsh搭建虚拟机管理环境

sudo apt install qemu-kvm libvirt-daemon-system virtinst libvirt-clients bridge-utils
sudo systemctl enable libvirtd

现在通过发出以下命令启动libvirtd:

sudo systemctl start libvirtd

将你的用户添加到KVM和Libvirt组

sudo usermod -aG kvm $USER

现在使用此命令将用户添加到libvirt组:

sudo usermod -aG libvirt $USER

下面列出环境需要的依赖库

1. 安装kvm

yum install kvm / apt-get install kvmapt-get install kvm / apt-get install kvm

2. 安装qemu

yum install qemu/ apt-get install qemu install qemu/ apt-get install qemu

3. 安装libguest

yum install  libguestfs  libguestfs-tools
 install  libguestfs  libguestfs-tools

    说明:libguestfs-tools包含virt-cat virt-copy-in virt-copy-out等工具,此项是必须安装的,单独的libguestfs不包含以上内容

4. 安装libvirt

yum install libvirt / apt-get install libvirt install libvirt / apt-get install libvirt

5. 安装libguestfs-winsupport

On Red Hat Enterprise Linux or CentOS, you have to install the libguestfs-winsupport package.install the libguestfs-winsupport package.

    下载地址:https://people.redhat.com/~rjones/libguestfs-winsupport/

    如果不安装winsupport的话,镜像注入时会报错

virt-cat: no operating system was found on this diskcat: no operating system was found on this disk

    VM操作说明

libvirtVM管理工具

环境ubuntu:14:04

软件:

sudoapt-get install kvm

sudoapt-get install libvirt-bin

sudoapt-get install

1.制作基本镜像(windows2008)

1) qemu-img create -f qcow2 win2008_20G.img 20G

2) kvm -m 2024 -cpu Nehalem -hda win2008_20G.img -cdrom window2008.iso-boot d

2.创建VMdomain xml配置

test.xml

 <domain type='kvm' id='1'>
    <name>test7</name>
    <uuid>d779256d-b82d-0ce6-520f-c4dda1596da9</uuid>
    <memory>1024000</memory>
    <vcpu>1</vcpu>
    <os>
        <type>hvm</type>
        <boot dev='hd'/>
    </os>
    <features>
        <acpi/>
    </features>
    <devices>
        <disk type='file' device='disk'>
            <driver name='qemu' type='qcow2'/>
            <source file='/home/working/kvm/111111/win2008.img'/>
            <target dev='hda' bus='ide'/>
        </disk>
        <disk type='file' device='disk'>
            <driver name='qemu' type='qcow2'/>
            <source file='/home/working/kvm/111111/expand.img'/>
            <target dev='hdb' bus='virtio' type='virtio'/>
        </disk>
        <disk type='file' device='cdrom'>
            <driver name='qemu' type='raw'/>
            <source file='/home/working/kvm/111111/virtio-win-0.1-65.iso'/>
            <target dev='hdc' bus='ide'/>
        </disk>
         <interface type = 'bridge'>//增加桥接的化使用virsh创建就可以正常上网
             <source bridge = 'virbr0'/>
         </interface>
        <graphics type='vnc' passwd=''  port='5907'  keymap='en-us'/>
    </devices>
 </domain>

<interface type='bridge'> <source bridge='br0'/> <model type='virtio'/> <mac address='00:17:3E:64:01:00'/> //为虚拟机分配mac地址,务必唯一,否则dhcp获得同样ip,引起冲突 <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>

3.VM操作

1)创建并启动

sudovirsh create test.xml //创建并启动

2)定义

sudovirsh define test.xml //定义虚拟机不启动

3)启动

sudovirsh start test7 //启动test7

4)关闭

sudovirsh shutdown test7 //关闭test7

5)重启

sudovirsh reboot test7 //重启

6)列表

sudovirsh list

7) monitor交互

sudovirsh qemu-monitor-command test7 --hmp "system_powerdown"

sudovirsh qemu-monitor-command test7 --hmp "set_password vnc 22222" //修改vnc密码

4.vnc链接VM

1) virt-viewer test7

2)通用vnc客户端

5.硬盘挂载

1)前提需要在镜像里面安装virtio驱动,安装virtio驱动后系统就可以直接识别virtio类

型的硬盘。

2)挂载盘配置信息我们也使用xml文件进行配置,配置文件里面只存放最基本的盘符信息, 将一下文件保存为attach.xml

<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2'/>
  <source file='/home/tt/working/kvm/111111/expand.img'/>
  <target dev='hdf' bus='virtio'/>
</disk>disk type='file' device='disk'>
  <driver name='qemu' type='qcow2'/>
  <source file='/home/tt/working/kvm/111111/expand.img'/>
  <target dev='hdf' bus='virtio'/>
</disk>

挂载盘符

sudo virsh attach-device test7 attach.xml
挂载后在系统中可以马上看到反映,如果为格式化的话需要在系统里面格式化创建分区。

7. 文件注入
  1 ) 镜像文件列表查看
   //查看文件列表
   sudo virt-ls -a win2003_test.img /"Program Files/Cloudbase Solutions/Cloudbase-Init/conf" -l
  2 ) 镜像文件内容查看
    //查看cloudbase-init.conf的内容
    sudo virt-cat -a win2003_test.img /"Program Files/Cloudbase Solutions/Cloudbase-
    Init/conf/cloudbase-init.conf"
virsh attach-device test7 attach.xml
挂载后在系统中可以马上看到反映,如果为格式化的话需要在系统里面格式化创建分区。

7. 文件注入
  1 ) 镜像文件列表查看
   //查看文件列表
   sudo virt-ls -a win2003_test.img /"Program Files/Cloudbase Solutions/Cloudbase-Init/conf" -l
  2 ) 镜像文件内容查看
    //查看cloudbase-init.conf的内容
    sudo virt-cat -a win2003_test.img /"Program Files/Cloudbase Solutions/Cloudbase-
    Init/conf/cloudbase-init.conf"

3)镜像文件拷贝

可以用来做镜像文件注入

//把当前目录下的test.xml拷贝到镜像win2003.img中的ProgramFiles/Cloudbase Solutions/Cloudbase-Init/conf目录下

 sudo virt-copy-in -a win2003_test.img test.xml  /"Program Files/Cloudbase Solutions/Cloudbase-Init/conf" sudo virt-copy-in -a win2003_test.img test.xml  /"Program Files/Cloudbase Solutions/Cloudbase-Init/conf" 

8.密码注入

  1 ) 密码注入使用CloudBaseInit进行注入1 ) 密码注入使用CloudBaseInit进行注入

libvirt优点:

具有管理vm功能,若使用qemu的话,需要增加管理VM代码成本。

libvirt缺点:

    创建VM,需要对应的XML配置。

virt-install --name  ub-20-30 --ram 4096 --vcpu=2 --virt-type kvm --cdrom=/home/lin/kvm/ubu-20/ubuntu-20.04-desktop-amd64.iso   --disk ubu-20.qcow2,size=30,bus=virtio --network bridge=virbr0 --graphics vnc,listen=0.0.0.0 --noautoconsole

<domain type='kvm' id='134'>
  <name>test-254</name>
  <uuid>4a4eed3c-d062-40ef-a6fb-17ea7e0218dc</uuid>
  <memory unit='KiB'>8388608</memory>
  <currentMemory unit='KiB'>8388608</currentMemory>
  <vcpu placement='static'>8</vcpu>
  <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'>Skylake-Server-IBRS</model>
    <feature policy='require' name='md-clear'/>
    <feature policy='require' name='spec-ctrl'/>
    <feature policy='require' name='ssbd'/>
    <feature policy='require' name='hypervisor'/>
    <feature policy='disable' name='arat'/>
  </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/test-254.qcow2'/>
      <backingStore/>
      <target dev='vda' bus='virtio'/>
      <alias name='virtio-disk0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu'/>
      <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='0x05' 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='0x05' 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='0x05' 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='0x05' 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='0x06' function='0x0'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:04:e4:c9'/>
      <source bridge='br1'/>
      <target dev='vnet5'/>
      <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/4'/>
      <target type='isa-serial' port='0'>
        <model name='isa-serial'/>
      </target>
      <alias name='serial0'/>
    </serial>
    <console type='pty' tty='/dev/pts/4'>
      <source path='/dev/pts/4'/>
      <target type='serial' port='0'/>
      <alias name='serial0'/>
    </console>
    <channel type='unix'>
      <source mode='bind' path='/var/lib/libvirt/qemu/instance-000000a1.sock'/>
      <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>
    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0' state='disconnected'/>
      <alias name='channel1'/>
      <address type='virtio-serial' controller='0' bus='0' port='2'/>
    </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='spice' port='5904' autoport='yes' listen='127.0.0.1'>
      <listen type='address' address='127.0.0.1'/>
      <image compression='off'/>
    </graphics>
    <graphics type='vnc' port='6010' autoport='no' listen='0.0.0.0' keymap='en-us'>
      <listen type='address' address='0.0.0.0'/>
    </graphics>
    <sound model='ich6'>
      <alias name='sound0'/>
      <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'/>
      <alias name='video0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <redirdev bus='usb' type='spicevmc'>
      <alias name='redir0'/>
      <address type='usb' bus='0' port='2'/>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
      <alias name='redir1'/>
      <address type='usb' bus='0' port='3'/>
    </redirdev>
    <memballoon model='virtio'>
      <alias name='balloon0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
    </memballoon>
    <rng model='virtio'>
      <backend model='random'>/dev/urandom</backend>
      <alias name='rng0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
    </rng>
  </devices>
  <seclabel type='dynamic' model='selinux' relabel='yes'>
    <label>system_u:system_r:svirt_t:s0:c154,c744</label>
    <imagelabel>system_u:object_r:svirt_image_t:s0:c154,c744</imagelabel>
  </seclabel>
  <seclabel type='dynamic' model='dac' relabel='yes'>
    <label>+107:+107</label>
    <ima
 

qcow2 格式的压缩

首先,需要对虚拟机系统对剩余空间写零操作:

$ dd if=/dev/zero of=/zero.dat

删除 zero.dat:

$ rm /zero.dat

关闭虚拟机,进入虚拟机镜像文件的目录,通过 qemu-img 的 convert 来操作:

$ qemu-img convert -c -O qcow2 /path/old.img.qcow2 /path/new.img.qcow2
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值