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
下一篇 2016-09-12

相關推薦

  • find、locate、Gnome文件查找工具

    查找命令: ? ? ? ? locate:非實時查找 ? ? ? ? find:實時查找 ? ? ? ? Gnome:圖形化搜索工具 locate: 描述:查詢系統上預建的文件索引數據庫/var/lib/mlocate/mlocate.db,一天更新一次更新數據庫:updatedb特點:依賴于事先構建的索引。索引的構建是在系統較為空閑時自動進行(周期性任務)…

    Linux干貨 2017-11-26
  • cp,chmod,chown,chgrg,grep命令應用實例和總結

    1.復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的其他屬組和其他用戶沒有任何訪問權限。[root@dxlcentOS ~]# cp -a /etc/skel/ /home/tuser1[root@dxlcentOS ~]# chmod -R go= /home/tuser1 遞歸修改權限,g:組的權限,o其他…

    Linux干貨 2017-10-26
  • 安全和加密與創建簽名證書

    安全和加密:NIST定義的安全屬性:(美國國家標準與技術研究院)保密性:        數據保密性        隱私性完整性:不可篡改        數據完整性        系統完整性高可用性: …

    Linux干貨 2017-04-11
  • Keepalived介紹 , 配置說明 , 及實際應用

    1. Keepalived介紹 Keepalived是一個基于VRRP協議來實現的服務高可用方案,可以利用其來避免IP單點故障,類似的工具還有heartbeat、corosync、pacemaker。但是它一般不會單獨出現,而是與其它負載均衡技術(如lvs、haproxy、nginx)一起工作來達到集群的高可用。 1.1 VRRP協議 VRRP全稱 Virt…

    Linux干貨 2016-11-04
  • 馬哥教育網絡班21期+第2周課程練習

    一:在Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例。     在Linux中,文件管理類命令主要有cp,mv,rm三個     其中cp命令的使用格式如下:           …

    Linux干貨 2016-07-16
  • 作業權限管理

    一、在/data/testdir里創建的新文件自動屬于g1組,組g2的成員如:alice能對這些新文件有讀寫權限,組g3的成員如:tom只能對新文件有讀權限,其它用戶(不屬于g1,g2,g3)不能訪問這個文件夾。 首先創建三個組g1,g2,g3,題目要求在/data/testdir目錄里創建的文件自動屬于g1組那么首先要將這個目錄的屬組改為g1,然后通過更改…

    Linux干貨 2016-08-03

評論列表(1條)

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

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

欧美性久久久久