理論:引導過程與服務控制 (解決忘記root問題、解決不能正常開機的問題)

前言:

學習引導過程,排除啓動類故障,服務控制及切換運行級別,優化啓動過程;重點了解修復MBR扇區,gurb菜單,root密碼重置,優化開機啓動

一: 引導過程總覽

序號 步驟 解釋
1 開機自檢(BIOS) 1.加電自檢(服務器例外,當服務器通電時,風扇會先轉一圈),自檢硬件設備是否完好無損 2.加載驅動
2 MBR引導 去找系統盤內的MBR去啓用
3 GRUB菜單 選擇系統去啓用(系統例如雙系統、急救系統等)
4 加載內核(kernel) 內核就是系統的核心部分,即加載內核去運行系統
5 init進程 初始化 PID=1,初始化包含把之前的緩存數據全部清空、恢復默認,然後再次加載其他的程序

啓動類型(優先級從<到n):自動,自動(延遲啓動,即開機後自啓動),手動,禁用

二 : init 進程

2.1 init 進程

  • 由Linux內核加載運行 /sbin/init 程序
  • 是系統中第一個進程
  • PID(進程標記)號永遠爲1

/sbin/init 中的sbin是一個軟連接,並不是一個目錄

[root@localhost /]# ls -al  '查看sbin和bin'
總用量 32
dr-xr-xr-x.  18 root root  249 11月 12 19:02 .
dr-xr-xr-x.  18 root root  249 11月 12 19:02 ..
drwxr-xr-x.   2 root root    6 11月  5 12:17 abc
lrwxrwxrwx.   1 root root    7 10月 23 13:35 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 10月 23 13:41 boot
drwxr-xr-x.  20 root root 3300 11月 13 10:00 dev
drwxr-xr-x. 138 root root 8192 11月 13 13:36 etc
drwxr-xr-x.   5 root root   45 11月 13 08:53 home
lrwxrwxrwx.   1 root root    7 10月 23 13:35 lib -> usr/lib
lrwxrwxrwx.   1 root root    9 10月 23 13:35 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6 11月  5 2016 media
drwxr-xr-x.   2 root root    6 11月  5 2016 mnt
drwxr-xr-x.   8 root root  150 11月 12 17:33 opt
dr-xr-xr-x. 203 root root    0 11月 13 10:00 proc
-rw-r--r--.   1 root root    4 11月 13 14:06 ps.txt
dr-xr-x---.  14 root root 4096 11月 13 10:01 root
drwxr-xr-x.  42 root root 1260 11月 13 13:36 run
'lrwxrwxrwx.   1 root root    8 10月 23 13:35 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6 11月  5 2016 srv
dr-xr-xr-x.  13 root root    0 11月 13 10:00 sys
drwxrwxrwt.  27 root root 4096 11月 13 14:04 tmp
drwxr-xr-x.  13 root root  155 10月 23 13:35 usr
drwxr-xr-x.  22 root root 4096 11月  5 23:09 var

三 : Systemd 單元類型

理論:引導過程與服務控制 (解決忘記root問題、解決不能正常開機的問題)

