Я только что закончил настройку 64-битного сервера CentOS 6.3 с mdadm, но загорелась лампочка, и я понял, что grub будет установлен только на первый диск, который примерно так же полезен, как и пепельница на мотоцикле.
Я взглянул, чтобы подтвердить свое подозрение:
grub> find /grub/stage1
find /grub/stage1
(hd0,0)
Поэтому я обновил карту своего устройства, чтобы она выглядела так:
(fd0) /dev/fd0
(hd0) /dev/sda
(hd1) /dev/sdb
(Обратите внимание, что запись (hd1) была добавлена мной
поэтому я попытался установить grub на / dev / sdb
И я получаю:
grub> root (hd1,0)
root (hd1,0)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd1)
setup (hd1)
Checking if "/boot/grub/stage1" exists... no
Checking if "/grub/stage1" exists... no
Error 15t: File not found
Итак, я немного погуглил (к сожалению, Google только что хорошо поработал и собрал 100 примеров установки grub, которые здесь не помогают)
Найдя несколько подсказок, я попробовал:
# grub-install --recheck /dev/sdb
Probing devices to guess BIOS drives. This may take a long time.
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.
(fd0) /dev/fd0
(hd0) /dev/sda
(hd1) /dev/sdb
# grub-install /dev/sdb
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.
(fd0) /dev/fd0
(hd0) /dev/sda
(hd1) /dev/sdb
Какие из них предполагает, что grub теперь установлен и на / dev / sdb, однако, если я посмотрю еще раз, я все равно получу:
grub> find /grub/stage1
find /grub/stage1
(hd0,0)
раздельные выходы для 2 приводов:
ПДД
Partition Table: gpt
Number Start End Size File system Name Flags
1 17.4kB 500MB 500MB ext3 1 boot
2 500MB 81.0GB 80.5GB 2 raid
3 81.0GB 85.0GB 4000MB 3 raid
4 85.0GB 3001GB 2916GB 4 raid
SDB
Partition Table: gpt
Number Start End Size File system Name Flags
1 17.4kB 500MB 500MB ext3 1
2 500MB 81.0GB 80.5GB 2 raid
3 81.0GB 85.0GB 4000MB 3 raid
4 85.0GB 3001GB 2916GB 4 raid
И mdadm mdstat:
Personalities : [raid1]
md1 : active raid1 sdb3[1] sda3[0]
3905218 blocks super 1.1 [2/2] [UU]
md2 : active raid1 sdb4[1] sda4[0]
2847257598 blocks super 1.1 [2/2] [UU]
md0 : active raid1 sda2[0] sdb2[1]
78612189 blocks super 1.1 [2/2] [UU]
Может ли кто-нибудь пролить свет на ситуацию? Такое ощущение, что я на 99% в настоящий момент и упускаю что-то очевидное.
Спасибо.
редактировать обновление:
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/md0 74G 18G 53G 25% /
tmpfs 580M 0 580M 0% /dev/shm
/dev/sda1 462M 98M 341M 23% /boot
xenstore 580M 64K 580M 1% /var/lib/xenstored
/ находится на md0, который состоит из sda2, а sdb2 swap - это md1, который является sda3, а sdb3 md2 - LVM, однако / boot только на / sda1
Я полагаю, что проблема в том, будет ли решение создать md4 и содержать sdа1 и SDб1
Возможно, у меня что-то немного перепуталось в моей голове, но я предположил, что grub был установлен не в разделе, а в первых нескольких блоках диска, то есть sda или hd0 / 1
Любые разъяснения и советы приветствуются.
Это должно быть твоей проблемой
root (hd1,0)
Filesystem type is ext2fs, partition type 0x83
Сделайте следующие шаги:
Заставить диски сделать новый рейд:
mdadm --zero-superblock /dev/sda1
mdadm --zero-superblock /dev/sdb1
При создании метаданных рейда, которые будут вашим разделом / boot, используйте версию 0.9. Linux не может автоматически определять новые версии (без виртуального диска).
mdadm --create /dev/md0 --level=1 --raid-disks=2 /dev/sda1 /dev/sdb1 --metadata=0.9
Форматирование с использованием ext2 или ext3
После первой загрузки дистрибутива:
Установите grub на 2 диска MBR
# grub /dev/sda
grub> root (hd0,0)
grub> setup (hd0)
grub> quit
quit
# grub /dev/sdb
grub> root (hd1,0)
grub> setup (hd1)
grub> quit
quit
Отредактируйте загрузчик (инструкции для Grub1)
Найдите строку «по умолчанию» и добавьте вариант «откат» ниже
vi /boot/grub/menu.lst
default 0
fallback 1
Добавьте еще одну запись в свой загрузчик (опять же, в моем случае я выбрал grub1, поскольку он менее сложен и достаточно хорош для моих нужд), каждая из которых указывает на разные загрузочные разделы, являющиеся участниками рейда:
title Debian GNU/Linux, kernel 2.6.32-5-686 (default)
root (hd0,0)
kernel /vmlinuz-2.6.32-5-686 root=/dev/mapper/vg-root ro quiet
initrd /initrd.img-2.6.32-5-686
title Debian GNU/Linux, kernel 2.6.32-5-686 (fallback)
root (hd1,0)
kernel /vmlinuz-2.6.32-5-686 root=/dev/mapper/vg-root ro quiet
initrd /initrd.img-2.6.32-5-686
Обратите внимание, что в моем случае у меня есть уровень LVM в моем рейде / md.
Готово. Этого должно быть достаточно, чтобы у вас был «избыточный» загрузчик.
Хотите ли вы сопоставить эти два диска с другим массивом raid1, решать вам. Это законный выбор, потому что тогда вы сможете установить grub на md4
напрямую и избегайте хлопот, связанных с управлением обеими установками вручную. Я сделал это ™.
По моему опыту, файл карты устройства в значительной степени не имеет значения, а его поведение (как его читает grub) в лучшем случае непредсказуемо, если не полностью произвольно.
В device
команда из оболочки grub намного надежнее. Вы можете прочитать справочную информацию по нему, но основной синтаксис говорит сам за себя:
grub> device (hd0) /dev/md4
После этого / dev / md4 будет сопоставлен с hd0
в текущем запущенном сеансе grub, игнорируя файл карты устройств. Отсюда можно было бы продолжить, как обычно, с root (hd0)
и setup (hd0,x)
. Причину установки в раздел объясняет Генри С.
AFAIK, единственное, кроме «загрузочного кода» (stage1), который записывается в первые 512 байтов диска (MBR), - это номер раздела, в котором этот этап должен искать меню.
Это можно испортить. После POST можно было бы встретить приглашение вместо меню, но grub предоставляет команды для «инициализации» этого меню из другого раздела (файла), чем тот, который был указан при установке. Обычно это работает без вмешательства, потому что «первый загрузочный диск» в BIOS будет определен как «hd0».