grub legacy、內核編譯

grub legacy

grub: GRandUnified Bootloader
    grub 0.x: grub legacy
    grub 2.x: grub2

grub legacy:
        stage1: mbr
        stage1_5: mbr之后的扇區,放置/boot的文件系統驅動,讓stage1中的bootloader能識別stage2所在的分區上的文件系統
        stage2:磁盤分區(/boot/grub/),提供開機菜單
  配置文件:/etc/grub.conf–>/boot/grub/grub.conf    stage2及內核等通常放置于一個基本磁盤分區

  功用:
  (1) 提供啟動菜單、并提供交互式接口(臨時修改,不會永久有效)
        a:內核參數,
        e: 編輯模式,用于編輯菜單
        c: 命令模式,交互式接口
  (2) 加載用戶選擇的內核或操作系統
        允許傳遞參數給內核
        可隱藏啟動菜單
  (3) 為菜單提供了保護機制
        為編輯啟動菜單進行認證
        為啟用內核或操作系統進行認證

grub的命令行接口
    help: 獲取幫助列表
    help KEYWORD: 詳細幫助信息
    find (hd#,#)/PATH/TO/SOMEFILE:判斷文件是否存在
    root (hd#,#) 設定該分區為根設備,再查找時可不用跟設備名
    kernel /PATH/TO/KERNEL_FILE: 設定本次啟動時用到的內核文件;額外還可添加許多內核支持使用的cmdline參數
    max_loop=100
    selinux=0  禁用selinux
    init=/path/to/init
    initrd /PATH/TO/INITRAMFS_FILE: 設定為選定的內核提供額外文件的ramdisk;
    boot: 引導啟動選定的內核

識別硬盤設備:
    (hd#,#)
    hd#: 磁盤編號,用數字表示;從0開始編號
    #: 分區編號,用數字表示; 從0開始編號
        (hd0,0) 第一塊硬盤,第一個分區

手動在grub命令行接口啟動系統:
    grub> root (hd#,#)
    grub> kernel /vmlinuz-VERSION-RELEASE roroot=/dev/DEVICE
    grub> initrd /initramfs-VERSION-RELEASE.img
    grub> boot

配置文件:/boot/grub/grub.conf
    default=#:     設定默認啟動的菜單項;落單項(title)編號從0開始
    timeout=#: 指定菜單項等待選項選擇的時長
    splashimage=(hd#,#)/PATH/TO/XPM_FILE:菜單背景圖片文件路徑,設置錯誤將無法啟動
    hiddenmenu: 隱藏菜單
    password [–md5] STRING:  在第一個title上,啟動菜單編輯認證
    ———————————————————-
    title TITLE: 定義菜單項“標題”, 可出現多次
    root (hd#,#): grub查找stage2及kernel文件所在設備分區;為grub“根”
    kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]: 啟動的內核及其參數    或
    initrd /PATH/TO/INITRAMFS_FILE:  內核匹配的ramfs文件
    password [–md5] STRING:  在某個title內,啟動選定的內核或操作系統時進行認證
    ———————————————————-
    省略root (hd#,#)時
    kernel (hd#,#)/PATH/TO/VMLINUZ_FILE [PARAMETERS]
    initrd (hd#,#)/PATH/TO/INITRAMFS_FILE

grub加密密碼口令:  grub-md5-crypt  密碼口令

破解root口令:
啟動系統時,設置其運行級別1,進入單用戶模式:
    (1) 編輯grub菜單(選定要編輯的title,而后使用e命令);
    (2) 在選定的kernel后附加1, s, S或single都可以;
    (3) 在kernel所在行,鍵入“b”命令
  或
    (1) 編輯grub菜單(選定要編輯的title,而后使用a命令);
    (2) 輸入1, s, S或single都可以;
    (3) 回車啟動

安裝grub:
(1) grub-install
    安裝grub stage1和stage1_5到/dev/DISK磁盤上,并復制GRUB相關文件到DIR/boot目錄下
    grub-install –root-directory=DIR /dev/DISK
(2) grub
    grub> root (hd#,#)
    grub> setup (hd#)

自制linux系統
    1、分區并創建文件系統
         fdisk /dev/sdb
    2、分兩個必要的分區  
        /dev/sdb1對應/boot /dev/sdb2對應/
        mkfs.ext4 /dev/sdb1
    3、掛載boot
        mkdir/mnt/boot
        mount /dev/sdb1 /mnt/boot
    4、安裝grub
        grub-install –root-directory=/mnt/dev/sdb
    5、恢復內核和initramfs文件
        cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /mnt/boot/
        cp /boot/initramfs-2.6.32-642.el6.x86_64.img /mnt/boot
    6、建立grub.conf文件
        vim /mnt/boot/grub.conf
        kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/sda2 selinux=0 init=/bin/bash
        chroot /mnt/sysroot
    7、創建一級目錄
        mkdir /mnt/sysroot
        mount /dev/sdb2 /mnt/sysroot
        mkdir –pv /mnt/sysroot/{etc,lib,lib64,bin,sbin,tmp,var,usr,sys,proc,opt,home,root,boot,dev,mnt,media}
    8、復制bash和相關庫文件

救援環境
  在根文件系統無法使用時需要,如/bin/mount刪除
  對系統沒有特殊要求
  從光盤引導(boot.iso或者安裝光盤#1)
  從USB盤(由boot.iso制作)引導

1、文件系統重組
    Anaconda將會詢問是否應該掛載文件系統
    /mnt/sysimage/*
    /mnt/stage2
    $PATH包括硬盤的目錄
2、文件系統節點
    提供系統特定的設備文件
    mknod了解major/minor #’s

3、系統配置文件丟失修復
   系統在引導期間,很重要的一個過程就是init進程讀取其配置文件/etc/inittab,啟動系統基本服務程序及默認運行級別的服務程序完成系統引導,如果/etc/
inittab誤刪除或修改錯誤,Linux將無法正常啟動。此時,只有通過救援模式才可以解決此類問題。

(1)有備份文件的恢復辦法:
    進入救援模式,執行chroot命令后,如果有此文件的備份(強烈建議系統中的重要數據目錄,如/etc、/boot等要進行備份),直接將備份文件拷貝回去,退出重啟即可。如果是配置文件修改錯誤,如比較典型的/boot/grub/grub.conf及/etc/passwd的文件修改錯誤,也可以直接修正恢復。假設有備份文件/etc/inittab.bak,則在救援模式下執行:
    sh-3.1# chroot/mnt/sysimage
    sh-3.1# cp /etc/inittab.bak /etc/inittab

(2)沒有備份文件的恢復辦法
    如果一些配置文件丟失或軟件誤刪除,且無備份,可以通過重新安裝軟件包來恢復,首先查找到/etc/inittab屬于哪一個RPM包
    # chroot /mnt/sysimage
    # rpm -qf /etc/inittab
    initscripts-9.03.49-1.el6.centos.x86_64
    退出chroot模式:
    # exit

    掛載存放RPM包的安裝光盤(在救援模式下,光盤通常掛載在/mnt/source目錄下):
    # mount /dev/sr0 /mnt/source
    CentOS6系統的RPM包存放在光盤Package目錄下,另外,因為要修復的硬盤系統的根目錄在/mnt/sysimage下,需要使用–root選項指定其位置。覆蓋安裝/etc/inittab文件所在的RPM包:
    # rpm -ivh –replacepkgs | force /mnt/source/Packages/
    initscripts-9.03.49-1.el6.centos.x86_64.rpm
    其中的rpm命令選項“–replacepkgs”表示覆蓋安裝,執行完成后,即已經恢復了此文件。

    如果想只提取RPM包中的/etc/inittab文件進行恢復,可以在進入救援模式后,執行命令:
    # rpm2cpio /mnt/source/Packages/initscripts-9.03.49-1.el6.centos.x86_64.rpm | cpio -idv /etc/inittab
    # cp /etc/inittab /mnt/sysimage/etc/
    注意此命令執行時不能將文件直接恢復至/etc目錄,只能提取到當前目錄下,且恢復的文件名稱所在路徑要寫完整的路徑。提取文件成功后,將其復制到根分區所在的/mnt/sysimage目錄下相應位置即可

內核編譯
  單內核體系設計、但充分借鑒了微內核設計體系的優點,為內核引入模塊化機制。

內核組成部分:
    kernel: 內核核心,一般為bzImage,通常在/boot目錄下,名稱為vmlinuz-VERSION-RELEASE;
    kernel object: 內核對象,一般放置于/lib/modules/VERSION-RELEASE/
        [ ]: N
        [M]: M
        [*]: Y
    輔助文件:ramdisk
        initrd
        initramfs

 
uname[OPTION]…  顯示內核版本信息
-n: 顯示節點名稱;
-r: 顯示VERSION-RELEASE;
-a:顯示所有信息

lsmod  顯示由核心已經裝載的內核模塊
顯示的內容來自于: /proc/modules文件

modinfo [ -k kernel ] [ modulename|filename… ]  顯示模塊的詳細描述信息
-n: 只顯示模塊文件路徑
-p: 顯示模塊參數
-a: author
-d: description
-l: license

lsmod | grep xfs ; modinfo xfs

內核模塊管理

 modprobe   modulename  裝載內核模塊
 -r :  卸載內核模塊
 配置文件:/etc/modprobe.conf, /etc/modprobe.d/*.conf

depmod:內核模塊依賴關系文件及系統信息映射文件的生成工具

insmod [ filename ] [ module options… ]  裝載內核模塊,需要指定模塊文件的路徑,不自動解決依賴模塊
    insmod `modinfo–n exportfs`
    lnsmod `modinfo–n xfs`

rmmod [ modulename]  卸載內核模塊
    rmmod xfs
    rmmod exportfs

/proc目錄:  內核把自己內部狀態信息及統計信息,以及可配置參數通過proc偽文件系統加以輸出
  參數:只讀:輸出信息
  可寫:可接受用戶指定“新值”來實現對內核某功能或特性的配置  /proc/sys
    (1) sysctl命令用于查看或設定此目錄中諸多參數
            sysctl-w path.to.parameter=VALUE
            sysctl-w kernel.hostname=mail.magedu.com
    (2) echo命令通過重定向方式也可以修改大多數參數的值
            echo "VALUE" > /proc/sys/path/to/parameter
            echo “websrv” > /proc/sys/kernel/hostname

sysctl:設置內核參數
默認配置文件:/etc/sysctl.conf
    (1) 設置某參數
    sysctl -w parameter=VALUE
    (2) 通過讀取配置文件設置參數
    sysctl -p [/path/to/conf_file]
常用的幾個參數:
    net.ipv4.ip_forward  路由轉發功能,0不轉發,1轉發
    net.ipv4.icmp_echo_ignore_all  是否回應ICMP包,0回應,1不回應
    vm.drop_caches  清理內存緩存,清理等級0,1,2

/sys目錄:
sysfs:為用戶使用的偽文件系統,輸出內核識別出的各硬件設備的相關屬性信息,也有內核對硬件特性的設定信息;有些參數是可以修改的,用于調整硬件工作特性。
udev通過此路徑下輸出的信息動態為各設備創建所需要設備文件,udev是運行用戶空間程序
專用工具:udevadmin, hotplug
udev為設備創建設備文件時,會讀取其事先定義好的規則文件,一般在/etc/udev/rules.d及/usr/lib/udev/rules.d目錄下

ramdisk文件的制作:
(1) mkinitrd  為當前正在使用的內核重新制作ramdisk文件
    CentOS5:mkinitrd /boot/initrd-$(uname-r).img $(uname-r)
    CentOS6.7:mkinitrd /boot/initramfs-$(uname-r).img $(uname-r)
(2) dracut  為當前正在使用的內核重新制作ramdisk文件
    dracut/boot/initramfs-$(uname-r).img$(uname-r)

編譯內核前提:
    (1) 準備好開發環境
    (2) 獲取目標主機上硬件設備的相關信息
    (3) 獲取目標主機系統功能的相關信息
    例如:需要啟用相應的文件系統
    (4) 獲取內核源代碼包 www.kernel.org

開發環境準備
    安裝包組(CentOS 6):
        Server Platform Development
        Development Tools
   目標主機硬件設備相關信息:
        CPU:
        #cat /proc/cpuinfo
        #x86info -a
        #lscpu

硬件設備
  PCI設備:
    lspci
    -v
    -vv
  lsusb
    -v
    -vv
  lsblk
  hal-device

內核編譯安裝系統
  安裝開發包組
  下載源碼文件
  .config:準備文本配置文件
  make menuconfig:配置內核選項
  make [-j #]  指定多核心編譯
  make modules_install:安裝模塊
  make install :安裝內核相關文件
  安裝bzImage為/boot/vmlinuz-VERSION-RELEASE
  生成initramfs文件
  編輯grub的配置文件

編譯安裝內核實例
  tar xf linux-3.10.67.tar.xz -C /usr/src
  cd /usr/src
  ln -sv linux-3.10.67 linux
  cd /usr/src/linux
  cp /boot/config-$(uname -r) ./.config
  make menuconfig
  make -j 2
  make modules_install
  make install
  reboot

編譯內核
(1) 配置內核選項
  支持“更新”模式進行配置:make help
    (a) make config:基于命令行以遍歷的方式去配置內核中可配置的每個選項
    (b) make menuconfig:基于curses的文本窗口界面
    (c) make gconfig:基于GTK (GNOME)環境窗口界面
    (d) make xconfig:基于QT(KDE)環境的窗口界面
  支持“全新配置”模式進行配置
    (a) make defconfig:基于內核為目標平臺提供的“默認”配置進行配置
    (b) make allyesconfig: 所有選項均回答為“yes“
    (c) make allnoconfig: 所有選項均回答為"no“

(2) 編譯內核的一部分功能:
    (a) 只編譯某子目錄中的相關代碼:
        # cd /usr/src/linux
        # make dir/
    (b) 只編譯一個特定的模塊:
        # cd /usr/src/linux
        # make dir/file.ko
例如:只為e1000編譯驅動:
#make drivers/net/ethernet/intel/e1000/e1000.ko

如何交叉編譯內核:
編譯的目標平臺與當前平臺不相同;
    # make ARCH=arch_name
要獲取特定目標平臺的使用幫助
    # make ARCH=arch_namehelp
    # make ARCH=arm help

在已經執行過編譯操作的內核源碼樹做重新編譯:
需要事先清理操作:
    # make clean:清理大多數編譯生成的文件,但會保留config文件等
    # make mrproper: 清理所有編譯生成的文件、config及某些備份文件
    # make distclean:mrproper、patches以及編輯器備份文件

原創文章,作者:anonymous,如若轉載,請注明出處:http://www.www58058.com/45939

(0)
anonymousanonymous
上一篇 2016-09-13
下一篇 2016-09-13

相關推薦

  • 馬哥教育網絡21期+第6周博客練習

    請詳細總結vim編輯器的使用并完成以下練習題 1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; :%s@\(^[[:space:]]\+\)@#&@g # Let rhgb know that we&#0…

    Linux干貨 2016-08-15
  • shell腳本編程之循環語句

      在運行腳本時重復執行一系列的命令是很常見的,這時我們就需要使用循環語句來達到這個目的。 一、for命令   格式:for 變量 in 列表;do          循環體       done   for命令會遍歷列表中的每一個值,并且在遍歷完成…

    Linux干貨 2016-01-03
  • 實時文件查找工具–find

    find [option] …[查找路徑] [查找條件] [處理動作] 起始路徑:指定具體的目標路徑,默認為當前目錄 查找條件:指定查找標準,可以根據文件名,權限,文件大小等標準進行。默認為指定路徑下的所有文件 處理動作:對符合條件的文件做什么操作 1 查找條件: (1)根據文件名查找: ?-name “文件名稱” 支持使用glob -iname…

    Linux干貨 2017-07-02
  • 馬哥教育網絡班20期+第3周課程練習

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@localhost ~]# who root     pts/0        2016-06-23&nb…

    Linux干貨 2016-06-29
  • OpenSSL

    一、什么是OpenSSL 在電腦網絡上,OpenSSL是一個開放源代碼的軟件庫包,應用程序可以使用這個包來進行安全通訊,避免竊聽,同時確認另一端連接者的身份。這個包廣泛被應用在互聯網的網頁服務器上。其主要庫是以C語言所寫成,實現了基本的加密功能,實現了SSL與TLS協議。 OpenSSL由三部分組成:     libencryp…

    Linux干貨 2016-04-25
  • CentOS6.7上編譯安裝Apache2.2和Apache2.4

    centos6.7上如何編譯安裝Apache2.2和Apache2.4

    Linux干貨 2016-05-29

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-20 13:06

    為什么沒有效果圖,寫博客不要張貼筆記,這樣是沒意義的,也是浪費時間,

欧美性久久久久