Назад | Перейти на главную страницу

Удаление неисправного диска из группы томов LVM… и восстановление частичных данных из неполного LV (с отсутствующим PV)

Я уже некоторое время борюсь с этой проблемой.

У меня есть логический том с 3 дисками, 1,5 ТБ, 2 ТБ и 3 ТБ. Диск емкостью 1,5 ТБ выходит из строя. Множество ошибок ввода-вывода и битых битых секторов. Я запустил pvmove, чтобы переместить существующие экстенты с неисправного диска на диск емкостью 3 ТБ (осталось достаточно места). Я переместил 99% экстентов, но кажется, что последний процент невозможно прочитать. Ошибка чтения и pvmove завершается.

Вот текущее состояние:

root@server:~# pvdisplay 
/dev/sdd: read failed after 0 of 4096 at 0: Input/output error
/dev/sdd: read failed after 0 of 4096 at 1500301819904: Input/output error
/dev/sdd: read failed after 0 of 4096 at 1500301901824: Input/output error
/dev/sdd: read failed after 0 of 4096 at 4096: Input/output error
/dev/sdd1: read failed after 0 of 4096 at 1500300771328: Input/output error
/dev/sdd1: read failed after 0 of 4096 at 1500300853248: Input/output error
/dev/sdd1: read failed after 0 of 4096 at 0: Input/output error
/dev/sdd1: read failed after 0 of 4096 at 4096: Input/output error
Couldn't find device with uuid hFhfbQ-4cuW-CSlE-qhfO-GNl8-Jvt7-4nZTWK.
--- Physical volume ---
PV Name               /dev/sda # old, working drive
VG Name               lvm_group1
PV Size               1.82 TiB / not usable 1.09 MiB
Allocatable           yes (but full)
PE Size               4.00 MiB
Total PE              476932
Free PE               0
Allocated PE          476932
PV UUID               FEoDYU-Lhjf-FdI1-Ei5p-koue-PIma-TGvs9A

--- Physical volume ---
PV Name               /dev/sdd1  # old failing drive
VG Name               lvm_group1
PV Size               1.36 TiB / not usable 2.40 MiB
Allocatable           NO
PE Size               4.00 MiB
Total PE              357699
Free PE               357600
Allocated PE          99
PV UUID               hFhfbQ-4cuW-CSlE-qhfO-GNl8-Jvt7-4nZTWK

--- Physical volume ---
PV Name               /dev/sdf # new drive
VG Name               lvm_group1
PV Size               2.73 TiB / not usable 4.46 MiB
Allocatable           yes 
PE Size               4.00 MiB
Total PE              715396
Free PE               357746
Allocated PE          357650
PV UUID               qs4BVK-PAPv-I1DG-x5wJ-dRNq-vhBE-wQeJL6

Вот что говорит pvmove:

root@server:~# pvmove /dev/sdd1:335950-336500 /dev/sdf --verbose
Finding volume group "lvm_group1"
Archiving volume group "lvm_group1" metadata (seqno 93).
Creating logical volume pvmove0
Moving 50 extents of logical volume lvm_group1/cryptex
Found volume group "lvm_group1"
activation/volume_list configuration setting not defined: Checking only host tags for lvm_group1/cryptex
Updating volume group metadata
Found volume group "lvm_group1"
Found volume group "lvm_group1"
Creating lvm_group1-pvmove0
Loading lvm_group1-pvmove0 table (253:2)
Loading lvm_group1-cryptex table (253:0)
Suspending lvm_group1-cryptex (253:0) with device flush
Suspending lvm_group1-pvmove0 (253:2) with device flush
Found volume group "lvm_group1"
activation/volume_list configuration setting not defined: Checking only host tags for lvm_group1/pvmove0
Resuming lvm_group1-pvmove0 (253:2)
Found volume group "lvm_group1"
Loading lvm_group1-pvmove0 table (253:2)
Suppressed lvm_group1-pvmove0 identical table reload.
Resuming lvm_group1-cryptex (253:0)
Creating volume group backup "/etc/lvm/backup/lvm_group1" (seqno 94).
Checking progress before waiting every 15 seconds
/dev/sdd1: Moved: 4.0%
/dev/sdd1: read failed after 0 of 4096 at 0: Input/output error
No physical volume label read from /dev/sdd1
Physical volume /dev/sdd1 not found
ABORTING: Can't reread PV /dev/sdd1
ABORTING: Can't reread VG for /dev/sdd1

