Страницы

Сохранить статью у себя в соцсети:

четверг, 4 октября 2012 г.

§ How to restore deleted LVM volume or group.

Восстановление удаленных 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"

Комментариев нет:

Отправить комментарий

Популярные сообщения

Профиль в Google+ Яндекс цитирования Яндекс.Метрика