啟動流程與內核管理

centos6和centos5啟動流程與內核管理,啟動過程中遇到的系統不能啟動,各個階段該怎么解決

Centos6和centos5

Linux: kernel+rootfs

kernel: 進程管理、內存管理、網絡管理、驅動程序、文件系統、安全功能

rootfs:程序和glibc

庫:函數集合, function, 調用接口(頭文件負責描述)

過程調用:procedure,無返回值

函數調用:function

程序:二進制執行文件

v

內核設計流派:

單內核(monolithic kernel):Linux

把所有功能集成于同一個程序

微內核(micro kernel):Windows, Solaris

每種功能使用一個單獨子系統實現?

 

Linux內核特點:/lib/modules

支持模塊化:.ko(內核對象)

如:文件系統,硬件驅動,網絡協議等

支持內核模塊的動態裝載和卸載

模塊查看:lsmod

模塊安裝:modprobe mod_name

模塊卸載:modprobe -r mod_name

Rmmod

組成部分:

核心文件:/boot/vmlinuz-VERSION-release

ramdisk:輔助的偽根系統,放置有一些必要的驅動模塊(破壞也會導致系統無法啟動)

CentOS 5: /boot/initrd-VERSION-release.img

CentOS 6,7: /boot/initramfs-VERSION-release.img

模塊文件:/lib/modules/VERSION-release(大多數放置位置)

 

啟動流程

Post加電自檢—-MBR引導(446B引導記錄+46B磁盤分區表+2B標記位)—-GRUB—-加載內核—-啟動init進程

?

Post-mbrstage1-stage1.5-stage2/boot/grub-grub.conf(kernel.initrd)-/sbin/init–/etc/inittab-id:N(啟動的默認級別)-/etc/rc.d/rc.sysinit(系統初始化腳本)-/etc/rc.d/rcN.d/service(服務腳本)-/etc/init.d-/etc/rc.d/rc.local(最后一個腳本)–login

?

?

CentOS6啟動流程

1.加載BIOS的硬件信息,獲取第一個啟動設備

2.讀取第一個啟動設備MBR的引導加載程序(grub)的啟動信息

3.加載核心操作系統的核心信息,核心開始解壓縮,并嘗試驅動所有的硬件設備

4.核心執行init程序,并獲取默認的運行信息

5.init程序執行/etc/rc.d/rc.sysinit文件

6.啟動核心的外掛模塊

7.init執行運行的各個批處理文件(scripts)

8.init執行/etc/rc.d/rc.local

9.執行/bin/login程序,等待用戶登錄

10.登錄之后開始以Shell控制主機

 

 

如果/boot/initramfs-$(uname -r).img $(uname -r)被誤刪除用以下命令恢復

ramdisk文件的制作:

(1) mkinitrd命令

為當前正在使用的內核重新制作ramdisk文件

mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)

(2) dracut命令

為當前正在使用的內核重新制作ramdisk文件

dracut /boot/initramfs-$(uname -r).img $(uname -r)

 

 

init程序的類型:

SysV: init, CentOS 5之前

配置文件:/etc/inittab

vUpstart: init,CentOS 6

