Gần đây tôi tình cờ thấy ntldr
mô-đun GRUB .
Rõ ràng một trong những điều nó có thể được sử dụng là một giải pháp thay thế chainloader
để khởi động các phiên bản Windows> = 6.0 của Windows như trong ví dụ dưới đây. (Rất tiện dụng nếu Volume Boot Record cho phân vùng Windows, uh, bị hỏng.)
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
}
Tôi có thể tìm hiểu thêm về cách sử dụng chỉ thị khởi động này? Tôi không thấy nó được liệt kê khi tôi xem phiên bản HTML của hướng dẫn GNU GRUB .
Trả lời câu trả lời của ckhan
Cảm ơn rât nhiều! Tôi đã quyết định khá nhiều về việc tôi sẽ phải thử đào mã nguồn để tìm hiểu thêm về ntldr
lệnh / mô-đun GRUB . Nhưng bạn đã làm một công việc tốt hơn nhiều so với tôi sẽ có.
Tôi sẽ không bao giờ có thể nhìn vào kho lưu trữ email để xem những gì thảo luận về thiết kế mà người viết mã có thể có. Phương pháp đó nghe có vẻ rất hữu ích trong tương lai. Cảm ơn đã đề cập đến nó.
Suy nghĩ của tôi về ntldr
hỗ trợ GRUB
- Mặc dù tôi không thực sự chắc chắn sự khác biệt có ý nghĩa như thế nào,
ntldr
là một mô-đun, không phải là một lệnh. Hoặc có lẽ một lệnh được tải động nếu bạn muốn.
Theo liên kết mã nguồn của bạn và nhìn vào các dòng 152 (GRUB_MOD_INIT
) và 159 (GRUB_MOD_FINI
), bạn có thể thấy mã để tải và ... Tôi đoán là ... dỡ bỏ mô-đun.
GRUB rõ ràng thực hiện nhiều chức năng mà bạn có thể nghĩ là " lệnh " dưới dạng các mô-đun. Sự khác biệt duy nhất trong cách sử dụng mà tôi biết là trước khi sử dụng mô-đun, người ta phải đảm bảo rằng nó đã được tải bằng lệnhinsmod ntldr
.
Ngoài ra: Tôi luôn tự hỏi tại sao GRUB không hỗ trợreboot
. Hóa ra lệnh tồn tại, nhưng nó là một mô-đun. Nếureboot
trả vềunknown command
, thìinsmod reboot
cho phép GRUB "nhớ"reboot
lệnh.
Ngoài ra: Khi nào và tại sao GRUB có thể " dỡ " một mô-đun, tôi chưa có ý tưởng nào. Có lẽ nó là kết quả của một cái gì đó tương tự như " bộ sưu tập rác " ?? Tôi đã nhận thấy rằng một khi đã tải các mô-đun dường như vẫn tồn tại, ngay cả sau khi một hệ thống được tắt và khởi động lại. Tất nhiên, bạn không thể phụ thuộc vào điều đó, nhưng dường như đó là cách nó thường hoạt động trong thực tế. - Thật thú vị khi họ dựa
ntldr
vàochainloader
. Tôi đã không nhìn vàochainloader.c
mã. Tôi đoán có lẽ nó cũng thực hiện tải lại trong chế độ thực 16 bit của Intel ?
Tôi là khá vui vì họ đã không thực hiệnntldr
như một tùy chọnchainloader
. Tôi đồng ý với Vladimir. Dù điểm tương đồng dưới vỏ bọc là gì, cú pháp sử dụng rất khác nhau. Cách tiếp cận hiện tại là ít bùn hơn. - Thật thú vị khi thấy sự thiếu nhiệt tình rõ ràng khi thêm lệnh này vào GRUB. Rõ ràng các nhà phát triển GRUB nghĩ rằng thiệt hại cho Bản ghi khởi động phân vùng Windows (PBR) là rất khó xảy ra. Tuy nhiên, tôi có thể phác thảo cách thực hiện trong khi cài đặt đủ bình thường.
Bắt đầu bằng cách giả sử người dùng đã cài đặt Windows trên hệ thống của họ. Bây giờ họ cài đặt Ubuntu (12.04 LTS) " cùng với " Windows. Tại một thời điểm trong quá trình cài đặt Ubuntu, rõ ràng họ có thể quyết định nơi họ muốn GRUB được cài đặt. Vì lý do tôi không thể bắt đầu đoán, một số trong số họ quyết định cài đặt GRUB vào phân vùng Windows được cài đặt.
Quá trình cài đặt hoàn tất và họ có thể khởi động Ubuntu thành công. Tuy nhiên, khi họ cố gắng khởi động Windows bằng cách chọn mục trong menu GRUB, Windows không khởi động. Thay vì cố gắng khởi động Windows với GRUB chỉ hiển thị lại menu GRUB?
Tại sao? Chà, rõ ràng khi họ bầu chọn cài đặt GRUB vào phân vùng windows, phần thực sự đã xảy ra là PBR cho phân vùng Windows được ghi đè bằng PBR của GRUB. Vì vậy,chainloader +1
không tải chuỗi bộ tải khởi động Windows, mà thay vào đó tải lại GRUB.
IMO, cách nhanh nhất an toàn nhất để cho phép người dùng khởi động Windows trong tình huống đó là sử dụng tính năng mới của GRUBntldr
. Tôi tự hỏi nếu điều này sẽ được các nhà phát triển quan tâm. Tôi hy vọng họ đã không lường trước được kịch bản này.
Tôi tự hỏi những bộ tải khởi động nào khác ngoài Windows, ntldr
và lệnh bootmgr
GRUB ntldr
có thể tải được không?