GRUB的命名規則

GRUB上的裝置名稱有它的特殊語法,所以使用GRUB第一件事,就是要知道這些語法,不然你會不知道如何去找到對的裝置(device)或是分區(partition)。第一個要知道的事,就是GRUB對裝置的描述一定要在成對的小括號『()』裡面,語法描述如下:

(device[,partmap-name1part-num1[,partmap-name2part-num2[,...]]])

其他裝置名稱的規則描述如下:

  • BIOS和EFI使用『fd』或是『hd』然後後面在加一個數字,像是『fd0』。
  • AHCI, PATA (ata), crypto和USB使用driver的名稱在加一個編號。
  • Memdisk和host則是被限制只能有一個disk,所以只會有一個driver名稱。
  • RAID (md), ofdisk (ieee1275 和 nand), LVM (lv), LDM 和 arcdisk (arc)則是使用disk固有的名稱前面在加driver的名稱(只有nand使用別名『nand』,如果有衝突的話就是後面用數字去點綴),如果語法上有逗號(commas)的話要記得用跳脫字元點綴。
  • Loopback則是根據loopback命令上面所使用的名字。
  • Hostdisk則是使用在device.map(接下來的章節會介紹)裡面的定義,只要它的格式是『[fhc]d[0-9]*』或是『hostdisk/< OS DEVICE>』;此外,對於crypto和RAID(md)你也可以使用『< driver name>uuid/<uuid>』的語法。

底下列出上面所講解過的device清單:

(fd0)
(hd0)
(cd)
(ahci0)
(ata0)
(crypto0)
(usb0)
(cryptouuid/123456789abcdef0123456789abcdef0)
(mduuid/123456789abcdef0123456789abcdef0)
(lv/system-root)
(md/myraid)
(md/0)
(ieee1275/disk2)
(ieee1275//pci@1f\,0/ide@d/disk@2)
(nand)
(memdisk)
(host)
(myloop)
(hostdisk//dev/sda)

在來先來看幾個例子:

(fd0)
fd代表的是軟碟(floppy disk),0代表的是磁碟(drive)編號,GRUB的disk number是從0開始,所以這個裝置檔描述代表的是GRUB會用到整個floppy disk。
(hd0,msdos2)
這個例子,hd代表的是硬碟(hard disk drive),0一樣代表是disk number,所以就是第一顆硬碟。『msdos』代表的是『partition scheme』,2代表的是分區『partition』編號(又或者是在BSD上的PC slice number),之前有說過disk number是從0開始,但是這邊要注意的是,partition number卻是從1開始,所以整個描述就是代表它是第一顆硬碟的第二個partition。
(hd0,msdos5)
上面這個例子代表的是第一顆硬碟的第一個『extended partition』延伸分區,在GRUB裡面要特別注意的是不管你這顆硬碟上前面有多少個『primary partition』,你的『extended partition』的編號還是從5開始,。
(tftp)
(http)
如果你有啟動網路支援的話,可以使用上面兩種的方式存取。

底下借用一下鳥哥網站的表格,如果有三顆硬碟,第一顆是MBR格式的硬碟,第二顆是GPT,相對應的裝置語法就會是:

硬碟搜尋順序 在 Grub2 當中的代號
第一顆(MBR) (hd0) (hd0,msdos1) (hd0,msdos2) (hd0,msdos3)....
第二顆(GPT) (hd1) (hd1,gpt1) (hd1,gpt2) (hd1,gpt3)....
第三顆 (hd2) (hd2,1) (hd2,2) (hd2,3)....

在GRUB裡面想要存取磁碟或是partition,你都要用相對應的語法來存取,像是底下的兩個範例一樣:

set root=(fd0) parttool (hd0,msdos3) hidden-

為方便使用者找到相關的device,GRUB也提供了argument completion,像是底下這個case,你只要按『tab』以後,GRUB就會列出所有的disk,partition甚至是檔案名稱:

另外一件事要特別注意的是,GRUB並沒有特別區分IDE和SCSI,不管磁碟的介面,都是直接從0開始計算。一般來說,通常IDE介面會比SCSI的號碼還要小,雖然說如果你在BIOS裡面交換你的IDE和SCSI的開機順序的話,並不會直接反映在剛剛的規則上就對了。

所以到這邊我們已經有disk和partition了,接下來就只剩下檔案,看一下底下的例子:

描述的是第一個磁碟上的第一個partition上的檔案vmlinuz,argument completion也可以用在檔案的部分,其實就是把device的部份換成以上所講的格式,其實語法就跟Linux的shell差不多拉。

block lists

有時候有些檔案沒有在任何的檔案系統上,這時候就需要block list的支援,像是如果你要用chainloader的話就要使用block list,語法如下:

[offset]+length[,[offset]+length]…

範例如下:

eg.
0+100,200+1,300+300

上面的例子代表GRUB會讀取block 0~99,block 200和 block 300~599,如果你省略offset的話,GRUB會假設offset是0。

其中有一個規則跟檔案名稱語法一樣,如果一個blocklist沒有包含裝置名稱的話,則GRUB就會使用root device,所以如果你的root device是『(hd0,2)』,那『(hd0,2)+1』代表的就是『+1』。

results matching ""

    No results matching ""