Восстановление «Local Storage» после падения XenServer
Invite pending
Добрый день, данная статья ориентирована на новичков в направлении «Системного администрирования».
Статья состоит из трех пунктов:
Терминология:
LVM — Logical Volume Manager
PV — Physical Volume
PBD — Physical Block Device
VBD — Virtual Block Device
VG — Virtual Group
VM — Virtual Machine
SR — Storage Repository
В здании выключили свет на длительное время, после чего начали выключатся серверные UPS'ы, первым выключился UPS мастера в пуле серверов.
Следствие: после возобновления питания и запуска сервера, пул рассыпался.
При запуске XenServer'а, пул оказался пустым, а VM находились вне пула.
Первым делом смотрел логи запуска пула, что дало следующую информацию «Internal error: there is no bootable device». Как оказалось потерялся «Local Storage». Дабы удостоверится в этом, посмотрел uuid диска через gui и в консоли мастера ввел
Данная команда выводит информацию о всех подключенных хранилищах. Команда ничего не вывела, далее проверил список VBD
в пунктах vdi-uuid вместо uuid было и естественно команда
ничего не выводит.
Решил поверить хранилища на уровне LVM, сперва проверил список PV коммандой
Oбнаружил, что PV есть; так же ввел команду
И она мне ничего не вернула. То есть после падения потерялись метаданные, а это значит, что физически информация сохранилась и все на месте. Один из полезных пряников LVM состоит в том что, он делает бэкапы метаданных автоматически при создании и наполнении пула, но можно делать их и в ручную коммандой
Далее проверил наличие бэкапа метаданных
бэкап есть, можно начинать восстановление.
И так, бэкап есть ввожу команду для восстановления метаданных VG
где VG_XenStorage-XXXX — это имя файла бэкапа; но получил ошибку о том, что нет девайса с указанным uuid. Недолго думая решил сравнить PV UUID из вывода команды
C ID из файла бэкапа (блок physical_volumes) они не совпадают, но партиция совпадает. И это тоже не беда.
Удалил стратый PV
где X — это порядковый номер диска (используются латинские буквы a, b, c, d и т.д.), а Y — порядковый номер партиции на диске (используются цифры 1, 2, 3 и т.д.).
Далее создал новый PV в тот же раздел
Nеперь заменил ID устройства в файле бэкапа, в блоке physical_volumes, на полученный PV UUID нового PV.
Теперь вновь пробую накатить бэкап метаданных
комманда вернула успех.
Далее руководствуясь статьей от Citrix добавляем «Local Storage» в пул:
1) Выявляю SR-UUID текущего диска при помощи
команда возвращает VG_XenStorage-XXXX, где XXXX — это и есть необходимый SR-UUID.
2) Далее ввожу SR
3) Тперь надо созданить PBD из существующего PV, но для этого надо получить SCSI ID устройства, UUID хоста и SR-UUID (он уже сеть)
3.1) Узнаю SCSI ID
Команда вернула: lrwxrwxrwx 1 root root 10 Июн 4 17:35 scsi-SATA_ST32000645NS_Z2939GCT-part3 -> ../../sdXY;
Необходимый SCSI ID это «scsi-SATA_ST32000645NS_Z2939GCT-part3», который расположен на партиции /dev/sdXY — на которой ранее создавали PV.
Примечание: SCSI ID — не будет совпадать с вашим, для примера я использовал свой.
3.2) UUID хота, получаю следующей командой
Команда выводит только UUID: uuid ( RO): YYYY, где YYYY — это и есть UUID хоста.
3.3.) Теперь кода все есть создаем PBD
Команда возвращает UUID этой записи.
4) Теперь прикрутим «Local Storage» в XenServer
Теперь пул видит свой «Locale Storage», а в нем есть виртуальные диски, осталось только одно, подключить VM их диски.
Примечание: если у вас пропали имена виртуальных машин, это нестрашно. Методом перебора, подберите диск к VM и через настройки укажите им имена. Тоже касается и имени локального хранилища.
Все действия были произведены на основании документации от RadHat (LVM) и Citrix (XenServer)
.
Статья состоит из трех пунктов:
- описание причины и следствия
- анализ системы
- восстановление работы
Терминология:
LVM — Logical Volume Manager
PV — Physical Volume
PBD — Physical Block Device
VBD — Virtual Block Device
VG — Virtual Group
VM — Virtual Machine
SR — Storage Repository
Описание причины и следствия
В здании выключили свет на длительное время, после чего начали выключатся серверные UPS'ы, первым выключился UPS мастера в пуле серверов.
Следствие: после возобновления питания и запуска сервера, пул рассыпался.
Анализ системы
При запуске XenServer'а, пул оказался пустым, а VM находились вне пула.
Первым делом смотрел логи запуска пула, что дало следующую информацию «Internal error: there is no bootable device». Как оказалось потерялся «Local Storage». Дабы удостоверится в этом, посмотрел uuid диска через gui и в консоли мастера ввел
# xe sr-list
Данная команда выводит информацию о всех подключенных хранилищах. Команда ничего не вывела, далее проверил список VBD
# xe vbd-list
в пунктах vdi-uuid вместо uuid было и естественно команда
# xe vdi-list
ничего не выводит.
Решил поверить хранилища на уровне LVM, сперва проверил список PV коммандой
# pvscan
Oбнаружил, что PV есть; так же ввел команду
# pvdisplay
И она мне ничего не вернула. То есть после падения потерялись метаданные, а это значит, что физически информация сохранилась и все на месте. Один из полезных пряников LVM состоит в том что, он делает бэкапы метаданных автоматически при создании и наполнении пула, но можно делать их и в ручную коммандой
# xe pool-dump-database
. Далее проверил наличие бэкапа метаданных
# ls -lh /etc/lvm/backup/
бэкап есть, можно начинать восстановление.
Восстановление работы
И так, бэкап есть ввожу команду для восстановления метаданных VG
# vgcfgrestore VG_XenStorage-XXXX
где VG_XenStorage-XXXX — это имя файла бэкапа; но получил ошибку о том, что нет девайса с указанным uuid. Недолго думая решил сравнить PV UUID из вывода команды
# pvdisplay
C ID из файла бэкапа (блок physical_volumes) они не совпадают, но партиция совпадает. И это тоже не беда.
Удалил стратый PV
# pvremove /dev/sdXY
где X — это порядковый номер диска (используются латинские буквы a, b, c, d и т.д.), а Y — порядковый номер партиции на диске (используются цифры 1, 2, 3 и т.д.).
Далее создал новый PV в тот же раздел
# pvcreate /dev/sdXY
Nеперь заменил ID устройства в файле бэкапа, в блоке physical_volumes, на полученный PV UUID нового PV.
Теперь вновь пробую накатить бэкап метаданных
# vgcfgrestore VG_XenStorage-XXXX
комманда вернула успех.
Далее руководствуясь статьей от Citrix добавляем «Local Storage» в пул:
1) Выявляю SR-UUID текущего диска при помощи
# pvscan
команда возвращает VG_XenStorage-XXXX, где XXXX — это и есть необходимый SR-UUID.
2) Далее ввожу SR
# xe sr-introduce uuid=XXXX type=lvm name-label="Local storage" content-type=user
3) Тперь надо созданить PBD из существующего PV, но для этого надо получить SCSI ID устройства, UUID хоста и SR-UUID (он уже сеть)
3.1) Узнаю SCSI ID
# ls -l /dev/disk/by-id/
Команда вернула: lrwxrwxrwx 1 root root 10 Июн 4 17:35 scsi-SATA_ST32000645NS_Z2939GCT-part3 -> ../../sdXY;
Необходимый SCSI ID это «scsi-SATA_ST32000645NS_Z2939GCT-part3», который расположен на партиции /dev/sdXY — на которой ранее создавали PV.
Примечание: SCSI ID — не будет совпадать с вашим, для примера я использовал свой.
3.2) UUID хота, получаю следующей командой
# xe host-list params=uuid
;Команда выводит только UUID: uuid ( RO): YYYY, где YYYY — это и есть UUID хоста.
3.3.) Теперь кода все есть создаем PBD
# xe pbd-create sr-uuid=XXX device-config:device=/dev/disk/by-id/scsi-SATA_ST380815AS_6QZ5Z1AM-part3 host-uuid=YYYY
.Команда возвращает UUID этой записи.
4) Теперь прикрутим «Local Storage» в XenServer
# xe pbd-plug uuid=ZZZZ
, где ZZZZ — это и есть UUID полученный в пункте 3.3.Теперь пул видит свой «Locale Storage», а в нем есть виртуальные диски, осталось только одно, подключить VM их диски.
Примечание: если у вас пропали имена виртуальных машин, это нестрашно. Методом перебора, подберите диск к VM и через настройки укажите им имена. Тоже касается и имени локального хранилища.
Все действия были произведены на основании документации от RadHat (LVM) и Citrix (XenServer)
.