Устройство снимков виртуальных дисков в VMware VI3

Оригинал данной статьи находится здесь, я же являюсь не более, чем пристрастным переводчиком данного текста. 🙂 Статья рекомендуется к прочтению всем адептам VMware VI3 и VMware vSphere.

Введение

Вчера я потратил полдня, решая проблему, возникшую из-за рассинхронизации снимка VMware VI3. Это был неприятный опыт, зато я узнал о важности CID-цепи!
После нескольких часов пинания мертвой ВМ, мой коллега, Дан, и я натолкнулись на CID-цепи.
Мы пришли к выводу, что .vmdk-файлы, которые создаются в VI3 каждый раз при снятии снимка, связаны с другими .vmdk через сгенерированные случайным образом значения CID. VI3 присваивает каждому новому файлу снимка CID, причем это значение меняется при каждой перезагрузке ВМ.
Если цепь CID разрывается, то ВМ не может подключить свой виртуальный диск.

Проблема

Ваши виртуальные диски не подключаются при включении ВМ, вы получите следующее сообщение об ошибке:
“Cannot open the disk ‘/vmfs/volumes/INSERT SPECIFIC VALUE HERE.vmdk’ or one of the snapshot disks it depends on.
Reason: The parent virtual disk has been modified since the child was created.”
“Не удается открыть диск ‘/vmfs/volumes/lalala.vmdk’ или один из файлов снимков, от которых он зависит.
Причина: первичный виртуальный диск был изменен, после создания вторичного.”

Черт!

Что вам делать?!
1) Только не паникуйте 🙂
2) Полностью выключите ВМ.
3) Ничего не изменяйте!
4) Прочтите эту статью!
Если вы не вносили изменения в .vmdk файлы, вероятнее всего, у вас получится исправить эту проблему.

Анализ

Эта проблема возникла, вероятно, потому что вы сделали один или несколько снимков одного или нескольких виртуальных дисков, связанных с ВМ, и снимки рассинхронизировались. Скорее всего, вы получили эту проблему в средах ESX/VI3.
Причина этой проблемы связана с тем, как VI3 управляет снимками и дельтами изменений относительно первоначального виртуального диска (.vmdk). Вероятно, нарушилась логика иерархии снимков, и вторичные .vmdk-файлы, уже не ссылаются на первичные.
Ключ к складыванию головоломки из снимков находится в восстановлении цепи CID.
Каждому .vmdk файлу назначается свой CID-идетификатор. Кроме того, в каждом .vmdk содержится ссылка на CID и .vmdk предыдущего (родительского) файла. CID “родителя” должен указывать на .vmdk файл, созданный непосредственно перед созданием снимка.
При загрузке ВМ CID в .vmdk-файлах меняется на случайным образом. Если после загрузки ВМ цепь CID не в том же состоянии, как и до загрузки, то связь вторичный CID -> первичный CID нарушается. Таким образом VI3 определяет подлинность снимков. Единственный способ вновь синхронизировать CID-цепь – вручную отредактировать все .vmdk файлы в этой цепи.
Пример CID-цепи:
Первичный .vmdk = vdisk.vmdk
.vmdk, созданный после 1 снимка = vdisk-000001.vmdk
.vmdk, созданный после 2 снимка = vdisk-000002.vmdk
Если эта цепочка нарушается, то:
вручную делаем ссылку vdisk-000002.vmdk -> vdisk-000001.vmdk;
vdisk-000001.vmdk -> vdisk.vmdk.

Обратим внимание на три поля в .vmdk-файле:
– поле CID;
– ссылка на parentCID;
– поле parentNameHint.
Примечание: первичный .vmdk не содержит поля “parentNameHint”, а его “parentCID” всегда равняется “ffffffff”.

Примеры

Пример содержимого первичного vdisk.vmdk:
[root@myvi3server]# cat vdisk.vmdk
# Disk DescriptorFile
version=1
CID=7f81b951
parentCID=ffffffff
createType=”vmfs”
# Extent description
RW 50331648 VMFS “vdisk-flat.vmdk”
# The Disk Data Base
#DDB
ddb.virtualHWVersion = “4”
ddb.geometry.cylinders = “3133”
ddb.geometry.heads = “255”
ddb.geometry.sectors = “63”
ddb.adapterType = “lsilogic”
ddb.toolsVersion = “7202”

