zoukankan      html  css  js  c++  java
  • nova Rescue 和 Unrescue

    usage: nova rescue [--password <password>] [--image <image>] <server>

    Reboots a server into rescue mode, which
                                    starts the machine from either the initial
                                    image or a specified image, attaching the
                                    current boot disk as secondary.

    A rescue is normally performed when something goes wrong with the
    primary images and data needs to be corrected/recovered. Rescuing
    should not edit or over-ride the original image, only allow for
    data recovery.

    不能rescue 一个 volume-backed instance

    compute manager中def rescue_instance 不用再check password了

    rescue_image_ref哪儿来?

    Rescue 是个很有意思的功能。它的一个使用场景是,虚机的启动盘的一个文件被误删除了导致无法再次启动了,或者 admin 的密码忘记了。Rescue 功能提供一个解决这类问题的手段。

    执行 nova rescue 命令后的主要过程是:

    (1)保存目前domain 的 xml 配置到 unrescue.xml 文件

    (2)根据 image 重新生成启动盘 disk.swap (大小不受 falvor.root_disk_size 控制,尽可能小的一个文件)

    复制代码
    root@compute2:/var/lib/nova/instances/8352e969-0a25-4abf-978f-d9d0ec4de0cd# qemu-img info disk.rescue
    image: disk.rescue
    file format: qcow2
    virtual size: 39M (41126400 bytes) #不是 falovr 里面定义的 1G 大小
    disk size: 1.6M
    cluster_size: 65536
    backing file: /var/lib/nova/instances/_base/fbad3d96a1727069346073e51d5bbb1824e76e34
    Format specific information:
        compat: 1.1
        lazy refcounts: false
    复制代码
            rescue_images = {
                'image_id': (rescue_image_id or
                            CONF.libvirt.rescue_image_id or instance.image_ref),
                'kernel_id': (CONF.libvirt.rescue_kernel_id or
                              instance.kernel_id),
                'ramdisk_id': (CONF.libvirt.rescue_ramdisk_id or
                               instance.ramdisk_id),
            }

    (3)构造一个新的 domain 的 xml 配置,使用 disk.rescue 做启动盘,将原来的 disk 挂载到该 domain,其他的盘和volume不会被挂载。

    复制代码
       <disk type="file" device="disk">
          <driver name="qemu" type="qcow2" cache="none"/>
          <source file="/var/lib/nova/instances/8352e969-0a25-4abf-978f-d9d0ec4de0cd/disk.rescue"/> #新构造的启动盘
          <target bus="virtio" dev="vda"/>
        </disk>
        <disk type="file" device="disk">
          <driver name="qemu" type="qcow2" cache="none"/>
          <source file="/var/lib/nova/instances/8352e969-0a25-4abf-978f-d9d0ec4de0cd/disk"/> #原来的启动盘
          <target bus="virtio" dev="vdb"/>
        </disk>
    复制代码

    (4)将原来的 domain destroy 掉 (virt_dom.destroy)

    (5)定义新的 domain (conn.defineXML(xml))

    (6)启动新的 domain (domain.createWithFlags)

    至此,nova rescue 的过程完成。用户可以 ssh 到新的虚机,修改 “Vdb“分区中的受损害的文件。然后执行 ”nova unrescue“命令。其主要过程是:

    (1)读取之前保存的 unrescue.xml 文件

    (2)将 rescued domain destroy 掉

    (3)定义和启动新的domain(同上面5和6)

    (4)删除 unrescue.xml 文件

    注意,这时候文件夹中的 libvirt.xml 文件和新运行的 domain 的 xml 不一致,因为代码中没有将新的 domain 的xml 写到该文件。

    http://www.cnblogs.com/sammyliu/p/4571209.html

  • 相关阅读:
    LeetCode Best Time to Buy and Sell Stock
    LeetCode Scramble String
    LeetCode Search in Rotated Sorted Array II
    LeetCode Gas Station
    LeetCode Insertion Sort List
    LeetCode Maximal Rectangle
    Oracle procedure
    浏览器下载代码
    Shell check IP
    KVM- 存储池配置
  • 原文地址:https://www.cnblogs.com/allcloud/p/4939808.html
Copyright © 2011-2022 走看看