edu*_*e05 4 image xen virtual-machines rackspace kvm-virtualization
正如标题所说,我经常下载我的 Rackspace 图像来备份我的 VPS,但是我想知道是否可以在 KVM 上本地运行它们(例如),这样我就可以在我的应用程序上运行测试而不影响生产。
大约一年后的原始问题,我想我有一个很好的程序来下载 Rackspace 图像并在本地运行它们,在Ubuntu Precise 上运行的Xen下。
我会在这里写下这些步骤,所以如果您想尝试一下,这里有一个简单的食谱供您参考。这些步骤至少适用于 linux/Ubuntu domU,也适用于其他 YMMV。
(这些说明也发布在我们的博客http://www.everichon.com/blog/2013/05/29/running-rackspace-images-locally/ 上)
安装 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 卷组。
转到机架空间云 ( manage.rackspacecloud.com -> Hosting -> Cloud servers)上的服务器页面,然后选择要在本地运行的服务器页面。转到Images该服务器的选项卡。创建按需图像。(根据首次创建服务器的时间,点播图像将直接进入云文件或与服务器一起存储。如果图像与服务器一起存储,则必须在创建后将其移动到云文件。)
检查云文件中的图像名称。前往Hosting -> Cloud Files并打开容器cloudservers。那里应该有名为 like 的文件myservername_YYYYMMDD_XXXXX_cloudserverZZZZZ.tar.gz.0,这就是您想要的文件。
将图像下载到您的服务器。在 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
下载完成后,解压下载的文件 ( tar zxf myservername_YYYYMMDD_XXXXX_cloudserverZZZZZ.tar.gz.0)。完成后,您将获得以下文件:
image
-> image.vhd
-> manifest.ovf
-> snap.vhd
Run Code Online (Sandbox Code Playgroud)
image.vhd 是我们感兴趣的,因为它包含来自云服务器的根分区。
为了更轻松地处理图像文件,我们将其转换为原始磁盘映像。这是使用完成的qemu-img(如果它在您的系统上不可用,请执行sudo apt-get install qemu-utils)。要将 image.vhd 转换为更易于使用的内容,请执行以下操作qemu-img convert -p image.vhd disk.img
使用 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)
请注意第一个分区的起始偏移量和扇区大小。
(可选)检查磁盘映像是否正常。为此,我们将其挂载回环并简单地查看它是否有效。
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
为您的新 DomU 创建逻辑卷和交换卷。lvcreate -L20G -n myservername-disk vg0和lvcreate -L2G -Cy -n myservername-swap vg0。还要初始化交换磁盘,mkswap /dev/vg0/myservername-swap。
将磁盘映像复制到新的逻辑卷。dd if=disk.img of=/dev/vg0/myservername-disk bs=4096 skip=256. 在bs和skip那里得到正确的为您的分区偏移量参数。bs=512 skip=2048当然,我可以使用,但是增大块大小会使复制速度更快。(而 512*2048 = 4096*256,所以偏移量无关紧要。)
检查逻辑卷上的文件系统(并修复任何错误),调整 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)检查虚拟机中的虚拟磁盘设置。您的 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 的磁盘名称!
更新 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。
为您导入的 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 中发现的设备名称相同的设备名称。
现在一切都应该准备好了!要验证,请通过运行创建 domU 并附加控制台xm create -c /etc/xen/myservername.cfg
| 归档时间: |
|
| 查看次数: |
6434 次 |
| 最近记录: |