Pull to refresh

Comments 36

Хабр превращается в унылый Linux HOWTO
И чем это плохо? Вас ведь никто не заставляет читать это. Кому-нибудь моя заметка однозначно пригодится.
UFO just landed and posted this here
Свежие GRUB-ы прекрасно умеют superblock 1.2. Кроме того, он даже предпочтительный.
Сегодня поднимал машину, сделал 1.2, конфиг GRUB-а — тупо grub-mkconfig. И всё, работает, внутрь не лез.
Речь не про /boot на RAID, а про / на RAID'е.
Ядро не может загрузить систему, если та лежит на RAID'е с v1.2 суперблоком. А /boot у меня вообще на отдельном диске лежит, на простом разделе. Не вижу смысла его на зеркало запихивать.
Все в одном разделе, md 1.2. Работает.

Ядру, по сути, абсолютно по фигу, где рут. Смонтировать рут — задача initrd. Кто мешает сунуть в initrd mdadm, собрать оттуда массив, смонтировать рут и отдать его init-у?
Ядро умное, собирает массив само. И даже не нужен initrd. А эта статья поверхностный пересказ linux/Documentation/md.txt
С небольшими комментариями ;)
Только вот txt'шник этот далеко не каждый лезет читать.
И это не статья, кстати, так заметочка, скорее чтоб самому не забыть.
Загрузка Linux с корнем на RAID


Возможно вы имели в виду software-raid?

У меня например RAID
а параметры grub вот такие:

splashimage=(hd0,0)//grub/splash.xpm.gz

title Chainload into GRUB 2
root (hd0,0)
kernel /grub/core.img

title Debian GNU/Linux, kernel 3.0.1-amd64
root (hd0,0)
kernel /vmlinuz-3.0.1-amd64 root=/dev/sda5 ro
initrd /initrd.img-3.0.1-amd64
прошу прошения за форматирование
Да-да, именно софт-raid я и имел в виду. Из текста вроде понятно, что речь о нём :)
Друг! Красноглазик! (не обижайся, я такой же).

Линуха может стартовать без initrd образа. Но зачем?
Когда ты для себя откроешь LVM,pxe и еще много страшных слов ты поймешь как ты до этого извращался.
Я тебе подскажу прекрасную программу genkernel для твоего дистрибутива. Просто пишешь genkernel all и наслаждаешься!!!

Не совсем понял, кому адресовано обращение )) Если мне, то спс за красноглазика — я действительно такой, и в прямом, и обратном смысле :-D
Кстати сказать, с LVM я хорошо знаком — уже много лет им пользуюсь, отличная штука ))) Он у меня поверх софт-рэйда работает.
И про genkernel я тоже знаю, только не нужен он мне, у меня и без него все прекрасно работает ))
У меня make bzImage && make modules && make modules_install уже настолько вошли в привычку, что я без них никак ))
/ по lvm без initrd? Это как? Я так не умею…
Я всё кроме boot на lvm перетащил. Однозначно удобнее.
Нет, корень просто на зеркале лежит, без lvm. Он всего 200 метров. Все остальные разделы на raid+lvm.

Т.е. схема примерно такая:
1. /boot — на отдельном физическом диске. Не RAID, не LVM.
2. / — RAID-1 (софт)
3. swap — RAID-0 (софт)
4. /usr — раздел лежит на LVM, который в свою очередь лежит на soft-raid (RAID-1).
Все остальные разделы по такому же принципу как и /usr
уже давно можно делать просто
make && make modules_install && make install
я вручную ядро копирую, мне так удобней.
Извиняюсь за оффтопик,
а насколько удачно линукс можно грузить с корнем на lvm?
Грузить вполне удачно можно, c помощью initrd. Он с этим замечательно справляется.
Но вообще, я не вижу смысла запихивать корень на LVM. Я считаю, что на LVM имеет смысл ложить те разделы, которые в последствии будут изменяться (расширяться, например). Изменение размера разделов может понадобиться на /usr и /var, а вот все остальное, в объемном смысле, остается практически без изменений, либо изменяется незначительно (за исключением /etc и /lib, которые и так небольшого размера).
Все каталоги за исключением /usr и /var у меня, как я писал выше, занимают порядка 200 метров.
Корень на lvm грузится легко.
Ядро собирается genkernel'ом, он сам подсказывает что grub'у надо написать dolvm domdadm.
Смысл корня на lvm в удобстве переноса его на другой диск, удобстве изменения размера.
С lvm ты зависишь только от boot раздела, который можно собрать в RAID1 c metadata=0.90.
Раздел /usr тоже, в общем-то остаётся без изменений, кроме развечто случаев серьёзного перепрофилирования сервера (внезапное добавление Xorg/kde/gnome) или злоупотребления /usr/src.

Если его не расшаривать между серверами для экономии на спичках — то и отделать от корня особо смысла нету.

Интереснее было бы почитать про загрузку линукс с /boot на софтовом рэйде.

