У меня есть система SLES 11.2 PPC (3.0.58-0.6.6-ppc64), которая потеряла отслеживание своей группы томов (содержащей LV с данными, которые не являются критическими, но было бы неплохо вернуть). Диски подключаются к сети SAN двумя оптоволоконными путями.
Проблема началась, когда я перезагрузил его перед плановым отключением электроэнергии в прошлую пятницу. У меня не было времени на устранение неполадок, прежде чем снова вывести его из строя. Группа томов ранее успешно использовалась около двух лет.
vgscan и pvscan ничего не возвращают:
# pvscan -vP
Partial mode. Incomplete logical volumes will be processed.
Wiping cache of LVM-capable devices
Wiping internal VG cache
Walking through all physical volumes
No matching physical volumes found
# vgscan -vP
Partial mode. Incomplete logical volumes will be processed.
Wiping cache of LVM-capable devices
Wiping internal VG cache
Reading all physical volumes. This may take a while...
Finding all volume groups
No volume groups found
vgcfgrestore сообщает, что не может найти PV:
# vgcfgrestore vgclients
Couldn't find device with uuid PyKfIa-cCs9-gBoh-Qb50-yOw4-dHQw-N1YELU.
Couldn't find device with uuid FXfSAO-P9hO-Dgtl-0Ihf-x2jX-TnHU-kSqUA2.
Cannot restore Volume Group vgclients with 2 PVs marked as missing.
Restore failed.
Тем не менее, blkid может найти эти UUID:
# blkid -t UUID=PyKfIa-cCs9-gBoh-Qb50-yOw4-dHQw-N1YELU
/dev/mapper/3600a0b800029df24000011084db97741: UUID="PyKfIa-cCs9-gBoh-Qb50-yOw4-dHQw-N1YELU" TYPE="LVM2_member"
/dev/sdl: UUID="PyKfIa-cCs9-gBoh-Qb50-yOw4-dHQw-N1YELU" TYPE="LVM2_member"
/dev/sdw: UUID="PyKfIa-cCs9-gBoh-Qb50-yOw4-dHQw-N1YELU" TYPE="LVM2_member"
# blkid -t UUID=FXfSAO-P9hO-Dgtl-0Ihf-x2jX-TnHU-kSqUA2
/dev/mapper/3600a0b800029df24000017ae4f45f30b: UUID="FXfSAO-P9hO-Dgtl-0Ihf-x2jX-TnHU-kSqUA2" TYPE="LVM2_member"
/dev/sdg: UUID="FXfSAO-P9hO-Dgtl-0Ihf-x2jX-TnHU-kSqUA2" TYPE="LVM2_member"
/dev/sdr: UUID="FXfSAO-P9hO-Dgtl-0Ihf-x2jX-TnHU-kSqUA2" TYPE="LVM2_member"
/etc/lvm/backup/vgclients
содержит всю необходимую информацию и не говорит об отсутствии PV:
# egrep "(N1YELU|kSqUA2|dm-|ALLOC)" /etc/lvm/backup/vgclients
id = "PyKfIa-cCs9-gBoh-Qb50-yOw4-dHQw-N1YELU"
device = "/dev/dm-7" # Hint only
status = ["ALLOCATABLE"]
id = "FXfSAO-P9hO-Dgtl-0Ihf-x2jX-TnHU-kSqUA2"
device = "/dev/dm-12" # Hint only
status = ["ALLOCATABLE"]
Я подтвердил в SAN, что тома, выделенные (и названные) для LVM на этом сервере, представлены, а идентификатор (заканчивающийся на f30b или 7741) совпадает в SAN и на сервере:
# multipath -ll | egrep -A5 "(f30b|7741)"
3600a0b800029df24000017ae4f45f30b dm-7 IBM,1814 FAStT
size=575G features='1 queue_if_no_path' hwhandler='1 rdac' wp=rw
|-+- policy='round-robin 0' prio=6 status=active
| `- 6:0:0:1 sdr 65:16 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
`- 5:0:0:1 sdg 8:96 active ghost running
--
3600a0b800029df24000011084db97741 dm-12 IBM,1814 FAStT
size=834G features='1 queue_if_no_path' hwhandler='1 rdac' wp=rw
|-+- policy='round-robin 0' prio=6 status=active
| `- 5:0:0:7 sdl 8:176 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
`- 6:0:0:7 sdw 65:96 active ghost running
Ни одно из устройств не имеет таблицы разделов (по замыслу):
# fdisk -l /dev/dm-7 /dev/dm-12 | grep table
Disk /dev/dm-7 doesn't contain a valid partition table
Disk /dev/dm-12 doesn't contain a valid partition table
Я могу читать с устройств напрямую:
# dd if=/dev/dm-7 of=/tmp/a bs=1024 count=1
1+0 records in
1+0 records out
1024 bytes (1.0 kB) copied, 0.00121051 s, 846 kB/s
# strings /tmp/a
LABELONE
LVM2 001FXfSAOP9hODgtl0Ihfx2jXTnHUkSqUA2
Я пробовал перезагрузить, а также удалить sd(r|g|l|w)
и dm-(7|12)
и повторное сканирование безрезультатно.
Я попытался воссоздать PV, используя значения из резервных копий, но он по-прежнему говорит, что не может их найти.
# pvcreate --uuid "PyKfIa-cCs9-gBoh-Qb50-yOw4-dHQw-N1YELU" --restorefile /etc/lvm/backup/vgclients /dev/mapper/3600a0b800029df24000011084db97741 -t
Test mode: Metadata will NOT be updated and volumes will not be (de)activated.
Couldn't find device with uuid PyKfIa-cCs9-gBoh-Qb50-yOw4-dHQw-N1YELU.
Couldn't find device with uuid FXfSAO-P9hO-Dgtl-0Ihf-x2jX-TnHU-kSqUA2.
Device /dev/mapper/3600a0b800029df24000011084db97741 not found (or ignored by filtering).
Вот мой lvm.conf, хотя, насколько я знаю, единственное изменение, которое я сделал, - это увеличение уровня журнала:
# egrep -v "^( *#|$)" /etc/lvm/lvm.conf
devices {
dir = "/dev"
scan = [ "/dev" ]
preferred_names = [ ]
filter = [ "a|^/dev/sda$|", "r/.*/" ]
cache = "/etc/lvm/.cache"
write_cache_state = 1
sysfs_scan = 1
md_component_detection = 1
ignore_suspended_devices = 0
}
log {
verbose = 0
syslog = 1
overwrite = 0
level = 2
indent = 1
command_names = 0
prefix = " "
}
backup {
backup = 1
backup_dir = "/etc/lvm/backup"
archive = 1
archive_dir = "/etc/lvm/archive"
retain_min = 10
retain_days = 30
}
shell {
history_size = 100
}
global {
umask = 077
test = 0
units = "h"
activation = 1
proc = "/proc"
locking_type = 3
fallback_to_clustered_locking = 1
fallback_to_local_locking = 1
locking_dir = "/var/run/lvm/lock"
}
activation {
missing_stripe_filler = "/dev/ioerror"
reserved_stack = 256
reserved_memory = 8192
process_priority = -18
mirror_region_size = 512
readahead = "auto"
mirror_log_fault_policy = "allocate"
mirror_device_fault_policy = "remove"
udev_rules = 1
udev_sync = 1
}
dmeventd {
mirror_library = "libdevmapper-event-lvm2mirror.so"
snapshot_library = "libdevmapper-event-lvm2snapshot.so"
}
Так что же дает? Куда пропал мой VG и как его вернуть?
vgreduce --removemissing помог в моем случае, когда у меня была такая же проблема.
Вот как я создал эту проблему.
Я собирался расширить существующий логический том, но на полпути к этому с другого терминала я запускаю fdisk на устройстве, которое будет использоваться для расширения. У него была предыдущая таблица разделов, которую я хотел удалить. Поскольку я уже добавил этот диск в группу томов (просто еще не расширил сам логический том), но этого физического тома больше не существовало, поэтому возникла проблема отсутствия UUID.
Чтобы решить эту проблему, я ранду vgreduce --removemissing, и тогда все было в порядке.
Документ в базе знаний Novell похоже, здесь применяется: он объясняет, что на SLES LVM по умолчанию не сканирует многопутевые устройства и поэтому никогда не увидит их в этой ситуации.
Чтобы решить эту проблему, вы можете реализовать обходной путь, который предлагает Novell:
В /etc/lvm.conf
в devices
раздел, измените filter
читать:
filter = [ "a|/dev/sda.*|", "a|/dev/disk/by-id/dm-uuid-.*mpath-.*|", "r|.*|"]
(Это для SLES 11. Для других версий см. Ссылку в статье базы знаний.)
Изменить /etc/lvm/backup/<vg_name>
файл. Исправьте испорченный материал, специально удалите недостающие UUID.
Затем выполните:
vgcfgrestore <vg_name>