LVM восстановление рейда

Есть сервер на котором выполнили vgreduce —removemissing vgraid до замены диска на новый и репейра. В итоге картинка была такая

# lvs -a -o +devices
  LV                VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Devices
  lvraid            vgraid rwi-a-r---  9,98g                                    100,00           lvraid_rimage_0(0),lvraid_rimage_1(0),lvraid_rimage_2(0),lvraid_rimage_3(0)
  [lvraid_rimage_0] vgraid iwi-aor---  4,99g                                                     /dev/sdb(1)
  [lvraid_rimage_1] vgraid iwi-aor---  4,99g                                                     /dev/sdd(1)
  [lvraid_rimage_2] vgraid iwi-aor---  4,99g                                                     /dev/sde(1)
  [lvraid_rimage_3] vgraid vwi-a-r---  4,99g
  [lvraid_rmeta_0]  vgraid ewi-aor---  4,00m                                                     /dev/sdb(0)
  [lvraid_rmeta_1]  vgraid ewi-aor---  4,00m                                                     /dev/sdd(0)
  [lvraid_rmeta_2]  vgraid ewi-aor---  4,00m                                                     /dev/sde(0)
  [lvraid_rmeta_3]  vgraid ewi-a-r---  4,00m

Репейр не получалось сделать

# lvconvert --repair vgraid/lvraid /dev/sdf
Attempt to replace failed RAID images (requires full device resync)? [y/n]: y
  Unable to remove 1 images:  Only 0 devices given.
  Failed to remove the specified images from vgraid/lvraid
  Failed to replace faulty devices in vgraid/lvraid.

В итоге удалось починить таким способом. Не претендую на правильность и не мне говорить, что сперва следует протестировать.

Что хочу сделать. Обмануть рейд сказав, что у него все работает, затереть на нужном диске метадату, получив статус unknown device(1) и дальше по ману восстановить рейд.

Смотрю архив бэкапов конфигов группы.

vgcfgrestore --list vgraid

Интересует вот этот

File:         /etc/lvm/archive/vgraid_00003-2109598279.vg
VG name:      vgraid
Description:  Created *before* executing 'vgreduce --removemissing vgraid'
Backup Time:  Mon Apr 15 16:01:59 2019

Делаю на всякий случай копию этого файла

cp /etc/lvm/archive/vgraid_00003-2109598279.vg /etc/lvm/archive/vgraid_00003-2109598279.vg.orig

Редактирую /etc/lvm/archive/vgraid_00003-2109598279.vg и смотрю uuid нужного диска

# vim /etc/lvm/archive/vgraid_00003-2109598279.vg

Заменяю
device = "unknown device"       # Hint only
на
device = "/dev/sdf"     # Hint only

и
flags = ["MISSING"]
на
flags = []

Создаю PV

# pvcreate --uuid "PT8JJy-5BvS-fzCv-qO20-cwzv-FWIl-HQ83Xb" --restorefile /etc/lvm/archive/vgraid_00003-2109598279.vg /dev/sdf
  Physical volume "/dev/sdf" successfully created

Добавляю его в группу

# vgextend vgraid /dev/sdf
  Volume group "vgraid" successfully extended

Восстанавливаю групу. Теперь в ней нет информации о потерянном диске.

# vgcfgrestore -f /etc/lvm/archive/vgraid_00003-2109598279.vg vgraid
  Restored volume group vgraid
# lvs -a -o +devices
   LV                VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Devices
   lvraid            vgraid rwi-a-r---  9,98g                                    100,00           lvraid_rimage_0(0),lvraid_rimage_1(0),lvraid_rimage_2(0),lvraid_rimage_3(0)
   [lvraid_rimage_0] vgraid iwi-aor---  4,99g                                                     /dev/sdb(1)
   [lvraid_rimage_1] vgraid iwi-aor---  4,99g                                                     /dev/sdd(1)
   [lvraid_rimage_2] vgraid iwi-aor---  4,99g                                                     /dev/sde(1)
   [lvraid_rimage_3] vgraid iwi-a-r---  4,99g                                                     /dev/sdf(1)
   [lvraid_rmeta_0]  vgraid ewi-aor---  4,00m                                                     /dev/sdb(0)
   [lvraid_rmeta_1]  vgraid ewi-aor---  4,00m                                                     /dev/sdd(0)
   [lvraid_rmeta_2]  vgraid ewi-aor---  4,00m                                                     /dev/sde(0)
   [lvraid_rmeta_3]  vgraid ewi-a-r---  4,00m                                                     /dev/sdf(0)

Ура. Получилось.

Дальше прибиваю метадату, выкидываю диск и нахожу его заново. Дальше его можно добавить как новый и восстановить рейд.

