`

Java-libvirt的使用:创建虚拟机与快照

 
阅读更多
1.创建域(虚拟机):包括Volume和描述硬件配置的xml

    //前端与节点建立连接


    Connect conn=new Connect("qemu+ssh://root@192.168.69/system",false);

    //根据xml描述创建新虚拟机并启动


    SAXReader reader = new SAXReader();

    Document docu = reader.read(new File("/domain.xml"));

    String xmlDesc=docu.asXML();

    Domain domain=conn.domainCreateXML(xmlDesc, 0);

    domain.resume();

补:新建域可以直接加载镜像(.img),但这样镜像只能被一个用户使用。为可以让镜像能被多个用户使用,可使用StorageVol来关联镜像,虚拟机加载该备份即可。

    Connect con=new Connect("");
    //根据存储池的名字获得StoragePool

    StoragePool pool=con.storagePoolLookupByName("default");
    SAXReader reader=new SAXReader();
    Document docu=reader.read(new File("/volume.xml"));
    StorageVol vol=pool.storageVolCreateXML(docu.asXML(), 0);


记录下vol的存储地址,赋值到域的配置文件中即可。

删除vol

    StorageVol vol=pool.storageVolLookupByName(volName);
    vol.delete(0);

补:StorageVol可以作为镜像的快照,大小很小,只记录了对镜像的修改。
2.迁移/销毁域

    //前端与节点建立连接

    Connect conn1=new Connect("qemu+ssh://root@192.168.82.70/system",false);
    //根据域的uuid-unique id(在生成域时,libvirt自动分配唯一的uuid),返回域。

    String uuid="";
    Domain domain=conn1.domainLookupByUUIDString(uuid);
    Connect conn2=new Connect("qemu+ssh://root@192.168.82.71/system",false);
    /*
     * 把域从当前主机迁移到目的主机
     * Domain migrate(Connect dconn, long flags, String dname, String uri, long bandwidth)
     * dconn:目的主机
     * dname:可选,重命名域在目的机的名字
     * uri:可选,目的机ip
     * bandwidth:迁移带宽,Mbps
     */
    domain.migrate(conn2, 1, null, null, 5);
    //销毁域

    domain.destroy();

补:域的名字、id等信息都在xml配置描述里定义。对于xml文件的操作使用dom4j。

标准domain.xml

        <domain type='kvm'>
          <name>test</name>
          <memory>524288</memory>
          <currentMemory>524288</currentMemory>
          <vcpu>1</vcpu>
          <os>
            <type arch='x86_64' machine='pc-0.14'>hvm</type>
            <boot dev='hd'/>
            <bootmenu enable='no'/>
          </os>
          <features>
            <acpi/>
            <apic/>
            <pae/>
          </features>
          <clock offset='localtime'/>
          <on_poweroff>destroy</on_poweroff>
          <on_reboot>restart</on_reboot>
          <on_crash>restart</on_crash>
          <devices>
            <emulator>/usr/bin/qemu-kvm</emulator>
            <disk type='file' device='disk'>
              <driver name='qemu' type='qcow2'/>
              <source file='/var/lib/libvirt/images/test.img'/><!--运行的镜像-->
              <target dev='vda' bus='virtio'/>
              <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
            </disk>
            <interface type='network'>
              <mac address='52:54:00:19:25:7b'/>
              <source network='default'/>
              <model type='virtio'/>
              <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
            </interface>
            <serial type='pty'>
              <target port='0'/>
            </serial>
            <console type='pty'>
              <target type='serial' port='0'/>
            </console>
            <input type='tablet' bus='usb'/>
            <input type='mouse' bus='ps2'/>
            <graphics type='vnc' port='5910' autoport='no' listen='0.0.0.0'/>
            <sound model='ac97'>
              <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
            </sound>
            <video>
              <model type='cirrus' vram='9216' heads='1'/>
              <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
            </video>
            <memballoon model='virtio'>
              <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
            </memballoon>
          </devices>
        </domain>
    标准volume.xml

        <volume>
          <name></name>
          <key>/var/lib/libvirt/images/temp.ss</key>
          <source>
          </source>
          <capacity>8589934592</capacity>
          <allocation>139264</allocation>
          <target>
            <path>/var/lib/libvirt/images/temp.ss</path> <!--新卷的地址-->
            <format type='qcow2'/>
            <permissions>
              <mode>0600</mode>
              <owner>0</owner>
              <group>0</group>
            </permissions>
          </target>
           <backingStore>
            <path>/var/lib/libvirt/images/WinXP.img</path><!--关联的镜像-->
            <format type='qcow2'/>
            <permissions>
              <mode>0600</mode>
              <owner>107</owner>
              <group>107</group>
            </permissions>
          </backingStore>
        </volume>
    补:dom4j使用示例

    SAXReader reader = new SAXReader();
    Document docu = reader.read(new File("/domain.xml"));
    //更改元素的属性值

    Element graphics=docu.getRootElement().element("devices").element("graphics");
    Attribute attrPort=graphics.attribute("port");
    attrPort.setText(getPort());
    //更改元素值

    Element nameEle=docu.getRootElement().element("name");
    nameEle.setText("new name");
    //以字符串形式返回xml

    String docXmlText=docu.asXML();
分享到:
评论

相关推荐

    terraform-libvirt-demo:使用Terraform将libvirt虚拟机部署为代码

    在"terraform-libvirt-demo"项目中,我们将学习如何设置Terraform配置文件来创建libvirt虚拟机。这个项目通常会包含以下核心文件: 1. `main.tf`:这是Terraform的主配置文件,它定义了libvirt provider、虚拟机...

    go-libvirt:软件包libvirt提供了用于与Libvirt进行交互的纯Go接口。 Apache 2.0许可

    软件包go-libvirt提供了用于与libvirt进行交互的纯Go接口。 而不是使用libvirt的的C绑定,这个软件包使用了libvirt的的RPC接口,如记录。 与libvirt服务器的连接可以是本地的,也可以是远程的。 RPC数据包使用定义...

    使用libvirt管理kvm虚拟机.txt

    ### 使用libvirt管理KVM虚拟机 #### 一、引言 随着云计算和虚拟化技术的发展,越来越多的企业和个人用户选择使用虚拟化技术来提高资源利用率并简化管理流程。其中,KVM(Kernel-based Virtual Machine)作为Linux...

    CentOS8安装KVM虚拟机详解.docx

    * libvirt-client:为虚拟客户机提供的 C 语言工具包 * virt-install:基于 libvirt 服务的虚拟机创建命令 * bridge-utils:创建和管理桥接设备的工具 三、虚拟机的创建和管理 1. 开启 kvm 服务,并设置其开机自动...

    terraform-libvirt-vm:KVMLibvirt虚拟机的Terraform模块

    该模块将创建一个KVM虚拟机,使用Cloud Init对其进行配置并测试ssh连接。 该模块正在使用 Terraform提供程序。 本模块提供的内容 创建一个或多个虚拟机 每个域一个网卡,使用网桥接口连接到网络 使用DHCP或静态配置...

    libvirt和ruby-libvirt在Macos系统上安装失败解决方法

    使用`--with-libvirt-include`和`--with-libvirt-lib`选项: ```bash gem install ruby-libvirt -- --with-libvirt-include=/path/to/include --with-libvirt-lib=/path/to/lib ``` 安装过程中可能遇到的错误包括...

    Libvirt命令大全

    通过Libvirt,用户可以轻松地管理虚拟机生命周期,如创建、启动、停止虚拟机等。 本文档提供了一个全面的Libvirt命令列表及其简要说明,旨在帮助用户更好地理解和掌握Libvirt提供的各种管理和操作功能。 #### 二、...

    linux下KVM虚拟化总结

    * 使用 qemu-img 命令创建虚拟机磁盘文件 * 使用 virt-install 命令设置虚拟机磁盘大小和类型 十、虚拟机安全配置 * 使用 selinux 或 iptables 配置虚拟机安全策略 * 使用 virsh 命令设置虚拟机安全参数 十一、...

    virt-manager:通过libvirt管理虚拟机的桌面工具

    还提供了几种命令行工具: virt-install :创建新的libvirt虚拟机virt-clone :复制现有的libvirt虚拟机virt-xml :编辑现有的libvirt虚拟机/操作libvirt XML 有关依赖项信息和安装说明,请参阅文件。 如果您只想...

    KVM虚拟机管理(使用virt-manager和virsh)

    本文将详细介绍KVM虚拟机管理,包括Libvirt管理架构、使用virt-manager管理虚拟机和使用virsh管理虚拟机。 一、Libvirt管理架构 Libvirt是一个开源的虚拟机管理工具和API,提供了一个统一的接口来管理多种不同的...

    ansible-role-libvirt:在系统上安装和配置libvirt

    在系统上安装和配置libvirt。 的GitHub 亚搏体育app 质量 资料下载 版本 该示例摘自molecule/resources/converge.yml并在每次推送,拉动请求和释放时进行了测试。 --- - name : converge hosts : all become :...

    sclo-vagrant1-rubygem-fog-libvirt-0.0.1-6.el7.noarch.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    buki-libvirt:包装在 libvirt 周围,更好

    为了深入了解和使用buki-libvirt,可以下载`buki-libvirt-master`源码,阅读README并运行示例代码,或者查阅相关文档来熟悉其API。对于Java开发者来说,buki-libvirt是一个很好的工具,它可以帮助简化libvirt的使用...

    libvirt-java0.4.7

    libvirt-java则通过Java语言封装了这个库,使得Java开发者能够利用其丰富的类库和API,以面向对象的方式处理虚拟机的创建、管理、监控等任务。 在libvirt-java 0.4.7版本中,主要包含以下几个核心组件: 1. **连接...

    KVM服务器添加虚拟机

    使用`qemu-img`工具创建虚拟机使用的磁盘映像。命令格式如下: ```bash qemu-img create -f qcow2 /kvmdir/test.img 4G ``` 这里创建了一个名为`test.img`的4GB大小的qcow2格式磁盘映像。 #### 四、安装虚拟机 ...

    ansible-collection-jm1-libvirt:使用libvirt https的Ansible集合

    它受启发,例如和类似于以使用和创建虚拟机。 例如: - hosts : all tasks : - name : Install software required by jm1.libvirt's roles and modules import_role : name : jm1.libvirt.setup - name : Fetch ...

    php-libvirt-client:PHP libvirt客户端

    Libvirt客户端和XML Builder要求如果需要以下功能,则需要使用我修补的libvirt-php( ): resource libvirt_domain_snapshot_create_xml(resource $domain, string $xml, int $flags = 0)bool libvirt_domain_...

    命令行管理kvm

    - 使用`virt-install`命令创建虚拟机。 3. **虚拟机安装指令** `virt-install`: - 用于安装新的虚拟机。 4. **虚拟机管理指令** `virsh`: - 用于管理已存在的虚拟机。 **2. qemu-img命令详解** - `qemu-img`...

    ansible-libvirt-vm-IaC:部署为代码libvirt虚拟机的Ansible角色

    标题 "ansible-libvirt-vm-IaC:部署为代码libvirt虚拟机的Ansible角色" 指的是一个使用Ansible自动化工具来管理libvirt虚拟机的特定角色或模块。这个角色是基础设施即代码(Infrastructure as Code,IaC)实践的一...

Global site tag (gtag.js) - Google Analytics