如何在本地运行 Rackspace 镜像?

edu*_*e05 4 image xen virtual-machines rackspace kvm-virtualization

正如标题所说,我经常下载我的 Rackspace 图像来备份我的 VPS,但是我想知道是否可以在 KVM 上本地运行它们(例如),这样我就可以在我的应用程序上运行测试而不影响生产。

uve*_*ten 8

大约一年后的原始问题,我想我有一个很好的程序来下载 Rackspace 图像并在本地运行它们,在Ubuntu Precise 上运行的Xen下。

我会在这里写下这些步骤,所以如果您想尝试一下,这里有一个简单的食谱供您参考。这些步骤至少适用于 linux/Ubuntu domU,也适用于其他 YMMV。

(这些说明也发布在我们的博客http://www.everichon.com/blog/2013/05/29/running-rackspace-images-locally/ 上

  1. 安装 Ubuntu precision (12.04 LTS),然后按照http://blog.heidt.biz/blog/2012/09/17/setting-up-ubuntu-12-dot-04-precise-pangolin-as- 中提到的步骤操作xen-dom0/将您的服务器设置为 Xen Dom0。至少确保运行 12.04 并安装了 xen 和 xe-tools,以及用于 DomU 虚拟磁盘的 LVM 卷组。

  2. 转到机架空间云 ( manage.rackspacecloud.com -> Hosting -> Cloud servers)上的服务器页面,然后选择要在本地运行的服务器页面。转到Images该服务器的选项卡。创建按需图像。(根据首次创建服务器的时间,点播图像将直接进入云文件或与服务器一起存储。如果图像与服务器一起存储,则必须在创建后将其移动到云文件。)

  3. 检查云文件中的图像名称。前往Hosting -> Cloud Files并打开容器cloudservers。那里应该有名为 like 的文件myservername_YYYYMMDD_XXXXX_cloudserverZZZZZ.tar.gz.0,这就是您想要的文件。

  4. 将图像下载到您的服务器。在 Ubuntu 12.04 上执行此操作的最简单方法是使用swift. 要安装,只需sudo apt-get install swift. 然后像这样运行swift -A https://auth.api.rackspacecloud.com/v1.0 -U username -K API_key download cloudservers myservername_YYYYMMDD_XXXXX_cloudserverZZZZZ.tar.gz.0

  5. 下载完成后,解压下载的文件 ( tar zxf myservername_YYYYMMDD_XXXXX_cloudserverZZZZZ.tar.gz.0)。完成后,您将获得以下文件:

    image
        -> image.vhd
        -> manifest.ovf
        -> snap.vhd
    
    Run Code Online (Sandbox Code Playgroud)

    image.vhd 是我们感兴趣的,因为它包含来自云服务器的根分区。

  6. 为了更轻松地处理图像文件,我们将其转换为原始磁盘映像。这是使用完成的qemu-img(如果它在您的系统上不可用,请执行sudo apt-get install qemu-utils)。要将 image.vhd 转换为更易于使用的内容,请执行以下操作qemu-img convert -p image.vhd disk.img

  7. 使用 fdisk 检查磁盘映像。(注意:我只使用了机架空间中的 20 GB 大图像,我的笔记是关于它们的。如果您使用其他尺寸,则必须相应地调整一些步骤!) fdisk -l disk.img应该给出如下内容:

    Disk sda1.img: 20.4 GB, 20400758784 bytes
    255 heads, 63 sectors/track, 2480 cylinders, total 39845232 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x00000000
    
       Device Boot      Start         End      Blocks   Id  System
    disk.img1   *        2048    39845887    19921920   83  Linux
    
    Run Code Online (Sandbox Code Playgroud)

    请注意第一个分区的起始偏移量和扇区大小。

  8. (可选)检查磁盘映像是否正常。为此,我们将其挂载回环并简单地查看它是否有效。

    mkdir tmp
    mount -o loop,offset=1048576 disk.img tmp/
    ls -la tmp
    (The offset above is start for the first partition * sector size) 
    
    Run Code Online (Sandbox Code Playgroud)

    这表明磁盘没问题。然后卸载镜像。umount tmp

  9. 为您的新 DomU 创建逻辑卷和交换卷。lvcreate -L20G -n myservername-disk vg0lvcreate -L2G -Cy -n myservername-swap vg0。还要初始化交换磁盘,mkswap /dev/vg0/myservername-swap

  10. 将磁盘映像复制到新的逻辑卷。dd if=disk.img of=/dev/vg0/myservername-disk bs=4096 skip=256. 在bsskip那里得到正确的为您的分区偏移量参数。bs=512 skip=2048当然,我可以使用,但是增大块大小会使复制速度更快。(而 512*2048 = 4096*256,所以偏移量无关紧要。)

  11. 检查逻辑卷上的文件系统(并修复任何错误),调整 fs 的大小以适合 lv,然后再次检查。

    e2fsck -f /dev/vg0/myservername-disk
    resize2fs -p /dev/vg0/myservername-disk 
    e2fsck -f /dev/vg0/myservername-disk     
    
    Run Code Online (Sandbox Code Playgroud)
  12. 检查虚拟机中的虚拟磁盘设置。您的 DomU 配置文件将需要此文件。挂载逻辑卷。mount /dev/vg0/myservername-disk tmp. 然后检查 fstab 文件和(如果存在)grubmenu.lst文件。

    more tmp/etc/fstab
    more tmp/boot/grub/menu.lst 
    
    Run Code Online (Sandbox Code Playgroud)

    注意 root 和 swap 的磁盘名称!

  13. 更新 DomU 的网络设置。在虚拟磁盘仍然挂载的情况下,将interfaces文件编辑为适合您本地环境的内容。vi tmp/etc/network/interfaces. 我通常从以下内容更改我的:

    # The loopback network interface
    auto lo
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet static
        address 184.106.XXX.YYY
        netmask 255.255.XXX.YYY
        gateway 184.106.XXX.YYY
        dns-nameservers 173.203.XXX.YYY 173.203.XXX.YYY
    
    auto eth1
    iface eth1 inet static
        address 10.179.XXX.YYY
        netmask 255.255.XXX.YYY
    up route add -net 10.176.XXX.YYY0 netmask 255.240.XXX.YYY gw 10.179.XXX.YYY
    down route del -net 10.176.XXX.YYY netmask 255.240.XXX.YYY gw 10.179.XXX.YYY
    up route add -net 10.191.XXX.YYY netmask 255.255.XXX.YYY gw 10.179.XXX.YYY
    down route del -net 10.191.XXX.YYY netmask 255.255.XXX.YYY gw 10.179.XXX.YYY
    
    Run Code Online (Sandbox Code Playgroud)

    (对于机架空间的环境)到:

    # The loopback network interface
    auto lo
    iface lo inet loopback
    
    # The primary network interface
    auto eth0
    iface eth0 inet dhcp
    
    Run Code Online (Sandbox Code Playgroud)

    仅使用 dhcp 和一个虚拟网络接口以及我的本地服务器。在这些变化之后,我们应该完成。卸载虚拟磁盘,umount tmp

  14. 为您导入的 DomU 创建一个 xen 配置文件vi /etc/xen/myservername.cfg,然后输入如下内容:

    name = "myservername"
    
    bootloader = '/usr/lib/xen-default/bin/pygrub'
    
    #uncomment the following if you want to boot into single user mode 
    #extra = " single"
    
    vcpus       = '2'
    memory      = '512'
    
    #
    #  Disk device(s). (Use the correct mappings from step 12.) 
    #
    disk        = [
                      'phy:/dev/vg0/myservername-disk,xvda1,w',
                      'phy:/dev/vg0/myservername-swap,xvda2,w',
                  ]
    #
    #  Networking
    #
    vif         = [ 'bridge=xenbr0' ]
    #
    #  Behaviour
    #
    on_poweroff = 'destroy'
    on_reboot   = 'restart'
    on_crash    = 'restart'
    
    Run Code Online (Sandbox Code Playgroud)

    再次注意,您应该为虚拟设备使用与您在步骤 12 中发现的设备名称相同的设备名称。

  15. 现在一切都应该准备好了!要验证,请通过运行创建 domU 并附加控制台xm create -c /etc/xen/myservername.cfg