系統啟動流程與GRUB管理

系統啟動流程:

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

(0)
forestforest
上一篇 2016-09-13
下一篇 2016-09-13

相關推薦

  • Python 課堂筆記

    第二天

    Linux干貨 2018-03-21
  • N21沉舟14周作業

    系統的INPUT和OUTPUT默認策略為DROP; iptables -P INPUT DROP iptables -P OUTPUT DROP 1、限制本地主機的web服務器在周一不允許訪問;新請求的速率不能超過100個每秒;web服務器包含了admin字符串的頁面不允許訪問;web服務器僅允許響…

    Linux干貨 2016-11-14
  • rrdtool學習筆記

    一、前言 為了做云緩存平臺的技術儲備,從零開始學習了rrdtool,rrdtool非常強大,剛接觸會有摸不著邊的感覺,尤其是一堆概念性的東西。學習的切入點便是這些概念,一一理解后你才能品嘗到rrdtool的清香,首先要感謝ailms整理的“RRDtool簡體中文教程v1.01”,通俗易懂的概況了rrdtool的所有知識。現在整理自己在學習過程中的一些筆記。 …

    2015-03-21
  • Linux文件系統管理

    Linux文件系統: ext2, ext3, ext4, xfs, btrfs, reiserfs, jfs, swap swap: 交換分區(虛擬內存) 光盤: iso9660       windows: fat32, NTFS       Unix: FFS, U…

    Linux干貨 2016-08-15
  • 文本處理grep

    grep:文本過濾(模式:pattern)工具grep, egrep, fgrep【適合處理比較大的文本】(不支持正則表達式搜索) sed:stream editor,文本編輯工具 awk:Linux上的實現gawk,文本報告生成器 grep(Global search 全局搜索 Regular expression 正則表達式 and Print out …

    Linux干貨 2017-05-09
  • sed 文本處理工具介紹

    sed簡介: 文本處理三劍客之一的sed sed是一種行編輯器,它一次處理一行內容,本身是一個管道命令,對行的數據進行 替換 增加 刪除 選取的工作 sed的命令為:sed[opition] ‘script’ inputfile…             &nbs…

    2017-06-24
欧美性久久久久