Я недавно споткнулся через GRUB ntldr
модуль.
По-видимому, одна из вещей, для которых это может использоваться, как альтернатива chainloader
загружать NT> = 6,0 версий Windows как в примере ниже. (Очень удобный, если Загрузочная запись тома для раздела Windows, мм, повреждается.)
menuentry "Windows 7 (bootmgr on /dev/sda1)" --class windows --class os {
insmod part_msdos
insmod ntfs
insmod ntldr
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root 1EA0019AA0017A13
ntldr ($root)/bootmgr
}
Где я могу узнать больше, как эта директива начальной загрузки может использоваться? Я не видел, что это перечислило, когда я смотрел в версии HTML руководства GRUB GNU.
Большое спасибо! Я в значительной степени решил, что должен буду попытаться рыть через исходный код для получения дополнительной информации о GRUB ntldr
команда/модуль. Но Вы сделали намного лучшее задание, чем я имел бы.
Мне никогда не приходило бы в голову смотреть на почтовые архивы для наблюдения, какие обсуждения дизайна человек, который написал код, возможно, имел. Тот метод кажется, что это могло быть очень полезно в будущем. Спасибо за упоминание его.
Мои мысли о GRUB ntldr
поддержка
ntldr
модуль, не команда. Или возможно динамично загруженная команда, если Вы желаете.GRUB_MOD_INIT
) и 159 (GRUB_MOD_FINI
) Вы видите код для загрузки и... Я предполагаю... разгружают модуль.insmod ntldr
.reboot
. Оказывается, что команда существует, но это - модуль. Если reboot
возвраты unknown command
, затем insmod reboot
позволяет GRUB "помнить" reboot
команда.ntldr
на chainloader
. Я не посмотрел на chainloader.c
код. Я предполагаю это, вероятно, также, перемещение загружает в Intel 16-разрядный реальный режим?ntldr
как опция chainloader
. Я соглашаюсь с Vladimir. Безотносительно общих черт под покрытиями синтаксис использования очень отличается. Текущий подход менее топорен.chainloader +1
не объединяет в цепочку загружают загрузчик Windows, но вместо этого перезагружает GRUB.ntldr
. Интересно, представляло ли это интерес для разработчиков. Я ожидаю, что они не ожидали этот сценарий.Интересно что загрузчики кроме Windows, ntldr
и bootmgr
, GRUB ntldr
команда смогла загружаться?
Вы правы ntldr
команда (это - команда, не модуль) не документируется. Таким образом, это - большое оправдание за некоторые приключения в археологии кода.
Каждый раз, когда я нахожу недокументированную функциональность, первое, что нужно сделать является источниками проверки.
Источник в мерзавце Savannah repo показывает, что был объединен в основную строку в августе 2010.
Исходное ответвление не кажется больше, но можно все еще видеть, что оно появилось ранее в том году в апреле 2010. Комментарий регистрации, от "Vladimir 'phcoder' Serbinenko" был
ntldr support. (based on information from nyu but no code from him)
Это базируется очень тесно на chainloader
команда, так так, чтобы имя файла в комментарии заголовка все еще не было обновлено.
Теперь, когда у нас есть точная регистрация и имя, мы можем проверить почтовые архивы. Вы видите, где у разработчиков было обсуждение о добавлении этой опции год раньше список рассылки личинки-devel:
Некоторые соответствующие выборки от того потока:
Патч Robert Millan This реализует загрузчик для семантики начальной загрузки NTLDR (которые являются тем же в BootMGR, следовательно оба поддерживаются),
Robert Millan, Если мы хотим эту функцию вообще, я думаю, что это должна быть опция в chainloader, а не автономной команде. Это - почти то же как chainloader действительно, единственная разница - то, что ntldr является загрузкой после PBR GRUB вместо самим PBR.
Vladimir Serbinenko я не думаю, что это имеет любую проблему с тех пор ntldr, использует этот PBR только в качестве суперблока для идентификации раздела. Как таковой я рассмотрел бы эту загрузку как особый случай передающего $root, просто форма его является немного странной
Yves Blusseau О команде, я думаю, что это будет более просто для пользователя, если у нас будет только одна команда: chainloader (как в grub4dos), который попытается обнаружить тип загрузчика. Это - только мое личное мнение.
Vladimir Serbinenko я не соглашаюсь с этим. chainloader и ntldr не совместно используют тот же синтаксис: chainloader ожидает загрузочный сектор, тогда как ntldr ожидает ntldr ot bootmgr файл. GRUB2 сделан для разрыва с плохими проектными решениями GRUB1 один из них являющийся командой "ядра". GRUB4DOS следует за GRUB1 на этом предмете.
Robert Millan Alright. Давайте сделаем это отдельной командой. Я думаю, что это должно все еще совместно использовать код с chainloader.c хотя (с некоторым ifdefs).
После детально изучения всего этого, что мы знаем о том, как оно может использоваться?
Это основано на chainloader.
Это берет отдельный аргумент: файл для открытия.
Это избегает загрузочной записи раздела: таким образом, это может обойти повреждение там. См., что это сообщение детализирует, как они протестировали это.
Это - только приблизительно 160 строк кода, Вы видите, что очень еще нет там.
Надежда это было полезно!