LINUX.ORG.RU
решено ФорумAdmin

dmraid и GPT


0

1

Добрый день!

Такая проблема: Есть 2 FakeRAID массива. Прекрасно обнаруживаются dmraid и работают, за исключением одного: после перезапуска не создаются файлы разделов на массивах в /dev/mapper. Насколько я понял, dmraid не умеет работать с GPT таблицей разделов.

На ЛОРе есть похожая тема.

Сейчас всё работает через убогий костыль: скрипт запускается до всех сервисов, создаёт файлы разделов и монтирует их. Скрипт:

[ilyagulya@iplus ~]$ cat /etc/rc2.d/S01dmraid-map 
#!/bin/sh
### BEGIN INIT INFO
# Provides:          dmraid-map
# Required-Start:    udev 
# Required-Stop:
# Default-Start:     2
# Default-Stop:
# X-Interactive:     true
# Short-Description: Map dmraid devices partitions.
### END INIT INFO

/sbin/kpartx -av /dev/mapper/isw_ebjjicdabb_DATA
/sbin/kpartx -av /dev/mapper/isw_dedecfbebb_DATASeagate
#Seagate RAID
/bin/mount UUID=1eb5ed40-560c-476e-80d5-677b93c35b92 /home/1TB
#Samsung RAID
/bin/mount UUID=32d28141-329a-4575-a5e7-edfa80896d24 /home/1TB/Torrent

Хотелось бы чтобы файлы разделов сами создавались (или хотя бы с помощью правила udev) и монтирование производилось через fstab. Самому это реализовать не получилось. Варианты с выпиливанием FakeRAID и созданием софтового массива через mdadm не подойдут, т.к. на массивы уже перелиты данные. Использовать MBR вместо GPT тоже нельзя - каждый массив 4ТБ.

Благодарю за помощь.

Конкретно не подскажу за неимением такого железа, просто встряну.
Не хватает данных о конфигурации. Я не знаю что есть FakeRAID потому
даже не могу предположить о размере и числе hdd. Если-же hdd менее 2Тб то вполне подойдет mbr в варианте пирога:
partitions<->lvm<->RAID<->hdd т.е:
На винтах делаешь партиции типа Linux RAID Autodetect (FD), делаешь из них RAID, получаешь 4Tb раздел, на нем уже создаешь LVM и нарезаешь на разделы, не уверен но LVM вполне может уметь носители более 2 Tb. У меня Debian Squeeze живет в подобной нарезке, как корень так и раздел данных, лишь /boot партиция живет вне RAID/LVM.

В твоем случае правда уже боевая машина и переигрывать сложно, так что инфа разве только на будущее или для прочтения тем кто придет посмотреть.

n0mad ★★ ()

>> хотя бы с помощью правила udev

Так в чём проблема-то? Udev умеет определять компоненты говнорейдов, это выражается примерно так:

ID_FS_TYPE=promise_fasttrack_raid_member

GotF ★★★★★ ()
Ответ на: комментарий от GotF

Почему? :)

Исторически сложилось. С ходу не получилось загрузиться с software RAID5, или более ранний дистр Debian был и там не умело а сейчас умеет. Не помню точно, давно это все было.

n0mad ★★ ()
Ответ на: комментарий от n0mad

>> С ходу не получилось загрузиться с software RAID5

И не могло получиться. Я обычно предполагаю по умолчанию зеркало %)

GotF ★★★★★ ()
Ответ на: комментарий от GotF

да, но там надо по-хитрому его собирать(ЕМНИП там есть 2 модуля raid5 и raid5rec кажется. Без второго - на degraded raid-5 он не заведется)

Pinkbyte ★★★★★ ()
Ответ на: комментарий от Pinkbyte

raid5rec есть. Потом потыкаю в виртуалке, интересно.

GotF ★★★★★ ()
Ответ на: комментарий от GotF

Я никогда раньше дела с udev не имел, вы не могли бы подсказать, как именно записать правило? Если поможет, вот:

[ilyagulya@iplus ~]$ sudo udevadm info --query=all --name=/dev/mapper/isw_dedecfbebb_DATASeagate
P: /devices/virtual/block/dm-0
N: dm-0
L: 50
S: block/254:0
E: UDEV_LOG=3
E: DEVPATH=/devices/virtual/block/dm-0
E: MAJOR=254
E: MINOR=0
E: DEVNAME=/dev/dm-0
E: DEVTYPE=disk
E: SUBSYSTEM=block
E: DM_UUID=DMRAID-isw_dedecfbebb_DATASeagate
E: DM_TABLE_STATE=LIVE
E: DM_STATE=ACTIVE
E: DM_NAME=isw_dedecfbebb_DATASeagate
E: DM_TYPE=raid
E: DEVLINKS=/dev/block/254:0
[ilyagulya@iplus ~]$ sudo udevadm info --query=all --name=/dev/mapper/isw_ebjjicdabb_DATA
P: /devices/virtual/block/dm-1
N: dm-1
L: 50
S: block/254:1
E: UDEV_LOG=3
E: DEVPATH=/devices/virtual/block/dm-1
E: MAJOR=254
E: MINOR=1
E: DEVNAME=/dev/dm-1
E: DEVTYPE=disk
E: SUBSYSTEM=block
E: DM_UUID=DMRAID-isw_ebjjicdabb_DATA
E: DM_TABLE_STATE=LIVE
E: DM_STATE=ACTIVE
E: DM_NAME=isw_ebjjicdabb_DATA
E: DM_TYPE=raid
E: DEVLINKS=/dev/block/254:1
Находил в интернете такое правило, но оно не работает:
ENV{DM_STATE}=="ACTIVE", ENV{DM_UUID}=="dmraid-*", RUN+="/sbin/kpartx -a -p -part /dev/$kernel"
Не пойму, зачем здесь нужна переменная $kernel.

IlyaGulya ()
Ответ на: комментарий от IlyaGulya

Попробуй так:

ENV{DM_STATE}=="ACTIVE", ENV{DM_UUID}=="DMRAID-*", RUN+="/sbin/kpartx -a -p -part /dev/$kernel"
>> Не пойму, зачем здесь нужна переменная $kernel.

А что, по-твоему, там должно быть вместо неё? Кстати, может потребоваться заменить на $KERNEL.

GotF ★★★★★ ()
Ответ на: комментарий от GotF

Уже пробовал так. Изменение регистра не помогает. Что содержится в переменной $kernel? И ещё вопрос: каким образом проверить правило udev без перезапуска системы? =)

IlyaGulya ()
Ответ на: комментарий от IlyaGulya

>> Что содержится в переменной $kernel?

Имя устройства. man udev же, ну.

И ещё вопрос: каким образом проверить правило udev без перезапуска системы?


udevadm control --reload-rules
udevadm trigger

GotF ★★★★★ ()
Ответ на: комментарий от GotF

Ничего не пойму. Такое то правило обязано обрабатываться:

 ENV{ID_PART_TABLE_TYPE}=="gpt", RUN+="/sbin/kpartx -a /dev/mapper/$env{DM_NAME}"
Но, к сожалению, ничего не происходит.

IlyaGulya ()

Всем спасибо, проблема решена! Нужно было просто поднять в очереди файл с правилами.

Был 10-dmraid-map.rules стал 90-dmraid-map.rules

IlyaGulya ()
Ответ на: комментарий от Pinkbyte

если бы был граб2 - могло бы. Но это решение костыльное(убедился на личном опыте), лучше для boot зеркало делать

Обыкновенная /boot решает это уже давно, вот ее в зеркало :)

n0mad ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.