Пример второго файла – vdisk-000001.vmdk:
[root@myvi3server]# cat vdisk-000001.vmdk
# Disk DescriptorFile
version=1
CID=8eb633b8
parentCID=7f81b951
createType=”vmfsSparse”
parentFileNameHint=”/vmfs/volumes/478b9802-ce7ed955-96a4-0015c5fd9308/servername/vdisk.vmdk”
# Extent description
RW 50331648 VMFSSPARSE “vdisk-000001-delta.vmdk”
# The Disk Data Base
#DDB
ddb.toolsVersion = “7202”
Примечание: файл из “parentNameHint” находится на iSCSI SAN. Длинный шестнадцатиричный GUID – идентификатор этого VMFS-хранилища.

Пример третьего – vdisk-000002.vmdk:
[root@myvi3server]# cat vdisk-000002.vmdk
# Disk DescriptorFile
version=1
CID=249e6aff
parentCID=8eb633b8
createType=”vmfsSparse”
parentFileNameHint=”sryulris0cogp01-000001.vmdk”
# Extent description
RW 50331648 VMFSSPARSE “vdisk-000002-delta.vmdk”
# The Disk Data Base
#DDB
ddb.toolsVersion = “7202”
Примечание: Путь к файлу в “parentNameHint” поле указывает на файл, который располагается в том же каталоге, что и vdisk-000002.vmdk. Если файл находится в другом каталоге, то в пути указывается каталог.

Решение

Следующие шаги синхронизируют файлы снимков VI3 так, что ESX/ESXi успешно проверит их связь друг с другом, а также их подлинность:
Примечание: Выполните следующие действия в текстовом редакторе. Сохраните резервную копию оригинального файла до внесения каких-либо изменений.

Измените vdisk-000002.vmdk:
1) Запомним CID у vdisk-000001.vmdk (= 8eb633b8);
2) Запомним путь к vdisk-000001.vmdk (= локальный каталог);
3) Исправьте parentCID для vdisk-000001.vmdk -> ParentCID=8eb633b8;
4) Исправьте parentNameHint на vdisk-000001.vmdk -> ParentFileNameHint=”vdisk-000001.vmdk”.

Измените vdisk-000001.vmdk:
1) Запомним CID у vdisk-000001.vmdk (=7f81b951);
2) Запомним путь к vdisk-000001.vmdk (=”/ vmfs/volumes/478b9802-ce7ed955-96a4-0015c5fd9308/servername /);
3) Исправьте parentCID для vdisk.vmdk -> ParentCID=7f81b951;
4) Исправьте parentNameHint на vdisk.vmdk файл -> ParentFileNameHint=”/ vmfs/volumes/478b9802-ce7ed955-96a4-0015c5fd9308/servername/vdisk.vmdk”.

Если виртуальные диски не были изменены, вас можно поздравить. Если же виртуальные диски были изменены или вы удаляли их из виртуальной машины, а затем добавляли снова, необходимо будет вручную изменить настройки соответствующего виртуального SCSI-контроллера в файле настроек ВМ – .vmx-файле (указать .vmdk последнего снимка в вашей CID-цепи).

Примечание: Выполните следующие действия в текстовом редакторе. Естественно, сохраните резервную копию исходного файла до внесения каких-либо изменений. 🙂

Измените servername.vmx:
1) Найдите SCSI контроллер, на котором находится виртуальный диск, который мы восстанавливаем. Первый виртуальный диск, как правило, назначается на SCSI-контроллер scsi0:0, второй – scsi0:1, а третий – scsi0:2;
2) Предположим, что мы восстанавливаем второй виртуальный диск. Найдите раздел, ссылающийся на scsi0:1;
3) Укажите в поле ссылку на .vmdk последнего снимка в нашей цепи:
scsi0:1.fileName=”/ vmfs/volumes/46fd62d479749c9697e30015c5fd9308/servername/vdisk-000002.vmdk”.
Примечание: Путь к файлу может быть изменен, хотя по умолчанию снимки сохраняются в том же каталоге, что и первичный .vmdk (vdisk.vmdk). Поэтому введите полный путь к .vmdk снимка (vdisk-000002.vmdk), включая iSCSI GUID и т.д…
4) Сохраните файл и перезагрузите ВМ;
5) Если ВМ не загружается, или выдает ошибку “The parent virtual disk has been modified since the child was created.”, проверьте иерархию CID и пути к файлам, а затем повторите попытку. Если ВМ прежнему не загружается, а CID-сеть и пути к файлам корректны, то первичный или последующие .vmdk-файлы, вероятно, были изменены некорректным образом и их не удается восстановить!

