您好,登錄后才能下訂單哦!
GRUB(Boot Loader):基本應用
grub: GRand Unified Bootloader
版本:grub 0.x: grub legacy傳統grub版本
grub 1.x: grub2
以centos6為例;
grub是安裝在MBR中的
grub legacy:
stage1: mbr
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的系統
1、首先添加一塊磁盤,并分區創建文件系統,這里設置為/dev/sdb1(做boot和安裝grub用),/dev/sdb2(作為swap分區),/dev/sdb3(放根)。
2、安裝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命令”就可以啟動了。
注:這里面沒有任何命令,要使用命令則需另外復制相關文件到系統中
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。