LVM – два тома с одинаковыми именами

Пришлось намедни переустановить систему и перенести настройки с одного винта на другой. Проблема появилась когда CentOS остановился при попытке разобраться со внешним USB винтом. Оставалось одно подключить его после загрузки и смонитровать. Но тут ждал другой сюрприз, имя LVM тома совпадало с именем уже смонтированонго тома. Поиск в интернете ответа на простой вопрос: “Как переименовать группу томов на внешнем диске чтобы их можно было примонтировать к LVM” затянулся, что и послужило поводом написания этого micro-how-to.

Боевым – активным диском с которого загружена система является диск Hitach Travel Star 80. Пациентом, которого следует примонтировать – Samsung 160Gb. Он у меня внешний, подключаемый через адаптер-переходник.

Итак, подключаем внешний диск к компьютеру через USB:

# lsusb
Bus 001 Device 002: ID 152d:2338 JMicron Technology Corp. / JMicron USA Technology Corp. JM20337 Hi-Speed USB to SATA & PATA Combo Bridge

Сам диск не отобразился, но видим USB/SATA|IDE переходник.

Запускаем lvm консоль

# lvm

и получаем список групп логических томов

lvm> vgscan
Reading all physical volumes. This may take a while…
Found volume group “VolGroup00” using metadata type lvm2
Found volume group “VolGroup00” using metadata type lvm2

Как видим стараниями инстралятора CentOS мы получили две одинаковые группы. Будем исправлять это положение.
Смотрим какие разделы активны, наших разделов, только что вставленного диска, тут быть не должно.

lvm> lvscan
ACTIVE ‘/dev/VolGroup00/LogVol00’ [72.47 GB] inherit
ACTIVE ‘/dev/VolGroup00/LogVol01’ [1.94 GB] inherit

С нового диска разделов нет. Оба раздела с несущего активного диска в 80Gb
Перевести в пассивное состояние активные можно вот так:

lvm> vgchange -a n

Но для несущего диска это возможно либо если загрузиться с Rescue CD либо с консоли перейти в init 1 и размонтировать корневой раздел руками.

Из-за того что имена групп томов совпадают – переименование по имени не подойдёт. Благо команда переименования понимает UUID которые у дисков, Слава Богу, отличаются.

lvm> vgdisplay
— Volume group —
VG Name VolGroup00
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 148.94 GB
PE Size 32.00 MB
Total PE 4766
Alloc PE / Size 4766 / 148.94 GB
Free PE / Size 0 / 0
VG UUID pkb1cy-1JSf-n3Px-UYRi-eImv-e1Eg-t12BgY

— Volume group —
VG Name VolGroup00
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 74.41 GB
PE Size 32.00 MB
Total PE 2381
Alloc PE / Size 2381 / 74.41 GB
Free PE / Size 0 / 0
VG UUID SjBmkg-YvMz-B160-tEds-Vqrg-SFMS-mYNimL

Запоминаем VG UUID pkb1cy-1JSf-n3Px-UYRi-eImv-e1Eg-t12BgY

lvm> vgrename pkb1cy-1JSf-n3Px-UYRi-eImv-e1Eg-t12BgY MyNewGroupName

Смотрим что у нас получилось на физическом уровне

lvm> pvscan
PV /dev/sda2 VG vg160 lvm2 [148.94 GB / 0 free] PV /dev/hda2 VG VolGroup00 lvm2 [74.41 GB / 0 free] Total: 2 [223.34 GB] / in use: 2 [223.34 GB] / in no VG: 0 [0 ]

И на логическом уровне

lvm> lvscan
inactive ‘/dev/vg160/LogVol00’ [147.00 GB] inherit
inactive ‘/dev/vg160/LogVol01’ [1.94 GB] inherit
ACTIVE ‘/dev/VolGroup00/LogVol00’ [72.47 GB] inherit
ACTIVE ‘/dev/VolGroup00/LogVol01’ [1.94 GB] inherit

Прелесть! Вот она наша искомая партиция /dev/vg160/LogVol00
Активируем

lvm> vgchange -a y

Первый раз пока я не выполнил эту команду и примонтировал раздел как указано ниже, я порадовался. Он примонтировался, но почти сразу обнаружил странное сходство с несущей системой. Оказалось что под чужим именем vg160 примонтировался VolGroup00. Странно.

