Восстановление удаленных LVM томов и групп.
Зашел тут как-то сервер разработки, с которым постоянно экспериментирую и заметил несколько LVM томов, оставшихся после каких-то экспериментов (так мне тогда показалось). Атрибута open на них не было, я укрепился с мыслью что это ошметки какого-то очередного эксперимента. Недолго думая, я их удалил. Спустя пару минут, я понял что это внутренние LVM тома, недавно запущенной виртуальной машины.Вобщем-то это оказались тома LVM, которые из-за недоработки в конфигурации lvm.conf обнаружились в хост-системе. Так вот если приключилась такая история, то удаленные тома и даже группы можно восстановить. При изменении конфигурации LVM, создаются резервные копии метаданных, с помощью которых можно восстановить определенное состояние.
Итак история скопированная с консоли с самого начала.
Посмотрев на список томов и увидел тома из групп code и storage (отмечены красным цветом), атрибута active и open не выставлено и я подумал что это какое-то старье.
# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
code code -wi--- 15.00g
distfiles sprint -wi-ao 10.00g
kvm420-shared-tester2-code sprint -wi-ao 20.00g
kvm420-shared-tester2-root sprint -wi-ao 10.00g
log sprint -wi-ao 4.00g
root sprint -wi-ao 3.00g
swap sprint -wi-ao 2.00g
tmp sprint -wi-ao 4.00g
vardb sprint -wi-ao 4.00g
root storage -wi--- 3.00g
swap storage -wi--- 1.00g
tmp storage -wi--- 2.00g
Удаляю группы вместе с томами:
# lvremove code/code
Logical volume "code" successfully removed
# vgremove code
Volume group "code" successfully removed
# vgremove storage
Do you really want to remove volume group "storage" containing 3 logical volumes? [y/n]: y
Logical volume "root" successfully removed
Logical volume "swap" successfully removed
Logical volume "tmp" successfully removed
Volume group "storage" successfully removed
# pvs
PV VG Fmt Attr PSize PFree
/dev/sda1 sprint lvm2 a-- 135.97g 110.97g
/dev/sdb sprint lvm2 a-- 135.97g 103.97g
/dev/sprint/kvm420-shared-tester2-code lvm2 a-- 20.00g 20.00g
/dev/sprint/kvm420-shared-tester2-root lvm2 a-- 10.00g 10.00g
Посмотрев в pvs, я понимаю что эти тома принадлежат внутренней LVM системе в виртуальной машине. Что делать?
На выручку нам приходит vgcfgrestore, с помощью нее просмотрим список бэкапов и откатимся в состояние до процедуры удаления.
# vgcfgrestore -l storage
File: /etc/lvm/archive/storage_00000-1035513652.vg
VG name: storage
Description: Created *before* executing 'vgremove storage'
Backup Time: Tue Sep 18 09:16:23 2012
File: /etc/lvm/archive/storage_00001-1622646540.vg
VG name: storage
Description: Created *before* executing 'vgremove storage'
Backup Time: Tue Sep 18 09:16:23 2012
File: /etc/lvm/archive/storage_00002-1856353675.vg
VG name: storage
Description: Created *before* executing 'vgremove storage'
Backup Time: Tue Sep 18 09:16:23 2012
File: /etc/lvm/archive/storage_00003-766928766.vg
VG name: storage
Description: Created *before* executing 'vgremove storage'
Backup Time: Tue Sep 18 09:16:23 2012
Меня интересует самая ранняя копия с пометкой "Created *before* executing 'vgremove storage'", ей соответствует копия /etc/lvm/archive/storage_00000-1035513652.vg, следовательно восстанавливаться будем с неё.
# vgcfgrestore -f /etc/lvm/archive/storage_00000-1035513652.vg storage
Restored volume group storage
Точно также поступаем с группой томов code, находим копию метаданных предшествующую удалению тома и группы и восстанавливаемся с неё.
# vgcfgrestore -l code
File: /etc/lvm/archive/code_00000-800248311.vg
VG name: code
Description: Created *before* executing 'lvremove code/code'
Backup Time: Tue Sep 18 09:16:02 2012
File: /etc/lvm/archive/code_00001-836575215.vg
VG name: code
Description: Created *before* executing 'vgremove code'
Backup Time: Tue Sep 18 09:16:16 2012
# vgcfgrestore -f /etc/lvm/archive/code_00000-800248311.vg code
Restored volume group code
Проверяем наличие групп и томов
# vgs
VG #PV #LV #SN Attr VSize VFree
code 1 1 0 wz--n- 20.00g 5.00g
sprint 2 8 0 wz--n- 271.94g 214.94g
storage 1 3 0 wz--n- 10.00g 4.00g
# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
code code -wi--- 15.00g
distfiles sprint -wi-ao 10.00g
kvm420-shared-tester2-code sprint -wi-ao 20.00g
kvm420-shared-tester2-root sprint -wi-ao 10.00g
log sprint -wi-ao 4.00g
root sprint -wi-ao 3.00g
swap sprint -wi-ao 2.00g
tmp sprint -wi-ao 4.00g
vardb sprint -wi-ao 4.00g
root storage -wi--- 3.00g
swap storage -wi--- 1.00g
tmp storage -wi--- 2.00g
Ага, появились. Теперь делаем правку lvm.conf чтобы наличие LVM проверялось только в определенном классе блочных устройств (фильтр на основе регулярного выражения), а остальные игнорировались.
# vi /etc/lvm/lvm.conf
filter = [ "a|^/dev/[hs]d[abcd][0-9]*$|", "r/.*/" ]
На этом все.
В качестве постскриптума... Когда были удалены тома, я залогинлся в виртуальную машину и проверил как там вообще обстановка. Виртуальная машина работала, но в выводе lvs и vgs отсутствовала информация о группах и томах. После восстановления метаданных, все пришло в норму. Перезагрузка тоже не выявила каких-либо скрытых проблем.
На главную "Virtualizing Linux"
Комментариев нет:
Отправить комментарий