一、Linux 組成及啟動過程
Linux: kernel+rootfs kernel:進程管理、內存管理、網絡管理、驅動程序、文件系統、安全功能 IPC:Inter Process Communication 消息隊列、semperphor、shm socket 運行中的系統環境可以分為兩層:內核空間、用戶空間 用戶空間:應用程序(進程或線程) 內核空間:內核代碼(系統調用) 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控制主機。
(一)啟動流程
1、 POST :Power-On-Self-Test,加電自檢
BIOS功能的一個主要部分。負責 完成對CPU 、主板、內存 、硬盤 子系統、顯示子系統、串并行接口、鍵盤、CD-ROM 光驅等硬件情況的檢測 。ROM :BIOS ,Basic Input and Output System保存著有關計算機系統最重要的基本輸入輸出程序,系統信息設置、開機加電自檢程序和系統啟動自舉程序等。RAM :CMOS互補金屬氧化物半導體,保存各項參數的設定按次序查找引導設備,第一個有引導程序的設備為本次啟動設備
2、bootloader:引導加載器引導程序
windows: ntloader ,僅是啟動OS Linux:功能豐富,提供菜單,允許用戶選擇要啟動系統或不同的內核版本;把用戶選定的內核裝載到內存中的特定空間中,解壓、展開,并把系統控制權移交給內核 LILO :LInux LOaderGRUB: GRand Unified Bootloader GRUB 0.X: GRUB Legacy, GRUB 1.X: GRUB2 功能:提供一個菜單,允許用戶選擇要啟動的系統或不同的內核版本;把用戶選定的內核裝載到RAM中的特定空間中,解壓、展開,而后吧系統控制權移交給內核;
MBR:
446: bootloader, 64 : 分區表, 2 : 55AA
GRUB:
primary bootloader : 1st stage filesystem driver: 1.5 stage secondary bootloader :2nd stage ,分區文件
3、kernel:
自身初始化: 探測可識別到的所有硬件設備 加載硬件驅動程序(可能借助于ramdisk加載驅動) 以只讀方式掛載根文件系統 運行用戶空間的第一個應用程序:/sbin/init
ramdisk:
內核中的特性之一:使用緩沖和緩存來加速對磁盤上的文件訪問 ramdisk --> ramfs 提高速度 CentOS 5: initrd, 工具程序:mkinitrd CentOS 6: initramfs, 工具程序:mkinitrd, dracut
系統初始化:
POST --> BootSeq uence (BIOS) -->Bootloader(MBR) --> kernel(ramdisk) --> rootfs(只讀) --> init (systemd)
4、啟動用戶空間的第一個執行程序init
/sbin/init CentOS6 之前
init 程序配置文件的類型:
SysV: init, CentOS 5 之前 配置文件:/etc/inittab Upstart: init,CentOS 6 配置文件:/etc/inittab, /etc/init/*.conf Systemd :systemd, CentOS 7 配置文件:/usr/lib/systemd/system /etc/systemd/system
運行級別:為系統運行或維護等目的而設定;0-6 :7 個級別
0 :關機1 :單用戶模式(root 自動登錄), single, 維護模式2: 多用戶模式,啟動網絡功能,但不會啟動NFS ;維護模式3 :多用戶模式,正常模式;文本界面4 :預留級別;可同3 級別5 :多用戶模式,正常模式;圖形界面6 :重啟 /etc/inittab 修改默認啟動級別
vim /etc/inittabid:5:initdefault:
默認級別: 3, 5切換級別:init #查看級別:runlevel ; who -r
[root@lvasu cron.d]# runlevelN 5[root@lvasu cron.d]# who -r 運行級別 5 2016-09-11 09:34
init 初始化
init 讀取其初始化文件:/etc/inittab1、初始運行級別(RUN LEVEL)2、系統初始化腳本3、對應運行級別的腳本目錄4、捕獲某個關鍵字順序5、定義UPS 電源終端/ 恢復腳本6、在虛擬控制臺生成getty7在運行級別5 初始化X
CentOS 5 的inittab 文件
配置文件:/etc/inittab 每一行定義一種action 以及與之對應的processid:一個任務的標識符runlevel:在哪些級別啟動此任務;#,###,也可以為空,表示所有級別;action:在什么條件下啟動此任務process:任務 action: wait: 切換至此級別運行 一次 respawn:此process 終止,就重新啟動之 initdefault :設定默認運行級別;process 省略 sysinit :設定系統初始化方式,此處一般為指定/etc/rc.d/rc.sysinit ca::ctrlaltdel:/sbin/shutdown -t3 -r nowEXAMPLE: id:3:initdefault:si::sysinit:/etc/rc.d/rc.sysinit l0:0:wait:/etc/rc.d/rc 0l1:1:wait:/etc/rc.d/rc 1...l6:6:wait:/etc/rc.d/rc 6
CentOS 6 /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
CentOS 7 systmd
init程序:systemd 配置文件:/usr/lib/systemd/system /etc/systemd/system 完全兼容SysV腳本機制;因此,service命令依然可用,建議使用systemctl命令控制服務# systemctl {start|stop|restart|status} name [service]
啟動流程
/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) 清理操作
說明:rc N –> 意味著讀取/etc/rc.d/rcN.d/
K*: K##*:##運行次序;數字越小,越先運行;數字越小的服務,通常為依賴到別的服務 S*: S##*:##運行次序;數字越小,越先運行;數字越小的服務,通常為被依賴到的服務
腳本框架
for srv in /etc/rc.d/rcN.d/K*; do$srv stop donefor srv in /etc/rc.d/rcN.d/S*; do$srv startdone
chkconfig命令
chkconfig 命令 查看服務在所有級別的啟動或關閉設定情形: chkconfig [--list] [name]
添加:
首先需要添加腳本,服務腳本位置 SysV的服務腳本放置于/etc/rc.d/init.d (/etc/init.d) chkconfig --add name
chkconfig --add testsrv
腳本 #!/bin/bash#LLLL表示初始在哪個級別下啟動,- 表示都不啟動# chkconfig: LLLL SS KK 1st SS:表示啟動的次序 88 2rd KK:表示關閉的次序 22#descrition:test service EXAMPLE: #!/bin/bash#chkconfig:35 88 22#description:test service
刪除:
chkconfig --del name
chkconfig --del testsrv
修改指定的鏈接類型(下次開機生效)
chkconfig [--level levels] name <on|off|reset> --level LLLL: 指定要設置的級別;省略時表示2345
chkconfig --level 35 testsrv
ntsysv 命令
GUI服務管理
ntsysv --level=3
xinetd 管理的服務(超級守護進程)
service 命令:手動管理服務 service 服務 start|stop|restart service --status-all
瞬態(Transient )服務被xinetd 進程所管理
進入的請求首先被xinetd 代理 配置文件:/etc/xinetd.conf 、/etc/xinetd.d/<service> 與libwrap.so 文件鏈接 用chkconfig 控制的服務: chkconfig tftp on
啟動流程(注意)
注意:正常級別下(2-5),最后啟動一個服務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/mingetty tty12:2345:respawn:/usr/sbin/mingetty tty2 ...6:2345:respawn:/usr/sbin/mingetty tty6 mingetty 會自動調用login 程序x:5:respawn:/etc/X11/prefdm -nodaemon
總結:
/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: GRand Unified Bootloader
grub 0.x: grub legacy grub 1.x: grub2 grub legacy: stage1: mbr stage1_5: mbr 之后的扇區,讓stage1 中的bootloader能識別stage2 所在的分區上的文件系統 stage2 :磁盤分區(/boot/grub/)
配置文件:/boot/grub/grub.conf <– /etc/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 init=/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
rpm -ql kernel-doc
識別硬盤設備 :
(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 openssl passwd -l -salt "abcd"
破解root 口令:
啟動系統時,設置其運行級別1進入單用戶模式 : (1) 編輯grub 菜單( 選定要編輯的title ,而后使用e 命令); (2) 在選定的kernel 后附加 1, s, S 或single 都可以; (3) 在kernel 所在行,鍵入“b” 命令
grub 安裝
安裝grub: (1) grub-install (all) 安裝grub stage1 和stage1_5 到/dev/DISK 磁盤上,并復制GRUB到 相關文件到 DIR/boot 目錄下 grub-install --root-directory=DIR /dev/DISK (2) grub (stage1) grub> root (hd#,#)grub> setup (hd#)***grub 命令安裝需要依賴于**1_5文件,當刪除/boot/grub文件夾時,無法安裝
(三)救援環境
在根文件系統無法使用時需要,如/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/sysimagesh-3.1# cp /etc/inittab.bak /etc/inittab
沒有備份文件的恢復辦法
如果一些配置文件丟失或軟件誤刪除,且無備份,可以通過重新安裝軟件包來恢復,首先查找到/etc/inittab 屬于哪一個RPM包 # chroot /mnt/sysimage# rpm -qf /etc/inittabinitscripts-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 目錄下相應位置即可
二、自制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
恢復內核和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.confkernel /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和相關庫文件
三、內核編譯
單內核體系設計、但充分借鑒了微內核設計體系的優點,為內核引入模塊化機制。
(一)、內核組成部分:
kernel:內核核心,一般為bzImage ,通常在/boot目錄下,名稱為vmlinuz-VERSION-RELEASE; ;
kernel object: 內核對象,一般放置于/lib/modules/VERSION-RELEASE/
[ ]: N[M]: M[*]: Y輔助文件:ramdisk initrd initramfs 模板文件:config-2.6.32-642.el6.x86_64
內核版本
運行中的內核: 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: licenselsmod |grep xfs;modinfo xfs
內核模塊管理
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 ] rmmod xfs rmmod exportfs
/proc 目錄
/proc 目錄:
內核把自己內部狀態信息及統計信息,以及可配置參數通過proc偽文件系統加以輸出 參數:只讀:輸出信息 可寫:可接受用戶指定“新值”來實現對內核某功能或特性的配置
/proc/sys
(1) sysctl 命令用于查看或設定此目錄中諸多參數 sysctl -w path.to.parameter=VALUEsysctl -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=1 開啟路由轉發功能 (linux路由或者vpn服務) net.ipv4.icmp_echo_ignore_all=1 禁止ping vm.drop_caches 清除緩存
vm.drop_caches詳細文檔To free pagecache: * echo 1 > /proc/sys/vm/drop_cachesTo free dentries and inodes: * echo 2 > /proc/sys/vm/drop_cachesTo free pagecache, dentries and inodes: * echo 3 > /proc/sys/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)
(三)、編譯內核
前提: (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/srccd /usr/srcln -sv linux-3.10.67 linuxcd /usr/src/linuxcp /boot/config-$(uname -r) ./.configmake menuconfigmake -j 2make modules_installmake 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_name help# make ARCH=arm help
內核編譯
在已經執行過編譯操作的內核源碼樹做重新編譯:
需要事先清理操作:
# make clean:清理大多數編譯生成的文件,但會保留config 文件等# make mrproper: 清理所有編譯生成的文件、config及某些備份文件# make distclean :mrproper 、patches 以及編輯器份文件
實驗
一、破壞或刪除/boot引導的相關文件及修復
1、刪除stage1文件,恢復系統(癥狀:計算機會認為無OS)
1、刪除stage1文件# dd if=/dev/zero of=/dev/sda bs=1 count=446 # hexdump -C -n 512 /dev/sda
2、恢復 ***重啟進入boot菜單選擇,選擇CDrom驅動器
***進入救援模式rescue,選擇非網絡模式
***我們所使用的磁盤被掛載在/mnt/sysimage目錄下
***切換根目錄 # chroot /mnt/sysimage ***grub修復命令 # grub-install /dev/sda
***修復完成,執行兩次exit,reboot重啟計算機 # exit # exit
2、刪除stage1.5,恢復系統(癥狀:開機BIOS直接黑屏)
1、刪除stage1.5文件# dd if=/dev/zero of=/dev/sda bs=512 count=2 seek=1# hexdump -C -n 2048 /dev/sda
2、恢復 光盤啟動,進入rescue模式 ***切換根目錄 # chroot /mnt/sysimage ***grub修復命令 # grub-install /dev/sda ***修復完成,執行兩次exit,reboot重啟計算機
3、刪除grub文件夾
1、刪除/boot/grub文件 # rm -rf /boot/grub # ls /boot
2、恢復 光盤啟動,進入rescue模式 ***切換根目錄 # chroot /mnt/sysimage ***grub修復命令 # grub-install /dev/sda
***首次啟動,需要填寫grub配置信息
4、刪除vmlinuz、initramfs (通過安裝光盤直接修復)
1、刪除/boot/vmlinuz、initramsfs文件# rm -f /boot/{vmlinuz、initrams}# ls /boot 2、恢復 光盤啟動,進入rescue模式 ***切換根目錄 # chroot /mnt/sysimage ***掛載CDrom # mkdir /mnt/cdrom # mount /dev/cdrom /mnt/cdrom *** 復制文件 # cp /mnt/cdrom/isolinux/vmlinuz /boot/vmlinuz-`uname -r` # mkinitrd /boot/initramfs-`uname -r`.img `uname -r` ***修復完成,執行兩次exit,reboot
刪除vmlinuz、initramfs (通過救援光盤網絡修復)
2、恢復 光盤啟動,進入rescue模式 ***切換根目錄 # chroot /mnt/sysimage ***掛載CDrom # mkdir /mnt/cdrom # mount /dev/cdrom /mnt/cdrom *** 復制文件 # cp /mnt/cdrom/isolinux/vmlinuz /boot/vmlinuz-`uname -r` # mkinitrd /boot/initramfs-`uname -r`.img `uname -r` ***修復完成,執行兩次exit,reboot
5、刪除/boot
1、刪除/boot文件# rm -fr /boot/ 2、恢復 光盤啟動,進入rescue模式 ***安裝kernel包# mkdir /mnt/cdrom# mount /dev/cdrom /mnt/cdrom# rpm -ivh /mnt/cdrom/Packages/kernel-2*.rpm --root=/mnt/sysimage --replacepkgs|force *** 切換根目錄 chroot /mnt/sysimage*** 修復 grub-install /dev/sda*** 編輯grub.conf vim /boot/grub/grub.conf
6、普通磁盤分區刪除刪除/boot 和/etc/fstab
1、刪除/boot、/etc/fstab文件# rm -fr /boot/# rm -r /etc/fstab 2、恢復 光盤啟動,進入rescue模式***檢查/ blkid;fdisk -l mkdir /mnt/sda2 mount /dev/sda2 /mnt/sda2***編輯fstab文件,重啟讓系統自動掛載 vi /mnt/sda2/etc/fstab /dev/sda1 /boot ext4 defaults 1 1 /dev/sda2 / ext4 defaults 1 2 reboot***光盤啟動,進入rescue模式,掛載/mnt/sysimage mkdir /mnt/cdrom mount /dev/cdrom /mnt/cdrom chroot /mnt/sysimage*** 安裝kernel包 rpm -ivh /mnt/cdrom/Packages/kernel-2*.rpm --replacepkgs|force ***修復grub grub-install /dev/sda ***編輯grub.conf文件 vim /boot/grub/grub.conf default=0 timeout=3 title wanglinux root (hd0,0) kernel /vmlinuz.... root=/dev/sda2 initrd /initramfs .
7、邏輯卷情況下,刪除/boot 和/etc/fstab
1、刪除/boot、/etc/fstab文件# rm -fr /boot/# rm -r /etc/fstab 2、恢復 光盤啟動,進入rescue模式***檢查邏輯卷,并激活 lvscan vgchange -ay mount /dev/vg0/root /mnt/sysimage***編輯fstab文件,重啟讓系統自動掛載 vi /mnt/sysimage/etc/fstab /dev/sda1 /boot ext4 defaults 1 1 /dev/vg0/root / ext4 defaults 1 2 /dev/vg0/usr /usr /dev/vg0/var /var reboot***光盤啟動,進入rescue模式,掛載/mnt/sysimage mkdir /mnt/cdrom mount /dev/cdrom /mnt/cdrom chroot /mnt/sysimage***安裝kernel包 rpm -ivh /mnt/cdrom/Packages/kernel-2*.rpm --replacepkgs|force ***修復grub grub-install /dev/sda ***編輯grub.conf配置文件 vim /boot/grub/grub.conf default=0 timeout=3 title wanglinux root (hd0,0) kernel /vmlinuz.... root=/dev/vg0/root initrd /initramfs .
8、恢復文件/boot/initramfs
# chroot /mnt/sysimage# mkinitrd /boot/initramfs-`uname -r`.img `uname -r` # exit;exit;reboot 退出救援模式并重啟計算機
9、root密碼丟失破解
1. centos怎么讓進入GRUB 菜單界面 Linux開機引導的時候,按鍵盤上的e 就可以進入進入GRUB菜單界面。 2.在出現GRUB引導畫面時(CentOS(2.6.18-274**)),按字母e鍵,進入GRUB編輯狀態。
3.把光標移動到kernel那一行,再敲入“e”進入命令行編輯,在kernel 一行的最后加上空格single,回車敲入“b”,啟動系統,即進入單用戶模式,
4、修改密碼
二、通過grub.conf配置文件,改變引導菜單屬性
1、給引導菜單更換背景圖片
yum install ImageMagick win.jgpconvert -resize 640x480 -colors 14 win.jpg win.xpm
gzip win.xpm
vim /boot/grub/grub.confsplashimage=(hd0,0)/boot/grub/back.xpm.gz
2、給單用戶模式和系統引導添加密碼
單用戶模式密碼 title之上 password --md5 系統引導密碼 title之下 password --md5
生成密碼 grub-md5-crypt openssl passwd -l -salt "abcd"
單用戶模式密碼
系統引導密碼
3、kernel內核參數更改
添加loop設備 max_loop=20 增加 關閉啟動中的圖形界面 rhgb quiet 刪除 禁用selinux selinux=0 增加
4、開機啟動grub界面,可編輯kernel菜單
三、自制linux系統
1、分區并創建文件系統 fdisk/dev/sdb 分兩個必要的分區/dev/sdb1對應/boot /dev/sdb2對應根/ # mkfs.ext4 /dev/sdb1 # mkfs.ext4 /dev/sdb2
2、掛載boot # mkdir /media/boot # mount /dev/sdb1 /media/boot 3、安裝grub grub-install --root-directory=/media/ /dev/sdb
4、建立grub.conf: vim /media/boot/grub/grub.confdefault=0timeout=0title lvasu root (hd0,0) kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/sda2 selinux=0 init=/bin/bash initrd /initramfs-2.6.32-642.el6.x86_64.img
5、恢復內核和initramfs文件 cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /media/boot/ cp /boot/initramfs-2.6.32-642.el6.x86_64.img /media/boot
6、創建一級目錄 mkdir /media/sysroot mount /dev/sdb2 /media/sysroot mkdir –pv /media/sysroot/{etc,lib,lib64,bin,sbin,tmp,var,usr,sys,proc,opt,home,root,boot,dev,mnt,media}
7、vim /media/sysroot/etc/fstab /dev/sda1 /boot ext4 defaults 1 1/dev/sda2 / ext4 defaults 1 2 8、復制bash和相關庫文件 9、復制相關命令及相關庫文件 如:ls,cat,vim,df,mount,umount,rpm,reboot,hostname,halt,poweroff,quit
完成
四、內核編譯
1、tar xf linux-3.2.82.tar.xz -C /usr/src2、cd /usr/src3、ln -sv linux-3.2.82 linux4、cd /usr/src/linux
5、cp /boot/config-$(uname -r) ./.config6、make menuconfig
7、make -j 28、make modules_install9、make install
10、reboot
原創文章,作者:lvasu,如若轉載,請注明出處:http://www.www58058.com/49152
知識點分類的很好,但是圖片是從別的網站上來的,我們網站是會屏蔽掉的,所以需要你重新上傳