Intereting Posts
Что такое приложение sfp для графического интерфейса по умолчанию в Debian? NTFS-3G: все файлы являются «неподдерживаемой точкой повторной обработки», Как найти доступные сетевые интерфейсы? Временная метка каждой строки на экране GNU Завершение zsh не исправимо? (вопросительный знак) в дорожках Yum не может скачать, но скручивание в порядке? Правильный способ установки доли samba Что такое «совпадения», «hash_hits» и «false_alarms» в выводе rsync, а «data = 0» означает успех? Btrfs добавляет меньший привод в RAID1 Как определить, где установлены параметры среды LANG, LANGUAGE и MAIL? Как работает rsync –compare-dest При перерисовке экрана urxvt Установка пакета и зависимости – как предотвратить установку существующих библиотек? Терминальные escape-последовательности: почему терминалы не сообщают, какие функции они поддерживают, вместо того, чтобы полагаться на terminfo? Нет видео с проигрывателем HTML 5 на YouTube под Iceweasel

Где я могу узнать больше о том, как использовать команду GRUB `ntldr` (модуль?)

Недавно я наткнулся на модуль GRUB ntldr .

По-видимому, одна из вещей, к которой он может быть применен, – это альтернатива загрузчику для 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-версии руководства GNU GRUB .


Отвечая на ответ цхана

Большое спасибо! Я довольно много решил, что мне придется попробовать прорваться через исходный код, чтобы узнать больше о команде / модуле GRUB ntldr . Но вы сделали намного лучшую работу, чем я.

Мне никогда не приходило в голову искать архивы электронной почты, чтобы посмотреть, какие обсуждения в дизайне может иметь человек, который написал код. Этот метод звучит так, будто он может быть очень полезен в будущем. Спасибо, что упомянул об этом.

Мои мысли о поддержке GRUB ntldr

  1. Хотя я не совсем уверен, насколько это означает различие, ntldr – это модуль, а не команда. Или, возможно, динамически загруженную команду, если хотите.

    После ссылки на исходный код и просмотра строк 152 ( GRUB_MOD_INIT ) и 159 ( GRUB_MOD_FINI ) вы можете увидеть код для загрузки и … Я предполагаю … выгрузить модуль.

    Очевидно, что GRUB реализует множество функций, которые вы можете считать « командами » в качестве модулей. Единственное отличие в использовании, о котором я знаю, это то, что перед использованием модуля необходимо убедиться, что он был загружен командой insmod ntldr .

    Кроме того, я всегда задавался вопросом, почему GRUB не поддерживает reboot . Оказывается, команда существует, но это модуль. Если reboot возвращает unknown command , то insmod reboot позволяет GRUB «запомнить» команду reboot .

    Кроме того, когда и почему GRUB может « выгрузить » модуль, я пока не знаю. Может быть, это результат чего-то похожего на « сбор мусора »? Я заметил, что после загрузки модули, похоже, сохраняются даже после того, как система отключена и перезагружена. Конечно, вы не можете зависеть от этого, но похоже, что это часто работает на практике.

  2. Интересно, что они основали ntldr на ntldr . Я не смотрел код chainloader.c . Думаю, это, вероятно, также делает перенос нагрузки в 16-битном реальном режиме Intel?

    Я очень рад, что они не реализовали ntldr в качестве опции chainloader . Я согласен с Владимиром. Независимо от сходства под обложками синтаксис использования очень отличается. Нынешний подход менее клочковый.

  3. Интересно также видеть явное отсутствие энтузиазма для добавления этой команды в GRUB. Очевидно, разработчики GRUB считали, что повреждение загрузочной записи Windows Partition (PBR) было крайне маловероятным. Однако я могу набросать, как это сделать при достаточно обычной установке.

    Начните с того, что пользователь установил Windows в свою систему. Теперь они устанавливают Ubuntu (12.04 LTS) « рядом » с Windows. В какой-то момент во время установки Ubuntu они, по-видимому, могут решить, где они хотят установить GRUB. По причинам, о которых я не могу догадаться, некоторые из них решили установить GRUB в раздел, в который установлен Windows.

    Установка завершена, и они могут успешно запустить Ubuntu. Однако, когда они пытаются запустить Windows, выбрав запись в меню GRUB, Windows не запускается. Вместо попытки запустить Windows с GRUB просто повторно отображает меню GRUB?

    Зачем? Ну, видимо, когда они решили установить GRUB в раздел Windows, часть того, что на самом деле произошло, это PBR для раздела Windows, было переписано с PBR GRUB. Таким образом, chainloader +1 не загружает загрузку загрузчика Windows, но вместо этого повторно загружает GRUB.

    IMO, самый безопасный быстрый способ позволить пользователю загружать Windows в этой ситуации – использовать новый ntldr GRUB. Интересно, будет ли это интересно для разработчиков. Я ожидаю, что они не ожидали этого сценария.

