Нещодавно я натрапив на ntldr
модуль GRUB .
Очевидно, одна з речей, для якої він може бути використаний, є альтернативою chainloader
для завантаження версій Windows NT> = 6.0, як у наведеному нижче прикладі. (Дуже зручно, якщо запис завантаження гучності для розділу 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 .
Відповідаючи на відповідь ckhan
Велике спасибі! Я майже вирішив, що мені доведеться спробувати перекопати вихідний код, щоб дізнатися більше про ntldr
команду / модуль GRUB . Але ви зробили набагато кращу роботу, ніж я.
Мені ніколи б не прийшло в голову подивитися архіви електронної пошти, щоб побачити, які дизайнерські дискусії може мати людина, яка написала код. Цей метод здається, що може бути дуже корисним у майбутньому. Дякуємо, що згадали про це.
Мої думки щодо ntldr
підтримки GRUB
- Хоча я не дуже впевнений, скільки означає розрізнення,
ntldr
це модуль, а не команда. Або, можливо, динамічно завантажена команда, якщо бажаєте.
Перейшовши за посиланням на вихідний код і переглянувши рядки 152 (GRUB_MOD_INIT
) та 159 (GRUB_MOD_FINI
), ви можете побачити код для завантаження і ... я здогадуюсь ... вивантажте модуль.
GRUB, мабуть, реалізує багато функцій, які, на вашу думку, можуть бути « командами » як модулі. Єдине, що мені відомо про використання, полягає в тому, що перед використанням модуля необхідно переконатися, що він завантажений командоюinsmod ntldr
.
Убік: Я завжди цікавився, чому GRUB не підтримуєreboot
. Виявляється, команда існує, але це модуль. Якщоreboot
повернетьсяunknown command
, значитьinsmod reboot
дозволяє GRUB "запам'ятати"reboot
команду.
Убік: Коли і чому GRUB може " розвантажити " модуль, я ще не маю уявлення. Може, це результат чогось подібного до " вивезення сміття " ?? Я помітив, що завантажені модулі, здається, зберігаються, навіть після вимкнення та перезавантаження системи. Звичайно, ви не можете від цього залежати , але, схоже, це часто працює на практиці. - Цікаво , що вони засновані
ntldr
наchainloader
. Я не переглянувchainloader.c
код. Я думаю, це, ймовірно, також робить перевантаження переміщення в 16-бітному реальному режимі Intel ?
Я буду дуже радий , що вони не виконали вntldr
якості опціїchainloader
. Я згоден з Володимиром. Незалежно від подібності під обкладинками, синтаксис використання сильно відрізняється. Нинішній підхід менш невдалий. - Цікаво також побачити очевидну відсутність ентузіазму щодо додавання цієї команди до GRUB. Очевидно, розробники GRUB вважали, що пошкодження запису завантаження розділів Windows (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 у цій ситуації - це використання нового GRUBntldr
. Цікаво, чи це зацікавило б розробників. Я думаю, що вони не передбачали цього сценарію.
Цікаво, які завантажувачі, крім Windows, ntldr
і команда bootmgr
GRUB ntldr
могли б завантажувати?