啟動流程與內核管理

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
下一篇 2018-01-02

相關推薦

  • linux初期了解

    計算機的組成及其功能 計算機有運算器,控制器,存儲器,輸出設備和輸入設備組成: 1.運算器:運算器又稱算術邏輯單元(Arithmetic Logic Unit簡稱ALU)。它是計算機對數據進行加工處理的部件,包括算術運算2.控制器:控制器負責從存儲器中取出指令,并對指令進行譯碼 3.存儲器:存儲器是計算機記憶或暫存數據的部件。 4.輸入設備:輸入設備是給計算…

    Linux干貨 2016-10-30
  • 磁盤分區、軟RAID創建及shell腳本參數傳遞,for循環,運算表達式應用 1、創建一個10G分區,并格式為ext4文件系統。 先使用fdisk工具創建一個10G的新分區。使用fdisk打開要創建磁盤分區的物理設備fdisk /dev/sdb,然后使用n指令創建新的分區,分區類型選此處選擇為主分區,第一個柱面使用默認的1,最后的柱面,使用+10G這種表示方…

    Linux干貨 2016-12-26
  • 7.磁盤及文件系統管理

    1、創建一個10G分區,并格式為ext4文件系統; (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl; (2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; [root@localhost ~]# fdisk /dev/sd…

    Linux干貨 2017-08-21
  • iptables練習

    iptables實戰 1.開啟防火墻 systemctl start firewalld 2.清空所有的默認規則,定義自己的規則 iptables -F 查看此時的iptables iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD…

    2015-03-15
  • 馬哥教育網絡班21期第3周課程練習

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 who | cut -d" " -f 1 |sort |uniq 2、取出最后登錄到當前系統的用戶的相關信息。 last | head -…

    Linux干貨 2016-07-29
  • 7.22_Linux入門和幫助文件的使用

    Linux系統登錄的兩種方式 GUI:圖形界面 Graphic User Interface 默認在Linux下面有三種可用的圖形界面程序可選,分別為 1.gnome(c,圖形庫gtk) 2.kde(c++,圖形庫qt) 3.xface(輕量級桌面) 每一種圖形界面下面開發的軟件并不兼容,因為它們開發時候所用的開發語言也各不相同 啟動方式:cli模…

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