lvm> lvscan
ACTIVE ‘/dev/vg160/LogVol00’ [147.00 GB] inherit
ACTIVE ‘/dev/vg160/LogVol01’ [1.94 GB] inherit
ACTIVE ‘/dev/VolGroup00/LogVol00’ [72.47 GB] inherit
ACTIVE ‘/dev/VolGroup00/LogVol01’ [1.94 GB] inherit

Вот теперь всё в порядке.
Выходим

lvm> quit

Так примонтируем же её (раздел был сформатирован в ext3 что я и указал явно)

# mount -t ext3 /dev/vg160/LogVol00 /mnt/yourmountpoint

И насладимся маленькой победой…

Сразу после размонтирования, я деактивировал раздел. Чтобы как было. :)
——————
Добавлено 06.03.2010.
Хорошо когда диски разные по ёмкости, и когда разделы отведённые под LVM разных размеров. А вот что делать когда они одинаковые я так и не придумал. Можно получить PV UUID

lvm> pvdisplay
— Physical volume —
PV Name /dev/sdd2
VG Name VolGroup00
PV Size 232.78 GB / not usable 2.71 MB
Allocatable yes (but full)
PE Size (KByte) 32768
Total PE 7449
Free PE 0
Allocated PE 7449
PV UUID bm619i-4t01-CciJ-g4dj-L0tI-AO0U-fhnZIj

— Physical volume —
PV Name /dev/dm-0
VG Name VolGroup00
PV Size 232.69 GB / not usable 4.08 MB
Allocatable yes
PE Size (KByte) 32768
Total PE 7446
Free PE 1
Allocated PE 7445
PV UUID QUjEez-2PIX-VsGM-WHdY-x3MH-qORb-kt54QI

Чёрт возьми. Я не знаю что сказать…
Свой вопрос решил я просто. У меня как видно диски всё же немножечко разные, что дало возможность установить связь на основании размера.

lvm> vgdisplay
— Volume group —
VG Name VolGroup00
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 232.78 GB
PE Size 32.00 MB
Total PE 7449
Alloc PE / Size 7449 / 232.78 GB
Free PE / Size 0 / 0
VG UUID 7F02i4-Jl3e-isZo-fdga-l1K9-bn0E-wVLRwX

— Volume group —
VG Name VolGroup00
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 232.69 GB
PE Size 32.00 MB
Total PE 7446
Alloc PE / Size 7445 / 232.66 GB
Free PE / Size 1 / 32.00 MB
VG UUID NhzMnM-0QCM-bgVl-wj0i-OznP-7k7q-go3PMm

lvm> vgrename 7F02i4-Jl3e-isZo-fdga-l1K9-bn0E-wVLRwX Seagate-250-sata-3ND208FP
Volume group “VolGroup00” successfully renamed to “Seagate-250-sata-3ND208FP”

Гипотетически можно предложить всегда переименовывать свой том не оставляя его по умолчанию.
Другой вопрос в том, что активный диск нельзя переименовать. :)

lvm> vgrename NhzMnM-0QCM-bgVl-wj0i-OznP-7k7q-go3PMm Toshiba-M750-VG00
CTRL-c detected: giving up waiting for lock
Volume group “VolGroup00” still has active LVs

Ну это хоть какое-то решение. Хотя обидно, ставить том в другую машину чтобы переименовать…
——————
Добавлено 07.03.2010.
А теперь переименуем том загрузочного диска. Перед операцией помойте руки потому как последствия могут быть непредсказуемыми мы – въядряемся внутро, точнее внедряемся в ядро. Пациент (диск) вчерашний, поэтому для ссылок смотрите понимания “откуда это взялось” смотрите выше. Вот например повторяю что раньше он носил “гордое” имя выдаваемое по умолчанию всем системным дискам – VolGroup00.

Прежде всего примонтируем диск. Он у меня подключён через USB-SATA переходник, лежит на столе и мерно гудит.
Видится как устройство /dev/sdd
Предварительно созданы следующие каталоги:
/mnt/sdd
/mnt/sdc
/mnt/newinit

после завершения работы я их удалю.

