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