Я делал на двух дисках 2 зеркальных софтовых рэйда:
1) /boot
2) физический том lvm, на котором всё остальное.

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

Видимо, grub прописался в mbr только одного диска.
надо было grub-install /dev/sda && grub-install /dev/sdb делать
Ну или аналогичное через его шелл.
А можно поподробнее про /boot на софтварном рэйде?
Есть 2 физических диска.

Во время установки:

1. на каждом создаём 2 раздела:
1.1 500 мегабайт
1.2 Всё оставшееся место.
2. Каждый раздел форматируем как физический том raid.
3. После этого создаём зеркальный рэйд из двух 500-мегабайтных разделах
4. Создаём зеркальный рэйд на двух больших разделах
5. Зеркальный рэйд на 500 мб форматируем как ext3/ext4 и используем как /boot
6. Большой рэйд форматируем как физический том lvm и делаем там всё остальное
да, я именно так уже поставил debian squeeze.
и оно как минимум загрузилось.

но мне не до конца понятна матчасть и, соответственно, границы применимости такого подхода:
— как grub распознаёт софтварный raid? куда и что ему тыкать ежлифчо?
— это работает только для raid1 или вообще для всего, что умеет md?
— если в наглую вынуть один из дисков из raid1 — будут ли они работать поодиночке?
1. Насколько я понимаю, grub его не распознаёт. Просто грузится с первого раздела одного из дисков как с ext3/4
2. Не уверен что сработает с другими видами рэйдов, см. п.1.
3. Работать будут, и я это проверял. Загружаться по идее должны, но у меня получилось загружаться только с одним конкретным из двух физических дисков. Дальше свои эксперименты не проводил.
Насколько я понимаю, данные на рйэд1 пишутся в специально оформленный раздел и всёравно страйпами.
Чтобы grub грузился нужно чтбы он либо понимал эту разметку,
либо надо её вывернуть так, чтобы он мог её игнорировать (ну, например сделать единственный stripe на весь /boot или чтото ещё)
А можете подсказать что делать с такой проблемой?
Был диск raid1 /dev/md1 с дисками /dev/sda5 и /dev/sdb5
Второй раздел /dev/sdb5 я удалил, после чего при каждой загрузке /dev/md1 стал ругаться что нехватает диска.
Я пытался это починить (сделать второй диск failed), но второпях накосячил — удалил /dev/md1 (mdadm -S /dev/md1) и вместо --assemble сделал --create, т.е. создал поверх старого /dev/md1 новый диск, по-дефалту на старом было 0.90 суперблок, а на новом 1.2.
Теперь стоит задача вытащить данные со старого /dev/md1, каким образом это можно сделать?
По-идее должно что-то сработать вот такой командой:
# mdadm --create /dev/md1 --assume-clean -n 2 -l 1 --metadata=0.90 /dev/sda5 missing
mdadm: /dev/sda5 appears to contain an ext2fs file system
size=117185984K mtime=Sun Dec 11 21:26:34 2011
Continue creating array?

Т.е. он создаст новый array, а там уже попробовать что-то восстановить можно. Но боюсь как бы он не потёр чего лишнего.
Если Вы создали массив без опции --assume-clean, которая не трогает данные, а трогает только суперблоки, то боюсь Вашим данным кирдык. Без этой опции mdadm синхронизируе диски, и неизвестно что он запишет поверх Ваших данных на разделах sda5 и sdb5. Если же Вы запускали с --assume-clean тогда данные останутся нетронуты, даже несмотря на разные версии суперблоков.
Но попробовать все же стоит. См. ниже.
Что касается восстановления. Сделайте копии разделов с помощью dd, например так:
# dd if=/dev/sda5 bs=4k of=part_sda5.backup
# dd if=/dev/sdb5 bs=4k of=part_sdb5.backup

и пробуйте создать с ключем --assume-clean и --metadata, так как Вы написали выше. В случае чего у Вас есть образы разделов, которые можно влить обратно
# dd if=part_sda5.backup bs=4k of=/dev/sda5
# dd if=part_sdb5.backup bs=4k of=/dev/sdb5
Там тип массива — зеркало и второго диска так и не было, поэтому кирдык не должен быть и я решил попробовать.
Пересоздал через
# mdadm --create /dev/md1 --assume-clean -n 2 -l 1 --metadata=0.90 /dev/sda5 missing
Но после этого файловая система не увиделась, монтироваться отказывалась.

Я сделал fsck.ext3 на этот диск и он всё же всё восстановил, хотя и обнаружил довольно много ошибок. Но всё потом успешно примонтировалось и вроде даже все файлы живы!

Видимо из-за того что суперблоки у 1.2 в начале, а у 0.90 в конце — когда я собрал на 1.2 — он перезаписал начало ext3-системы, но fsck это восстановил.

Спасибо за совет!
Sign up to leave a comment.

Articles

Change theme settings