linux grub2 配置文件,Linux学习笔记 – grub2

  • Post author:
  • Post category:linux

这篇笔记是对boot loader学习的记录. 现在linux主流的 boot loader就是grub2.

boot loader的功能:

选择menuentry来决定加载哪个kernel

解压kernel, 并根据相应配置加载到内存中.

转交给其他的boot loader

grub2运行的两个阶段:

执行grub2的主程序.

grub2的主程序安装在MBR中, MBR非常小, 不超过446bytes.

主程序载入相关配置文件.

配置文件主要在/boot这个目录下.

[root@study ~]# ls -l /boot/grub2

-rw-r–r–. device.map <==grub2 的裝置對應檔(底下會談到)

drwxr-xr-x. fonts <==開機過程中的畫面會使用到的字型資料

-rw-r–r–. grub.cfg <==grub2 的主設定檔!相當重要!

-rw-r–r–. grubenv <==一些環境區塊的符號

drwxr-xr-x. i386-pc <==針對一般 x86 PC 所需要的 grub2 的相關模組

drwxr-xr-x. locale <==就是語系相關的資料囉drwxr-xr-x. themes <==一些開機主題畫面資料

[root@study ~]# ls -l /boot/grub2/i386-pc

-rw-r–r–. acpi.mod <==電源管理有關的模組

-rw-r–r–. ata.mod <==磁碟有關的模組

-rw-r–r–. chain.mod <==進行 loader 控制權移交的相關模組

-rw-r–r–. command.lst <==一些指令相關性的列表

-rw-r–r–. efiemu32.o <==底下幾個則是與 uefi BIOS 相關的模組

-rw-r–r–. efiemu64.o

-rw-r–r–. efiemu.mod

-rw-r–r–. ext2.mod <==EXT 檔案系統家族相關模組

-rw-r–r–. fat.mod <==FAT 檔案系統模組

-rw-r–r–. gcry_sha256.mod <==常見的加密模組

-rw-r–r–. gcry_sha512.mod

-rw-r–r–. iso9660.mod <==光碟檔案系統模組

-rw-r–r–. lvm.mod <==LVM 檔案系統模組

-rw-r–r–. mdraid09.mod <==軟體磁碟陣列模組

-rw-r–r–. minix.mod <==MINIX 相關檔案系統模組

-rw-r–r–. msdospart.mod <==一般 MBR 分割表

-rw-r–r–. part_gpt.mod <==GPT 分割表

-rw-r–r–. part_msdos.mod <==MBR 分割表

-rw-r–r–. scsi.mod <==SCSI 相關模組

-rw-r–r–. usb_keyboard.mod <==底下兩個為 USB 相關模組

-rw-r–r–. usb.mod

-rw-r–r–. vga.mod <==VGA 顯示卡相關模組

-rw-r–r–. xfs.mod

主配置文件/boot/grub2/grub.conf:

grub2对硬盘的排序编码方式与传统linux不同:

(hd0,1) # 一般的預設語法,由 grub2 自動判斷分割格式

(hd0,msdos1) # 此磁碟的分割為傳統的 MBR 模式

(hd0,gpt1) # 此磁碟的分割為 GPT 模式

(hd0,1): hd0表示搜寻到的第一块硬盘, 1表示此硬盘上的第一块分区.

注意: 硬盘的代号从0开始, 分区的代号从1开始.

(hd0,msdos1): 如果是MBR的模式, 也可以写做(hd0,msdos1)

例如:

系统中有一块SATA硬盘, 采用的是逻辑分区. 那么grub2的档名和代号是: (hd0,msdos5)可简写成(hd0,5)

主配置文件的内容:

[root@study ~]# vim /boot/grub2/grub.cfg

# 開始是 /etc/grub.d/00_header 這個腳本執行的結果展示,主要與基礎設定與環境有關

### BEGIN /etc/grub.d/00_header ###

set pager=1

if [ -s $prefix/grubenv ]; then

load_env

fi

…..(中間省略)…..

if [ x$feature_timeout_style = xy ] ; then

set timeout_style=menu

set timeout=5

# Fallback normal timeout code in case the timeout_style feature is

# unavailable.

else

set timeout=5

fi

### END /etc/grub.d/00_header ###

# 開始執行 /etc/grub.d/10_linux,主要針對實際的 Linux 核心檔案的開機環境

### BEGIN /etc/grub.d/10_linux ###

menuentry ‘CentOS Linux 7 (Core), with Linux 3.10.0-229.el7.x86_64’ –class rhel fedora \

–class gnu-linux –class gnu –class os –unrestricted $menuentry_id_option \

‘gnulinux-3.10.0-229.el7.x86_64-advanced-299bdc5b-de6d-486a-a0d2-375402aaab27’ {

load_video

set gfxpayload=keep

insmod gzio

insmod part_gpt

insmod xfs

set root=’hd0,gpt2′

if [ x$feature_platform_search_hint = xy ]; then

search –no-floppy –fs-uuid –set=root –hint=’hd0,gpt2′ 94ac5f77-cb8a-495e-a65b-…

else

search –no-floppy –fs-uuid –set=root 94ac5f77-cb8a-495e-a65b-2ef7442b837c

fi

}

### END /etc/grub.d/10_linux ###

…..(中間省略)…..

### BEGIN /etc/grub.d/30_os-prober ###

### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/40_custom ###

### END /etc/grub.d/40_custom ###

…..(底下省略)…..

主配置文件的设置比较复杂, grub官方是不推荐直接修改这个文件的. 修改配置的主要方式是修改几个特定的配置文件后, 使用grub2-mkconfig -o /boot/grub2/grub.cfg这个command来配置.

menuentry当中比较重要的几个部分:

set root=’hd0,gpt2′:

这个root是指grub2配置文件所在的装置. 以我們的測試機來說,當初安裝的時候分割出/ 與 /boot 兩個裝置唷,而 grub2 是在 /boot/grub2 這個位置上, 而這個位置的磁碟檔名為 /dev/vda2 ,因此完整的 grub2 磁碟名稱就是 (hd0,2) 囉!因為我們的系統用的是 GTP 的磁碟分割格式, 因此全名就是『 hd0,gpt2 』

linux16 /vmlinuz-… root=/dev/mapper/centos-root …:

如果沒有 /boot 分割,僅有/ 分割:

/boot/vmlinuz-xxx –> (/)/boot/vmlinuz-xxx –> (hd0,msdos1)/boot/vmlinuz-xxx

如果 /boot 是獨立分割,則檔名的變化會是這樣:

/boot/vmlinuz-xxx –> (/boot)/vmlinuz-xxx –> (hd0,msdos1)/vmlinuz-xxx

initrd16 /initramfs-3.10…:

initramfs所在档名, 路径搜索方式同上.