Как говорится в названии, я регулярно загружаю свои образы Rackspace для резервного копирования своего VPS, однако мне интересно, можно ли запускать их локально на KVM (например), чтобы я мог запускать тесты в своем приложении без воздействия на производство.
Почти через год после первоначального вопроса, я думаю, у меня есть хорошая процедура для загрузки образов Rackspace и их локального запуска под Xen работает на Ubuntu Precise.
Я запишу здесь шаги, чтобы вы могли следовать легкому рецепту, если хотите попробовать. Шаги работают по крайней мере для Linux / Ubuntu domU, для других YMMV.
(Эти инструкции также размещены в нашем блоге по адресу http://www.everichon.com/blog/2013/05/29/running-rackspace-images-locally/)
Установите точную версию Ubuntu (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, а также группа томов LVM для использования для виртуальных дисков для вашего DomU.
Перейдите на страницу своих серверов в облаке Rckspace (manage.rackspacecloud.com -> Hosting -> Cloud servers
) и выберите тот, который хотите запустить локально. Перейти к Images
вкладка для этого сервера. Создайте изображение по запросу. (В зависимости от времени, когда сервер был впервые создан, изображение по требованию будет либо попадать непосредственно в облачные файлы, либо сохраняться на сервере. Если изображение хранится на сервере, вы должны переместить его в облачные файлы после создания.)
Проверьте название изображения в облачных файлах. Перейти к Hosting -> Cloud Files
и откройте контейнер cloudservers
. Там должен быть файл с именем 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
image.vhd
это тот, который нас интересует, так как он содержит ваш корневой раздел с облачного сервера.
Чтобы упростить работу с файлом образа, мы конвертируем его в необработанный образ диска. Это делается с помощью qemu-img
(если он недоступен в вашей системе, сделайте sudo apt-get install qemu-utils
). Чтобы преобразовать image.vhd во что-то, с чем проще работать, выполните qemu-img convert -p image.vhd disk.img
Проверьте образ диска с помощью fdisk. (ПРИМЕЧАНИЕ: я работал только с большими изображениями размером 20 ГБ из стеллажа, и мои заметки посвящены им. Если вы используете другой размер, вам придется соответствующим образом изменить некоторые шаги!) 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
Обратите внимание на начальное смещение для первого раздела и размер сектора.
(Необязательно) Убедитесь, что образ диска в порядке. Для этого монтируем его по шлейфу и просто видим, что он работает.
mkdir tmp
mount -o loop,offset=1048576 disk.img tmp/
ls -la tmp
(The offset above is start for the first partition * sector size)
Это указывает на то, что с диском все в порядке. Затем размонтируйте образ. 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, поэтому смещение не имеет значения.)
Проверьте файловую систему на логическом томе (и исправьте ошибки), измените размер файловой системы, чтобы она соответствовала уровню lv, и повторите проверку.
e2fsck -f /dev/vg0/myservername-disk
resize2fs -p /dev/vg0/myservername-disk
e2fsck -f /dev/vg0/myservername-disk
Проверьте настройки виртуального диска на вашей виртуальной машине. Это понадобится для вашего файла конфигурации DomU. Смонтируйте логический том. mount /dev/vg0/myservername-disk tmp
. Затем проверьте файл fstab и (если он существует) grub menu.lst
файл.
more tmp/etc/fstab
more tmp/boot/grub/menu.lst
Обратите внимание на имена дисков для 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
(для среды стойки) в:
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp
просто для использования dhcp и одного виртуального сетевого интерфейса и моего локального сервера. После этих изменений все должно быть готово. Отключите виртуальный диск, umount tmp
.
Создайте файл конфигурации xen для импортированного DomU, 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'
Опять же, обратите внимание, что вы должны использовать те же имена устройств для виртуальных устройств, что и те, которые вы обнаружили на шаге 12.
Теперь все должно быть готово! Для проверки создайте domU и подключите консоль, запустив xm create -c /etc/xen/myservername.cfg
Да, вы можете запускать их, они используют гипервизор Xen IIRC. Вы также можете загрузить и установить Openstack и получить собственное частное облако.
Вот хорошая ссылка на «Запустить Rackspace Cloud Server локально на Hyper-V»
http://www.sudonym.com/375/run-rackspace-cloud-server-locally-on-hyper-v