GRUB啟動故障排除和內核編譯

如何進入光盤應急系統(以下修復操作僅適用于GRUB legacy, 不適用于GRUB2):

步驟一:給主機掛上安裝光盤, 或者有相應啟動鏡像的硬盤分區(可移動的分區)

201609122049001

步驟二:開機時選擇CDROM先啟動

201609122017002步驟三:進入光盤啟動界面選擇應急救援模式

201609122018001步驟四: 不選擇設置網絡接口, 直接讀取磁盤分區并以讀寫方式掛載

201609122018002 201609122018003 201609122019001 201609122019002 201609122019003步驟五: 選擇shell進入bash中對磁盤進行其他操作, 操作完成后用exit退出到此界面并選擇重啟選項重啟電腦, 并且移除光盤.

GRUB故障之一:

/boot/目錄下grub.conf文件丟失

處理方法:

  1. 在grub命令行模式下, 先root (hd0,0)指定啟動分區所在磁盤, 然后使用kernel /vmlinuz-xxxx
    root=/dev/sda1指定內核和啟動分區. 最后指定initrd /initrd-xxxx.img, 然后輸入boot啟動.
    如遇故障可重新進行步驟一, 并且修改root=/dev/sda1中的選項. 這時候能進入系統中, 然后進行與方法二中創建文件內容相似的操作,
    保存后寫入文件中. 下次重啟即能正常進入系統.

  2. 使用光盤進入應急系統中, 在原目錄中新建文件, 格式如下

default=0

timeout=3

title=linux

root (hd0,0)

kernel (hd0,0)/vmlinuz-xxxx root=/dev/sda1

initrd (hd0,0)/initrd-xxxx.img

文件保存到/boot/grub/grub.conf , 然后退出應急系統重啟

GRUB故障之二:

/boot下initrd文件(或initramfs)丟失

處理方法:

  1. 使用光盤進入應急系統,
    進入位于/mnt/sysimage/boot/目錄下使用命令mkinitrd 命令, 稍等片刻即生成initrd文件,
    然后檢查/mnt/sysimage/boot/grub/grub.conf 文件中對應條目下的名稱是否與所創建文件的文件名一致.201609121958001

  2. 從光盤boot目錄下拷貝同名文件到/mnt/sysimage/boot/目錄下, 前提是內核版本與光盤中內核版本相同, 如果不同會出現問題導致無法啟動.

GRUB故障之三:

vmlinuz文件丟失

處理方法:

  1. 進入光盤應急系統中, chroot到/mnt/sysimage/,
    然后掛載光盤至/mnt目錄下, 進入/mnt/Packages/目錄下覆蓋安裝kernel包, 使用命令為rpm -ivh
    –replacepkgs kernel-VERSION.rpm 安裝完成后會在/boot目錄下自動生成相應版本的vmlinuz文件.
    (前提是內核版本未更新, 和光盤中的內核版本一致)201609122042001

  1. 與之二中第二種方法一致, 復制文件.

GRUB故障之四:

GRUB stage1_5和stage2丟失

處理方法:

  1. 進入光盤應急系統中, 使用命令grub-install /dev/sda對分區進行grub安裝, 安裝完成后會自動生成對應文件201609122020001如圖所示, 在對應目錄下生成了所需文件, 至此, 我們只需退出shell 并且重啟機器, 修復后的第一次重啟系統會重新配置一次, 然后再重啟一次就能進入系統了.

  2. 從相同配置的機器上拷貝到對應目錄下(不推薦, 不同主機間的硬件配置可能不同, 造成的問題無法追溯, 使用方法一即時生成更加安全)

GRUB故障之五:

磁盤bootloader扇區出錯, 即引導磁盤前446字節被擦寫

解決方法:

  1. 與之四的方法一相同

GRUB故障之六:

/boot分區丟失, 或所有文件丟失

解決方法:

  1. 結合之前的方法, 先進入光盤應急系統, 然后進行之四的方法一, 再進行之三的方法一, 再進行之二的方法一, 再進行之一的方法一, 完成后檢查配置文件和相應文件的對應關系, 然后退出應急系統重啟主機.

內核編譯和內核模塊

linux的內核是宏內核架構, 把大部分功能集成在了內核上, 然后又吸取了微內核的優點, 把非必需的驅動做成模塊,
在需要的時候加載至內核中, 由于linux支持的硬件和平臺眾多, 通用內核通常會具有一些用不上的功能和模塊,
此時就需要工作人員對內核進行定制化編譯來達到提升內核運行效率和減少其他驅動出錯造成系統錯誤的機會.

從kernel.org官方站點下載同主線最新的內核模塊, 筆者用的archlinux , 內核版本為4.7.2 下載了最新版本的4.7.3版本的內核源代碼進行編譯和安裝. 編譯之前組安裝下開發工具(development tools)

201609122110001下載后對源代碼的壓縮文件進行解壓, tar xf linux-4.7.3.tar.xz

解壓完成后進入目錄, 然后使用命令make menuconfig 對內核編譯的配置文件進行自定義, 定義完成后, 保存配置文件退出

配置過程中:

[ ] : 表示不進行編譯

[M] : 表示以模塊的形式進行編譯

[*] : 編譯進內核中

然后使用命令make [-j 2 ]  -j是指定幾個處理器進行編譯操作, 操作過程中會產生大量中間文件, 需留足空間.

