grub應用+小linux系統初步

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。

wKiom1aHQ9mR7txvAAE4eL8n8LA392.jpg

在這個版本的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) 爲菜單提供了保護機制
            爲編輯菜單進行認證
            爲啓用內核或操做系統進行認證


wKiom1aHWmyRDUldAACd7POjNQQ269.jpg

a 修改當前附加給內核的參數。

e 進入編輯模式,跟在grub.conf文件中的配置同樣。

wKiom1aHWs_zJC5SAAAwz4ongzM176.jpg

我這裏在kernel這一項按e進入這一項的編輯狀態。

wKiom1aHXmChmz2QAAAb2wEnbLw660.jpg

在這裏能夠修改裏面的設置,按Esc返回再按b開始引導。


c 交互式模式,也是按這樣的方式進行設置。以下面這個,設置完成之後,輸入boot就能夠開始引導啓動。

wKiom1aHW-6CD4e-AADNoC5qL8k307.jpg

help能夠查看能夠輸入的指令。



二、添加認證

在/boot/grub/grub.conf中加入password認證。

在各個title中加入的表示對使用內核的認證,沒有在title中的表示對編輯grub的時候的認證。

password [--md5]

不加--md5表示password後面的密鑰是明文,

加上--md5表示是以md5加密的密鑰。

生成加密的密鑰能夠用:grub-md5-crypt

wKiom1aHZE2gQKaXAAA1cvxcFNE379.jpg

加入grub.conf文件。我這裏內核和grub認證都加上了。

wKiom1aHZVnQh6eSAAC6g3oxxa8598.jpg

保存並重啓之後,到grub這裏。要先按p輸入密碼之後才能編輯grub。這個就是grub認證。

wKioL1aHZe6iru7nAAB4e1ClLZw257.jpg

wKiom1aHZc_hT8uoAAB_nDVz6yI845.jpg


而內核認證那個,只要啓動相應的內核就會出現下面這個。只有密碼正確才能啓動內核進入系統。

wKioL1aHZfHwqEsGAAAIfrATdEY372.jpg


最後一點:只有內核認證而沒有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階段的文件。

wKioL1aHaXLjiGl3AADs7LXQWuM969.jpg

上面1階段的文件stage1,就一個。但1.5的文件卻有一大堆,但仔細看的話就明白是不一樣文件系統的。GRUB 1.5階段的做用就是加載基本文件系統的驅動。setup安裝的時候會自動識別使用哪一個文件系統的文件。


先來試試grub-install。

wKioL1aHbPnjb1olAABYmi4J_L4253.jpg

指定磁盤目錄安裝boot(GRUB第2階段)。 指定磁盤安裝第1,1.5階段的grub.

不要直接指定boot目錄,由於這個命令輸出的就是boot。指定boot目錄,會在boot目錄裏面又有一個boot目錄。


再來看看setup:

wKioL1aHb8bzDXl7AAGHVjnrZ1s883.jpg

root指定grub目錄,setup安裝到哪一個磁盤。能夠看到,setup查找stage一、1.五、2階段的文件。最終安裝了e2fs(ext系列)的1.5階段的文件,佔用了27個扇區,和第1階段的文件。


四、小linux

我這裏安裝了第二塊磁盤,並分了兩個區,一個做爲boot分區,一個做爲主分區。固然只有一個分區也是能夠的。

wKiom1aHcduwJcK_AAC-6c-3Nz0418.jpg

兩個分區分別格式化成了ext4的文件系統。而且掛載到/mnt下面的boot和sysroot目錄。

wKiom1aHctbTDKsDAAAsIkz2Ps8819.jpg


安裝grub:

wKioL1aHc3WQVGa1AABoU-M3ZM8275.jpg

wKiom1aHdHCzrEySAACcRCfe8Dc790.jpg


複製系統上的內核到咱們的小系統裏面。

wKiom1aHdNWBnTjWAABL2SPES6A331.jpg


編輯grub.conf文件。

wKiom1aHdTCy6oAVAAARD8LQ2eY925.jpg

wKiom1aHcz7xYVlwAAAti2vQzc8967.jpg

上面的init能夠直接init=/bin/bash。我這裏就是爲了echo點信息。


GRUB文件完成。再來給sysroot目錄裏面添點料。裏面的proc目錄必定要有,否則開機會失敗。

wKioL1aHdmngFatOAAA-79BNYy8868.jpg

而後再把bash放到/bin/bash裏面。注意軟件都有所依賴的庫,要都複製過去。

wKioL1aHdxyw3GxcAACJm4YpfT8570.jpg

這裏有個腳本能夠所有複製,我就用這個腳本測試啦。

wKioL1aHd92z-wHEAAB10u5l1pU561.jpg

差很少了,若是前面是init=/bin/bash(bash所在的目錄就是在/bin目錄下面),那就能夠關閉這一臺主機,把硬盤掛到另外一臺主機上試試了。我這裏是用的init,那我們就要給建立一個init文件。

上面忘了建立sbin目錄。咱們init指定的是/sbin/init。

wKioL1aHeqvwD4q2AAAOtIy_LxQ379.jpg

wKiom1aHemWyvikzAAAQPy-YNHo615.jpg

添加可執行權限。

wKioL1aHeoehWNAqAAAa9R9Gf0U385.jpg

加執行幾回sync命令,就能夠掛起本機了。


wKioL1aHfBCz7xBfAAA1HpkyLcY392.jpg

我這裏是筆記本,磁盤有點慢,要等到硬盤燈不亮之後就能夠開另外一臺虛擬機了。哦固然咱們尚未創建呢。

新建的虛擬機使用剛纔添加的磁盤。

wKiom1aHfBXDcAAtAABcaA87vd0089.jpg


完成之後開機,下面這個是剛纔咱們作的GRUB的title。wKiom1aHfPaTuBNFAAAurub0fSs815.jpg

wKiom1aHfQfQe9FAAAHAPCgKeQ8327.jpg

成功了,此次是一次性成功了。昨天作的時候都是好幾回纔好的。下面咱們再修一下。

沒有關機功能,咱們這裏從開始到最後都尚未關機功能。

直接關電源,再打開原主機。

再來幾個命令:

wKiom1aHf9jBJF_3AABUWG_PMUw339.jpg

wKioL1aHggSgjV64AAAUkWeVEUE601.jpg

下面想辦法知道本身的網卡驅動模塊。我這裏是e1000.ko。

用lsmod能夠查看全部已加載的模塊,modinfo能夠查看模塊詳細信息。

wKiom1aHgDbhfO1MAAAo_ES328Q766.jpg

複製到了咱們小系統的lib目錄下,一下子在init文件中來加載它。

如今的init文件:讓echo出顏色,並mount從新讀寫方式掛載根,掛載boot。加載網卡模塊,配置IP地址。

wKiom1aHggyx5PfuAAB-lFX4RMo607.jpg


sync,sync,掛起,再來啓動另外一主機。注意千萬不要直接關原主機的電源。

啓動小主機來看看:

wKioL1aHg1vgJNbxAAEJovrkVqI554.jpg

上面提示了root已經從新掛載了;咱們好像沒有建立boot目錄啊;網絡模塊已加載,IP已設置。

下面咱們來看一下:

wKiom1aHgzyQseZgAAEVz6_ccRw782.jpg

發現了一個問題,用ctrl+c無論用。

好吧,接下來不知道該幹嗎了。這個就到這裏吧。但願朋友們能夠經過這個流程明白linux是如何啓動的。


謝謝瀏覽,若有錯誤的地方,還請指出。 謝謝。

相關文章
相關標籤/搜索