Трем метадату. Одного килобайта достаточно для того, чтоб перевести его в состояние unknown device(1) Нужно для того, чтоб он заново не влетал в групу.

# dd if=/dev/zero of=/dev/sdf bs=512 count=2
# lvs -a -o +devices
  WARNING: Device for PV PT8JJy-5BvS-fzCv-qO20-cwzv-FWIl-HQ83Xb not found or rejected by a filter.
  LV                VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Devices
  lvraid            vgraid rwi-a-r-p-  9,98g                                    100,00           lvraid_rimage_0(0),lvraid_rimage_1(0),lvraid_rimage_2(0),lvraid_rimage_3(0)
  [lvraid_rimage_0] vgraid iwi-aor---  4,99g                                                     /dev/sdb(1)
  [lvraid_rimage_1] vgraid iwi-aor---  4,99g                                                     /dev/sdd(1)
  [lvraid_rimage_2] vgraid iwi-aor---  4,99g                                                     /dev/sde(1)
  [lvraid_rimage_3] vgraid iwi-a-r-p-  4,99g                                                     unknown device(1)
  [lvraid_rmeta_0]  vgraid ewi-aor---  4,00m                                                     /dev/sdb(0)
  [lvraid_rmeta_1]  vgraid ewi-aor---  4,00m                                                     /dev/sdd(0)
  [lvraid_rmeta_2]  vgraid ewi-aor---  4,00m                                                     /dev/sde(0)
  [lvraid_rmeta_3]  vgraid ewi-a-r-p-  4,00m                                                     unknown device(0)

Отключаю диск

echo 1 > /sys/block/sdf/device/delete

Ищю его заново. Здесь могут быть host, host1, host2. Смотрю lsblk когда он появится. Имя диска может измениться. На тестовом сервере три раза имя менялось на новое, на боевом осталось прежним.

echo "- - -" > /sys/class/scsi_host/host2/scan

Дальше по манам.

# pvcreate /dev/sdi
  WARNING: Device for PV PT8JJy-5BvS-fzCv-qO20-cwzv-FWIl-HQ83Xb not found or rejected by a filter.
  Physical volume "/dev/sdi" successfully created
# vgextend vgraid /dev/sdi
  WARNING: Device for PV PT8JJy-5BvS-fzCv-qO20-cwzv-FWIl-HQ83Xb not found or rejected by a filter.
  WARNING: Device for PV PT8JJy-5BvS-fzCv-qO20-cwzv-FWIl-HQ83Xb not found or rejected by a filter.
  Volume group "vgraid" successfully extended
# lvconvert --repair vgraid/lvraid /dev/sdi
  WARNING: Device for PV PT8JJy-5BvS-fzCv-qO20-cwzv-FWIl-HQ83Xb not found or rejected by a filter.
  Attempt to replace failed RAID images (requires full device resync)? [y/n]: y
  Faulty devices in vgraid/lvraid successfully replaced.

Смотрю процесс восстановления

# lvs -a -o +devices
  WARNING: Device for PV PT8JJy-5BvS-fzCv-qO20-cwzv-FWIl-HQ83Xb not found or rejected by a filter.
  LV                VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Devices
  lvraid            vgraid rwi-a-r---  9,98g                                    28,13            lvraid_rimage_0(0),lvraid_rimage_1(0),lvraid_rimage_2(0),lvraid_rimage_3(0)
  [lvraid_rimage_0] vgraid iwi-aor---  4,99g                                                     /dev/sdb(1)
  [lvraid_rimage_1] vgraid iwi-aor---  4,99g                                                     /dev/sdd(1)
  [lvraid_rimage_2] vgraid iwi-aor---  4,99g                                                     /dev/sde(1)
  [lvraid_rimage_3] vgraid Iwi-aor---  4,99g                                                     /dev/sdi(1)
  [lvraid_rmeta_0]  vgraid ewi-aor---  4,00m                                                     /dev/sdb(0)
  [lvraid_rmeta_1]  vgraid ewi-aor---  4,00m                                                     /dev/sdd(0)
  [lvraid_rmeta_2]  vgraid ewi-aor---  4,00m                                                     /dev/sde(0)
  [lvraid_rmeta_3]  vgraid ewi-aor---  4,00m                                                     /dev/sdi(0)

Убираю хвосты

# vgreduce --removemissing vgraid
  WARNING: Device for PV PT8JJy-5BvS-fzCv-qO20-cwzv-FWIl-HQ83Xb not found or rejected by a filter.
  WARNING: Device for PV PT8JJy-5BvS-fzCv-qO20-cwzv-FWIl-HQ83Xb not found or rejected by a filter.
  Wrote out consistent volume group vgraid