INSTALL GRUB2 TRÊN WINDOWS
*****
1. TẢI VỀ GRUB2
Để tải bản mới nhất của grub, dành
cho cả Windows và Linux bạn vào đường dẫn này.
https://ftp.gnu.org/gnu/grub/
2. CHUYỂN ĐẾN THƯ MỤC GIẢI NÉN CỦA GRUB VÀ CHẠY DÒNG LỆNH ĐỂ CÀI ĐẶT BOOTLOADER
GRUB2 CHO Ổ ĐĨA CỦA BẠN
grub-install.exe --boot-directory=G:\boot
--target=i386-pc
//./PHYSICALDRIVE2
- Trong đó [--boot-directory=] là vị trí lưu file boot của grub có thể thay G:\boot
bằng một thư mục con trong G:, ở đây G:\boot là phân vùng cần chứa bootloader
- [--target=] là kiểu hệ điều hành cần tạo boot, [i386-pc] là cho hệ điều hành chế độ BIOS (CSM,
Legacy), ngoài ra còn [x86_64-efi] cho boot hệ
điều hành x64 efi, [i386-efi] cho hệ điều hành
boot x86 efi
- [//./PHYSICALDRIVE2] là thứ tự ổ đĩa cần tạo grub2 bootloader, nếu
là ổ USB thì chọn [--removeable]. Để biết thứ tự ổ đĩa bạn dùng lệnh list disk
trong diskpart nhé. Vào cmd, gõ diskpart, gõ list disk.
grub-install.exe --boot-directory=G:\boot --efi-directory=G: --target=x86_64-efi --removable
3. Sau khi thực hiện lệnh chương trình sẽ thông báo thành công hay không.
- Nhớ rằng, để boot efi thì phân vùng
chứa efi boot phải định dạng FAT32
- Nếu chọn kiểu boot efi thì cần xác
định thư mục chứa boot-efi nữa qua [--efi-directory=], tuy nhiên lệnh tạo EFI
chỉ thành công khi bạn đang boot OS với chế độ UEFI. Không sao, bạn chỉ cần tìm
file grubx64.efi và đổi tên thành bootx64.efi và
chép đè vào file bootx64.efi của windows là được, với efi x86 cũng làm tương tự.
- Ưu tiên tạo boot uefi x64 hơn nhé,
vì trước sau thì chúng ta cũng phải gặp vấn đề cần giải quyết trên boot UEFI
này.
- Dưới đây là vị trí file khi chọn –boot-directory=G:\boot,
2 thư mục boot và EFI này nằm ở gốc ổ G:
4. Tải file grub.cfg và đặt vào thư mục [ổ đĩa:\...\grub\]
- Sau đó thêm những menuentry {….} của
hệ điều hành mà bạn muốn vào.
- Ví dụ menuentry windows 7
menuentry "Windows 7
BIOS" {
insmod part_msdos
insmod ntfs
set root='(hd0,msdos1)'
chainloader +1
}
- Những OS khác các bạn tự tìm trên mạng
menuentry "OS using grub2" {
insmod xfs
search --set=root
--label OS1 --hint hd0,msdos8
configfile
/boot/grub/grub.cfg
}
menuentry "OS using grub2-legacy" {
insmod ext2
search --set=root
--label OS2 --hint hd0,msdos6
legacy_configfile
/boot/grub/menu.lst
}
menuentry "Windows XP" {
insmod ntfs
search --set=root
--label WINDOWS_XP --hint hd0,msdos1
ntldr /ntldr
}
menuentry "Windows 7" {
insmod ntfs
search --set=root
--label WINDOWS_7 --hint hd0,msdos2
ntldr /bootmgr
}
menuentry "FreeBSD" {
insmod zfs
search
--set=root --label freepool --hint hd0,msdos7
kfreebsd
/freebsd@/boot/kernel/kernel
kfreebsd_module_elf
/freebsd@/boot/kernel/opensolaris.ko
kfreebsd_module_elf /freebsd@/boot/kernel/zfs.ko
kfreebsd_module /freebsd@/boot/zfs/zpool.cache
type=/boot/zfs/zpool.cache
set
kFreeBSD.vfs.root.mountfrom=zfs:freepool/freebsd
set
kFreeBSD.hw.psm.synaptics_support=1
}
menuentry "experimental GRUB" {
search
--set=root --label GRUB --hint hd0,msdos5
multiboot
/experimental/grub/i386-pc/core.img
}
menuentry "Fedora 16 installer" {
search
--set=root --label GRUB --hint hd0,msdos5
linux
/fedora/vmlinuz lang=en_US keymap=sg resolution=1280x800
initrd
/fedora/initrd.img
}
menuentry "Fedora rawhide installer" {
search
--set=root --label GRUB --hint hd0,msdos5
linux
/fedora/vmlinuz
repo=ftp://mirror.switch.ch/mirror/fedora/linux/development/rawhide/x86_64
lang=en_US keymap=sg resolution=1280x800
initrd
/fedora/initrd.img
}
menuentry "Debian sid installer" {
search
--set=root --label GRUB --hint hd0,msdos5
linux
/debian/dists/sid/main/installer-amd64/current/images/hd-media/vmlinuz
initrd
/debian/dists/sid/main/installer-amd64/current/images/hd-media/initrd.gz
}
* Với windows uefi chúng ta tìm tới bootmgfw.efi
menuentry 'Windows 10' {
search --fs-uuid
--no-floppy --set=root FF44-56B0
chainloader
(${root})/EFI/Microsoft/Boot/bootmgfw.efi
}
* FF44-56B0 là
UUID của phân vùng, nếu bạn dùng lệnh search --file thì sẽ có lúc, trên 1 máy
tính khác có sẵn file bootmgfw.efi và chúng ta không biết là nó boot file nào.
UUID của ổ đĩa, chúng ta có thể chạy thử grub2 trên giả lập và dùng lệnh "ls -l" để hiện thị UUID của phân vùng chúng
ta muốn dùng. Lệnh ls –l sẽ liệt kê từ phân vùng cuối đến phân vùng đầu trên ổ
đĩa, như hình dưới đây, ta nên xem dung lượng phân vùng và mã thứ tự để biết
phân vùng cần chọn.
* Nếu bạn cài đặt efi trong môi trường
bios sẽ bị báo lỗi, nhưng file efi của grub vẫn được tạo ra, khi đó, bạn có thể
đổi tên grubx64.efi thành bootx64.efi và chép đè vào \efi\boot\bootx64.efi của
windows.
* Khi cài đặt grub UEFI thì cũng đã tự
động tạo thư mục grub cho BIOS rồi, cả grub uefi và grub bios đều dùng chung
thư mục cấu hình bios, nên bạn chỉ cần điều chỉnh file grub.conf trong thư mục
[ổ đĩa:]\[thư mục chứa grub]\grub là được. Các bạn cứ thêm đầy đủ các menuentry
cho từng lựa chọn boot bios và uefi trong file grub.conf đó, khi boot trên máy
tính, nếu bạn chọn menu boot này không được thì chọn menu boot kia là được.
5. Có thể tùy chỉnh màu sắc và hình nền cho menu boot bằng các thông số
sau
- Hình ảnh để làm nền có kích thước
640x480px, dạng màu 8bit
- Trong file grub.conf cần phải khai
báo các thông số và load module như sau.
insmod
gfxterm
insmod png
terminal_output
gfxterm
background_image
-m stretch ${prefix}/wall.png
- Một số lệnh điều chỉnh menu
color_normal=white/black
menu_color_normal=white/black
menu_color_highlight=green/black
Dưới đây là 1 file grub.conf mà tôi
đã sửa lại cho dễ nhìn. Bạn copy vào file grub.conf của mình và chạy thử để xem
thế nào.
if [ -s $prefix/grubenv ]; then
load_env
fi
if [ "${next_entry}" ] ; then
set
default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
else
set default="0"
fi
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
else
menuentry_id_option=""
fi
export menuentry_id_option
if [ "${prev_saved_entry}" ]; then
set
saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi
function savedefault {
if [ -z
"${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
}
function load_video {
if [
x$feature_all_video_module = xy ]; then
insmod all_video
else
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi
}
if [ x$feature_default_font_path = xy ] ; then
font=unicode
else
font="${prefix}/fonts/unicode.pf2"
fi
if loadfont $font ; then
load_video
insmod gfxterm
insmod png
terminal_output
gfxterm
background_image
-m stretch ${prefix}/wall.png
color_normal=white/black
menu_color_normal=white/black
menu_color_highlight=green/black
fi
if [ x$feature_timeout_style = xy ] ; then
set timeout_style=menu
set timeout=15
else
set timeout=15
fi
#BOOT ENTRY BEGIN
menuentry "Windows 7 BIOS" {
insmod part_msdos
insmod ntfs
set root='(hd0,msdos1)'
chainloader +1
}
menuentry 'Windows 7 efi' {
insmod part_msdos
insmod fat
search --fs-uuid
--no-floppy --set=root FF44-56B0
chainloader
(${root})/EFI/Microsoft/Boot/bootmgfw.efi
}
### BEGIN /etc/grub.d/41_custom ###
if [ -f
${config_directory}/custom.cfg ]; then
source
${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then
source
$prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
Không có nhận xét nào:
Đăng nhận xét