單元類型 關鍵信息
Service 文件所在位置: /lib/systemd/system/*./service
Socket 套接字,即通信協議的一個載體、介質,開發者去寫的,比如在myscl安裝時需要用到
Device 設備文件 塊設備(負責存儲)和字符設備(負責輸入輸出)
Mount 掛載點
Automount 自動掛載
Swap 交換空間,必要組件
Path 路徑(PATH是變量,使用時用echo $PATH)
Timer 定時器,比如cron設置週期性計劃需要調取定時器
Snapshot 保存狀態,即快照功能
Scope 外部進程
Slice 管理進程
Target 目標服務

四 :運行init 級別所對應的Systemd目標 (centos 7)

理論:引導過程與服務控制 (解決忘記root問題、解決不能正常開機的問題)

五 : 修復MBR扇區故障

5.1 故障原因

  • 病毒、***等造成的破壞
  • 不正確的分區操作、磁盤讀寫誤操作

5.2 故障現象

  • 找不到引導程序,啓動中斷
  • 無法加載操作系統,開機後黑屏

5.3 解決思路

  • 未雨綢繆,養成習慣,提前做好備份文件
  • 以安裝光盤的形式去引導進入急救模式
  • 從備份文件中恢復

5.4 實驗:模擬MBR扇區故障,然後去進行修復

思路:

修復MBR(另一種是GPT)扇區故障

一個扇區512字節

MBR中存有文件元信息(屬性,位置)還有系統的引導文件;文件數據信息(具體內容)存放在磁盤的別的位置

步驟:

1:先備份MBR扇區數據

1)加一塊硬盤做備份sdb,分區,格式化,掛載

理論:引導過程與服務控制 (解決忘記root問題、解決不能正常開機的問題)

[root@localhost ~]# init 6  '重啓'
[root@localhost ~]# fdisk /dev/sdb  '給sdb備份盤分區'
歡迎使用 fdisk (util-linux 2.23.2)。

更改將停留在內存中,直到您決定將更改寫入磁盤。
使用寫入命令前請三思。

Device does not contain a recognized partition table
使用磁盤標識符 0x99e92b15 創建新的 DOS 磁盤標籤。

命令(輸入 m 獲取幫助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分區號 (1-4,默認 1):
起始 扇區 (2048-41943039,默認爲 2048):
將使用默認值 2048
Last 扇區, +扇區 or +size{K,M,G} (2048-41943039,默認爲 41943039):
將使用默認值 41943039
分區 1 已設置爲 Linux 類型,大小設爲 20 GiB

命令(輸入 m 獲取幫助):p

磁盤 /dev/sdb:21.5 GB, 21474836480 字節,41943040 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標籤類型:dos
磁盤標識符:0x99e92b15

   設備 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    41943039    20970496   83  Linux
命令(輸入 m 獲取幫助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盤。

[root@localhost ~]# mkfs.xfs /dev/sdb1  '格式化'
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=1310656 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5242624, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]# mkdir /beifen   '創建掛載點'
[root@localhost ~]# mount /dev/sdb1 /beifen '掛載'
[root@localhost ~]# cd /beifen
[root@localhost beifen]# ls
[root@localhost beifen]# 

2)然後備份過去

[root@localhost beifen]# dd if=/dev/sda of=/beifen/MBR.sda.bak bs=512 count=1   
'運用dd命令去把/dev/的sda磁盤的MBR備份,注意,不是sba1'
記錄了1+0 的讀入
記錄了1+0 的寫出
512字節(512 B)已複製,0.000550469 秒,930 kB/秒
[root@localhost beifen]# ls '查看'
MBR.sda.bak

2:模擬故障

[root@localhost beifen]# dd if=/dev/zero of=/dev/sda bs=512 count=1 
'依舊運用dd,去把MBR覆蓋'
記錄了1+0 的讀入
記錄了1+0 的寫出
512字節(512 B)已複製,0.000125984 秒,4.1 MB/秒
[root@localhost ~]# init 6  '重啓'

然後出現了報錯

理論:引導過程與服務控制 (解決忘記root問題、解決不能正常開機的問題)

3:加載系統鏡像文件中的急救模式

1)先把鏡像放進去

理論:引導過程與服務控制 (解決忘記root問題、解決不能正常開機的問題)

2)在讀條的時候按esc進入boot

理論:引導過程與服務控制 (解決忘記root問題、解決不能正常開機的問題)

選第三個troubleshooting

理論:引導過程與服務控制 (解決忘記root問題、解決不能正常開機的問題)

選擇Rescue a CentOS system

理論:引導過程與服務控制 (解決忘記root問題、解決不能正常開機的問題)

3)加載,加載完畢

理論:引導過程與服務控制 (解決忘記root問題、解決不能正常開機的問題)

選第一個continue,連接

理論:引導過程與服務控制 (解決忘記root問題、解決不能正常開機的問題)

然後就可以回車鍵入命令

4:把備份數據做恢復處理

1)此時進入的系統是鏡像文件中的系統,並不是電腦中的系統,這裏重新創建掛載點,把含有備份文件的磁盤掛載上去,依舊運用dd命令去將備份數據覆蓋上去

理論:引導過程與服務控制 (解決忘記root問題、解決不能正常開機的問題)

然後reboot進行重啓

理論:引導過程與服務控制 (解決忘記root問題、解決不能正常開機的問題)

成功

理論:引導過程與服務控制 (解決忘記root問題、解決不能正常開機的問題)
小結:

1:備份mbr扇區數據
1)加一塊硬盤做備份sdb
分區--》格式化---》掛載/abc
2)dd if=/dev/sda of=/abc/sda.mbr.bak bs=512 count=1

2:模擬故障

dd if=/dev/zero of=/dev/sda bs=512 count=1

3:加載系統鏡像文件中的急救模式

加載系統鏡像文件中的內核界面

4:把備份數據做恢復處理

mkdir /aaa

mount /dev/sdb1 /aaa

dd if=/aaa/sda.mbr.bak of=/dev/sda bs=512 count=1

六 :修復GRUB引導故障

6.1 故障原因

  • MBR中的GRUB引導程序遭到破壞
  • grub,conf文件丟失、引導配置有誤

6.2 故障現象

  • 系統引導停滯,顯示“grub>”提示符

6.3 解決思路

  • 嘗試手動輸入引導命令(100多行,嫌麻煩的就別手輸了,瞭解即可)
  • 進入急救模式,重寫或者從備份中恢復grub.conf(即加載鏡像文件中的備份)
  • 向MBR扇區中重建grub程序

6.4 實驗:grub菜單故障恢復

思路:

1.使用系統急救模式進入命令字符界面

2.加載鏡像中的的系統進入bash環境

3.重新構建grub菜單系統

4.重啓

步驟

1.先查看下grub所在的文件位置

[root@localhost ~]# cd /boot    '切換到/boot'
[root@localhost boot]# ls
config-3.10.0-693.el7.x86_64
efi
grub
grub2
initramfs-0-rescue-33c124456fa34c50a98483245dfea58d.img
initramfs-3.10.0-693.el7.x86_64.img
initrd-plymouth.img
symvers-3.10.0-693.el7.x86_64.gz
System.map-3.10.0-693.el7.x86_64
vmlinuz-0-rescue-33c124456fa34c50a98483245dfea58d
vmlinuz-3.10.0-693.el7.x86_64
[root@localhost boot]# ls grub/
splash.xpm.gz
[root@localhost boot]# ls grub2/
device.map  fonts  grub.cfg('配置文件')  grubenv  i386-pc  locale
[root@localhost boot]# 

可以查看下grub.cfg文件

[root@localhost grub2]# vim grub.cfg 

 22 
 23 if [ x"${feature_menuentry_id}" = xy ]; then
 24   menuentry_id_option="--id"
 25 else
 26   menuentry_id_option=""
 27 fi
 28 
 29 export menuentry_id_option
 30 
 31 if [ "${prev_saved_entry}" ]; then
 32   set saved_entry="${prev_saved_entry}"
 33   save_env saved_entry
 34   set prev_saved_entry=
 35   save_env prev_saved_entry
 36   set boot_once=true
 37 fi
 38 
 39 function savedefault {
 40   if [ -z "${boot_once}" ]; then
 41     saved_entry="${chosen}"
 42     save_env saved_entry
 43   fi
 44 }

這個配置文件就是需要手動輸入的,不忙的同學實在想嘗試的話可以背下來手動輸入

把grub.cfg配置文件刪除,然後重啓測試一波

[root@localhost grub2]# rm -rf grub.cfg 
[root@localhost grub2]# ls
device.map  fonts  grubenv  i386-pc  locale
[root@localhost grub2]# init 6

2.沒有進入系統,出現了手動輸入grub的界面

理論:引導過程與服務控制 (解決忘記root問題、解決不能正常開機的問題)

進入急救模式,依舊是依靠鏡像文件,把鏡像文件掛載好,esc進入(在讀取系統時就要去按,眼疾手快)

理論:引導過程與服務控制 (解決忘記root問題、解決不能正常開機的問題)

選擇第三個CD-ROM Drive

跟MBR一樣,先進入troubleshooting,後進入Rescue a centos system,選擇1)continue

裏面讓用戶run the command(運行這個命令):chroot /mnt/sysimage去進入鏡像文件中的系統

輸入chroot /mnt/sysimage 命令就會從sh切換到bash

理論:引導過程與服務控制 (解決忘記root問題、解決不能正常開機的問題)

重新構建grub2

grub2-install /dev/sda 給sda系統盤安裝grub2

grub2-mkconfig -o /boot/grub2/grub.cfg 緊跟的這個指令指創建配置文件,指定位置是/boot/grub2/grub/cfg(也就是最開始刪掉cfg的目錄)

exit 保存

保存完成,reboot重啓

理論:引導過程與服務控制 (解決忘記root問題、解決不能正常開機的問題)

理論:引導過程與服務控制 (解決忘記root問題、解決不能正常開機的問題)

解決問題

小結:

1:使用系統急救模式進入命令字符界面

2:加載鏡像中的系統進入bash環境

chroot /mnt/sysimage

3:重新構建grub菜單系統

grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg

exit

reboot

七 : 遺忘root密碼

7.1 故障原因

  • 遺忘root用戶的密碼

7.2 故障現象

  • 無法進行需要root權限的管理操作
  • 若沒有其他可用賬號,將無法登陸系統

7.3 解決思路

  • 進入急救模式,重設密碼

7.4 實驗

步驟:

1.加載鏡像系統

esc 進鏡像,依舊進入急救模式

2.直接改密碼

選擇1

chroot /mnt/sysimage/ 進入系統

直接輸入passwd root 就可以修改密碼

記得exit保存

理論:引導過程與服務控制 (解決忘記root問題、解決不能正常開機的問題)

reboot重啓,測試密碼

小結:

1:加載鏡像系統
chroot /mnt/sysimage

2:直接改密碼
passwd root
輸入密碼

八 : 系統服務控制

8.1 系統服務控制

  • 常用方式
[root@localhost ~]# systemctl  控制類型 服務名稱
  • 控制類型
    • start: 啓動
    • stop: 停止
    • restart: 重新啓動(會中斷服務,相當於先stop,後start)
    • reload: 重新加載(會重新加載配置文件,不會中斷)
    • status: 查看服務狀態
    • ......

九:Linux系統的運行級別

9.1 查看運行級別

  • runlevel命令
  • systemctl工具

9.2 臨時切換運行級別

  • init命令(命令參數是運行級別所對應的數字)
  • systemctl工具(命令參數是具體的target)
[root@localhost ~]# runlevel    '查看運行級別'
N 5 'N處的位置代表上一個運行的級別'
[root@localhost ~]# init 3
[root@localhost ~]# init 5
[root@localhost ~]# runlevel
3 5

一般都是在35界別進行相互切換

十 : 優化啓動過程

10.1 系統服務管理工具

  • ntsysv工具(僞圖像化界面)
    • 提供一個交互式、可視化窗口
    • 可以在字符終端運行
    • 便於集中管理多個服務
  • systemctl 工具
    • 不提供交互式、可視化窗口
    • 管理單個服務效率更高
[root@localhost ~]# ntsysv 

帶星號的會開機自啓動

空格可以添加去掉星號

tab鍵可以切換界面

[root@localhost ~]# rpm -q httpd    
httpd-2.4.6-90.el7.centos.x86_64
[root@localhost ~]# netstat -ntap | grep 80 '查看80端口的網絡狀態'
tcp        0      0 192.168.139.152:59860   117.78.24.34:80         TIME_WAIT   -                   
tcp        0      0 192.168.139.152:59862   117.78.24.34:80         TIME_WAIT   -                   
[root@localhost ~]# systemctl start httpd   '開啓httpd'
[root@localhost ~]# netstat -ntap | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      4863/httpd          

設置自啓動不會影響工具目前的運行狀態

十一 : 系統服務的啓動和控制

11.1 ntsysv 系統服務管理工具

理論:引導過程與服務控制 (解決忘記root問題、解決不能正常開機的問題)

11.2 查看系統服務的啓動狀態

[root@localhost ~]# systemctl is-enabled 服務名稱

11.3 設置系統服務的啓動狀態

[root@localhost ~]# systemctl enable/disable 服務名稱

systemctl enable httpd 可以設置自啓動

systemctl is-enabled httpd 可以檢測服務是否開啓自啓動

[root@localhost ~]# systemctl enable httpd  '設爲開機自啓動'
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@localhost ~]# systemctl is-enabled httpd  '查看啓動狀態'
enabled
[root@localhost ~]# systemctl disable httpd '禁止自啓動'
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.
[root@localhost ~]# systemctl is-enabled httpd  '再次查看'
disabled
[root@localhost ~]# chkconfig --add 名稱  '系統中的服務中添加一個工具(名稱)'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章