มารู้จัก Grub4Dos กันเถอะ – Boot loader ที่มีความสามารถสูง

ที่มา: http://grub4dos.sourceforge.net/wiki/index.php/Grub4dos_tutorial

Grub4Dos สามารถใช้งานได้ทั้ง Linux, Windows
แต่บทความฉบับนี้จะเน้นที่การทำงานกับ Windows นะครับ

ก่อนอื่น ถ้าเราจะใช้งาน Grub4Dos เราต้องติดตั้ง Grub4Dos ลงบน MBR (ชุดโปรแกรมที่ให้คอมพิวเตอร์เริ่มต้นทำงานบนฮาร์ดดิส sector แรก) เสียก่อน

และ Grub4Dos จะทำงานได้ ก็จะต้องมีไฟล์ประกอบอีก 2 ไฟล์ คือ grldr และ menu.lst (คล้ายๆ NTLDR, NTDETECT.COM และ boot.ini ของวินโดส์)


การติดตั้ง Grub4Dos ที่ MBR โดยใช้ grubinst.exe
(gruninst.exe สามารถใช้ได้ใน Linux, FreeBSD และตระกูล Windows NT (Windows NT/2000/XP/2003/Vista)

1. ติดตั้ง grub4dos ไปที่ส่วน boot loader สำหรับวินโดส์ใช้
1.1 แบบใช้คำสั่ง
grubinst (hd0) “ติดตั้งบน MBR ของฮาร์ดดิสลูกแรก
grubinst (hd0,0) “หมายถึง ติดตั้งบน partition boot sector (PBS) หรือบนพาติชั่นแรกของฮาร์ดิสลูกแรก)
1.2 หรือใช้โปรแกรม grubinst_gui.exe ช่วยติดตั้งก็ได้

2. คัดลอกไฟล์ grldr และ menu.lst ไปที่ไดร์ฟ c

การติดตั้ง GRUB for DOS (โดยอ้อม) ผ่าน Windows NT/2000/XP/2003 boot manager

1 เพิ่มคำสั่งนี้ลงไปในไฟล์ boot.ini (ไฟล์นี้ถูกซ่อนอยู่):
C:\grldr=”Start GRUB4DOS”

2. คัดลอกไฟล์ grldr.mbr, grldr และ menu.lst ไปที่ไดร์ฟที่ต้องการ

3. เมื่อสตาร์ทวินโดส์ในครั้งต่อไป จะพบเมนู “Start GRUB4DOS” ขึ้นมา เพื่อนำไปใช้ต่อไป

การติดตั้ง GRUB for DOS (โดยอ้อม) ผ่าน Windows Vista (Win 7 ด้วย) boot manager

1. ใช้ bcdedit (คล้าย msconfig ของ xp) คอนฟิค:
bcdedit /create /d “Start GRUB4DOS” /application bootsector
bcdedit /set {id} device boot
bcdedit /set {id} path \grldr.mbr
bcdedit /displayorder {id} /addlast

2. คัดลอกไฟล์ grldr.mbr, grldr และ menu.lst ไปที่ไดร์ฟที่ต้องการ
Note: grldr.mbr ตัวเก่าสามารถใช้กับ boot.ini ของ Windows NT/2000/XP/2003 ได้. แต่ใช้ไม่ได้กับวินโดส์ใหม่ๆ

ทั้งนี้
เราสามารถสั่งให้ grub4dos บูท DOS/Windows 9X/Windows NT ได้โดยตรงอีกด้วย
(โดยแก้ไขไฟล์ menu.lst)

DOS, Windows 95/98/Me:
title Load io.sys “ชื่อที่แสดงในเมนู ไฟล์ระบบที่ใช้ในการบูท
root (hd0,0) “ตำแหน่งที่เก็บไฟล์ระบบ
chainloader (hd0,0)/io.sys “ผูกตัวโหลดไปที่ไฟล์บูทนั้นๆ

Windows NT/2000/XP/2003:
title Load ntldr
root (hd0,0)
chainloader (hd0,0)/ntldr

Windows Vista:
title Load bootmgr
root (hd0,0)
chainloader (hd0,0)/bootmgr

การจำลองดิส (Disk emulation)
ใน GRUB for DOS, การจำลองดิส เราจะใช้คำสั่ง “map”
แบ่งเป็น 2 กรณี คือ

1. Direct mapping

นี้คือตัวอย่าง ของการ map ไฟล์ image ให้คอมมองเป็น floppy (virtual floppy), และก็บูทจากไดร์ฟที่เราจำลองขึ้นนี้:
title Boot from floppy image “ชื่อเมนู
map (hd0,0)/aa.img (fd0) “แมปไฟล์ image (พร้อมระบุตำแหน่งให้ถูกต้อง) ไปเป็นไดร์ฟ fd0 (ไดร์ฟเอ)
map –hook “เริ่มแมปทันที (มีผลให้คำสั่งข้างล่างต่อไปๆมองเห็นไดร์ฟเอแล้ว)
chainloader (fd0)+1 “ไม่รู้หมายความว่าอย่างไร แต่ต้องใส่
rootnoverify (fd0) “ไม่ต้อง vorify ตำแหน่ง fd0

นี้คือตัวอย่าง ของการ map ไฟล์ image ให้คอมบูทจาก virtual harddisk:
title Boot from hard disk image
map (hd0,0)/aa.dsk (hd0) ‘แมปไฟล์อิมเมจ aa.dsk ให้เป็นไดร์ฟ hd0
map (hd0) (hd1) ‘แมปไดร์ฟ hd0 (ของจริง) ให้เป็นไดร์ฟ hd1
map –hook ‘เริ่มแมปให้มีผลทันที
chainloader (hd0,0)+1
rootnoverify (hd0,0)