[root@m750 mnt]# vgchange -a y
File descriptor 7 (pipe:[317532]) leaked on vgchange invocation. Parent PID 32614: bash
2 logical volume(s) in volume group “Seagate-250-sata-3ND208FP” now active
2 logical volume(s) in volume group “VolGroup00” now active
[root@m750 mnt]# lvscan
File descriptor 7 (pipe:[317532]) leaked on lvscan invocation. Parent PID 32614: bash
ACTIVE ‘/dev/Seagate-250-sata-3ND208FP/LogVol00’ [230.84 GB] inherit
ACTIVE ‘/dev/Seagate-250-sata-3ND208FP/LogVol01’ [1.94 GB] inherit
ACTIVE ‘/dev/VolGroup00/LogVol00’ [227.03 GB] inherit
ACTIVE ‘/dev/VolGroup00/LogVol01’ [5.62 GB] inherit

Монтируем разделы диска. Нам важны корень “/” и “/boot”

[root@m750 mnt]# mount /dev/Seagate-250-sata-3ND208FP/LogVol00 /mnt/sdd
[root@m750 mnt]# mount /dev/sdd1 /mnt/sdc
[root@m750 mnt]# cd /mnt/newinit

Как называется у меня init файл ядра? initrd-2.6.18-128.1.10.el5.img
Умоляю вас! Сделайте копию этого оригинального init файла во избежание проблем.Примечание. Ядер может быть много – выберите одно из тех которое используете по умолчанию. Когда всё получите повторите процедуру с другими нужными ядрами. Неизменённые я бы удалил.
Итак файл initrd распакуем в наш созданный каталог newinit. Мы туда кстати уже перешли. :)

[root@m750 newinit]# gunzip -c /mnt/sdc/initrd-2.6.18-128.1.10.el5.img | cpio -idmv

Теперь нужно открыть файл /mnt/newinit/init в любом вашем редакторе и заменить все упоминания VolGroup00 на новое Seagate-250-sata-3ND208FP и сохранить файл.
Дальше собираем всё обратно в init файл. Обращаю внимание мы находимся в каталоне /mnt/newinit/

[root@m750 newinit]find . | cpio –quiet -c -o > ../newinitrd

выйдем на уровень выше и запакуем созданный там initrd

[root@m750 newinit]# cd ..
[root@m750 mnt]# gzip -9 < newinitrd > initrd-2.6.18-128.1.10.el5.img

И полученный файл запишем в каталог boot нашего препарируемого диска. Это сейчас /mnt/sdc/
Ещё раз повторяю! Старый скопировали? Достаточно немного другого имени!
У файла initrd-2.6.18-128.1.10.el5.img не забыть поставить атрибуты 600!

Теперь нужно поправить grub или что там у вас? У меня /mnt/sdc/grub/menu.lst В нём нужно к указанному initrd который мы правили прописать путь с учётом нового имени тома.
Было:

title CentOS (2.6.18-128.1.10.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-128.1.10.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
initrd /initrd-2.6.18-128.1.10.el5.img

Стало:

title CentOS (2.6.18-128.1.10.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-128.1.10.el5 ro root=/dev/Seagate-250-sata-3ND208FP/LogVol00 rhgb quiet
initrd /initrd-2.6.18-128.1.10.el5.img

И попоравим файл fstab /mnt/sdd/etc/fstab
Было:

/dev/VolGroup00/LogVol00 / ext3 defaults 1 1
/dev/VolGroup00/LogVol01 swap swap defaults 0 0

Стало:

/dev/Seagate-250-sata-3ND208FP/LogVol00 / ext3 defaults 1 1
/dev/Seagate-250-sata-3ND208FP/LogVol01 swap swap defaults 0 0

По ходу можно скинуть кеш LVM. Файл находится здесь /mnt/sdd/etc/lvm/cache/ Можно переместить во временный каталог.

И наконец скинем все кеши на диски и всё отключим

[root@m750 mnt]# sync
[root@m750 mnt]# umount /mnt/sdc
[root@m750 mnt]# umount /mnt/sdd
[root@m750 mnt]# sync
[root@m750 mnt]# vgchange -a n
[root@m750 mnt]# lvscan
File descriptor 7 (pipe:[317532]) leaked on lvscan invocation. Parent PID 32614: bash
inactive ‘/dev/Seagate-250-sata-3ND208FP/LogVol00’ [230.84 GB] inherit
inactive ‘/dev/Seagate-250-sata-3ND208FP/LogVol01’ [1.94 GB] inherit
ACTIVE ‘/dev/VolGroup00/LogVol00’ [227.03 GB] inherit
ACTIVE ‘/dev/VolGroup00/LogVol01’ [5.62 GB] inherit

Отключаем провода от диска, ставим в его комп и пробуем с него загрузиться.
Когда всё удачно – подчищаем за мобой мусор.

Leave a Reply