Очень интересный ресурс

Добрый всем день (а в Перми дождик 🙁 ).
Сегодня понял, что очень хочу прорекламировать один очень качественный и структурированный ресурс. Правда, информация на нем посвящена только VMware Virtual Infrastructure, но ресурс действительно классный.
Итак встречайте – wiki.vm4.ru.

Проблемы с снапшотами (снимками)

Craig на Malaysia VMware Communities опубликовал несколько статей, посвященных траблшутингу (решению проблем) с снимками (тут и тут).
Continue reading “Проблемы с снапшотами (снимками)”

Участие в семинаре

Господа, в Перми 14 июля проходит семинар по защите персональных данных и информационной безопасности. А я делаю там доклад по обеспечению безопасности серверов в виртуальной среде. 🙂
Приходите, если вам недалеко. 😉

Постановка бизнес-целей при внедрении виртуализации

Если компания задумалась о внедрении виртуализации, то возникает вопрос о постановке конкретных целей – зачем нам это надо?

Представляю свой список целей, которые мы хотим достигнуть при внедрении виртуализации.

Топ 10 сокращений расходов:

  1. сократить расходы на персонал/остановить рост штата
  2. сократить расходы на электропитание, резервное питание
  3. сократить расходы на кондиционирование и вентиляцию
  4. сократить площади под ЦОД
  5. сократить сверхурочные работы персонала
  6. сократить стоимость серверных лицензий
  7. сократить затраты на покупку серверов
  8. сократить расходы на сетевое оборудование
  9. сократить расходы на кабельные соединения
  10. сократить расходы на устройства удаленного управления

Топ Х повышения “доходности”:

  1. ускорить время внедрения новых сервисов
  2. повысить моральный дух сотрудников
  3. достичь доступности сервисов 99,9+
  4. централизовать управление серверами, “посадить” сотрудников в одно место
  5. получить нужную скорость сервисов по требованию (динамически выделять нужное количество ресурсов для сервисов)
  6. получить большую виртуальную ёмкость для данных
  7. не заморачиваться покупкой новых железок под новые идеи (получить ресурсы по требованию, например, для разворачивания тестовых сред)

Для инициации проекта по виртуализации можно плясать от обратного: хотим достичь такие цели – надо присмотреться к виртуализации.

Вышел Citrix XenServer 5.5. Мои злоключения

Пару дней назад вышла новая версия Citrix XenServer 5.5. Что нового писалось тут и тут. Качать здесь.

Вот и я решил обновить свою тестовую 5.0u3 на свеженький 5.5. Для этого решил просто переставить поверх с выбором обновления.  На первом хосте у меня обновилось всё как по маслу, система заработала, виртуальные машины крутились. Но второй хост после обновления в упор не захотел видеть сетевые адаптеры – они просто пропали, пара попыток их обнаружить и перезагрузить сервер не помогли. Тогда я переустановил второй хост начисто. Однако, в консоли XenServer не смог удалить ни сервер, ни пул ресурсов. Решил всё снести и поставил с нуля гипервизор и на первый хост. После этого понял, что всё пропало, так как настройки нигде не хранились. Но главный облом ожидал в том, что и получить доступ к диску старой виртуалки не удалось, так как он был LVM.  Вот такая история – кривые руки до добра не доводят, одно радует – тестовая платформа. Теперь у меня новенький XenServer.

Парочка свежих скриншотов.

Snapshots.

xen55_snapshots

High Availability.

xen55_ha

xen55_ha_configuration

Стоит ли всё виртуализировать?

Существует две крайние точки зрения на виртуализацию – это зло и это панацея. Приверженцы первой категорически против виртуализации, для тестирования готовы достать новый сервер со склада, все ошибки системы валят на виртуализацию, готовы дать кучу ссылок на документы производителей об использовании продуктов только на железе либо на техподдержку с отказом решать вопросы с ПО, запущенном в виртуальных машинах. Приверженцы второй готовы завиртуализировать всё от контроллера домена до супер навороченной базы данных с интенсивными расчетами, бизнес-аналитикой. Continue reading “Стоит ли всё виртуализировать?”