Интересно, какие загрузчики, отличные от Windows, ntldr и bootmgr , может быть ntldr команда GRUB ntldr ?

Исследование недокументированной функции

Вы правы, команда ntldr (это команда, а не модуль) не документирована. Так что это отличный повод для некоторых приключений в археологии кода .

Всякий раз, когда я нахожу недокументированную функцию, первое, что нужно сделать, это проверить источники.

  • Источник в репозитории базаров Savannah показывает, что он был объединен с основной линией в августе 2010 года.

  • Возвращаясь к исходной ветке, вы можете увидеть, что она появилась в начале этого года , в апреле 2010 года. Комментарий к тесту от «Владимирского» phcoder «Сербиненко» был

     ntldr support. (based on information from nyu but no code from him) 

Он очень тесно связан с командой chainloader , настолько, что имя файла в комментарии заголовка все еще не обновлено.

Теперь, когда у нас есть точная регистрация и имя, мы можем проверить почтовые архивы. Вы можете увидеть, где разработчики обсуждали вопрос о добавлении этой функции годом ранее в список рассылки grub-devel :

Некоторые соответствующие выдержки из этой темы:

Роберт Миллан. Этот патч реализует загрузчик для семантики загрузки NTLDR (которые одинаковы в BootMGR, поэтому оба поддерживаются)

Роберт Миллан. Если мы хотим эту функцию вообще, я думаю, что это должен быть вариант в chainloader, а не в отдельной команде. Это почти то же самое, что и цепной загрузчик, единственное отличие в том, что ntldr – это загрузка после PBR GRUB, а не PBR.

Владимир Сербиненко. Я не думаю, что это проблема, поскольку ntldr использует этот PBR только как суперблок для идентификации раздела. Поэтому я предпочел бы рассматривать эту загрузку как частный случай передачи $ root, просто форма этого немного странная

Yves Blusseau О команде, я думаю, что для пользователя будет проще, если у нас будет только одна команда: chainloader (например, grub4dos), которая попытается определить тип загрузчика. Это только мое личное мнение.

Владимир Сербиненко, я не согласен с этим. chainloader и ntldr не используют один и тот же синтаксис: chainloader ожидает bootsector, тогда как ntldr ожидает файл ntldr ot bootmgr. GRUB2 делается для того, чтобы сломаться с плохими проектными решениями GRUB1, одним из которых является команда «kernel». GRUB4DOS следует за GRUB1 по этому вопросу.

Роберт Миллан Хорошо. Давайте сделаем это отдельной командой. Я думаю, что он все равно должен совместно использовать код с chainloader.c хотя (с некоторыми ifdefs).

Отвечая на ваш вопрос

Позаботившись обо всем этом, что мы знаем о том, как его можно использовать?

  • Он основан на chainloader.

  • Он принимает один аргумент: файл для открытия.

  • Это позволяет избежать загрузочной записи раздела, поэтому она может обойти коррупцию. См. Это сообщение, подробно описывающее, как они тестировали это.

  • Это всего около 160 строк кода , вы можете видеть, что там не так много.

Надеюсь, это было полезно!