GRUB全稱GNU GRUBlinux
版本:grub (GNU GRUB 0.97)
bash
GRUB2爲GRUB的重寫版本,能夠說一點也不同。網絡
wiki: https://zh.wikipedia.org/wiki/GNU_GRUBide
GRUB總共分3個階段:
bootloader:1st stage
Partition:filesystem driver, 1.5 stage
Partition:/boot/grub, 2nd stage測試
目錄:ui
一、grub說明。加密
二、爲grub添加認證。
spa
三、安裝grub操作系統
四、小linux。3d
1、
grub的配置文件是/boot/grub/grub.conf。
在這個版本的GRUB中,定義GRUB的根目錄,0表示GRUB所在的磁盤(對於GRUB來講它在的地方就是第一塊磁盤),後面的0表示第一個分區,以此類推。不過在GRUB2上面好像不管磁盤和分區都是從1開始了。
定義內核或initrd的位置,是對於GRUB根所在位置來講的,由於如今運行的只有GRUB,內核和initrd都要GRUB來啓動。
kernl後面的參數經常使用的有:
這些參數是傳遞給kernel的參數,跟grub沒有關係。系統啓動到達這一步之後,GRUB就已經退出江湖了。
ro:表示以只讀掛載根分區,就是系統中的/。
root:定義根所在的位置,這個位置是kernel啓動起來之後刷新硬件信息所獲得的位置,與GRUB的位置不同。上面的是lvm邏輯卷的地址。若是是直接物理地址,如:/dev/sda2。
selinux :定義是否啓用selinux(內核有這個功能的話)。selinux=0表示半閉。1表示啓用。默認啓用。
init : 定義系統啓動完成之後,用來管理用戶空間的init程序在哪裏。如:init=/bin/bash。
quiet: 靜默模式,啓動過程當中不顯示內核信息。
single或1或s或S。進入單用戶模式,不用輸入管理員密碼。常在忘記root密碼的狀況下使用。
grub文件完整配置項:
default=#: 設定默認啓動的菜單項;落單項(title)編號從0開始;
timeout=#:指定菜單項等待選項選擇的時長;
splashp_w_picpath=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜單背景圖片文件路徑;
hiddenmenu:隱藏菜單;
password [--md5] STRING: 菜單編輯認證;
title TITLE:定義菜單項「標題」, 可出現屢次;
root (hd#,#):grub查找stage2及kernel文件所在設備分區;爲grub的「根」;
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:啓動的內核
initrd /PATH/TO/INITRAMFS_FILE: 內核匹配的ramfs文件;
password [--md5] STRING: 啓動選定的內核或操做系統時進行認證;
GRUB第二階段的功用:
(1) 提供菜單、並提供交互式接口
e: 編輯模式,用於編輯菜單;
c: 命令模式,交互式接口;
(2) 加載用戶選擇的內核或操做系統
容許傳遞參數給內核
可隱藏此菜單
(3) 爲菜單提供了保護機制
爲編輯菜單進行認證
爲啓用內核或操做系統進行認證
a 修改當前附加給內核的參數。
e 進入編輯模式,跟在grub.conf文件中的配置同樣。
在這裏能夠修改裏面的設置,按Esc返回再按b開始引導。
c 交互式模式,也是按這樣的方式進行設置。以下面這個,設置完成之後,輸入boot就能夠開始引導啓動。
help能夠查看能夠輸入的指令。
二、添加認證:
在/boot/grub/grub.conf中加入password認證。
在各個title中加入的表示對使用內核的認證,沒有在title中的表示對編輯grub的時候的認證。
password [--md5]
不加--md5表示password後面的密鑰是明文,
加上--md5表示是以md5加密的密鑰。
生成加密的密鑰能夠用:grub-md5-crypt
加入grub.conf文件。我這裏內核和grub認證都加上了。
保存並重啓之後,到grub這裏。要先按p輸入密碼之後才能編輯grub。這個就是grub認證。
而內核認證那個,只要啓動相應的內核就會出現下面這個。只有密碼正確才能啓動內核進入系統。
最後一點:只有內核認證而沒有GRUB認證,就跟沒有內核認證同樣。由於在GRUB菜單裏能夠刪除內核的認證。
三、安裝grub:
有兩個命令,grub-install 和 grub命令交互模式中的setup命令。
(1) grub-install
grub-install --root-directory=ROOT /dev/DISK
(2) grub
grub> root (hd#,#)
grub> setup (hd#)
grub.conf配置文件都要本身寫。
grub-install 能夠安裝一個完整的包含全部階段的grub。
setup 安裝每一階段和1.5階段的grub。而且依賴於第二階段中的關於第1,1.5階段的文件。也就是在/boot/grub/目錄中的1,1.5階段的文件。
上面1階段的文件stage1,就一個。但1.5的文件卻有一大堆,但仔細看的話就明白是不一樣文件系統的。GRUB 1.5階段的做用就是加載基本文件系統的驅動。setup安裝的時候會自動識別使用哪一個文件系統的文件。
先來試試grub-install。
指定磁盤目錄安裝boot(GRUB第2階段)。 指定磁盤安裝第1,1.5階段的grub.
不要直接指定boot目錄,由於這個命令輸出的就是boot。指定boot目錄,會在boot目錄裏面又有一個boot目錄。
再來看看setup:
root指定grub目錄,setup安裝到哪一個磁盤。能夠看到,setup查找stage一、1.五、2階段的文件。最終安裝了e2fs(ext系列)的1.5階段的文件,佔用了27個扇區,和第1階段的文件。
四、小linux。
我這裏安裝了第二塊磁盤,並分了兩個區,一個做爲boot分區,一個做爲主分區。固然只有一個分區也是能夠的。
兩個分區分別格式化成了ext4的文件系統。而且掛載到/mnt下面的boot和sysroot目錄。
安裝grub:
複製系統上的內核到咱們的小系統裏面。
編輯grub.conf文件。
上面的init能夠直接init=/bin/bash。我這裏就是爲了echo點信息。
GRUB文件完成。再來給sysroot目錄裏面添點料。裏面的proc目錄必定要有,否則開機會失敗。
而後再把bash放到/bin/bash裏面。注意軟件都有所依賴的庫,要都複製過去。
這裏有個腳本能夠所有複製,我就用這個腳本測試啦。
差很少了,若是前面是init=/bin/bash(bash所在的目錄就是在/bin目錄下面),那就能夠關閉這一臺主機,把硬盤掛到另外一臺主機上試試了。我這裏是用的init,那我們就要給建立一個init文件。
上面忘了建立sbin目錄。咱們init指定的是/sbin/init。
加執行幾回sync命令,就能夠掛起本機了。
我這裏是筆記本,磁盤有點慢,要等到硬盤燈不亮之後就能夠開另外一臺虛擬機了。哦固然咱們尚未創建呢。
新建的虛擬機使用剛纔添加的磁盤。
成功了,此次是一次性成功了。昨天作的時候都是好幾回纔好的。下面咱們再修一下。
沒有關機功能,咱們這裏從開始到最後都尚未關機功能。
直接關電源,再打開原主機。
再來幾個命令:
下面想辦法知道本身的網卡驅動模塊。我這裏是e1000.ko。
用lsmod能夠查看全部已加載的模塊,modinfo能夠查看模塊詳細信息。
複製到了咱們小系統的lib目錄下,一下子在init文件中來加載它。
如今的init文件:讓echo出顏色,並mount從新讀寫方式掛載根,掛載boot。加載網卡模塊,配置IP地址。
sync,sync,掛起,再來啓動另外一主機。注意千萬不要直接關原主機的電源。
啓動小主機來看看:
上面提示了root已經從新掛載了;咱們好像沒有建立boot目錄啊;網絡模塊已加載,IP已設置。
下面咱們來看一下:
發現了一個問題,用ctrl+c無論用。
好吧,接下來不知道該幹嗎了。這個就到這裏吧。但願朋友們能夠經過這個流程明白linux是如何啓動的。
謝謝瀏覽,若有錯誤的地方,還請指出。 謝謝。