系統啟動流程:
POST-->讀取BootSequence(BIOS),決定引導次序-->讀取引導設備的Bootloader(MBR grubstage1-->stage1.5/boot/filkeststem)-->boot-->/boot/grub.conf-->磁盤分區讀取 kernel(ramdisk來完成真正根文件所在設備的加載)-->掛在rootfs(只讀)到根設備上-->開始運行/sbin/init-->(/etc/inittab /etc/init/*.conf)-->設置默認運行級別-->運行系統初始化腳本,完成系統初始化-->關閉對應級別下需要停止的服務,啟動對應級別下需要開啟的服務-->rc.local-->設置登錄終端[-->圖形終端]
概論
1.linux組成部分:kernel(內核)+rootfs(GUN,根文件系統) kernel:進程管理、內存管理、網絡管理、驅動程序、文件系統、安全功能 IPC:Inter process communication 消息隊列,semerphor,shm socket rootfs:程序和庫文件glibc 程序:二進制執行文件 glibc:函數集合,function,調用接口 過程調用:prpcedure,無返回值 函數調用:function 2.kernel設計流派 微內核:(monolithic kernel):Linux 把所有工具集成與同一個程序 單內核:(micro kernel): Windows, Solaris 每種功能使用一個單獨子系統實現(模塊化) 3.Linux內核特點: 支持模塊化: .ko(內核對象) 如:文件系統,硬件驅動,網絡協議等 支持內核模塊的動態裝載和卸載 4.linux內核組成部分: 核心文件: /boot/vmlinuz-VERSION-release vmlinuz的字母表示內核是壓縮文件 輔助的偽根系統:ramdisk 啟動操作系統,需要驅動,但驅動在根文件系統上,開機時掛載不了根文件系統,就需要一個第三方來 輔助,生成一個虛擬的根文件系統,生成專用用戶的專用驅動,來加載真正的根文件系統上的驅動. CentOS 5: /boot/initrd-VERSION-release.img CentOS6,7: /boot/initramfs-VERSION-release.img 模塊文件: /lib/modules/VERSION-release(內核版本號) 注意:安裝多版本的內核,有多個模塊目錄 5.模塊文件目錄: /lib/modules/2.6.32-431.el6.x86_64/kernel arch :與平臺相關的特有代碼(x86 x64) crypto :加密解密的組件 drivers : 驅動 fs:文件系統 kernel :內核追蹤用到的組件 lib:庫 mm:內存管理 net:網絡管理 sound:聲音驅動 6.運行中的系統環境可分為兩層:內核空間,用戶空間 用戶空間:應用代碼(進程或線程) 內核空間(內核模式):內核代碼(系統調用) 任何應用程序在運行過程中,有可能需要不斷發起模式轉換,兩種空間不斷轉換.轉換的速率決定系統的性能. 7.建議在生產環境里面,將ctrl+alt+del里面重啟的快捷鍵禁用
CentOS6啟動流程
1.POST加電自檢 2.加載BIOS的硬件信息,獲取第一個啟動設備。 3.讀取第一個啟動設備MBR的引導加載程序(grub)的啟動信息 4.加載核心操作系統的核心信息,核心開始解壓縮,并嘗試驅動所有的硬件設備。 5.核型執行init程序并獲取運行信息。 6.Init執行/etc/rc.d/rc.sysinit文件。 7.啟動核心的外掛模塊(/etc/modprobe.conf)。 8.Init執行運行的各個批處理文件(scripts). 9.Init執行/etc/rc.d/rc.local. 10.執行/bin/login程序,等待用戶登錄。 11.登錄之后開始以Shell控制主機。 1. POST: Power-On-Self-Test,加電自檢,是BIOS功能的一個主要部分。負責完成對CPU、主板、內存、硬盤子系統、顯示 子系統、 串并行接口、鍵盤、 CD-ROM光驅等硬件情況的檢測。 post(加電自檢)其實就是按開機鍵的那個過程,檢測你的系統硬件信息 ,通過什么檢測(cpu) 什么都不會干,執行事先編排好 的指令和程序,cpu從哪加載指令和程序,能從硬盤拿數據嗎?去內存拿數據 剛系統初始化過程中內存是空白的,沒有數據 這就要求系統自己完成這個的過程,通常內存有兩種:ROM RAM ,計算機識別的內存和我們平時說的內存是不一樣的 設備尋址時 不光識別物理4G內存條,還有一個低地址空間(BIOS的空間)在主板上有一個ROM芯片,里面嵌入了一段程序,(叫BIOS 基本 輸入輸出系統)程序的作用就是掃描計算機的硬件, 開機過程中計算機會將他的指針指向內存低地址空間 自動在開機過程中 CPU的指揮下將某個特殊的硬件的設備內容裝在進內存,將BOis中的程序和指令映射進(物理地址空間)ROM 中,cpu就能讀取 指令,檢測設備是否完整不需要任何額外指令,是硬件內置的,這個過程就是加電自檢。bios 還要完成啟動設備的次序決定, 決定哪個設備先啟動(USB裝系統) ROM: BIOS, Basic Input and Output System,保存著有關計算機系統最重要的基 本輸入輸出程序,系統信息設置、 開機加電自檢程序和系統啟動自舉程序等。 RAM: CMOS互補金屬氧化物半導體,保存各項 參數的設定按次序查找引導設備,第一個有引導程序的設備為本次啟動設備 2.bootloader: 引導加載器,引導程序 從BISO中按次序查找各引導設備,第一個有引導程序的設備即為本次啟動要用到的設備. 程序類型: windows: ntloader,僅是啟動OS Linux:功能豐富,提供菜單, LILO: LInux LOader(缺陷:無法支持大硬盤分區) GRUB: GRand Unified Bootloader(統一引導加載器) centos 5,6: GRUB 0.X: GRUB Legacy(經典版), 各種安卓手機使用 centos 7: GRUB 1.X: GRUB2(跟0.X版本比,完全重寫) 功能:提供一個菜單,允許用戶選擇要啟動系統或不同的內核版本;把用戶選定的內核裝載到內存中的特定空間中,解壓、展開, 并把系統控制權移交給內核 MBR:Master Boot Record 512字節: 446byts: bootloader; 64byts: 分區表; 2byts: 55AA bootloader空間太小,446字符的代碼只能實現最基本的功能 GRUB為向用戶提供更好的開機體驗,加入開機菜單,開機圖片等更多功能,bootloader的小空間不能滿足,grub分成三個階段, 第一階段放在bootloader,bootloader不再直接加載內核,而是加載grub的第二階段,第二階段是一個虛擬操作系統,在磁盤分 區內,有大的容量.相當于在啟動操作系統前,啟動一個虛擬操作系統(程序),不受MBR的限定,提供復雜的功能(陣列圖,菜單,交互 式接口),選定操作系統后,再由第二階段加載內核文件.在第二階段之前,還有第1.5階段,提供文件系統驅動,方便虛擬系統的生 成. 第一階段: primary boot loader : 1st stage, 1.5 stage 第1.5階段 :Partition:filesystem driver ,1.5stage 文件系統驅動接口 第二階段 :Partition /boot/grub/ : 2nd stage,分區文件 不支持復雜邏輯的軟 raid,內核分件只能放在基本磁盤分區上 UEFI:可擴展固件接口(Extensible Firmware Interface,EFI)是 Intel 為 PC 固件的體系結構、接口和服務提出的建議標準。其主要目的是為了提供一組在 OS 加載之前(啟動前) 在所有平臺上一致的、正確指定的啟動服務,被看做是有近20多年歷史的 BIOS 的繼任者。 GPT: GUID磁碟分割表(GUID Partition Table,縮寫:GPT)其含義為“全局唯一標識磁盤分區表”,是一個實體硬盤的分區 表的結構布局的標準。它是可擴展固件接口(EFI)標準(被Intel用于替代個人計算機的BIOS)的一部分,被用于替代BIOS 系統中的一32bits來存儲邏輯塊地址和大小信息的主開機紀錄(MBR)分區表。 3.kernel: 有gurb中選定內核,把內核文件展開后,kernel自身初始化,然后接管系統的控制權,開始完成復雜的操作. 自身初始化操作(按順序操作): A.探測可識別到的所有硬件設備 B.加載硬件驅動程序(有可能借助于ramdisk加載驅動) C.以只讀方式掛載根文件系統(只讀掛載,以防內核的錯誤操作,操作過程出錯) D.運行用戶空間的第一個應用程序: /sbin/init init程序的類型: CentOS 5之前: SysV init 配置文件: /etc/inittab CentOS 6: Upstart init (支持并發啟動服務) 配置文件: /etc/inittab(只是定義系統啟動級別) /etc/init/*.conf(ntOS 7主要使用) Ce: Systemd systemd 配置文件: /usr/lib/systemd/system, /etc/systemd/system ramdisk: 不在發行版系統光盤上事先存在,而是在裝系統后,掃描硬件設備后動態生成的 內核中的特性之一:使用緩沖和緩存來加速對磁盤上的文件訪問 ramdisk 轉換成 ramfs(文件系統) 提高速度 centos 5: initrd, 創建工具程序: mkinitrd CentOS 6,7initramfs,創建工具程序: mkinitrd, dracut 系統初始化過程: POST --> 讀取BootSequence (BIOS),決定引導次序 -->讀取引導設備的Bootloader(MBR) -->磁盤分區上讀取 kernel(ramdisk來完成對真正根文件所在設備的加載) -->掛載rootfs(只讀)到根設備上 --> 開始運行/sbin/init( systemd 4.init程序(sbin/init) centos5:SysV init 運行級別:為了系-統的運行或維護等目的而設定的機制; 0-6 :7個級別 0:關機 shutdowm 1:單用戶模式(root自動登錄), single, 維護模式 2: 多用戶模式,啟動網絡功能,但不會啟動NFS;維護模式 3:多用戶模式,正常模式;文本界面 4:預留級別;,目前無特別適用目的, 可同3級別 5:多用戶模式(multi user),完全功能模式;圖形界面 6:重啟 默認級別: 3, 5 切換級別: init # 查看級別: runlevel ; who -r 配置文件: /etc/inittab 每一行定義一種action以及與之對應的process id:runlevel:action:process id:一個任務的標識符 runlevels:在哪些級別啟動此任務;#,###,也可以為空,表示所有級別 action:在什么條件下啟動此任務 wait: 等待切換至此任務所在的級別時運行一次 respawn:此任務終止時,就重新啟動之 initdefault:設定默認運行級別; process省略 sysinit:設定系統初始化方式,此處一般為指定/etc/rc.drc.sysinit ca::ctrlaltdel:/sbin/shutdown -t3 -r now process:具體任務 ,通常是應用程序,或腳本,或二進制程序 例: id:3:initdefault: 表示設定默認啟動級別 (centos6兼容) si::sysinit:/etc/rc.d/rc.sysinit 表示所有級別利用/etc/rc.d/rcsysinit設定系統初始化 l3:3:wait:/etc/rc.d/rc 3 表示當切換到3級別時運行/etc/rc.d/rc腳本,往腳本里傳遞參數為3,意味著去啟動或 關閉/etc/rc.d/rc3.d/目錄下的服務腳本所控制的服務,不同級別,數字不同. 6:2345:respawn:/usr/sbin/mingetty tty6(定義終端1-6):表示在2345運行級別啟動mingetty指令,給指令傳遞參數 tty1,一旦該程序停止,要自動重啟。mingetty會調用login程序,打開虛擬終端的程序,除了minget ty之外,還有諸如 getty等 x:5:respawn:/etc/X11/prefdm -nodaemon 表示在5運行級別啟動時,打開圖形化終端 系統初始化腳本:/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) 清理操作 運行級別的相關服務: init在利用/etc/inittab配置文件,進行用戶空間系統初始化時,會有關于默認運行級別的定義,當定義好默認運行級別, 利于/etc/rc.d/rc.sysinit完成系統 初始化后,就會按照運行級別,來關閉、打開相應級別下的服務 /etc/rc:規定關閉 啟動服務機制 rc腳本接受一個運行級別數字為參數,/etc.rc.d/有rc+運行級別的目錄,有K和S開頭+運行級別+服務名 的文件,每個文件鏈接/etc/init.d相應的程序文件. 各種服務的控制腳本程序是存放在/etc/rc.d/init.d/目錄下 ,然后各個對應級別下要關閉或開的程序以軟連接的方式存放在/etc/rc.d/rc運行級別.d/目錄下 以K開頭的表示要關閉的服務,K##*:關閉優先級,##數字越小,越是優先關閉;依賴的服務先關閉,而后關閉被依賴的; 以S開頭的表示要開啟的服務,##*:啟動優先級,##數字越小,越是優先啟動;被依賴的服務先關閉,依賴別人的服務后啟動 一般是先關閉相關服務后,再開啟相關服務 /etc/rc.d/rc.local 該腳本為正常行級別運行后的最后一個腳本,可以將一些希望開機時自動啟動,但又不合適編輯成服務 腳本的一些命令或程序,寫在該文件中, 單獨成行,即可完成開機自動啟動;正常級別下,最后啟動一個服務S99local沒有鏈 接至/etc/rc.d/init.d一個服務腳本,而是指向了/etc/rc.d/rc.local腳本 對應的文件在/etc/init/control-alt-d elete.conf里,可通過/etc/inittab獲知其定義信息 /etc/rc.d/init.d/下的腳本的格式: 這類腳本都需要在開頭注釋段標明:一般要接受至少start、stop、restart、status四個參數 #!/bin/bash # crond start/stop the cron daemon 標明腳本功能 ,此項可以不寫 # chkconfig:LLL NN MM 標明該服務腳本初始狀態下的運行級別,啟動優先級,關閉優先級,必須要寫 LLL:自動為on級別 NN:自動為on的優先級 MM:自動為OFF的優先級 例:# chkconfig:2345 11 88 # description: 描述 功能代碼段 … /etc/init.d/*(/etc/rc.d/init.d/*)服務腳本執行方式: #/etc/init.d/服務腳本 {start/restart/stop/status} #service SRV_SCRIPT {start/restart/stop/status} 為了統一管理服務關閉啟動,設置服務腳本機制.利用chkconfig 命令自動在各級別目錄下創建對應的K或S的服務管理鏈接文件,且可以管理服務腳本的開機啟動或關閉等,要想利用chkconfig 進行管理,腳本必須要滿足上述注釋段的要求,然后將腳本放到/etc/init.d/目錄下 chkconfig命令:管控/etc/init.d/每 個服務腳本在各級別下的啟動或關閉狀態; 查看:chkconfig --list [服務名] 添加:chkconfig --add 服務名 S ysV的服務腳本放置于/etc/rc.d/init.d (/etc/init.d) 刪除:chkconfig --del 服務名 修改執行的連接類型: chkconfig [--level LEVELS] name <on|off|reset> --level LEVELS:指定級別,默認為234 動態管理服務 xinetd service命令,手動管理服務 瞬態( Transient)服務被xinetd進程所管理進入的請求首先被xinetd代理 配置文件: /etc/xinetd.conf、 /etc/xinetd.d/<service> 與libwrap.so文件鏈接 用chkconfig控制的服務: chkconfig tftp on 總結(用戶空間的啟動流程):/sbin/init(/etc/inittab) 設置默認運行級別-->運行系統初始化腳本,完成系統初始化-->關閉對應級別下需要停止的服務,啟動對應級別下需要開啟的服 務.-->設置登錄終端[-->圖形終端] centos6: init程序:upstart,但依然為/sbin/init,其配置文件:/etc/init/*.conf 為了兼容centos5,仍然有/etc/inittab,但僅僅是定義系統默認運行級別
[root@centous1 ~]# ls /etc/init control-alt-delete.conf quit-plymouth.conf readahead-collector.conf start-ttys.conf init-system-dbus.conf rc.conf readahead.conf tty.conf kexec-disable.conf rcS.conf readahead-disable-services.conf plymouth-shutdown.conf rcS-emergency.conf serial.conf prefdm.conf rcS-sulogin.conf splash-manager.conf
/etc/rcs.conf:定義系統初始化腳本 /etc/rc.conf:主配置文件, /etc/start-tty.conf:定義啟動虛擬終端 /etc/init-system-dbus.conf: 定義啟動服務 注意:*.confwei為upstar風格的配置文件. GRUB:完全一樣 centos7: init程序:systemd,配置文件:/usr/lib/systemd/system/*,/etc/systemd/system/* 與centos5,6的開機啟動服務相比,centos7開機時不啟動任何服務,當訪問某種服務時,才會啟動服務,不訪問的服務保持沉默狀態 完全兼容SycV腳本機制;因此,server命令依然可用,不過,建議使用systemctl命令來控制服務. systemctl {start|stop|restart|status} name[.service] 設定默認系統運行級別:(不再是修改/etc/inittab,此文件指明更改方法) 命令:systemctl set-default TARGET.target 查看當期的運行平臺: systemctl get-default 常用的運行平臺: # multi-user.target: analogous to runlevel 3 # graphical.target: analogous to runlevel 5 沒有運行級別的概念,為了兼容centos5.6,設定不同的運行平臺,來對應0-6的運行級別
詳解GRUB(BOOT Loader)
grub legacy:主要運行分三個階段 stage1(第一階段):安裝在mbr中 stage1.5(第1.5階段):存放在mbr之后的扇區中,讓stage1中的bootloader能識別stage2所在的分區上的文件系統(否則他是沒辦法加載第二階段的) stage2(第2階段):這個就是我們開機能看到提供菜單,讓我們能夠編輯時的加載界面的那個階段,第二階段是存放在磁盤分區上的,一般都在/boot/grub/目錄下 =====以上就是grub的組織格式====== grub也有配置文件:/boot/grub.conf通常有個符號連接文件在/etc/grub.conf 配置文件:/boot/grub/grub.conf <-- /etc/grub.conf 因此當我們系統啟動的時候如果要加載grub所在的磁盤時,會讀取這個磁盤上的Mbr,從此能加載到stage1,stage1加載完以后會嘗試去加載stage1.5,stage1.5階段讀到以后,從而就能夠驅動stage2所在的磁盤分區;其實這個磁盤分區上不但有第二階段,還有內核文件和ramdisk等等,都在這個分區上放置著,這就是為什么grub能夠加載內核文件的原因。注意:主板bios必須能夠識別硬盤。然后bios才能去加載硬盤上的boot loader,磁盤上boot loader加載完以后就能夠直接識別當前主機能識別到的硬盤設備了,但是,硬盤設備能夠識別,并不以為著能夠識別硬盤中的文件系統,因為文件系統是額外附加的一層軟件組織的文件結構。所有要想能夠對接某種文件系統,必須要用到文件系統驅動。所謂的stage1.5階段也就是給grub提供了文件系統驅動,從而grub就能夠訪問對應的stage2和內核所在的分區了,這通常應該是一個基本磁盤分區,畢竟stage1.5不可能做的過于復雜。所以grub的第二階段,以及內核以及ramdisk文件通常都會放在一個基本磁盤分區 stage2及內核等通常放置于一個基本磁盤分區(就是一般的磁盤分區,不是lvm和軟raid;因為grub根本就驅動不了邏輯卷) 功用: (1)提供菜單,并提供交互式接口 e:編輯模式,用于編輯菜單 c:命令模式,交互式接口(命令行接口) (2)加載用戶選擇的內核或操作系統 允許用戶傳遞參數給內核 可隱藏菜單 (3)為菜單提供保護機制 為編輯菜單進行認證 為啟動內核或操作系統進行認證 如何識別硬盤設備: (hd#,#)第幾塊硬盤的第幾個分區 hd#: 磁盤編號,用數字表示;從0開始編號 #: 分區編號,用數字表示; 從0開始編號 (hd0,0) 第一塊硬盤,第一個分區 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 顯示/boot/grub/grub.conf中內核的參數 內核參數文檔:/usr/share/doc/kernel-doc-2.6.32/Documentation/kernel-parameters.txt 手動在grub命令行接口啟動系統: grub> root (hd#,#) 指明根設備 grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE(只讀方式啟動根文件系統) grub> initrd /initramfs-VERSION-RELEASE.img 指明ramdisk文件 grub> boot 引導內核 配置文件: /boot/grub/grub.conf
#root (hd0,0) #kernel /vmlinuz-version ro root=/dev/sda3 #initrd /initrd-[generic-]version.img #boot=/dev/sda default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS 6 (2.6.32-504.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=UUID=a9e2b828-c1e4-4def-b571-cf428675cf06 rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-504.el6.x86_64.img
default=#: 設定默認啟動的菜單項;落單項(title)編號從0開始 timeout=#:指定菜單項等待選項選擇的時長(用戶在規定時間內不操作,自動跳過菜單) splashimage=(hd#,#)/PATH/TO/XPM_FILE:菜單背景圖片文件路徑,支持顏色很少 hiddenmenu:隱藏菜單 password [--md5] STRING: 啟動菜單編輯認證 STRING:加密密碼串 重啟生效 title TITLE:定義菜單項“標題” , 可出現多次 root (hd#,#): grub查找stage2及kernel文件所在設備分區;為grub“根” kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:啟動的內核 ,這里的根是指root指向的第一個硬盤,第一個分區(hd0,0). 刪除rhgb quiet選項,取消開機圖形界面,查看內核啟動消息 initrd /PATH/TO/INITRAMFS_FILE: 內核匹配的ramfs文件 password [--md5] STRING: 啟動選定的內核或操作系統時進行認證 Max_loop=100 增加loop設備的數量(內核參數) 獨立分區的boot kernel和initrd 可以寫成 (hd0,0)/vimlinuz- 非獨立分區的boot kernrl (hd0.0)/boot/vimlinuz- grub加密: 1.openssl passwd -1 或 指定鹽: openssl passwd -salt "weds" -1 2.grub-md5-crypt命令,生成密碼串, 編輯/boot/grub/grub.conf 把生成的密碼串放到password字段后 #password --md5 $1$8xzRy$xKj1/D5nb.9flfTfSRl5x.
[root@centous1 ~]# grub-md5-crypt Password: Retype password: $1$HCKex$zNapti1LIazkPDCyHClcZ.
進入單用戶模式:(可破解root密碼) 啟動系統時,設置其運行級別1 進入單用戶模式: (1) 編輯grub菜單(選定要編輯的title,而后使用e命令); (2) 在選定的kernel后附加 1, s, S或single都可以;編輯好敲回車 (3) 在kernel所在行,鍵入“ b”命令 安裝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#)
當發生故障時,進入救援模式,少什么文件就在光盤中拷貝什么文件,比如說少/vmlinuz-2.6.32-504.el6.x86_64 就可以在光盤中找到,但是initramfs-2.6.32-504.el6.x86_64.img這個文件找不到,可以用命令生成
(1)先切根,chroot /mnt/sysimage (2) mkinitrd /boot/initramfs-`uname -r`.img `uname -r`
注意,需要在/boot/grub/grub.conf中修改信息,要和修改的文件名一致
如果是grub.conf文件里邊信息錯了,導致開不開機,可以進入菜單選項中,修改內核信息,注意,可以用tab補全 亦可以進入grub模式,輸入
kernel (hd0,0)/vmlinuz-2.6.32-504.el6.x86_64 root=/dev/sda1(根目錄掛載盤)
initrd (hd0,0)/initramfs-2.6.32-504.el6.x86_64.img
boot
即可
有的機器沒有光驅,那么可以使用網絡從別的機器上把文件考下來
scp 10.1.255.76:/boot/vmlinuz* /boot
scp 10.1.255.76:/boot/initramfs* /boot
修改grub.conf
實驗: 刪除/boot,恢復 rm -rf /boot 光盤啟動, 進入rescue模式 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 vim /boot/grub/grub.conf 實驗: 刪除/boot 和/etc/fstab,恢復之 rm -rf /boot /etc/fstab 光盤啟動,進入rescue模式 檢查/ blkid; fdisk -l mkdir /mnt/sda2 mount /dev/sda2 /mnt/sda2 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 rpm -ivh /mnt/cdrom/Packages/kernel-2*.rpm --replacepkgs|force grub-install /dev/sda vim /boot/grub/grub.conf default=0 timeout=3 title wanglinux root (hd0,0) kernel /vmlinuz.... root=/dev/sda2 initrd /initramfs . 實驗: 邏輯卷情況下,刪除/boot 和/etc/fstab, 恢復之 rm -rf /boot /etc/fstab 光盤啟動, 進入rescue模式 檢查 lvscan vgchange -ay 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 /dev/vg0/var /var reboot 光盤啟動, 進入rescue模式, 掛載/mnt/sysimage mkdir /mnt/cdrom mount /dev/cdrom /mnt/cdrom chroot /mnt/sysimage rpm -ivh /mnt/cdrom/Packages/kernel-2*.rpm --replacepkgs|force grub-install /dev/sda vim /boot/grub/grub.conf default=0 timeout=3 title wanglinux root (hd0,0) kernel /vmlinuz.... root=/dev/vg0/root initrd /initramfs .
原創文章,作者:forest,如若轉載,請注明出處:http://www.www58058.com/46148