• 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

  • 相关阅读:
    【转】iOS:AvPlayer设置播放速度不生效的解决办法
    【转】 Android xml中 @和?区别,style和attr小结
    【转】Android 旋转动画,停止和持续旋转
    【转】Android SDK,ADT,API 版本的对应关系
    【转】说说Android中的style和theme
    【转】 Android中selector的使用
    【转】[置顶] 在Android中显示GIF动画
    mysql if case条件更新
    117. Populating Next Right Pointers in Each Node II
    116. Populating Next Right Pointers in Each Node
  • 原文地址:https://www.cnblogs.com/allcloud/p/4939808.html
Copyright © 2020-2023  润新知