การ Map ไฟล์อิมเมจ ให้เป็น virtual hard disk แต่ยังคงให้บูทจาก original disk อยู่:
title Create virtual hard disk
map (hd0,0)/aa.dsk (hd1) ‘แมปไฟล์ aa.dsk ให้เป็น hd1
map –hook
chainloader (hd0,0)+1
rootnoverify (hd0,0)

ปล. สำหรับ Direct mapping นั้น ไม่สามารถจำลองไดร์ฟ CDROM ได้

2. In direct mapping
ไฟล์อิมเมจจะต้องต่อเนื่องกัน (the image file must be contiguous.)

The virtual disk is implemented using INT 13. Therefore, it can be accessed in system that still uses INT 13, such as all kinds of DOS and Windows 9X (compatible mode disk access), and it can’t be accessed in system that usesprotected mode drivers, such as Linux, FreeBSD and Windows NT family OSs.

Indirect mapping is very similar to direct mapping, here is an example:

title Boot from floppy image
map –mem (hd0,0)/aa.img (fd0)
map –hook
chainloader (fd0)+1
rootnoverify (fd0)

ตัวเลือก –mem หมายถึง indirect mapping.

สำหรับ indirect mapping, ไฟล์อิมเมจจะถูก copy ไปที่หน่วยความจำก่อน ดังนั้น ไฟล์ image ไม่จำเป็นต้องต่อเนื่องกัน (file need not to be contiguous – ผู้เขียนคงศัพท์ไว้ให้เห็นว่า พูดขัดกับข้างต้น) อย่างไรก็ตาม ท่านจะต้องมีหน่วยความจำที่มากพอให้เก็บไฟล์อิมเมจทั้งก้อน

Auto MBR creation

To create virtual hard disk, you need an image file that resemble a real hard disk, which consist of MBR and partition data. If the image file only contains partition data, you need to patch it with MBR to create disk image. GRUB for DOS has taken this into consideration. When mapping disk image file, it will test the presence of MBR, if not found, it will create MBR automatically using the partition data. For example:

title Boot from hard disk image
map –mem (hd0,0)/aa.dsk (hd0)
map (hd0) (hd1)
map –hook
chainloader (hd0,0)+1
rootnoverify (hd0,0)

aa.dsk can be either disk image or partition image, in the later case, GRUB for DOS will create the MBR in the air.

memdisk

The indirect mapping of GRUB for DOS is similar to the function of external tool memdisk from syslinux. In fact, the following two menu entries do roughly the same thing:

title Boot from virtual disk using internal map command
map –mem (hd0,0)/aa.dsk (hd0)
map (hd0) (hd1)
map –hook
chainloader (hd0,0)+1
rootnoverify (hd0,0)

title Boot from virtual disk using external memdisk
kernel (hd0,0)/memdisk
initrd (hd0,0)/aa.dsk

However, memdisk does not support direct mapping or auto MBR creation.

CDROM related subjects

Using ATAPI CDROM in GRUB for DOS

Use the following command to initialize ATAPI CDROM:

cdrom –init

Then, use the following command to start using ATATPI CDROM:

map –hook

After map –hook, the CDROM device can be accessed using (cd0), (cd1), etc.

(Note, if you need to use more than one map –hook, perhaps because you are also mapping disk images to memory, then the second and subsequent hook commands need to be map –rehook)

To boot from the first CDROM, use the following commands:

chainloader (cd0)
boot

To stop using CDROM:

map –unhook
cdrom –stop

The first command removes the (cdN) device mapping, while the second one stops the CDROM driver.

Note: If you boot GRUB for DOS from CDROM, the booting device will be (cd). This device is always accessible. However, if you want to access file from other CDROMs, you still need to initialize them using the above commands.

Examples:

To boot from the first CDROM:

title Boot From First CDROM
cdrom –init
map –hook
chainloader (cd0)
boot

Create a bootable CDROM

In GRUB for DOS, you can use grldr to create bootable CDROM:

mkisofs -R -b grldr -no-emul-boot -boot-load-seg 0x1000 -o bootable.iso iso_root

mkisofs -R -b grldr -no-emul-boot -boot-load-size 4 -o grldr.iso iso_root

grldr and menu.lst should be placed at the root directory of CDROM image.

The above two commands can both create a bootable CDROM, but they are not totally the same.

The first one tells BIOS to load the whole grldr. However, some buggy BIOS might ignore it and load only a portion of the file, typically one sector (2048 bytes). This will cause the program to fail.

The second one tells BIOS to load only the first sector (2048 bytes), and the program loads the rest from CDROM. This method is safer, it should work for most BIOS.

Note: you can optionally use the -boot-info-table option, but the info table will be ignored by the program.

Load GRUB for DOS from BCDW

To load GRUB for DOS from BCDW, first copy grldr and menu.lst to the root directory of CDROM image, then add a new line to the [MenuItems] section of BCDW configuration file bcdw.ini:

\grldr ; Grub4Dos

Post a comment or leave a trackback: Trackback URL.

ความเห็น

  • diskless solution  On กรกฎาคม 25, 2012 at 8:21 pm

    I’ve read a few good stuff here. Definitely worth bookmarking for revisiting. I wonder how much effort you set to create such a wonderful informative website.

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

%d bloggers like this: