Я уже некоторое время борюсь с этой проблемой.
У меня есть логический том с 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
.
Вот шаги на тот случай, если кто-то еще столкнется с этой проблемой:
vgreduce lvm_group1 --removemissing --force
vgcfgrestore -f edited_config_file.cfg lvm_group1
Мне потребовалось всего 4 дня изучения LVM, чтобы решить эту проблему ...
Пока все выглядит хорошо. Ошибок нет. Удачного кемпинга.
Если вы можете временно остановить LVM (и закрыть базовые контейнеры LUKS, если они используются), альтернативным решением является копирование как можно большего количества PV (или базовых контейнеров LUKS) на хороший диск с GNU ddrescue
и удалить старый диск перед перезапуском LVM.
Хотя мне нравится LVM-решение Sniku, ddrescue
может восстановить больше данных, чем pvmove
.
(Причина остановки LVM заключается в том, что LVM поддерживает многопутевый режим и будет балансировать операции записи между парами PV с идентичными UUID, как только LVM обнаружит их. Кроме того, следует остановить LVM и LUKS, чтобы гарантировать, что все данные, которые недавно были записанное отображается на соответствующих устройствах. Самый простой способ в этом убедиться - перезапустить систему без ввода паролей LUKS.)