Есть сервер на котором выполнили 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