GRUB(Boot Loader):基本應用
linux
grub: GRand Unified Bootloader
express
版本:grub 0.x: grub legacy傳統grub版本vim
grub 1.x: grub2centos
以centos6爲例;bash
grub是安裝在MBR中的ide
grub legacy:this
stage1: mbrspa
stage1_5: mbr以後的扇區中,讓stage1中的bootloader能識別stage2所在的分區上的文件系統;操作系統
stage2:存放於磁盤分區(/boot/grub/)命令行
grub的配置文件:/boot/grub/grub.conf <-- /etc/grub.conf
當系統啓動時,若是要加載grub所在的磁盤時,會讀取磁盤上的MBR,今後能加載到stage1,stage1加載之後,它會嘗試去讀取隨後扇區的stage1_5,從而以後會讀到驅動stage2的磁盤分區了。
stage2及內核等一般放置於一個基本磁盤分區;
grub(或stage2)功用:
(1) 提供菜單、並提供交互式接口
e: 編輯模式,用於編輯菜單;
c: 命令模式,交互式接口;
(2) 加載用戶選擇的內核或操做系統
容許傳遞參數給內核
可隱藏此菜單
(3) 爲菜單提供了保護機制
爲編輯菜單進行認證
爲啓用內核或操做系統進行認證
grub如何識別設備:
(hd#,#)
hd#: 磁盤編號,用數字表示;從0開始編號
#: 分區編號,用數字表示; 從0開始編號
(hd0,0)
開機時的一個交互界面,敲c能夠進入grub命令行模式
grub的命令行接口中的經常使用命令介紹
help: 獲取幫助列表
help KEYWORD: 詳細幫助信息
find (hd#,#)/PATH/TO/SOMEFILE:(在磁盤)查找某文件
root (hd#,#):把哪個磁盤分區設置爲grub的根設備
kernel /PATH/TO/KERNEL_FILE: 設定本次啓動時用到的內核文件;額外還能夠添加許多內核支持使用的cmdline參數;
例如:init=/path/to/init, selinux=0
initrd /PATH/TO/INITRAMFS_FILE: 設定爲選定的內核提供額外文件的ramdisk;
boot: 引導啓動選定的內核;
手動在grub命令行接口啓動系統:
grub> root (hd#,#)
grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE (指定內核版本和指定根所在的目錄,這裏必須注意root必須是你根所在的設備的分區的文件,能夠經過df命令查看)
grub> initrd /initramfs-VERSION-RELEASE.img
grub> boot
配置文件:/boot/grub/grub.conf
配置項:
default=#: 設定默認啓動的菜單項;菜單項(title)編號從0開始;
timeout=#:指定菜單項等待選項選擇的時長;(若是用戶選擇時間超過5秒就本身動選擇了)
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-md5-crypt命令:幫咱們生成對應要保護的密碼串
進入單用戶模式步驟:
(1) 編輯grub菜單(選定要編輯的title,然後使用e命令);
(2) 移動菜單到kernel項,在選定的kernel後附加
1, s, S或single均可以;以後回車回到菜單項
(3) 在kernel所在行,鍵入(點擊)「b命令」;
系統損壞以後,在沒有重啓的時候能夠按照下面的方法來修復
安裝grub:
(1) grub-install:安裝grub命令grub-install - install GRUB on your drive
grub-install [OPTION] install_device
grub-install --root-directory=ROOT /dev/DISK
系統沒重啓修復使用下面的:
(2) grub
grub> root (hd#,#)###此方法必須實現存在有一個grub目錄
grub> setup (hd#)
建立一個磁盤,提供一個能夠單獨運行bash的系統
一、首先添加一塊磁盤,並分區建立文件系統,這裏設置爲/dev/sdb1(作boot和安裝grub用),/dev/sdb2(做爲swap分區),/dev/sdb3(放根)。
二、安裝grub
[root@localhost ~]# mkdir /mnt/boot
[root@localhost ~]# mount /dev/sdb1 /mnt/boot
[root@localhost ~]# ls /mnt/boot
lost+found
[root@localhost ~]# grub-install --root-directory=/mnt /dev/sdb
##安裝grub並指明根所在目錄
Probing devices to guess BIOS drives. This may take a long time.
Installation finished. No error reported.
This is the contents of the device map /mnt/boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.
(fd0) /dev/fd0
(hd0) /dev/sda
(hd1) /dev/sdb
[root@localhost ~]# ls /mnt
boot sysroot
[root@localhost ~]# ls /mnt/boot
grub lost+found
###顯示已經成功安裝grub
[root@localhost ~]# ls /mnt/boot/grub/
device.map iso9660_stage1_5 stage1 xfs_stage1_5
e2fs_stage1_5 jfs_stage1_5 stage2
fat_stage1_5 minix_stage1_5 ufs2_stage1_5
ffs_stage1_5 reiserfs_stage1_5 vstafs_stage1_5
[root@localhost ~]# cp /boot/vmlinuz-2.6.32-573.el6.x86_64 /mnt/boot/vmlinuz
###複製內核
[root@localhost ~]# cp /boot/initramfs-2.6.32-573.el6.x86_64.img /mnt/boot/initramfs.img
[root@localhost ~]# vim /mnt/boot/grub/grub.conf
default=0
timeout=5
title Centos (express)
root (hd0,0)##此處在新建的系統中識別爲第一塊磁盤的第一分區
kernel /vmlinuz ro root=/dev/sda3
###此處也同樣用的是sda3而非sdb3,對新系統來講它就是磁盤的第三分區
initrd /initramfs.img
#####編輯grub配置文件
##以上爲grub配置階段,下面爲建立根文件
[root@localhost ~]# mkdir /mnt/sysroot
[root@localhost ~]# ls /mnt
boot sysroot
[root@localhost ~]# mount /dev/sdb3 /mnt/sysroot
#####掛載分區sdb3,將它做爲根文件放的位置
[root@localhost ~]# ls /mnt/sysroot
lost+found
[root@localhost ~]# cd /mnt/sysroot
[root@localhost sysroot]# ls
lost+found
[root@localhost sysroot]# mkdir -pv etc bin sbin lib lib64 dev proc sys tmp var usr home root mnt media
##給根下建立必要的目錄
mkdir: created directory `etc'
mkdir: created directory `bin'
mkdir: created directory `sbin'
mkdir: created directory `lib'
mkdir: created directory `lib64'
mkdir: created directory `dev'
mkdir: created directory `proc'
mkdir: created directory `sys'
mkdir: created directory `tmp'
mkdir: created directory `var'
mkdir: created directory `usr'
mkdir: created directory `home'
mkdir: created directory `root'
mkdir: created directory `mnt'
mkdir: created directory `media'
[root@localhost sysroot]# ls
bin etc lib lost+found mnt root sys usr
dev home lib64 media proc sbin tmp var
###此時文件中沒有程序,下面咱們將bash複製進來做爲init來啓動
[root@localhost sysroot]# cp /bin/bash /mnt/sysroot/bin/
[root@localhost sysroot]# ldd /bin/bash
linux-vdso.so.1 => (0x00007ffcb40d4000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x0000003d61800000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000003d5ac00000)
libc.so.6 => /lib64/libc.so.6 (0x0000003d5b000000)
[root@localhost sysroot]# cp /lib64/libtinfo.so.5 /mnt/sysroot/lib64
[root@localhost sysroot]# cp /lib64/libdl.so.2 /mnt/sysroot/lib64
[root@localhost sysroot]# cp /lib64/libc.so.6 /mnt/sysroot/lib64
[root@localhost sysroot]# cp /lib64/ld-linux-x86-64.so.2 /mnt/sysroot/lib64
####要將bash所依賴的都複製到相應目錄
[root@localhost sysroot]# chroot /mnt/sysroot
bash-4.1#
###檢測根系統
##配置根已經成功
一個簡單的系統就配置完成了,在以後建立一個虛擬機,將該磁盤裝載上面就能夠了,但在同時使用手動啓動的時候,要在grub菜單項中編輯kernel選項在init前面添加selinux=0以後回車退回菜單項敲擊「b命令」就能夠啓動了。
注:這裏面沒有任何命令,要使用命令則需另外複製相關文件到系統中