Как проверить, на каких дисках grub2 фактически установлена ​​MBR?

17

Я использую систему Debian / Squeeze (с историей, по крайней мере, до Woody), которая была обновлена ​​до grub2 как часть обновления Squeeze. Все работает хорошо, но я собираюсь возиться с конфигурацией диска.

В настоящее время машина работает на 2 дисках емкостью 80 ГБ с разделами RAID1-ed /, / home и / boot (есть еще одна пара дисков с RAID1-ed "/ data" и пара перестановок, на случай, если кому-то интересно, где находится подкачка но я не касаюсь тех).

Я добавил 2 твердотельных накопителя емкостью 130 ГБ, разбил их на разделы так, чтобы они были как минимум такими же, как разделы на дисках емкостью 80 ГБ, и намереваюсь перейти на новые SSD-накопители, добавив в них RAID1, ожидая синхронизации, а затем удаляя старые диски из массивов, так что остались только SSD (а затем растут файловые системы). Но спор mdadm / ext3 - это не то, о чем этот вопрос ...

Это оставит меня с двумя устаревшими 80 ГБ дисками, которые я хочу удалить из машины. Я беспокоюсь о том, что для их удаления потребуется несколько важных MBR. Как мне убедиться, что машина остается загрузочной?

Более конкретно:

  • Когда я делал обновление Squeeze, я помню, что был какой-то выбор, на который следует установить диски grub2 (я выбрал стандартный, который был для всех дисков). SSD не были в машине в то время; как я могу выполнить это повторно, чтобы получить grub для установки на MBR SSD? (Я предполагаю, что это dpkg-переконфигурирование некоторого пакета).

  • Как я могу найти, на каких дисках grub2 думает, что он установлен? Боже мой, в эти дни в / boot / grub / находится почти 200 файлов! Где искать? Кроме того, кажется немного странным, что /boot/grub/device.map.auto перечисляет только 3 диска в настоящее время (2 из 80 ГБ, но только один из другой пары дисков и ни один из SSD). Как мне получить это в курсе? ( Обновление: это была красная сельдь; device.map.auto, похоже, был пережитком много лет назад; device.map выглядел благоразумным при обновлении grub-mkdevicemap. Думаю, что моя паранойя в этой области происходит от BIOS старого mobo, который изменить порядок устройства, который GRUB видит по прихоти).

Результат: все прошло хорошо, и теперь у меня есть два старых 80-гигабайтных IDE-диска из коробки, а также быстрая и быстрая система загрузки, работающая на SSD-дисках RAID1 со всеми файловыми системами, масштабированными до новых размеров разделов. Другой «недостающий фрагмент головоломки Grub», который я искал, - dpkg-reconfigure grub-pcэто вопрос о том, какие диски поддерживать MBR. Ответ Аарона на самом деле больше всего убедил меня, что это работает, как и ожидалось, и, следовательно, принял этот ответ.

timday
источник

Ответы:

17

MBR составляет 512 байт, так что быстрый способ проверить, есть ли GRUB ...

dd if=/dev/sda bs=512 count=1 | xxd

Это сбрасывает MBR, я вижу "GRUB" в моем байте 0x17F = 383.

dd if=/dev/sda bs=1 count=4 skip=383

Когда я делаю это, он печатает ' GRUB' с последующим ddвыводом.

Вы можете обернуть это в forцикл bash или что-то еще, чтобы перейти на несколько дисков. если вы не хотите делать это вручную.

Аарон Д. Мараско
источник
4
Просто незначительное дополнение - поскольку положение GRUB может меняться от версии к версии, можно использовать dd if=/dev/sda bs=1 count=512 | grep -aob GRUB. Это вернет положение маркера в загрузочном секторе.
Алессандро Сантини
16

Процесс загрузки состоит из нескольких этапов (я описываю традиционный BIOS для ПК):

  1. BIOS считывает первый сектор (512 байт) загрузочного диска.
  2. Код в этом первом секторе считывает дополнительные данные и код в фиксированном месте через интерфейс BIOS. Этот интерфейс BIOS предоставляет только два жестких диска: диск 0 - это то место, откуда был прочитан первый сектор, а диск 1 - это другой диск, который трудно предсказать, если у вас их больше двух. Загрузочный сектор содержит байт, который указывает, на каком жестком диске находятся дополнительные данные; это диск, содержащий /boot/grub.
  3. Код, загруженный на предыдущем этапе, понимает разделы, файловые системы и другие высокоуровневые понятия. Данные включают местоположение файловой системы (то есть строку, подобную (hd0)/boot/grub), которая определяет, где искать grub.cfgи другие модули Grub.
  4. grub.cfg выполняется, как правило, для отображения меню и загрузки ОС.

Загрузочный сектор генерируется grub-setup, обычно вызывается через grub-install. Загрузочный сектор попадает на тот диск, который вы указали (в синтаксисе Linux) в командной строке grub-installили grub-setup. Вы можете проверить наличие загрузочного сектора на диске, запустив file -s /dev/sda. Поскольку вы добавляете новый диск и хотите загрузиться с него, вам необходимо запустить grub-installновый диск. Запускать grub-installнесколько раз на одном диске безопасно.

Сложная часть в шаге 2 выше. Если это вообще возможно, поместите Grub (т.е. /boot/grubкаталог) на загрузочный диск BIOS (или, приближаясь к этому с другой стороны, попросите BIOS загрузиться с диска, на котором он /boot/grubнаходится). Это где device.mapвступает в игру. Убедитесь, что (hd0)сопоставлен с диском, который содержит /boot/grub, а затем запустите grub-installна этом диске.

Если ваши два диска находятся в конфигурации программного RAID-1, у вас будут идентичные загрузочные сектора. Это желаемое поведение: если один диск, который является загрузочным диском BIOS, выходит из строя, загрузка с другого будет просто работать (так как они содержат одинаковые байты в тех же соответствующих местах). Если вы зеркалировали только определенные разделы, то установка загрузочного сектора влияет только на один из дисков. Вы должны grub-installснова запустить на втором диске, после изменения, device.mapчтобы связать (hd0)с диском, содержащим вторую зеркальную копию /boot/grub.

Шаг 3 довольно сложный, но обычно работает из коробки. На шаге 4 Grub находит файловые системы по UUID или ищет именованные файлы, поэтому вам больше не нужно беспокоиться о различных способах назначения дисков.

Жиль "ТАК - прекрати быть злым"
источник