一天一看————Linux引导过程与服务控制
Linux引導過程與服務控制
- Linux操作系統引導過程
- 系統初始化進程
- Systemd單元類型
- Systemd運行級別
- 修復MBR扇區故障
- 排除啟動類故障
- 修復GRUB引導故障
- 修復GRUB引導故障操作
- 遺忘root用戶密碼
- 遺忘root 用戶的密碼操作
- 系統服務控制
- Linux系統的運行級別
- 優化啟動過程
- ntsysv 工具
- systemctl / chkconfig工具
- 總結
Linux操作系統引導過程
??????????????? 開機自檢
服務器主機開機以后,將根據主板BIOS中的設置對CPU、內存、顯卡、鍵盤等設備進行初步檢測,檢測成功后根據預設的啟動順序移交系統控制權,大多時候會移交給本機硬盤。
| 總結:檢測出第一個能夠引導系統的設備,比如硬盤或者光驅 |
當從本機硬盤中啟動系統時,首先根據硬盤第.一個扇區中MBR(主引導記錄)的設置,將系統控制權傳遞給包含操作系統引導文件的分區;或者直接根據MBR記錄中的引導信息調用啟動菜單(如GRUB)。
| 總結:運行放在MBR扇區里的啟動GRUB引導程序 |
對于Linux操作系統來說,GRUB(統一啟動加載器)是使用最為廣泛的多系統引導器程序。系統控制權傳遞給GRUB以后,將會顯示啟動菜單給用戶選擇,并根據所選項( 或采用默認值)加載Linux內核文件,然后將系統控制權轉交給內核。
Centos 7采用的是GRUB2 啟動引導器。
| 總結:GRUB引導程序通過讀取GRUB配置文件/boot/grub2/grub.cfg,來獲取內核和鏡像文件系統的設置和路徑位置 |
Linux內核是–個預先編譯好的特殊二進制文件,介于各種硬件資源與系統程序之間,負責資源分配與調度。內核接過系統控制權以后,將完全掌控整個Linux操作系統的運行過程。
Centos 7系統中,默認的內核文件位于“/boot/vmlinuz-3.10.0-514.el7.x86_ _64"。
| 總結:把內核和鏡像文件系統加載到內存中 |
為了完成進一步的系統引導過程,Linux內 核首先將系統中的“/ sbin/init"程序加載到內存中運行(運行中的程序稱為進程),第一個被加載的進程就是init。init進程負責完成整個系統的初始化,最后等待用戶進行登錄。
| 總結:加載硬件驅動程序,內核把init進程加載到內存中運行 |
系統初始化進程
init進程
●由Linux內核加載運行/sbin/init程序
●oinit進程是系統中第一個進程, 是所有進程的父進程
●oinit進程的PID (進程標記)號永遠為1
Systemd
●Systemd是Linux操作系統的一種init軟件
●CentOS7中采用全新的Systemd啟動方式,取代傳統的SysVinit
●CentOS7中運行的第一個init進程 是/lib/systemd/systemd
| 傳統SysVinit依賴于串行執行Shell 腳本啟動服務,導致效率低下,系統啟動速度較慢 |
| systemd能夠將更多的服務進程并行啟動,并且具有提供按需啟動服務的能力,使得啟動更少進程,從而提高系統啟動速度。 |
Systemd單元類型
| Service | . service | 描述一個系統服務 |
| Socket | .socket | 描述一個進程間通信的套接字(IP+端口) |
| Device | .device | 描述- -個內核識別的設備文件 |
| Mount | .mount | 描述一個文件系統的掛載點 |
| Automount | .automount | 描述一個文件系統的自動掛載點 |
| Swap | .swap | 描述一個內存交換設備或交換文件 |
| Path | .path | 描述一個文件系統中文件或目錄 |
| Timer | .timer | 描述一個定時器 (用于實現類似cron的調度任務) |
| Snapshot | .snapshot | 用于保存一個systemd的狀態 |
| Scope | .scope | 使用systemd的總線接口以編程的方式創建外部進程 |
| Slice | .slice | 描述居于Cgroup的一-組通過層次組織的管理系統進程 |
| Target | .target | 描述- -組systemd的單元 |
Systemd運行級別
| 0 | target | 關機狀態,使用該級別時將會關閉主機 |
| 1 | rescue.target | 單用戶模式,不需要密碼驗證即可登錄系統,多用于系統維護 |
| 2 | multi-user. target | 用戶定義/域特定運行級別。默認等同于3 |
| 3 | multi-user.target | 字符界面的完整多用戶模式,大多數服務器主機運行在此級別 |
| 4 | multi-user.target | 用戶定義/域特定運行級別。默認等同于3 |
| 5 | graphical.target | 圖形界面的多用戶模式,提供了圖形桌面操作環境 |
| 6 | reboot.target | 重新啟動,使用該級別時將會重啟主機 |
修復MBR扇區故障
故障原因
●病毒、木馬等造成的破壞
●不正確的分區操作、磁盤讀寫誤操作
故障現象
●找不到引導程序,啟動中斷
●無法加載操作系統,開機后黑屏
解決思路
●應提前作好備份文件
●以安裝光盤引導進入急救模式
●從備份文件中恢復
排除啟動類故障
MBR位于第一塊硬盤( /dev/sda) 的第一一個物理扇區處,總共512字節
1.備份MBR扇區數據到其它磁盤( /dev/ sdb1 )
mkdir /backup 分區 mount /dev/ sdb1 /backup 掛載 dd if=/dev/sda of=/backup/mbr .bak bs=512 count=1從一個文件中取出相關數據移到另一個目錄文件中
2.模擬破壞MBR引導扇區
3.引導界面進入急救模式,從備份文件中恢復MBR扇區數據
先加載好光盤鏡像,重啟操作系統當出現安裝向導界面時,選擇"Troubleshooting"選項,再選擇“Rescue a CentOS Linux system"選項,進入急救模式選擇“1”選擇Continue并按Enter 鍵繼續再次按Enter 鍵后將進入帶“sh-4.2#"提示符的Bash Shell 環境sh-4.2# mkdir /backupdirsh-4.2# mount /dev/ sdb1 /backupdir 掛載帶有備份文件的分區sh-4.2# dd if=/backupdir/mbr .bak of=/dev/ sda 恢復備份數據sh-4.2# exit 執行exit命令退出臨時Shell環境,系統將會自動重啟
修復GRUB引導故障
故障原因
●MBR中的GRUB弓|導程序遭到破壞
●grub.conf文件丟失、引導配置有誤
故障現象
●系統引導停滯,顯示“grub>”提示符
解決思路
●嘗試手動輸入引導命令
●進入急救模式,重寫或者從備份中恢復grub.conf
●向MBR扇區中重建grub程序
修復GRUB引導故障操作
/boot/grub/ 目錄下的包是用于啟動菜單的背景圖片及樣式
/boot/grub2/grub. cfg GRUB配置文件
方法一:手動輸入引導命令(笨拙繁瑣,不建議使用)
grub> insmod xfs 加載指定的模塊到內核 grub> linux16 /vmlinuz-3.10.0-693.el7 .x86_ 64 root=UUID=8 fd74986-ae66-4ffd-b7d8-a19f2eca7b6f ro rhgb quiet LANG=zh CN. UTF-8 內核的名字及位置等信息 grub> initrd16 /initramfs-3.10.0-693.el7.x86_ _64. img 鏡像系統文件 grub> boot 引導boot方法二:進入急救模式,恢復GRUB引導程序
MBR位于第一 塊硬盤( /dev/sda) 的第一 個物理扇區處,總共512字節,前446字節是主引 導記錄,分區表保存在MBR扇區中的第447-510字節中。 mkdir /bak mount /dev/ sdb1 /bak dd if=/dev/sda of=/bak/grub.bak bs=446 count=1|模擬對MRB中的GRUB引導程序的破壞,但并不破壞分區表 dd if=/dev/zero of=/dev/sda bs=446 count=1引導界面進入急救模式,從備份文件中恢復GRUB引導程序 sh-4.2# mkdir /gt sh-4.2# mount /dev/sdb1 /gt sh-4.2# dd if=/gt/grub . bak of=/dev/sda sh-4.2# exit
方法三:引導界面進入急救模式,重建GRUB菜單配置文件
rm -rf /boot/grub2/grub.cfg 進入急救模式,加載光盤鏡像,切換到系統根環境 sh-4.2# chroot /mnt/ sysimage重新將GRUB引導程序安裝到第一塊硬盤( /dev/sda)的MRB扇區,如果有多個分區可省略 bash-4.2# grub2-install /dev/ sda重新構建GRUB菜單的配置文件 bash-4.2# grub2-mkconfig -o /boot/grub2/grub. cfg退出chroot環境,并重啟 bash-4.2# exit sh-4.2# reboot
遺忘root用戶密碼
故障原因
遺忘root用戶的密碼
故障現象
無法進行需要root權限的管理操作
若沒有其他可用帳號,將無法登錄系統
解決思路
進入急救模式,重設密碼
遺忘root 用戶的密碼操作
進入急救模式,加載系統鏡像,切換到系統根環境 sh-4.2# chroot /mnt/ sysimage重設root用戶密碼 bash-4.2# passwd root| init0 | sys temctl isolate poweroff.target systemctl poweroff poweroff |
| init 1 | systemctl isolate rescue. target |
| init 3 | systemctl isolate multi -user. target |
| init 5 | systemctl isolate graphical. target |
| init 6 | systemctl isolate reboot. target systemctl reboot reboot |
| 使用以上可以在命令可以在數字界面和圖形界面登錄 |
系統服務控制
系統服務控制
systemctl?控制類型?服務名稱
控制類型
| start | 啟動 |
| stop | 停止 |
| restart | 重新啟動 |
| reload | 重新加載 |
| status | 查看服務狀態 |
Linux系統的運行級別
查看運行級別
runlevel命令
| runlevel只能查看切換運行級別與當前運行級別 |
systemctl工具
| systemctl時能查看默認的運行級別 |
臨時切換運行級別
init命令
| init的命令是運行級別所對應的數字 |
ststemctl工具
| systemctl的命令參數是具體的target |
設置永久運行級別
ln -sf /lib/systemd/system/ multi-user. target /etc/systemd/system/ default. target 或 systemctl set-default multi -user. target
優化啟動過程
ntsysv 工具
提供一個交互式、可視化窗口
可以在字符終端運行
便于集中管理多個服務
用于控制服務是否開機自啟動
systemctl / chkconfig工具
systemctl是centos7出來的工具
chkconfig是centos5和centos6使用的工具
不提供交互式、可視化窗口
管理單個服務效率更高
查看系統服務的啟動狀態
systemctl is-enabled 服務名稱
設置系統服務的啟動狀態
systemctl enable 服務名稱 ?開啟開機自啟動
systemctl disable 服務名稱?關閉開機自啟動
chkconfig工具
格式
chkconfig -- list [服務名稱] chkconfig --add 服務名稱 chkconfig --level 級別列表服務名on/off chkconfig --add httpd chkconfig --level 35 httpd on 開啟運行級別永久修改主機名
hos tnamectl set-hostname newname查看主機名的狀態
hos tnamectl status設置系統語言為中文
localectl set-locale LANG=zh CN. utf8查看當前系統使用的語言
localectl [status]查看系統啟動耗時
systemd-analyze總結
init運行級別的了解給我更直觀的去了解Linux的操作。引導文件修復幫我們對于文件故障后進行有效的修復和找回,為我們一些誤操作提供的有效的解決辦法。進行密碼找回可以對我們日后在操作中忘記密碼有著便捷式的快速解決辦法。系統服務控制可以更直接的對于運行級別的切換操作和對默認狀態的查看
總結
以上是生活随笔為你收集整理的一天一看————Linux引导过程与服务控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Defensive Programmin
- 下一篇: 携程App网络服务通道治理和性能优化