LINUX.ORG.RU
ФорумAdmin

Непонятки с работой GRUB для /boot на софтовом RAID


0

0

Добрый день!

Не секрет, что почти все дистрибутивы Linux при их инсталляции на систему с двумя жесткими дисками позволяют прямо из меню инсталлятора установить систему на софтовый рэйд. Вот для примера рассмотрим такой случай:

Есть система с 2 винтами (sda и sdb), устанавливаем на систему линукс. Загрузчик GRUB. Ядро (от дистрибьютора) в системе собрано с initrd. Винты разбиваем так:

sda:
    sda1 - раздел под софтовый рэйд для /boot
    sda2 - раздел под софтовый рэйд для LVM
sdb:
    sdb1 - раздел под софтовый рэйд для /boot
    sdb2 - раздел под софтовый рэйд для LVM

LVM будет держать на себе /, swap, /usr, /var, /home
Файловая система везде ext3.

Данный вид инсталляции довольно типичен и давно уже апробирован в работе.
Мой вопрос касается работы GRUB:
если, уже после установки системы, запустить программу grub и прописать загрузчик на винт sdb, то видим следующее:

grub
grub> device (hd0) /dev/sdb
grub> root (hd0,0)
Filesystem type is ext2fs, partition type 0xfd
  - почему здесь тип файловой системы на разделе sdb1 (это и есть (hd0,0)) груб определил как ext2 ? Ведь тип раздела он же определил правильно как 0xfd - это софтверный рэйд.

далее
grub> setup (hd0)
Checking if "/boot/grub/stage1" exists... no
Checking if "/grub/stage1" exists... yes
Checking if "/grub/stage2" exists... yes
Checking if "/grub/e2fs_stage1_5" exists... yes
Running "embed /grub/e2fs_stage1_5 (hd0)"...  15 sectors are embedded.
succeeded
Running "install /grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/grub/stage2 /grub/menu.lst"... succeeded

Мне НЕПОНЯТНО каким образом grub передает управление загрузкой на /boot раздел который находится на md0 диске, то есть поверх софтового рэйда? Ведь grub ничего не знает про софтовый RAID! Ведь для того чтобы вылезло меню груб (читаемое из файла menu.lst) это значит что уже отработала фаза stage2. Как отрабатывает stage1_5?

Перед тем как спрашивать гуглил, но ответа не нашел. Пробовал сам проводить некие изыскания, как то попробовать напрямую примонтировать подзеркало sda1 как ext3 - безуспешно... 

Объясните мне кто как сможет про загрузчик grub для /boot на софтверном рэйде - как же он работает? :)

спасибо!
anonymous

там вроде в доках по грабу было где-то как его настроить на работу с рэйдом.. или было сказано что нельзя так сделать.. не помню точно.. в общем я из доки (вроде это был man grub) вынес, что не нужно делать /boot на raid. Сделай /boot на /sda1. Прям при установке инсталятору скажи.. Или в fstab пропиши. А на sdb1 делай копию /boot .. в случае, если sda1 накроется мохнатым зверем, просто переустанови загрузчик и поправь fstab. если сильно нужно всё-таки на raid поставить, читай доки по грабу.. но вроде нельзя было..

а, да.. лило вроде может raid видеть... но вариант 1 по моему скромному мнению проще.. если есть доступ к cd конечно.

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

доспуп к cd-rom в смысле.. чтоб загрузчик, если что переустановить за пару минут...

AndreyKl ★★★★★
()

прочитал вопрос )))

не знаю.. может граб научился работать с софтовым раидом? лило ведь умеет вроде...

AndreyKl ★★★★★
()

не увидел какой тип raid используеться для /boot, но думаю, что 1.

grub не умеет работать с софтовыми рейдами.
при использовании райда уровня 1, необходимо прописывать grub в загрузочный раздел каждого диска, участвующего в зеркале.

метка раздела должна быть 0xfd.

это нужно для того, чтобы если отвалиться один винт из массива, загрузка будет идти из mbr другого.

загрузчик понятия не имеет что раздел, из mbr которого он (загрузчик) запускаеться, заведен в софтовый рейд. он просто грузит ядро, а уже оно заводит разделы в рейд, и оперирует с ними.

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

Вот вы всё правильно расписали! я полностью с вами согласен, но всё это я уже и так знал и часть даже описал в своем вопросе :)

> не увидел какой тип raid используеться для /boot, но думаю, что 1.

да, именно raid1 разумеется...

> grub не умеет работать с софтовыми рейдами.

совершенно верно, я так и предполагал.

> при использовании райда уровня 1, необходимо прописывать grub в > загрузочный раздел каждого диска, участвующего в зеркале.

