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

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

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

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

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

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

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

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

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

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 .

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

В процессе загрузки есть несколько шагов (я описываю традиционную компьютерную 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 вступает в действие device.map . Убедитесь, что (hd0) сопоставлен с диском, который содержит /boot/grub , а затем запустите grub-install на этом диске.

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

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