Linux之啟動和內核管理

 Linux之啟動和內核管理

 

 

本文主要包括以下內容
一  CentOS 5和6的啟動流程
二  服務管理
三  Grub管理
四  自制Linux
五  啟動排錯
六  編譯安裝內核

 

Linux組成
Linux: kernel+rootfs
kernel: 進程管理、內存管理、網絡管理、驅動程序、文件系統、安全功能
rootfs:程序和glibc
庫:函數集合, function, 調用接口(頭文件負責描述)
過程調用:procedure,無返回值
函數調用:function
程序:二進制執行文件
內核設計流派:
單內核(monolithic kernel):Linux
把所有功能集成于同一個程序
微內核(micro kernel):Windows, Solaris
每種功能使用一個單獨子系統實現

 

內核
Linux內核特點:
支持模塊化:.ko(內核對象)
如:文件系統,硬件驅動,網絡協議等
支持內核模塊的動態裝載和卸載
組成部分:
核心文件:/boot/vmlinuz-VERSION-release
ramdisk:輔助的偽根系統
CentOS 5: /boot/initrd-VERSION-release.img
CentOS6,7: /boot/initramfs-VERSION-release.img
模塊文件:/lib/modules/VERSION-release

 

centos6啟動流程
1.加載BIOS的硬件信息,獲取第一個啟動設備。
2.讀取第一個啟動設備MBR的引導加載程序(grub)的啟動信息
3.加載核心操作系統的核心信息,核心開始解壓縮,并嘗試驅動所有的硬件設備。
4.核型執行init程序并獲取運行信息。
5.Init執行/etc/rc.d/rc.sysinit文件。
6.啟動核心的外掛模塊(/etc/modprobe.conf)。
7.Init執行運行的各個批處理文件(scripts).
8.Init執行/etc/rc.d/rc.local.
9.執行/bin/login程序,等待用戶登錄。
10.登錄之后開始以Shell控制主機。

 

啟動流程

POST:Power-On-Self-Test,加電自檢,是BIOS功能的一個主要部分。負責完成對CPU、主板、內存、硬盤子系統、顯示子系統、串并行接口、鍵盤、CD-ROM光驅等硬件情況的檢測。
ROM:BIOS,Basic Input and Output System,保存著有關計算機系統最重要的基本輸入輸出程序,系統信息設置、開機加電自檢程序和系統啟動自舉程序等。
RAM:CMOS互補金屬氧化物半導體,保存各項參數的設定
按次序查找引導設備,第一個有引導程序的設備為本次啟動設備

bootloader: 引導加載器,引導程序
windows: ntloader,僅是啟動OS
Linux:功能豐富,提供菜單,允許用戶選擇要啟動系統或不同的內核版本;把用戶選定的內核裝載到內存中的特定空間中,解壓、展開,并把系統控制權移交給內核
LILO:LInuxLOader
GRUB: GRandUnified Bootloader
GRUB 0.X: GRUB Legacy,GRUB2

  MBR:
446: bootloader,64: 分區表, 2: 55AA

GRUB:
primary boot loader : 1st stage,1.5 stage
secondary boot loader :2nd stage,分區文件

kernel:
自身初始化:
探測可識別到的所有硬件設備
加載硬件驅動程序(可能借助于ramdisk加載驅動)
以只讀方式掛載根文件系統
運行用戶空間的第一個應用程序:/sbin/init
9
系統啟動流程

