ฉันเพิ่งเจอntldrโมดูลด้วง
เห็นได้ชัดว่าหนึ่งในสิ่งที่สามารถใช้เป็นทางเลือกในchainloaderการบูต NT> = 6.0 รุ่นของ Windows ดังตัวอย่างด้านล่าง (มีประโยชน์มากถ้า Volume Boot Record สำหรับพาร์ติชัน 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 ด้วง
กำลังตอบกลับคำตอบของ ckhan
ขอบคุณมาก! ฉันตัดสินใจแล้วว่าจะลองขุดผ่านซอร์สโค้ดเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับntldrคำสั่ง / โมดูลของGRUB แต่คุณทำได้ดีกว่าที่ฉันคิด
มันจะไม่เกิดขึ้นกับฉันที่จะดูที่เก็บอีเมลเพื่อดูสิ่งที่ออกแบบการอภิปรายคนที่เขียนรหัสอาจมี วิธีการนี้ดูเหมือนจะเป็นประโยชน์อย่างมากในอนาคต ขอบคุณที่พูดถึงมัน
ความคิดของฉันเกี่ยวกับntldrการสนับสนุนด้วง
- ในขณะที่ฉันไม่แน่ใจจริงๆว่าความแตกต่างมีความหมายมากแค่ไหน
ntldrคือโมดูลไม่ใช่คำสั่ง หรืออาจเป็นคำสั่งที่โหลดแบบไดนามิกหากคุณต้องการ
ตามลิงค์ซอร์สโค้ดของคุณและดูที่บรรทัด 152 (GRUB_MOD_INIT) และ 159 (GRUB_MOD_FINI) คุณสามารถดูโค้ดที่จะโหลดและ ... ฉันคาดเดา ... ยกเลิกการโหลดโมดูล
เห็นได้ชัดว่าด้วงใช้ฟังก์ชั่นมากมายซึ่งคุณอาจคิดว่าเป็น " คำสั่ง " เป็นโมดูลinsmod ntldrเฉพาะที่แตกต่างในการใช้งานที่ฉันรู้ก็คือว่าก่อนที่จะใช้โมดูลหนึ่งต้องให้แน่ใจว่าจะได้รับเต็มไปด้วยคำสั่ง
นอกเหนือ:rebootฉันมักจะสงสัยว่าทำไมด้วงไม่สนับสนุน มันเปิดออกคำสั่งที่มีอยู่ แต่มันเป็นโมดูล ถ้าrebootกลับunknown commandมาแล้วinsmod rebootอนุญาตให้ GRUB "จำ"rebootคำสั่ง
นอกเหนือ:เมื่อไหร่และเพราะเหตุใด GRUB อาจ " ยกเลิกการโหลด " โมดูลฉันยังไม่รู้เลย อาจเป็นผลของสิ่งที่คล้ายกับ " การรวบรวมขยะ " หรือ ฉันสังเกตว่าเมื่อโหลดโมดูลดูเหมือนจะยังคงอยู่แม้หลังจากระบบปิดและรีบูต แน่นอนว่าคุณไม่สามารถพึ่งพาสิ่งนั้นได้ แต่ดูเหมือนจะเป็นวิธีที่ใช้งานได้จริงในทางปฏิบัติ - เป็นที่น่าสนใจว่าพวกเขาขึ้นอยู่บน
ntldrchainloaderฉันไม่ได้ดูchainloader.cรหัส ฉันเดาว่าคงเป็นไปได้หรือไม่ที่การย้ายที่โหลดในโหมดจริงของ Intel 16 บิต?
ผมรู้สึกค่อนข้างดีใจที่พวกเขาไม่ได้ใช้เป็นตัวเลือกของntldrchainloaderฉันเห็นด้วยกับ Vladimir ไม่ว่าความคล้ายคลึงกันภายใต้หน้าปกจะเป็นอย่างไรไวยากรณ์การใช้งานแตกต่างกันมาก วิธีการปัจจุบันเป็น kludgy น้อยกว่า - นอกจากนี้ยังเป็นที่น่าสนใจที่จะเห็นการขาดความกระตือรือร้นที่ชัดเจนในการเพิ่มคำสั่งนี้ลงในด้วง เห็นได้ชัดว่านักพัฒนา GRUB คิดว่าความเสียหายต่อ Windows Partition Boot Record (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ไม่ได้โหลด bootloader ของ Windows แต่ให้โหลด GRUB แทน
IMO ที่ปลอดภัยที่สุดอย่างรวดเร็ววิธีที่จะช่วยให้ผู้ใช้ Windowsntldrบูตในสถานการณ์ที่คือการใช้ด้วงใหม่ ฉันสงสัยว่าสิ่งนี้จะเป็นที่สนใจของนักพัฒนาหรือไม่ ฉันคาดหวังว่าพวกเขาจะไม่คาดการณ์สถานการณ์นี้
ฉันสงสัยว่า bootloaders อื่นนอกเหนือจากตัว Windows ntldrและคำสั่งbootmgrGRUB ntldrอาจโหลดได้หรือไม่