Разница между загрузочными и не загружаемыми разделами

8

В чем разница между загрузочным и незагрузочным разделом? Я знаю, что пользователь не может загрузить систему из раздела, помеченного как не загружаемый, и может из одного раздела, помеченного как загрузочный.

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

Сэм
источник
1
Может быть, зная, что процесс загрузки Linux может помочь вам. ibm.com/developerworks/linux/library/l-linuxboot
@anon_anon Э-э, эта статья, без сомнения, хорошая, немного устарела. Это с 2006 года и обсуждает GRUB Legacy. Я думаю, что с GRUB 2 все немного изменилось (если не сказать больше, они используют разные имена для « этапов » загрузки в GRUB 2 :). Я попытался найти обновление DeveloperWorks статьи, на которую вы ссылались для GRUB 2, но не смог. Самое близкое, на что я мог прийти - это перейти на GRUB 2 .
иррациональный Джон
@ Рони Оупс. Обновил мой ответ.
иррациональный Джон
Возможный дубликат Что такое опция «Загрузочный флаг» при установке дистрибутива?
Жиль "ТАК - перестань быть злым"

Ответы:

6

Хотя за него проголосовали ... возможно, потому, что кто-то думал, что он не отвечает на вопрос ... Я думаю, что ответ @ Рони - хорошее начало для объяснения того, о чем bootидет речь. (На самом деле я планировал начать свой ответ с примера, аналогичного тому, который он представил.)

Я был готов дать ответ о том, как boot флаг в данный момент часто игнорируется (как показывает пример @Rony) исторического остатка периода, когда жесткие диски были меньше, а загрузчики были гораздо менее изощренными.

Но потом я обнаружил, что это уже было сказано в ответе на этот вопрос: что такое опция «Загрузочный флаг» при установке дистрибутива?

Более того, была также ссылка на небольшую статью о флаге загрузки, в которой говорится

  • « Его основная функция заключается в указании загрузчику MS-DOS / MS типа Windows, какой раздел загружать. В некоторых случаях он используется Windows XP / 2000 для назначения активному разделу буквы« C: ». »

Ну это смущает ...

Когда я утверждал, что bootфлаг был « историческим остатком », я предполагал, что это так, потому что, очевидно, GRUB не нуждался в его использовании. Конечно, Microsoft также "пошла бы дальше ".

Хорошо известная цитата, обычно приписываемая Оскару Уайльду, в данном случае оказалась слишком верной.

Оказывается , что MBR и PBR (Partition Boot Record) погрузчики , используемые в операционных системах Windows , DO ожидать , bootфлаг должен быть установлен правильно.

Чтобы проверить это, я очистил флаг загрузки от всех разделов виртуальной машины Windows 8. (См. Ниже. Если вам интересно, вот ссылка на вставку полного результата скрипта BootInfo )

Drive: sda     
Disk /dev/sda: 26.8 GB, 26843545600 bytes
255 heads, 63 sectors/track, 3263 cylinders, total 52428800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes

Partition  Boot  Start Sector    End Sector  # of Sectors  Id System

/dev/sda1               2,048       718,847       716,800   7 NTFS / exFAT / HPFS
/dev/sda2             718,848    52,426,751    51,707,904   7 NTFS / exFAT / HPFS

Когда я очистил флаг от обоих разделов, я получил сообщение об ошибке FATAL: INT18: BOOT FAILURE при попытке загрузки. (Я не уверен, что это из загрузчика Windows MBR или виртуальной машины, эквивалентной BIOS.)

Чтобы посмотреть, что произойдет, я также установил bootфлажок «неправильный» раздел /dev/sda2вместо /dev/sda1. Это привело к появлению окна, показанного на рисунке ниже.

Windows не удалось запустить окно ошибки

<sigh/>

Этот опыт заставляет меня задуматься, использует ли Microsoft тот же загрузчик загрузочного сектора MBR, который они использовали для MS-DOS и Windows 3.0 / 3.1?

иррациональный Джон
источник
3

Я знаю, что пользователь не может загрузить систему из раздела, помеченного как не загружаемый, и может из одного раздела, помеченного как загрузочный.

С жесткого диска ноутбука

# fdisk  -l /dev/sda

Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x47b94fbe

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048     1999999      998976   83  Linux
/dev/sda2         2000000     9999999     4000000   82  Linux swap / Solaris
/dev/sda3        10000000    89999999    40000000   83  Linux
/dev/sda4        90000000   976773167   443386584   83  Linux

С загрузочного USB Linux

# fdisk  -l /dev/sdb

Disk /dev/sdb: 8004 MB, 8004304896 bytes
247 heads, 62 sectors/track, 1020 cylinders, total 15633408 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000a5395

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2097151     1047552   83  Linux
/dev/sdb2         2097152    15632383     6767616   83  Linux

У них нет ни одного загрузочного раздела, а все они загрузочные.

Rony
источник
2

Просто флаг в таблице разделов. MBR ищет флаг в разделах и запускается из раздела с флагом «загрузки».

Руфо Эль Магуфо
источник
0

При использовании традиционной Microsoft MBR код в MBR определяет, как выполнять дисковый ввод-вывод, и проходит через разделы, чтобы увидеть, какой из них помечен загрузочным флагом. Только один раздел должен быть помечен. Затем он проверяет первый сектор этого раздела и, если он помечен соответствующим образом, читает этот сектор и передает ему управление. Если я правильно помню, эта проверка состоит в том, что сектор заканчивается 0x55 0xaa.

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

GRUB2 очень часто использует собственную MBR и процесс, игнорируя этот бит.

Джон С. Грубер
источник