Pull to refresh

Войны с Citrix XenServer

Reading time 3 min
Views 13K

Введение


На днях мой сотрудник удалил случайно несколько виртуалок в Citrix XenServer.
Все осложнилось тем что виртуальные машины оказались на snapshot дисках.
Под катом рассказываю как я их оттуда вынимал в отсутствии каких либо резервных копий и переносил на KVM.
Примеров команд много не делал, так как целью статьи было описание концепции. Внизу привел необходимые ссылки.


Подготовка


Забрал жесткие диски себе, поставил на тестовую машину.
Грузиться xen не захотел, уходил в циклический ребут.
Следовательно пришлось качать новую версию и ставить на другой диск.
Скачал, установил. Дальше необходимо было подключить старые диски.
Xen был в самой стандартной конфигурации, виртуалки на LVM.

Первое разочарование


Во всех статьях написано что LVM в XenServer должен делать резервные копии изменений в папочку
/etc/lvm/archive

Но не тут то было. В версии 5.5 в конфиге LVM автоматическое сохранение выключено.
Благо с LVM я уже дело имел и знаю что он хранит копии данных в начальных блоках PV.

С помощью команды:
dd if=/dev/sda3 bs=512 count=255 skip=1 of=./lvmbackup.img
скопировал первые блоки раздела

С помощью vim этот снимок можно прекрасно открыть и вытащить оттуда нужную информацию.
Там кстати можно увидеть множество конфигураций. Мне подошла предпоследняя. Так как в предудущих еще не было нужных разделов, а в следующих уже!

И так, найдя нужный кусок конфигурации, я выдрал его и скопировал в новый файл.
Далее немного переформатировав его и, если не ошибаюсь, поменяв uuid физических разделов, получил рабочую конфигурацию lvm тома.

После чего в папке /etc/lvm/backup заменил файлик описания lvm группы на свой.
И запустил vgcfgrestore с названием группы.
Как не странно но все разделы зацепились.

Второе разочарование


И так, радостный что все у меня удачно завелось, и диски видятся, я пытаюсь зацепить это хранилище в XenServer.
Такого облома я никак не ожидал. Подключение SR проходит успешно. Ни одной ошибочки. Но! Диски видятся только те что не были удалены. Удаленных нет.
Команда lvs при этом так же показала только новые диски. То есть XenServer нашел где-то описании репозитория.
Делать нечего, восстанавливаю lvm второй раз. (Если честно я это раз 10 сделал пока понял что зен считает диски удаленными и никак их видеть не хочет)
Так же дело осложнялось наличием снапшотов с этих дисков.

собственно восстановление


Примерно к 10 вечера мне пришло озарение что LVM тома зен сервера ни что иное как VHD диски.
Вооружившись блокнотом и vhd-util я записал данные о родителях всех снапшотов. Снапшоты в Зен сервере представляют собой дифференциальные VHD диски.
Далее dd в файлы всех нужных томов.

После чего проверка vhd-util check показала что все контролные суммы правильные и файлы рабочие.
Через эту же утилиту я указал новых родителей снапшотам и запустил сливание (параметр coalesce).

Тут кстати у меня остался вопрос: при создании одного снапшота зен делает 2 разностных диска. Один размером с оригинал, а второй очень небольшой. Мне хватило того что размером с оригинал. Мелкий сливать не стал.

Последний этап


Перелив файлы на сервер с KVM я попробовал скормить ему vhd. Есть его он естественно не стал.
Но меня выручила утилита qemu-img которая очень даже не плохо сконвертила мне файлы raw.

В общем все хорошо что хорошо кончается. Сейчас пользователи удачно работают.
Просьба сильно не пинать — первый опыт статьи на хабре.

По поводу отсутствия резервных копий — их отсутствие не случайность, и не халатность.

VHD у xen немного отличается и напрямую подключить их в Hyper-v не получится, так же надо конвертить.

Ссылки


  1. How to Reinstall XenServer and Preserve Virtual Machines on a Local Disk
  2. Linux LVM: Recovering a lost volume.
  3. Qemu disk image conversion


Спасбо за внимание!
Tags:
Hubs:
+4
Comments 20
Comments Comments 20

Articles