init程序的類型:
SysV: init, CentOS 5之前
配置文件:/etc/inittab
Upstart: init,CentOS6
配置文件:/etc/inittab, /etc/init/*.conf
Systemd:systemd, CentOS 7
配置文件:/usr/lib/systemd/system
/etc/systemd/system

ramdisk:
內核中的特性之一:使用緩沖和緩存來加速對磁盤上的文件訪問
ramdisk–> ramfs提高速度
CentOS 5: initrd, 工具程序:mkinitrd
CentOS 6: initramfs,工具程序:mkinitrd, dracut
系統初始化:
POST –> BootSequence(BIOS) –> Bootloader(MBR) –> kernel(ramdisk) –> rootfs(只讀) –> init(systemd)

 

啟動流程
/sbin/initCentOS6之前
運行級別:為系統運行或維護等目的而設定;0-6:7個級別
0:關機
1:單用戶模式(root自動登錄), single, 維護模式
2: 多用戶模式,啟動網絡功能,但不會啟動NFS;維護模式
3:多用戶模式,正常模式;文本界面
4:預留級別;可同3級別
5:多用戶模式,正常模式;圖形界面
6:重啟
默認級別:3, 5
切換級別:init#
查看級別:runlevel; who -r

 

init初始化
init讀取其初始化文件:/etc/inittab
初始運行級別(RUN LEVEL)
系統初始化腳本
對應運行級別的腳本目錄
捕獲某個關鍵字順序
定義UPS電源終端/恢復腳本
在虛擬控制臺生成getty
在運行級別5初始化X

CentOS5的inittab文件
配置文件:/etc/inittab
每一行定義一種action以及與之對應的process
id:runlevel:action:process
action:
wait: 切換至此級別運行一次
respawn:此process終止,就重新啟動之
initdefault:設定默認運行級別;process省略
sysinit:設定系統初始化方式,此處一般為指定
/etc/rc.d/rc.sysinit
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc0
l1:1:wait:/etc/rc.d/rc1…
l6:6:wait:/etc/rc.d/rc6

 

CentOS6 /etc/inittab和相關文件
/etc/inittab
設置系統默認的運行級別
id:3:initdefault:
/etc/init/control-alt-delete.conf
/etc/init/tty.conf
/etc/init/start-ttys.conf
/etc/init/rc.conf
/etc/init/prefdm.conf

 

啟動流程
/etc/rc.d/rc.sysinit: 系統初始化腳本
(1) 設置主機名
(2) 設置歡迎信息
(3) 激活udev和selinux
(4) 掛載/etc/fstab文件中定義的文件系統
(5) 檢測根文件系統,并以讀寫方式重新掛載根文件系統
(6) 設置系統時鐘
(7) 激活swap設備
(8) 根據/etc/sysctl.conf文件設置內核參數
(9) 激活lvm及software raid設備
(10) 加載額外設備的驅動程序
(11) 清理操作

啟動流程
說明:rcN –> 意味著讀取/etc/rc.d/rcN.d/
K*: K##*:##運行次序;數字越小,越先運行;數字越小的服務,通常為依賴到別的服務
S*: S##*:##運行次序;數字越小,越先運行;數字越小的服務,通常為被依賴到的服務
for srvin /etc/rc.d/rcN.d/K*; do
$srvstop
done
for srvin /etc/rc.d/rcN.d/S*; do
$srvstart
done

chkconfig命令
chkconfig命令
查看服務在所有級別的啟動或關閉設定情形:
chkconfig[–list] [name]
添加:
SysV的服務腳本放置于/etc/rc.d/init.d(/etc/init.d)
chkconfig–add name
#!/bin/bash
#LLLL 表示初始在哪個級別下啟動,-表示都不啟動
# chkconfig: LLLL nnnn
刪除:
chkconfig–del name
修改指定的鏈接類型
chkconfig[–level levels] name <on|off|reset>
–level LLLL: 指定要設置的級別;省略時表示2345
ntsysv命令

 

xinetd管理的服務
service 命令:手動管理服務
service 服務start|stop|restart
service –status-all
瞬態(Transient)服務被xinetd進程所管理
進入的請求首先被xinetd代理
配置文件:/etc/xinetd.conf、/etc/xinetd.d/<service>
與libwrap.so文件鏈接
用chkconfig控制的服務:
chkconfigtftpon

 

啟動流程
注意:正常級別下,最后啟動一個服務S99local沒有鏈接至/etc/rc.d/init.d一個服務腳本,而是指向了/etc/rc.d/rc.local腳本
不便或不需寫為服務腳本放置于/etc/rc.d/init.d/目錄,且又想開機時自動運行的命令,可直接放置于/etc/rc.d/rc.local文件中
/etc/rc.d/rc.local在指定運行級別腳本后運行
可以根據情況,進行自定義修改

 

啟動流程
1:2345:respawn:/usr/sbin/mingettytty1
2:2345:respawn:/usr/sbin/mingettytty2

6:2345:respawn:/usr/sbin/mingettytty6
mingetty會自動調用login程序
x:5:respawn:/etc/X11/prefdm -nodaemon

 

破解root口令
總結:/sbin/init–> (/etc/inittab) –> 設置默認運行級別–> 運行系統初始腳本、完成系統初始化–> (關閉對應下需要關閉的服務)啟動需要啟動服務–> 設置登錄終端
CentOS 6 init程序為: upstart, 其配置文件:
/etc/inittab, /etc/init/*.conf,配置文件的語法遵循upstart配置文件語法格式,和CentOS5不同

 

grub legacy
CentOS 6啟動流程:
POST –> Boot Sequence(BIOS) –> Boot Loader –> Kernel(ramdisk) –> rootfs–> switchroot–> /sbin/init–>(/etc/inittab, /etc/init/*.conf) –> 設定默認運行級別–> 系統初始化腳本rc.sysinit–> 關閉或啟動對應級別的服務–> 啟動終端
grub: GRandUnified Bootloader
grub 0.x: grub legacy
grub 1.x: grub2
grub legacy:
stage1: mbr
stage1_5: mbr之后的扇區,讓stage1中的bootloader能識別stage2所在的分區上的文件系統
stage2:磁盤分區(/boot/grub/)

 

grub legacy
配置文件:/boot/grub/grub.conf<–/etc/grub.conf
stage2及內核等通常放置于一個基本磁盤分區
功用:
(1) 提供啟動菜單、并提供交互式接口
a:內核參數
e: 編輯模式,用于編輯菜單
c: 命令模式,交互式接口
(2) 加載用戶選擇的內核或操作系統
允許傳遞參數給內核
可隱藏啟動菜單
(3) 為菜單提供了保護機制
為編輯啟動菜單進行認證
為啟用內核或操作系統進行認證

 

grub legacy
grub的命令行接口
help: 獲取幫助列表
help KEYWORD: 詳細幫助信息
find (hd#,#)/PATH/TO/SOMEFILE:
root (hd#,#)
kernel /PATH/TO/KERNEL_FILE: 設定本次啟動時用到的內核文件;額外還可添加許多內核支持使用的cmdline參數
例如:max_loop=100 selinux=0init=/path/to/init
initrd/PATH/TO/INITRAMFS_FILE: 設定為選定的內核提供額外文件的ramdisk;
boot: 引導啟動選定的內核
cat /proc/cmdline 內核參數
內核參數文檔:/usr/share/doc/kernel-doc-2.6.32/Documentation/kernel-parameters.txt

 

grub legacy
識別硬盤設備:
(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

grub legacy配置文件
配置文件:/boot/grub/grub.conf
default=#: 設定默認啟動的菜單項;落單項(title)編號從0開始
timeout=#:指定菜單項等待選項選擇的時長
splashimage=(hd#,#)/PATH/TO/XPM_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加密
grub-md5-crypt命令
破解root口令:
啟動系統時,設置其運行級別1
進入單用戶模式:
(1) 編輯grub菜單(選定要編輯的title,而后使用e命令);
(2) 在選定的kernel后附加
1, s, S或single都可以;
(3) 在kernel所在行,鍵入“b”命令

 

grub安裝
安裝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系統
分區并創建文件系統
fdisk/dev/sdb
分兩個必要的分區
/dev/sdb1對應/boot /dev/sdb2對應根/
mkfs.ext4 /dev/sdb1
掛載boot
mkdir/mnt/boot
mount /dev/sdb1 /mnt/boot
安裝grub
grub-install –root-directory=/mnt/dev/sdb

 

自制linux系統
恢復內核和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
建立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
創建一級目錄
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}
復制bash和相關庫文件

 

救援環境
在根文件系統無法使用時需要,如/bin/mount刪除
對系統沒有特殊要求
從光盤引導(boot.iso或者安裝光盤#1)
從USB盤(由boot.iso制作)引導
文件系統重組
Anaconda將會詢問是否應該掛載文件系統
/mnt/sysimage/*
/mnt/stage2
$PATH包括硬盤的目錄
文件系統節點
提供系統特定的設備文件
mknod了解major/minor #’s

 

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

 

系統配置文件丟失修復
有備份文件的恢復辦法:
進入救援模式,執行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

 

系統配置文件丟失修復
沒有備份文件的恢復辦法
如果一些配置文件丟失或軟件誤刪除,且無備份,可以通過重新安裝軟件包來恢復,首先查找到/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
# cpetc/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命令:
uname-print system information
uname[OPTION]…
-n: 顯示節點名稱;
-r: 顯示VERSION-RELEASE;
-a:顯示所有信息

 

內核模塊命令
lsmod命令:
顯示由核心已經裝載的內核模塊
顯示的內容來自于: /proc/modules文件
modinfo命令:
顯示模塊的詳細描述信息
modinfo[ -k kernel ] [ modulename|filename… ]
-n: 只顯示模塊文件路徑
-p: 顯示模塊參數
-a: author
-d: description
-l: license
lsmod|grep xfs;modinfoxfs

 

內核模塊管理
modprobe命令:
裝載或卸載內核模塊
modprobe[ -C config-file ] [ modulename] [ module parame-ters… ]
配置文件:/etc/modprobe.conf, /etc/modprobe.d/*.conf
modprobe[ -r ] modulename…

 

內核模塊管理
depmod命令:
內核模塊依賴關系文件及系統信息映射文件的生成工具
裝載或卸載內核模塊:
insmod命令:指定模塊文件,不自動解決依賴模塊
insmod[ filename ] [ module options… ]
insmod`modinfo–n exportfs`
lnsmod`modinfo–n xfs`
rmmod
rmmod[ modulename]
rmmodxfs
rmmodexportfs

 

/proc目錄
/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命令
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目錄
/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)

 

編譯內核
前提:
(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) 編譯
全編譯:make [-j #]
編譯內核的一部分功能:
(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以及編輯器備份文件

 

 

練習和作業

 

 

 

grub菜單背景圖修改

cp boot/grub/splash.xpm.gz /root
gzip -d splash.xpm.gz
file splash.xpm
more splash.xpm
yum list ImageMagick
yum -y install ImageMagick
convert -resize 640×480 -colors 14 win.jpb win.xpm
gzip win.xpm
cp win.xpm.gz /boot/grub/
vim /boot/grub/grub.conf

 

 

1、破解root口令,并為grub設置保護功能

 

破解root口令

重啟按任意鍵進入grub界面, 按'e'進入編輯, 選第二項, 按'e'繼續編輯
輸入1代表進入單用戶模式, 編輯完按'b'重啟即可重設密碼

 

設置grub全局密碼

第一個title前面加入password 明文密碼 或– md5 MD5密文(grub-md5-crypt)

 

設置grub局部密碼

在相應title后面加入password 明文密碼 或–md5 MD5密文(grub-md5-crypt)

 

 

編寫grub.conf的title項繞過grub設置保護

 

grub菜單選"c"
grub>root (hd0,0)
grub>kernel /vmlinuz-2.6.32-642.e16.x86_64 root=/dev/sda2
grub>initrd /initramfs-2.6.32-642.e16.x86_64.img

 

 

破壞grub.conf文件, 進行修復啟動

 

mv /boot/grub/grub.conf /root  破壞grub.conf文件
重啟
grub>kernel (hd0,0)/vmlinuz-2.6.32-642.e16.x86_64 root=/dev/sda2
grub>initrd (hd0,0)/initramfs-2.6.32-642.e16.x86_64.img
修復之后重啟再寫一遍剛才的命令

 

 

2、破壞本機grub stage1階段, 而后在救援模式下修復之

 

dd if=/dev/zero of=/dev/sda bs=1 count=446  破壞1階段
重啟
chroot /mnt/sysimage/
ls -l /sbin/grub
grub-install /dev/sda
hexdump -C -n 512 -v /dev/sda

 

 

破壞本機grub stage1.5階段, 進行修復

 

dd if=/dev/zero of=/dev/sda bs=512 count=2 seek=1 破壞1.5階段
重啟
hexdump -C -n 1024 -v /dev/sda
grub>root (hd0,0)  交互式方式修復, 依賴于/boot/grub/*1_5*文件修復
grub>setup (hd0)
quit

 

 

破壞本機grub stage2階段, 進行修復

 

rm -fr /boot/grub 破壞2階段
重啟
cd /mnt/sysimage/
chroot /mnt/sysimage/
cd /boot
grub-install /dev/sda
重啟
grub>kernel (hd0,0)/vmlinuz-2.6.32-642.e16.x86_64 root=/dev/sda2
grub>initrd (hd0,0)/initramfs-2.6.32-642.e16.x86_64.img
修復之后重啟再寫一遍剛才的命令
vim /boot/grub/grub.conf
default=0
timeout=5
title wanglinux
root (hd0,0)
kernel /vmlinuz-2.6.32-642.e16.x86_64 root=/dev/sda2
initrd /initramfs-2.6.32-642.e16.x86_64.img

 

 

破壞/sbin/init, 進行修復

 

mv /sbin/init /root 破壞/sbin/init
file /root/init
重啟
grub append> root=/dev/sda2 init=/sbin/bash
mount -o remount,rw /
mv /root/init /sbin/
重啟

 

 

3、刪除vmlinuz和initramfs文件后無法啟動, 兩種方法恢復之

 

rm /boot/vmlinuz-2.6.32-642.e16.x86_64 initramfs-2.6.32-642.e16.x86_64.img
重啟
ls /mnt/sysimage/boot/
df
mkdir /mnt/cdrom 救援目錄下建立掛載目錄
mount /dev/cdrom /mnt/cdrom
ls
cd isolinux/
ls
cp vmlinuz /mnt/sysimage/boot
cd /mnt/sysimage/boot
ls
chroot /mnt/sysimage/
mkinitrd /boot/initradmfs-`uname -r`.img`uname`

 

通過網絡dhcp啟動

 

chroot /mnt/sysimage/
ls
cd /boot
ls
scp x.x.x.x :/boot/vmlinuz-2.6.32-642.e16.x86_64 /boot/initramfs-2.6.32-642.e16.x86_64.img /boot/

 

 

破壞本機grub stage1階段, 刪除/boot目錄的所有文件, 并恢復之

 

dd if=/dev/zero of=/de/sda bs=446 count=1 破壞第1階段
hexdump -n 512 -v /dev/sda
rm -rf /boot/  刪除boot目錄所有文件
umount /boot
重啟
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
rmp -ivh /mnt/cdrom/Packages/kernel-2.6.32-642.e16.x86_64.rpm –root=/mnt/sysimage –force|replacepkgs
cd /mnt/sysimage/boot
ls
chroot /mnt/sysimage/
grub-install /dev/sda
vim grub/grub.conf
default=0
timeout=3
title wanglinux
root (hd0,0)
kernel r!ls /boot/vmlinuz  root=/dev/sda2
initrd r!ls /boot/initramfs

 

 

4、破壞本機grub stage1階段, 刪除/etc/fstab和/boot目錄的所有文件,并恢復之

 

dd if=/dev/zero of=/de/sda bs=446 count=1 破壞第1階段
hexdump -n 512 -v /dev/sda
rm -rf /boot/        刪除boot目錄所有文件
rm -rf /etc/fstab    刪除fstab文件
重啟
df
lsblk 無法使用lsblk
blkid
fdisk -l
pwd
df
mkdir /mnt/sda1
mkdir /mnt/sda2
mount /dev/sda1 /mnt/sda1
mount /dev/sda2 /mnt/sda2
cd /mnt/sda2
vi /mnt/sda2/etc/fstab
/dev/sda1 /boot ext4 defaults 1 1
/dev/sda2 /     ext4 defaults 1 1
重啟
chroot /mnt/sysimage/
mount /dev/cdrom /mnt/
rpm -ivh /mnt/Packages/kernel-2.6.32-642.e16.x86_64.rpm –force
grub-install /dev/sda
vim /boot/grub/grub.conf
default=0
timeout=3
title wanglinux
root (hd0,0)
kernel /vmlinuz-2.6.32-642.e16.x86_64
initrd /initramfs-2.6.32-642.e16.x86_64.img
r!ls /boot/vmlinuz-2.6.32-642.e16.x86_64 /boot/initramfs-2.6.32-642.e16.x86_64.img

 

 

邏輯卷情況下的修復

 

lvscan
vgs
vgchange -ay    激活vg
ls /dev/vg0/*
pwd
mount /dev/vg0/root /mnt/sysimage/
vi /mnt/sysimage/etc/fstab
/dev/sda1 /boot ext4 defaults 1 1
/dev/vg0/root / ext4 defaults 1 2
/dev/vg0/usr /usr ext4 defaults 0 0
/dev/vg0/var /var ext4 defaults 0 0
重啟
chroot /mnt/sysimage/
df
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
rpm -ivh /mnt/cdrom/Packages/kernel-2.6.32-642.e16.x86_64.rpm –force
vim /boot/grub/grub.conf
default=0
timeout=3
title wanglinux
root (hd0,0)
kernel /vmlinuz-2.6.32-642.e16.x86_64 root=/dev/vg0/root
initramfs-2.6.32-642.e16.x86_64.img
r!ls /boot/vmlinuz* /boot/initramfs*.img

 

 

5、增加新硬盤,在其上制作能單獨運行kernel和bash的系統

 

1分區和建文件系統
lsblk
echo '—' > /sys/class/scsi_host/host2/scan
lsblk
fdisk /dev/sdb
mkfs.ext4 /dev/sdb1
mkfs.ext4 /dev/sdb2

2掛載boot
mkdir /mnt/boot
mount /dev/sdb1 /mnt/boot
cd /mnt/boot
cp /boot/vmlinuz-2.6.32-642.e16.x86_64 /boot/initramfs-2.6.32-642.e16.x86_64.img .

3安裝grub
grub-install /dev/sdb –root-directory=/mnt
hexdump -C -n 512 -v /dev/sdb

4建立grub.conf
cd /mnt/boot/grub
vim grub.conf
default=0
timeout=3
title wanglinux
root (hd0,0)
kernel /vmlinuz-2.6.32-642.e16.x86_64 root=/dev/sda2 selinux=0 init=/bin/bash
initrd /initramfs-2.6.32-642.e16.x86_64.img
r!ls /boot/vmlinuz-2.6.32-642.e16.x86_64 /boot/initramfs-2.6.32-642.e16.x86_64.img

5恢復內核和initramfs文件
cp /boot/vmlinuz-2.6.32-642.e16.x86_64 /mnt/boot/
cp /boot/initramfs-2.6.32-642.e16.x86_64.img /mnt/boot

6創建一級目錄
mkdir /mnt/sysroot
mount /dev/sdb2 /mnt/sysroot/
cd /mnt/sysroot
mkdir -pv {bin,etc,sbin,dev,lib,lib64,proc,sys,tmp,root,home,usr,var,mnt,media,boot}

7建立fstab文件
vim /mnt/sysroot/etc/fstab
/dev/sda1 /boot ext4 defaults 1 1
/dev/sda2 /     ext4 defaults 1 2
df

8、復制bash和相關庫文件, 復制相關命令及相關庫文件
/root/copycmd.sh
bash vim cat ls df mount umount rpm reboot hostname halt quit
chroot /mnt/sysroot
pwd
ls

 

 

自制U盤linux系統

 

lsblk
fdisk /dev/sdc
partx -a /dev/sdc
mkfs.ext4 /dev/sdc1
mkfs.ext4 /dev/sdc2
blkid

mount /dev/sdc1 /mnt/boot
mount /dev/sdc2 /mnt/sysroot

cd /mnt/boot
cp /boot/vmlinuz-2.6.32-642.e16.x86_64 /boot/initramfs-2.6.32-642.e16.x86_64.img .

grup-install /dev/sdc –root-directory=/mnt

vim grub.conf
default=0
timeout=3
title wanglinux
root (hd0,0)
kernel /vmlinuz-2.6.32-642.e16.x86_64 root=/dev/sda2 selinux=0 init=/bin/bash
initrd /initramfs-2.6.32-642.e16.x86_64.img
r!ls /boot/vmlinuz-2.6.32-642.e16.x86_64 /boot/initramfs-2.6.32-642.e16.x86_64.img

cd /mnt/sysroot/
ls
mkdir -pv {etc,boot,dev,lib,lib64,sys,proc,home,root,mnt,usr,var,tmp}
/root/copycmd.sh
bash ls tree hostname mount shutdown poweroff cat vi umount quit

vi /etc/fstab
/dev/sda1 /boot ext4 defaults 1 1
/dev/sda2 /     ext4 defaults 1 2

 

 

 

6、編譯安裝kernel,啟用支持ntfs文件系統功能

 

cat /boot/config-2.6.32-642.e16.x86_64|grep -i ntfs
yum grouplist
yum -y groupinstall "Development Tools"
uname -r
lscpu
tar xvf linux-3.18.41.tar.xz -C /usr/src/
cd /usr/src
ls
ln -s linux-3.18.41/ linux
cd linux
ls
du -sh .
cp /boot/config-3.10.0-327.e17.x86_64 /usr/src/linux/.config
cat /usr/src/linux/.config
ll /usr/src/linux/.config
wc -l /usr/src/linux/.config
cd /usr/src/linux
ls
make menuconfig
yum -y install "*curses*"
make menuconfig
lscpu
make -j 4
du -sh /usr/src/linux-3.18.41/
find -name "*.ko" -ls |grep -i ntfs
cd /lib/modules
du -sh /lib/modules
cd /usr/src/linux-3.18.41
make modules_install
watch -n1 `du -sh /lib/modules/3.18.41-1.0-wanglinux/`
cd /lib/modules
cd /usr/src/linux
make install

 

 

 

 

 

 

 

 

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

(0)
dengjiandengjian
上一篇 2016-09-15
下一篇 2016-09-15

相關推薦

  • 自制linux和內核編譯

    自制linux和內核編譯 1、分區并創建文件系統 fdisk /dev/sdb分兩個必要的分區/dev/sdb1對應/boot /dev/sdb2對應根/mkfs.ext4 /dev/sdb1mkfs.ext4 /dev/sdb2 2、掛載boot mkdir/mnt/bootmount /dev/sdb1 /mnt/boot 3、安裝grub grub-i…

    Linux干貨 2016-09-23
  • iptables/netfilter基于layer7實現應用層過濾

    前言 做為網絡管理員,對P2P、QQ、酷狗等軟件是又愛又恨,大多數公司為了提高工作效率,禁止公司員工登陸QQ、看視頻等,在市場上買專門的上網行為管理設備,隨便一種都是價格不菲,而使用linux來做網關一樣可以禁止qq、酷狗等軟件,為實現此功能就需要為iptables/netfilter添加layer7模塊,而iptables/netfilter是基于內核的,…

    Linux干貨 2015-04-27
  • nmcli及網絡配置

    。

    2017-09-10
  • 深入了解磁盤結構

    一、     linux中常見的磁盤:   無論什么操作系統,歸根還是要落實與磁盤上的,對于磁盤的管理也是linux管理必備的一項技能。在linux中“一切皆文件”的思想貫徹整個linux的學習中,包括像是磁盤等的硬件也是在linux的/dev/目錄下類似于文件形式的存放,常見的SATA口USB優盤或是SCS…

    Linux干貨 2016-08-29
  • find命令簡單總結

     find     字符串類查詢:            -type   //根據文件類型查找       &…

    Linux干貨 2015-09-14
  • passwd

    http://www.cnblogs.com/wzhuo/p/6706774.html

    Linux干貨 2017-04-17

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-23 09:00

    文章要點是總結好了,但是總覺得思路不太順暢,希望作者能好好組織下文字,而后將要點能串起來,

欧美性久久久久