如何進入光盤應急系統(以下修復操作僅適用于GRUB legacy, 不適用于GRUB2):
步驟一:給主機掛上安裝光盤, 或者有相應啟動鏡像的硬盤分區(可移動的分區)
步驟二:開機時選擇CDROM先啟動
步驟三:進入光盤啟動界面選擇應急救援模式
步驟四: 不選擇設置網絡接口, 直接讀取磁盤分區并以讀寫方式掛載
步驟五: 選擇shell進入bash中對磁盤進行其他操作, 操作完成后用exit退出到此界面并選擇重啟選項重啟電腦, 并且移除光盤.
GRUB故障之一:
/boot/目錄下grub.conf文件丟失
處理方法:
-
在grub命令行模式下, 先root (hd0,0)指定啟動分區所在磁盤, 然后使用kernel /vmlinuz-xxxx
root=/dev/sda1指定內核和啟動分區. 最后指定initrd /initrd-xxxx.img, 然后輸入boot啟動.
如遇故障可重新進行步驟一, 并且修改root=/dev/sda1中的選項. 這時候能進入系統中, 然后進行與方法二中創建文件內容相似的操作,
保存后寫入文件中. 下次重啟即能正常進入系統. -
使用光盤進入應急系統中, 在原目錄中新建文件, 格式如下
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)丟失
處理方法:
-
使用光盤進入應急系統,
進入位于/mnt/sysimage/boot/目錄下使用命令mkinitrd 命令, 稍等片刻即生成initrd文件,
然后檢查/mnt/sysimage/boot/grub/grub.conf 文件中對應條目下的名稱是否與所創建文件的文件名一致. -
從光盤boot目錄下拷貝同名文件到/mnt/sysimage/boot/目錄下, 前提是內核版本與光盤中內核版本相同, 如果不同會出現問題導致無法啟動.
GRUB故障之三:
vmlinuz文件丟失
處理方法:
-
進入光盤應急系統中, chroot到/mnt/sysimage/,
然后掛載光盤至/mnt目錄下, 進入/mnt/Packages/目錄下覆蓋安裝kernel包, 使用命令為rpm -ivh
–replacepkgs kernel-VERSION.rpm 安裝完成后會在/boot目錄下自動生成相應版本的vmlinuz文件.
(前提是內核版本未更新, 和光盤中的內核版本一致)
-
與之二中第二種方法一致, 復制文件.
GRUB故障之四:
GRUB stage1_5和stage2丟失
處理方法:
-
進入光盤應急系統中, 使用命令grub-install /dev/sda對分區進行grub安裝, 安裝完成后會自動生成對應文件
如圖所示, 在對應目錄下生成了所需文件, 至此, 我們只需退出shell 并且重啟機器, 修復后的第一次重啟系統會重新配置一次, 然后再重啟一次就能進入系統了.
-
從相同配置的機器上拷貝到對應目錄下(不推薦, 不同主機間的硬件配置可能不同, 造成的問題無法追溯, 使用方法一即時生成更加安全)
GRUB故障之五:
磁盤bootloader扇區出錯, 即引導磁盤前446字節被擦寫
解決方法:
-
與之四的方法一相同
GRUB故障之六:
/boot分區丟失, 或所有文件丟失
解決方法:
-
結合之前的方法, 先進入光盤應急系統, 然后進行之四的方法一, 再進行之三的方法一, 再進行之二的方法一, 再進行之一的方法一, 完成后檢查配置文件和相應文件的對應關系, 然后退出應急系統重啟主機.
內核編譯和內核模塊
linux的內核是宏內核架構, 把大部分功能集成在了內核上, 然后又吸取了微內核的優點, 把非必需的驅動做成模塊,
在需要的時候加載至內核中, 由于linux支持的硬件和平臺眾多, 通用內核通常會具有一些用不上的功能和模塊,
此時就需要工作人員對內核進行定制化編譯來達到提升內核運行效率和減少其他驅動出錯造成系統錯誤的機會.
從kernel.org官方站點下載同主線最新的內核模塊, 筆者用的archlinux , 內核版本為4.7.2 下載了最新版本的4.7.3版本的內核源代碼進行編譯和安裝. 編譯之前組安裝下開發工具(development tools)
下載后對源代碼的壓縮文件進行解壓, 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
insmod 命令: 指定內核模塊進行裝載
insmod [ filename ] [module options ]
insmod `modinfo -n exportfs`
insmod `modinfo -n mod_name`
rmmod 命令: 卸載指定內核模塊(未運行的)
rmmod [ mod_name ]
/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]
內核中的路由轉發:
/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)
(2) dracut命令
為當前正在使用的內核重新制作ramdisk文件
dracut /boot/initramfs-$(uname -r).img $(uname -r)
uname 命令:
uname 輸出系統信息
-n : 顯示節點信息
-r : 顯示發行版本
-a : 顯示所有信息
原創文章,作者:M20-石俊,如若轉載,請注明出處:http://www.www58058.com/45947
寫的很好,示例清晰,結構明了,贊一個