開機自檢——BIOS(Basic Input/Output System),先加電,檢查硬件(CPU、內存、顯卡、鍵盤等設備)是否沒有問題,沒有問題加載驅動linux
MBR引導——微代碼找啓動盤shell
CPU首先讀取位於CMOS中的BIOS程序,按照BIOS中設定的啓動次序(Boot Sequence)逐一查找可啓動設備,找到可啓動的設備後,去該設備的第一個扇區中讀取MBR(Master Boot Record,主引導記錄)。centos
MBR存在於可啓動磁盤的0磁道0扇區,佔用512字節,它主要用來告訴計算機從選定的可啓動設備的哪一個分區來加載引導加載程序(Boot loader),MBR中存在以下內容: 緩存
(1) Boot Loader 佔用446字節,存儲有操做系統(OS)相關信息,如操做系統名稱,操做系統內核位置等,它的主要功能是加載內核到內存中運行。 bash
(2) Partition Table 分區表,佔用64字節,每一個主分區佔用16字節(這就是爲啥一塊硬盤只能有4個主分區網絡
(3)分區表有效性標記佔用2字節,CPU將MBR讀取至內存,運行GRUB(Boot Loader經常使用的有GRUB和LILO兩種,如今經常使用的是GRUB),GRUB會把內核加載到內存去執行。tcp
如上所示,咱們可查看/boot/grub2/grub.cfg文件的第100行的內容,就能看到是在該配置文件中對內核文件進行操做了。ide
GRUB菜單——使用普遍的多系統引導器程序,系統控制權傳遞給GRUB之後,將會顯示啓動菜單提供給用戶選擇,根據選擇或者默認項加載內核文件,而後將系統控制權轉交給內核。工具
加載內核(kernel)——/boot目錄下,Linux內核是預先編譯好的特殊二進制文件,介於各類硬件資源和系統程序之間,負責資源分配與調度。優化
補充:下面的vmlinuz-3.10.0-693.el7.x86_64就是咱們的內核文件了。在/boot目錄下
[root@lokott ~]# ll /boot |grep "vmlinuz*" -rwxr-xr-x. 1 root root 5877760 10月 23 12:20 vmlinuz-0-rescue-f18b1b17cb2b477f8cb451fffad48550 -rwxr-xr-x. 1 root root 5877760 8月 23 2017 vmlinuz-3.10.0-693.el7.x86_64
[root@lokott ~]# head -100 /boot/grub2/grub.cfg |tail -1 linux16 /vmlinuz-3.10.0-693.el7.x86_64 root=UUID=d0f8b702-0aa9-4857-9551-2e1283d2f5f9 ro crashkernel=auto rhgb quiet LANG=zh_CN.UTF-8
init進程初始化——原來的緩存所有清空,加載必要進程以後,加載外部的第三方進程(應用軟件)(延時啓動)
內核初始化做爲PID1從initramfs執行/sbin/init。在Centos7中將其複製爲systemd,systemd啓動initrd.target中的 全部單元,而且掛載根文件系統/sysroot
由Linux內核加載運行/sbin/init程序,是系統中的第一個進程,PID號永遠爲1
Systemd 單元類型
運行級別所對應的systemd目標
其中.service ——/lib/sysytemd/system
文件存儲兩個部分——元信息(狀態的信息)和內容
===========================================================================================
1.故障緣由
病毒、***等形成的破壞
不正確的分區操做、磁盤讀寫誤操做
2.故障現象
找不到引導程序、啓動中斷
沒法加載操做系統,開機後黑屏
3.解決思路
提早作好備份文件
以安裝光盤引導進入急救模式
從部分文件中恢復
流程以下
備份MBR扇區數據——加一塊硬盤作備份(必定須要先備份)
(1)分區,格式化,掛載
(2)備份mbr引導扇區到其它磁盤
備份=dd if=/dev/sda of=/abc/sda.mbr.bak bs=512 count=1 (/abc是另外一塊磁盤的掛載點)
模擬故障
dd if=/dev/sda of=/abc/sda.mbr.bak bs=512 count=1
重啓:reboot——> 啓用DHCP(找不到系統),從網上找有無能夠加載的系統,可是是找不到的
修復以前須要光盤鏡像須要鏈接使用
加載系統鏡像文件中的急救模式
加載系統鏡像文件中的內核界面
在讀條時按下ESC鍵(手速快點)——選擇CD-ROM Drive——選擇Troubleshooting——選擇Rescue a Centos system(補充:固然若是你的鏡像文件一直是鏈接狀態的話前面兩個步驟是能夠省略的)
4.把備份數據作恢復
第一步:
[root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 40G 0 disk ├─sda1 8:1 0 6G 0 part /boot ├─sda2 8:2 0 20G 0 part / ├─sda3 8:3 0 10G 0 part /home ├─sda4 8:4 0 1K 0 part └─sda5 8:5 0 4G 0 part [SWAP] sdb 8:16 0 20G 0 disk └─sdb1 8:17 0 20G 0 part sr0 11:0 1 4.2G 0 rom /run/media/root/CentOS 7 x86_64 [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 ~]# mount /dev/sdb1 /mnt [root@localhost ~]# df -hT | tail -1 /dev/sdb1 xfs 20G 33M 20G 1% /mnt [root@localhost ~]# dd if=/dev/sda of=/mnt/sda.mbr.bak bs=512 count=1 記錄了1+0 的讀入 記錄了1+0 的寫出 512字節(512 B)已複製,0.000126274 秒,4.1 MB/秒 [root@localhost ~]# ls /mnt/ sda.mbr.bak
第二步:
[root@localhost ~]# dd if=/dev/zero of=/dev/sda bs=512 count=1//垃圾填充覆蓋第一個扇區內容(模擬破壞) 記錄了1+0 的讀入 記錄了1+0 的寫出 512字節(512 B)已複製,0.000139415 秒,3.7 MB/秒 [root@localhost ~]# reboot //重啓
第三步:
一直是鏈接着系統鏡像文件的狀況下啊,重啓以後操做以下:
(1)選擇Troubleshooting——回車
(2)選擇Rescue a CentOS system——回車
(3)進入加載界面,稍等
(4)進入急救界面準備進行修復MBR,輸入1,回車,彈出下面的對話後再次回車
(5)進行修復扇區的命令輸入
===========================================================================================
1.故障緣由
MBR中的GRUB弓|導程序遭到破壞
grub.conf文件丟失、引導配置有誤
2.故障現象
系統引導停滯,顯示"grub>」 提示符
3.解決思路
嘗試手動輸入引導命令
進入急救模式,重寫或者從備份中恢復grub.conf
向MBR扇區中重建grub程序
流程以下:
使用系統急救模式進入命令字符界面
加載鏡像中的系統進入bash環境
chroot /mnt/sysimage
從新構建GRUB菜單系統
grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg
exit
reboot
實驗操做過程與結果以下:
[root@localhost ~]# ll /boot/ 總用量 136460 -rw-r--r--. 1 root root 140894 8月 23 2017 config-3.10.0-693.el7.x86_64 drwxr-xr-x. 3 root root 17 11月 14 11:37 efi drwxr-xr-x. 2 root root 27 11月 14 11:38 grub drwx------. 5 root root 97 11月 14 11:42 grub2 -rw-------. 1 root root 69272056 11月 14 11:41 initramfs-0-rescue-a33ccb7775134b0e83e04555d56fedb7.img -rw-------. 1 root root 28281283 11月 14 11:42 initramfs-3.10.0-693.el7.x86_64.img -rw-------. 1 root root 16565979 11月 14 11:43 initramfs-3.10.0-693.el7.x86_64kdump.img -rw-r--r--. 1 root root 10181954 11月 14 11:41 initrd-plymouth.img -rw-r--r--. 1 root root 293027 8月 23 2017 symvers-3.10.0-693.el7.x86_64.gz -rw-------. 1 root root 3228420 8月 23 2017 System.map-3.10.0-693.el7.x86_64 -rwxr-xr-x. 1 root root 5877760 11月 14 11:41 vmlinuz-0-rescue-a33ccb7775134b0e83e04555d56fedb7 -rwxr-xr-x. 1 root root 5877760 8月 23 2017 vmlinuz-3.10.0-693.el7.x86_64 [root@localhost ~]# ll /boot/grub2 總用量 32 -rw-r--r--. 1 root root 84 11月 14 11:42 device.map drwxr-xr-x. 2 root root 25 11月 14 11:42 fonts -rw-r--r--. 1 root root 4235 11月 14 11:42 grub.cfg -rw-r--r--. 1 root root 1024 11月 14 11:42 grubenv drwxr-xr-x. 2 root root 8192 11月 14 11:42 i386-pc drwxr-xr-x. 2 root root 4096 11月 14 11:42 locale
解釋說明一下:如上所示其中/boot目錄下的grub目錄存放的是啓動菜單的背景圖片及樣式,而grub2中存放的纔是配置文件。
(1)先刪除該配置文件來模擬整個過程
[root@localhost grub2]# cd /boot/grub2/ [root@localhost grub2]# ls device.map fonts grub.cfg grubenv i386-pc locale [root@localhost grub2]# rm -rf grub.cfg [root@localhost grub2]# init 6
重啓以後的界面以下:(此時沒法正常登陸)
(2)引導急救模式,加載系統鏡像:在讀條時(手速快點)按下ESC進入選擇菜單——選擇3.CD-ROM Drive——選擇Troubleshooting——選擇Rescue a Centos system,最終進入以下界面進行操做
以後就能夠正常登陸了。
===========================================================================================
1.故障緣由
遺忘root用戶密碼
2.故障現象
沒法進行須要root權限的管理操做
沒有其餘可用帳號,將沒法登陸系統
3.解決思路
進入急救模式,從新設置密碼
流程以下:
實驗操做過程與結果以下:
(1)先將鏡像文件選擇爲已鏈接
(2)重啓本地虛擬機
在讀條時(手速快點)按下ESC進入選擇菜單——選擇3.CD-ROM Drive——選擇Troubleshooting——選擇Rescue a Centos system
(3)使用chroot命令和passwd root來設置root密碼;以後exit、reboot就能夠正常登陸root用戶了
控制類型 (選項參數)
實例:
[root@localhost ~]# systemctl stop network //中止網絡鏈接 [root@localhost ~]# ifconfig | head //查看ip信息 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether 00:0c:29:56:d3:4a txqueuelen 1000 (Ethernet) RX packets 374 bytes 28991 (28.3 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 50 bytes 6529 (6.3 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:71:37:09 txqueuelen 1000 (Ethernet) [root@localhost ~]# systemctl start network //啓動網絡鏈接 [root@localhost ~]# ifconfig | head ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.68.130 netmask 255.255.255.0 broadcast 192.168.68.255 inet6 fe80::7eb1:2dde:8a54:6927 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:56:d3:4a txqueuelen 1000 (Ethernet) RX packets 379 bytes 29759 (29.0 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 75 bytes 10116 (9.8 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
查看運行級別
臨時切換運行級別
系統服務管理工具
ntsysv工具(僞圖像化界面)
systemctl 工具
結合下面的實例來進一步介紹systemctl命令
[root@localhost ~]# rpm -q httpd httpd-2.4.6-90.el7.centos.x86_64 [root@localhost ~]# netstat 顯示網絡鏈接,路由表,接口狀態,假裝鏈接,網絡鏈路信息和組播成員組。^C [root@localhost ~]# netstat -ntap | grep 80 [root@localhost ~]# systemctl start httpd [root@localhost ~]# netstat -ntap | grep 80 tcp6 0 0 :::80 :::* LISTEN 14793/httpd [root@localhost ~]# systemctl stop httpd [root@localhost ~]# netstat -ntap | grep 80 [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
systemctl enable httpd 是開機自啓動,is-enabled是顯示其狀態,關閉自啓動是disable 上面輸入reboot後使用netstat查看80端口是否有httpd服務自啓動。具體操做以下所示。
[root@localhost ~]# netstat -ntap | grep 80 tcp6 0 0 :::80 :::* LISTEN 953/httpd [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 ~]#
本文主要是對Linux系統管理中系統引導過程和服務控制及優化的講解,涉及以下命令:
exit、reboot、chroot、grub2-install、grub2-mkconfig、passwd、runlevel、ntsysv、systemctl、netstat等。主要是對系統啓動引導過程當中的一些問題進行解決,強制破解root密碼(實質上是強行更換),最後講述的是服務控制命令操做和簡單的一些優化操做。