Как восстановить потерянный (orphaned) диск в openstack
Предпосылки для выполнения нижеперечисленных действий могут быть различными.
Вариант 1 - последствия отказов оборудования.
Чаще всего это возникает в том случае, когда была повреждена БД cinder или nova.
После восстановления из бэкапа, была частично утрачена информация о диске.
Таком образом, файл диска есть, а записи о нем в базе данных нет.
Вариант 2 - перенос диска из других систем или с другого сервера той-же системы.
Далее рассмотрим конкретный пример с реальными данными от 03.04.2020
Наш “осиротевший” диск лежит по адресу: 10.0.10.101:/tank/volumes/volume-1168fe81-c449-4ebc-96eb-58bfbf80c328
Запрос о диске в API выдает пустой результат:
$ openstack volume show 1168fe81-c449-4ebc-96eb-58bfbf80c328
No volume with a name or ID of '1168fe81-c449-4ebc-96eb-58bfbf80c328' exists.
1) Создадим новый диск с точно таким-же размером, как и “потерянный” и в том-же проекте
openstack volume create --size 252 --type nfs-storage --project df21593205114b8996502cfb05530f40 1c_cloud_spb_v7
Теперь надо записать UUID нового диска: f44b6fd3-d8d0-4740-878f-45351b3d94c9
и путь к нем в файловой системе: 10.0.10.101:/tank/volumes/volume- f44b6fd3-d8d0-4740-878f-45351b3d94c9
2) Выясним, где сейчас размещен вновь созданный диск
mysql> use cinder;
mysql> select provider_location from volumes where id="f44b6fd3-d8d0-4740-878f-45351b3d94c9";
3) Если он отличается от пути нашего orphaned диска, то заменим путь диска на фактический:
mysql> update volumes set provider_location="10.0.10.101:/tank/volumes" where id="f44b6fd3-d8d0-4740-878f-45351b3d94c9";
4) Переходим на сервер, где лежит осиротевший диск и переименовываем его:
root@dc-stor-01:/tank/volumes# mv volume-1168fe81-c449-4ebc-96eb-58bfbf80c328 volume-f44b6fd3-d8d0-4740-878f-45351b3d94c9
5) Проверим параметры диска
qemu-img info volume-f44b6fd3-d8d0-4740-878f-45351b3d94c9
image: volume-f44b6fd3-d8d0-4740-878f-45351b3d94c9
file format: raw
virtual size: 252G (270582939648 bytes)
disk size: 252G
6) Подключаем бывший orphaned диск к нужному инстансу через horizon или через API.
03.04.2020