配置文件:/etc/inittab, /etc/init/*.conf

vSystemd:systemd, CentOS 7

配置文件:/usr/lib/systemd/system

/etc/systemd/system

運行級別

/sbin/init ?centos之前

為系統運行或維護等目的而設定,0-6,7個級別

0:關機

1:單用戶模式(root自動登錄),single 維護模式

2:多用戶模式,啟用網絡功能,但不會啟動NFS

3:多用戶模式,正常模式,文本界面(字符界面)

4:預留級別:同3級別

5:多用戶模式,正常模式,圖形界面

6:重啟

默認級別:3(字符界面) ???5(圖形界面)

切換級別:init ?#

查看級別:runlevel ???或者 ???who ?-r

 

Centos6中/etc/inittab中定義了啟動的默認級別 ,修改為3,那么啟動的時候不加載圖形界面,直接進入字符界面。(centos7不起作用)

 

在系統啟動時,按任意鍵,看到系統進入一個界面,按a鍵進入編輯模式,可以定義用哪個界別進行啟動

 

/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##*:##運行次序;數字越小,越先運行;數字越小的服務,通常為被依賴到的服務

 

注:1、S*打頭的文件,為系統開啟服務的文件,K*打頭的文件,為系統關閉的服務文件

2、如果服務之間有依賴關系,如A依賴于B,那么開啟的時候,會先開啟所依賴的B服務,在開啟A服務,關閉的時候,則先關閉A服務,在關閉B服務

 

 

chkconfig命令 (操作服務)

v查看服務在所有級別的啟動或關閉設定情形:

chkconfig [–list] [name]

–add ?name ??添加

–del ?name ??刪除

–level ?LLLL:指定要設置的級別,省略時表示2345

–list name ??在0-6級別該服務的開啟狀態

 

Xinetd管理的服務

Xinetd命令:管理一些在使用到該服務時,喚醒該服務的功能

瞬態服務被xinetd進程所管理

配置文件:/etc/xinetd.conf ??/etc/xinetd.d/<service>

 

用chkconfig ?命令也可以管理瞬態服務的開啟和關閉

例: chkconfig ?atd ??off |on

 

/etc/rc.d/rc.local ?可以把需要開機啟動的服務放在這個文件下,計算機開機就會自動啟動,但是不能用service命令進行管理,可以kill #發送信號進行停止中斷

 

 

Centos啟動流程(grub)

在grub啟動時,分為三個階段,分別是1,1.5和2,階段,介紹一下3個階段

  • stage1:加載MBR,bootloader
  • Stage1——5:MBR之后的27個扇區,讓stage1中的BootLoader能夠識別stage2所在的分區上的文件系統
  • Stage2:讀取磁盤分區(/boot/grub/)

加載 / 需要找到/boot/grub/grub.conf 文件,若果丟失,系統無法啟動

 

 

Grub.conf文件

 

Password ?–encrypted ??STRING ????給用sha512算法給grub加密

 

實驗:編寫服務

  • 編寫服務腳本:vim ?testver

格式為:#!/bin/bash

#chkconfig : ?35 99 ?00(35為運行級別,99為開啟順序,開啟時最后開啟00為關閉順序,關閉時最先關閉)(開始號越大,關閉號則越小)

#description:This is a test service

Case ?$1 ?in

Start)

Echo ?testver ?is ?starting

;;

Stop)

Echo ?testver ?is ?stoping

;;

Restart)

Echo ?testver ?is ?stopped

Echo ?testver ?is ?starting

;;

Status)

[ -f ?/app/testver ?] && echo testver is running ?|| echo testver is stopped

  • 添加服務:

Chmod ?+x ?testver

Chkconfig ?–add ?testver

 

實驗:刪除內核文件,重新安裝

  • 進入/boot目錄,刪除文件vmlinuz-`uname -r`
  • Reboot
  • 掛載光盤進入救援模式
  • 創建目錄,將光盤掛載到該目錄下,

Mkdir ?/mnt/cdrom

Mount ?/dev/sr0 ?/mnt/cdrom

  • 拷貝光盤中的/isolinux/vmlinuz文件到/boot目錄下,并且改名

Cp ?/mnt/cdrom/isolinux/vmlinuz ?/mnt/sysimage/boot/vmlinuz-`uname -r`

  • 重啟就可以進入系統

 

實驗刪除initramfs文件

模擬/boot/initramfs-$(uname -r).img $(uname -r)文件被刪除,機器啟動不了,修復方法:

  • 在centos6上刪除/boot/initramfs-版本號.img 文件
  • 重啟系統
  • 光盤啟動,進入救援模式
  • 開啟一個shell,切換到根目錄 ,生成該文件

Chroot ??/mnt/sysimage

Mkinitrd /boot/initramfs-`uname -r`.img `uname -r`

  • exit,exit,重啟系統
  • 看到系統已經可以啟動

 

實驗:破壞MBR的前446個字節

  • 模擬破壞:dd ?if=/dev/zero ?of=/dev/sda ?bs=1 count=446
  • 查看破壞情況: hexdump -C ?-n ?512 ??可以看到已經全部為0

 

  • 重啟系統,可以看到系統直接進入光盤啟動頁面

 

  • 修復grub:

方法一:1、切根:chroot ?/mnt/sysimage

2、修復:grub-install ?–root-directory=DIR ?/dev/DISK

在這里–root-directory=DIR指的是boot分區的上一級目錄,因為boot分區的上一級目錄時/ 所以可以默認不謝,/dev/DISK指的是/boot所在的磁盤

Grub-install ?/dev/sda

方法二:1、輸入 ?grub

2、root ?(hd0,0)寫boot所在磁盤的位置

3、輸入 ??setup ?(hd0)硬盤所在位置

用方法二進行修復的時候,需要用到stage1文件,需要確保該文件存在

  • 重啟恢復

 

實驗:破壞1.5階段

  • 模擬破壞:dd if=/dev/zero of=/dev/sda bs=1 count=13000 skip=512 seek=512
  • 進入救援模式,修復grub
  • 切跟,執行grub-install ?/dev/sda 修復完成
  • 修復完成之后,記得sync同步,等一會兒,等數據寫完,在重啟
  • 重啟完成

 

實驗:在LVM中刪除boot目錄和/etc/fstab文件

 

  • 刪除rm -rf /boot ?/etc/fstab
  • 進入救援模式
  • Lvdisplay 可以看到邏輯卷處于不可活動的狀態
  • 激活LVM, ??#:vgchange ?-ay ??; lvdisplay ?可以看到已經激活
  • 掛載邏輯卷

Mount ?/dev/VolGroup/lv_root ?/mnt/root

  • 編輯/etc/fstab文件,將/掛載

/dev/VolGroup/lv_root ??/ ??ext4 ?defaults ?0 ?0

/dev/sda1 ?/boot ?ext4 ?defaults ?0 ?0

  • 將系統重啟,并且進入救援模式,可以看到已經可以切換根目錄了
  • 將安裝光盤進行掛載,掛載的時候會提示錯誤,是因為此時目錄為只讀模式,需要重新掛載為rw模式才可以使用

Mount ?-o ?remount,rw ?/mnt/sysimage

Mount ?/dev/cdrom ?/mnt/cdrom

  • 掛載光盤完成后,就可以安裝內核包

Rpm ?-ivh ?/mnt/cdrom/Package/kernel-XXX.rpm –root=/mnt/sysimage –force

  • 此時切換根,進入/boot目錄,可以看到一些文件已經安裝成功
  • 接下來,需要安裝gurb 文件,

Grub-install ?/dev/sda

安裝完成后,記得等一段時間,敲幾遍syne ?等數據寫入完成

  • 下面還缺失一個關鍵性文件,需要我們手動來建立,那就是conf

文件內容如下:

Default=0

Timeout=3

Title=yan

Kernel ?/vmlinuz-版本號 ??root=/dev/VolGroup/lv_root

Initrd ?/initramfs-版本號.img

保存退出

  • 重啟系統,可以看到系統修復完成,已經可以登錄
  • 將swap分區掛載

/dev/mapper/VolGroup/lv_swap ?swap ?swap ?defaults 0 ?0

掛載完成,用free命令查看,可以看到swap大小

 

 

/procmulu

內核把自己內部狀態信息及統計信息,以及可配置參數通過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

  • 設置參數

Sysctl ?-w ?parameter=VALUE

  • 通過讀取配置文件設置參數

Sysctl ?-p ?[/path/to/conf_file]

  • 查看所有生效參數

Sysctl ?-a

 

常用的幾個參數:

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目錄下

 

編譯安裝內核

  • 模塊之間存在依賴性

 

 

 

內核組成部分:1、放在vmlinuz-版本號-release中

2、放在/lib/modules/版本號-內核架構中

 

運行中的內核命令:uname

Uname ?-r :顯示內核版本

-n:顯示節點號

-a:顯示所有信息

lsmod命令:

顯示由核心已經裝載的內核模塊

顯示的內容來自于: /proc/modules文件

vmodinfo命令:

顯示模塊的詳細描述信息?

modinfo [ -k kernel ] [ modulename|filename… ]

-n: 只顯示模塊文件路徑

-p: 顯示模塊參數

-a: author 作者

-d: description 描述

-l: license 許可證

lsmod |grep xfs;modinfo xfs

 

裝載或卸載內核模塊

modprobe命令:

 

vmodprobe [ -C config-file ] [ modulename ] [ module parame-ters… ]

v配置文件:/etc/modprobe.conf, /etc/modprobe.d/*.conf

vmodprobe [ -r ] modulename.?

 

depmod命令:

內核模塊依賴關系文件及系統信息映射文件的生成工具

裝載或卸載內核模塊:

vinsmod命令:指定模塊文件,不自動解決依賴模塊

insmod [ filename ] [ module options… ]

insmod `modinfo –n exportfs`

lnsmod `modinfo –n xfs`

vrmmod命令:卸載模塊

rmmod [ modulename ]

rmmod xfs

rmmod exportfs

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/90780

(0)
燕李鵬燕李鵬
上一篇 2018-01-02 09:21
下一篇 2018-01-02 18:42

相關推薦

  • 第二周作業

    作業

    Linux干貨 2018-03-20
  • 第一周作業-02

    Linux的命令格式 命令的語法通用格式:    ~]# COMMAND OPTIONS ARGUMENTS        COMMAND: 發起一命令:請求內核將某個二進制程序運行為一個進程;            程序 –&…

    Linux干貨 2016-09-19
  • 淺談DNS基本原理以及實現方法(二)

             DNS作為互聯網服務的一個基礎型服務,了解和掌握DNS服務的原理和配置將是每一個運維人員必備的技能,這就如同闖蕩江湖的俠客不但要有的招式,還要懂的運用這些招式的心法一樣,接下來我將從DNS的正反向解析、主從同步、子域授權以及Bind view這四個方面來揭開它神…

    Linux干貨 2015-12-19
  • 2016/08/21:shell遺留select,包管理器rpm,yum

    select:搭配case更好的顯示選項     這個命令用來創建菜單,按數字排列,并等待用戶輸入,輸入對應數字,執行相應操作,更清楚明了     普通版:select var in list        &…

    Linux干貨 2016-08-24
  • 基于mysql的數據庫分析系統(rsyslog)

    rsyslog:日志收集和存儲系統 1.事件在電腦中的日志記錄格式為:     日期時間 主機 進程[pid]:事件內容 2.rsyslog的特性:     多線程;     UDP,TCP,SSL/TLS,RELP; &nbsp…

    Linux干貨 2016-10-23
  • 八.Linux博客-2016年8月8日sed、vim

    格式說明: 操作 概念 命令 說明及舉例 八.sed、vim sed 文本編輯工具 行編輯器,每次取出一行在內存里處理,處理完成后屏幕打印。完成后再取出一行放到內存里處理,覆蓋原來內存中的行,循環。。 sed -n '3d' f1 把文件f1中的第三行刪掉并不在屏幕上顯示 sed -n&n…

    Linux干貨 2016-08-24
欧美性久久久久