На неисправном диске осталось всего 99 экстентов. Я нормально могу потерять эти данные - я просто хочу вытащить этот диск и выбросить его, не теряя данные на других дисках.

Итак, я попробовал pvremove:

root@server:~# pvremove /dev/sdd1
/dev/sdd1: read failed after 0 of 4096 at 1500300771328: Input/output error
/dev/sdd1: read failed after 0 of 4096 at 1500300853248: Input/output error
/dev/sdd1: read failed after 0 of 4096 at 0: Input/output error
/dev/sdd1: read failed after 0 of 4096 at 4096: Input/output error
No physical volume label read from /dev/sdd1
Physical Volume /dev/sdd1 not found

А затем vgreduce:

root@server:~# vgreduce lvm_group1  --removemissing
/dev/sdd: read failed after 0 of 4096 at 0: Input/output error
/dev/sdd: read failed after 0 of 4096 at 1500301819904: Input/output error
/dev/sdd: read failed after 0 of 4096 at 1500301901824: Input/output error
/dev/sdd: read failed after 0 of 4096 at 4096: Input/output error
/dev/sdd1: read failed after 0 of 4096 at 1500300771328: Input/output error
/dev/sdd1: read failed after 0 of 4096 at 1500300853248: Input/output error
/dev/sdd1: read failed after 0 of 4096 at 0: Input/output error
/dev/sdd1: read failed after 0 of 4096 at 4096: Input/output error
Couldn't find device with uuid hFhfbQ-4cuW-CSlE-qhfO-GNl8-Jvt7-4nZTWK.
WARNING: Partial LV cryptex needs to be repaired or removed. 
WARNING: Partial LV pvmove0 needs to be repaired or removed. 
There are still partial LVs in VG lvm_group1.
To remove them unconditionally use: vgreduce --removemissing --force.
Proceeding to remove empty missing PVs.

pvdisplay все еще показывает неисправный диск ...

Любые идеи?

В конце концов я решил эту проблему, отредактировав вручную /etc/lvm/backup/lvm_group1.

Вот шаги на тот случай, если кто-то еще столкнется с этой проблемой:

  1. Я физически удалил мертвый диск с сервера
  2. Я казнил vgreduce lvm_group1 --removemissing --force
  3. Убрал из конфига мертвый диск
  4. Я добавил еще одну полосу на "хорошем" диске вместо экстентов, которые не читались на мертвом диске.
  5. Я казнил vgcfgrestore -f edited_config_file.cfg lvm_group1
  6. перезагрузка
  7. Вуаля! Привод виден и может быть установлен.

Мне потребовалось всего 4 дня изучения LVM, чтобы решить эту проблему ...

Пока все выглядит хорошо. Ошибок нет. Удачного кемпинга.

Если вы можете временно остановить LVM (и закрыть базовые контейнеры LUKS, если они используются), альтернативным решением является копирование как можно большего количества PV (или базовых контейнеров LUKS) на хороший диск с GNU ddrescue и удалить старый диск перед перезапуском LVM.

Хотя мне нравится LVM-решение Sniku, ddrescue может восстановить больше данных, чем pvmove.

(Причина остановки LVM заключается в том, что LVM поддерживает многопутевый режим и будет балансировать операции записи между парами PV с идентичными UUID, как только LVM обнаружит их. Кроме того, следует остановить LVM и LUKS, чтобы гарантировать, что все данные, которые недавно были записанное отображается на соответствующих устройствах. Самый простой способ в этом убедиться - перезапустить систему без ввода паролей LUKS.)