это сейчас речь о прописывании stage1 в MBR именно дисков sda и sdb (не про диск софтового рэйда), этот момент полностью понятен.

> метка раздела должна быть 0xfd.

она такая и есть, это показывает сам grub при запуске своей конфигурационной утилиты.

> это нужно для того, чтобы если отвалиться один винт из массива, > загрузка будет идти из mbr другого.

всё понятно :)

> загрузчик понятия не имеет что раздел, из mbr которого он (загрузчик) запускаеться, заведен в софтовый рейд.

А тут вот уже непонятки совершенно: смотрите, stage1 из mbr настоящего диска (sda или sdb) должен передать управление на stage1_5, который по идее должен уже сидеть в начале диска софтового рэйда md0. Вот как он (stage1) передает управление следующему (stage1_5)? каким образом stage1 "умеет" передать управление загрузчику на soft raid? Тем более что stage1_5 почему то определен как e2fs (что вообще мне непонятно)

> он просто грузит ядро, а уже оно заводит разделы в рейд, и оперирует с ними.

загрузка ядра происходит уже после stage2, там всё понятно... inird

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

> читайте http://www.gnu.org/software/grub/manual/html_node/Images.html

читал, только там не рассмотрен случай с software raid :) там просто повторено всё то (про stage1, что он грузитися из mbr, что stage1_5 - исключительно для понимания фс, stage2 для загрузки ядра), что уже успели здесь обсудить... это всё понятно, не понятно - как grub работает с software raid партицией для /boot, конкретно как передает управление загрузкой на stage1_5 и почему stage1_5 имеет тип e2fs

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

grub не работает с software raid , вы же не устанавливаете grub на md диск, вы устанавливаете на один из физических разделов [в grub.conf -> что-то типа root(hd0,0) ] , соответственно при установке он смотрит что это за раздел hd0,0 и использует/ставит туда соотвествующий данному разделу файловой системы stage1_5 . см. http://www.gnu.org/software/grub/manual/html_node/Bootstrap-tricks.html ссылка из предыдущего моего сообщения.

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

т.е. (поправьте меня если я не прав) получается такая картина:

на примере загрузки с первого подзеркала sda1:

stage1 в mbr передает управление stage1_5 (который находится в начале sda1 - (hd0,0)), этот stage1_5 (который e2fs) лезет внутрь партиции sda1 (????? как будто она просто партиция с фс ext3, хотя она и имеет тип 0xfd ????) и подгружает stage2 для загрузки меню GRUB. так?

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

ну приблизительно так, более точно вам наверное только исходники скажут.

только не забывайте, что stage1_5 это промежуточный, то есть это прослойка 
между stage1 и stage2 которая предоставляет именно доступ для stage2 на файловую 
систему партиции.

а вы не пробовали кстати монтировать тот-же sda1 как ext2/ext3 ;)

например исправив shell-файл /sbin/grub-install и выставив 
debug=yes
можно вконце увидеть в выводе:

+ cat /tmp/grub-install.log.z17110


    GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the possible
   completions of a device/filename.]
grub> root (hd0,0)
 Filesystem type is ext2fs, partition type 0xfd

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

конечно пробовал! :) я даже об этом в вопросе написал. mount -t ext3 /dev/sda1 /mnt

только не получилось - не смонтировалось :)

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

> stage1_5 (который e2fs) лезет внутрь партиции sda1 (????? как будто она просто партиция с фс ext3

Да. Только тут есть такой нюанс, что груб видит ext3 как ext2, т.е. не обращает внимание на журнал. В остальном правильно.

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

ну вот вам мой пример на fc6 машине с 2-мя ide дисками (hda,hdb) :

[mator@mator ~]$ mount
/dev/md1 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/md0 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

[root@mator ~]# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md0 : active raid1 hdb1[1] hda1[0]
102208 blocks [2/2] [UU]
...

[root@mator mnt]# mdadm /dev/md0 -f /dev/hdb1
mdadm: set /dev/hdb1 faulty in /dev/md0

[root@mator mnt]# mdadm /dev/md0 -r /dev/hdb1
mdadm: hot removed /dev/hdb1

[root@mator mnt]# mount -v /dev/hdb1 1
mount: you didn't specify a filesystem type for /dev/hdb1
I will try type ext3
/dev/hdb1 on /mnt/1 type ext3 (rw)

mator ★★★★★
()

Ну а если подумать? ты софт рэйдом делал зеркало - значит оба диска у тебя одинаковые после инстала системы значит в /boot у них всё одинаково если рассматривать каждый из дисков отдельно до загрузки системы - никакого рэйда пока нет - есть 2 диска с обычным lvm ну и что что раздел 0xfd и почему бы не передать управление на boot?

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