然后使用make modules_install 對模塊進行編譯, 編譯完成后, 使用make install正式編譯內核文件.

編譯完成后, 會自動在/boot目錄下生成對應文件并修改啟動的配置文件, 在原有內核選項下加上新的內核啟動選項.

由于編譯過程過長, 所以在此就不演示了.

具體步驟如下:

make menuconfig

make -j 2

make modules_install

make install

modprobe 命令:

對內核模塊進行裝載或卸載

裝載: modprobe mod_name

卸載: modprobe -r mod_name

modinfo 命令:

查看模塊信息

modinfo mod_name

201609122155001

insmod 命令: 指定內核模塊進行裝載

insmod [ filename ] [module options ]

insmod `modinfo -n exportfs`

insmod `modinfo -n mod_name`

rmmod 命令: 卸載指定內核模塊(未運行的)

rmmod [ mod_name ]


/proc目錄:

內核把自己內部狀態信息及統計信息,以及可配置參數通過proc偽文件系統加以輸出

參數:只讀:輸出信息

可寫:可接受用戶指定“新值”來實現對內核某功能或特性的配置

/proc/sys

(1) sysctl命令用于查看或設定此目錄中諸多參數

201609122156001

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]

內核中的路由轉發:

/proc/sys/net/ipv4/ip_forward

常用的幾個參數:

net.ipv4.ip_forward

net.ipv4.icmp_echo_ignore_all

vm.drop_caches

/sys目錄:

sysfs:為用戶使用的偽文件系統,輸出內核識別出的各硬件設備的相關屬性信息,也有內核對硬件特性的設定信息;有些參數是可以修改的,用于調整硬件工作特性. udev通過此路徑下輸出的信息動態為各設備創建所需要設備文件, udev是運行用戶空間程序

專用工具: udevadmin, hotplug

udev為設備創建設備文件時,會讀取其事先定義好的規則文件,一般在/etc/udev/rules.d/usr/lib/udev/rules.d目錄下

ramdisk管理

ramdisk文件的制作:

(1) mkinitrd命令

為當前正在使用的內核重新制作ramdisk文件

mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)201609121958001

(2) dracut命令

為當前正在使用的內核重新制作ramdisk文件

dracut /boot/initramfs-$(uname -r).img $(uname -r)

uname 命令:

uname 輸出系統信息

-n : 顯示節點信息

-r : 顯示發行版本

-a : 顯示所有信息

201609122153001

原創文章,作者:M20-石俊,如若轉載,請注明出處:http://www.www58058.com/45947

(1)
M20-石俊M20-石俊
上一篇 2016-09-12 22:12
下一篇 2016-09-12 23:00

相關推薦

  • Vim編輯器解析

    vim編輯器 概述:   VIM即ViIMproved:vi的增強版 ,vim是模式化的編輯。   vi:Visual lnterface,是一種文本編輯器,所謂文本編輯數據是基于字符編碼的文件,常見的編碼 有ASCII編碼,UNICODE編碼。 種類:   行編輯器:所謂行編輯器是指一行行來編輯處理的工具   全屏編…

    Linux干貨 2016-08-10
  • ip,ss,htop,vmstat,until,while,ping命令使用. N28

    第六周(2018-1.1 – 2018-1.7)

    2018-01-08
  • SecureCRT 8.0的安裝及Linux基本命令介紹

    在CentOS虛擬中安裝并打開圖形界面后,可以在圖形界面和命令行界面之間任意切換。在打開終端后輸入init3可以切換至命令行界面,輸入init5返回到圖形界面。 這里我們用SecureCRT 8.0來遠程的對虛擬機進行操作,對于SecureCRT 8.0的安裝步驟就不詳細介紹,簡單介紹下如何連接到CentOS。 1. 2.點擊完成。   &nbsp…

    2017-07-13
  • mysql備份之xtrabackup

    mysql備份之xtrabackup(建議用來備份innodb) 下載地址:https://www.percona.com/downloads/XtraBackup/ 安裝xtrabackup [root@node1 ~]# yum install percona-xtrabackup 完全備份 節點一 修改配置文件,…

    Linux干貨 2016-07-19
  • 計算機和linux基礎

    計算機的組成及其功能 計算機硬件主要由5部分組成:運算器 、控制器、存儲器、input、output。 但是這和我們平時見到的計算機不一樣?我們平時見到的計算機有CPU,內存,硬盤,顯示器,鼠標鍵盤,顯卡、主板等。這些東西也都歸在以上五類設備中。下面我們簡單介紹一下計算機這五個組成部分。 運算器: 運算器是計算機中做運算的部分,可以執行各種指令,加減乘除,與…

    Linux干貨 2016-09-16
  • 第六周作業

    請詳細總結vim編輯器的使用 模式化的編輯器 基本模式: 編輯模式,命令模式 輸入模式 末行模式: 內置的命令行接口; 打開文件: # vim [options] [file ..] +#:打開文件后,直接讓光標處于第#行的行首; +/PATTERN:打開文件后,直接讓光標處于第一個被PATTERN匹配到的行的首; 模式轉換: 編輯模式:默認模式 編輯模式 …

    Linux干貨 2017-03-21

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-20 10:12

    寫的很好,示例清晰,結構明了,贊一個

欧美性久久久久