1 CentOS6的啟動管理
1.1 Linux組成
內(nèi)核: 實(shí)現(xiàn)進(jìn)程管理, 內(nèi)存管理, 網(wǎng)絡(luò)管理, 驅(qū)動程序管理, 文件系統(tǒng)管理, 安全管理等功能
rootfs: 根文件系統(tǒng), 包含程序和glibc庫
程序: 二進(jìn)制執(zhí)行文件
庫: 函數(shù)集合, function, 調(diào)用接口
1.2 CentOS6 啟動流程
1.2.1 CentOS6 啟動流程
資料來自51cto: http://s4.51cto.com/wyfs02/M02/87/20/wKiom1fVBELjXsvaAAUkuL83t2Q304.jpg
1. 加載BIOS的硬件信息, 獲取第一個(gè)啟動設(shè)備
2. 讀取第一個(gè)啟動設(shè)備MBR的引導(dǎo)加載程序(grub)的啟動信息
3. 加載核心操作系統(tǒng)的核心信息, 核心開始解壓縮, 并嘗試驅(qū)動所有的硬件設(shè)備
4. 核心執(zhí)行init程序, 并獲取默認(rèn)的運(yùn)行信息
5. init程序執(zhí)行/etc/rc.d/rc.sysinit文件, 重新掛載根文件系統(tǒng)
6. 啟動核心的外掛模塊
7. init執(zhí)行運(yùn)行的各個(gè)批處理文件(scripts)
8. init執(zhí)行/etc/rc.d/rc.local
9. 執(zhí)行/bin/login程序, 等待用戶登錄
10. 登錄之后開始以shell控制主機(jī)
1.2.2 硬件啟動POST
POST: Power On Self Test, 加電自檢, 是BIOS功能的一個(gè)主要部分, 與操作系統(tǒng)無關(guān), 是硬件功能. 負(fù)責(zé)完成對CPU, 主板, 內(nèi)存, 硬盤子系統(tǒng), 顯示子系統(tǒng), 串并行接口, 鍵盤等硬件情況的檢測
主板的ROM: BIOS, Basic Output System, 保存著有關(guān)計(jì)算機(jī)系統(tǒng)最重要的基本輸入輸出程序, 系統(tǒng)信息設(shè)置, 開機(jī)加電自檢程序和系統(tǒng)啟動自舉程序等. 服務(wù)器加電后, BIOS會自動把BIOS內(nèi)的程序加載到CPU, 然后進(jìn)行加電自檢
主板的RAM: CMOS互補(bǔ)金屬氧化物半導(dǎo)體, 保存各項(xiàng)參數(shù)的設(shè)定, 按次序查找引導(dǎo)設(shè)備, 第一個(gè)有引導(dǎo)程序的設(shè)備為本次啟動設(shè)備
1.2.3 啟動加載器 bootloader
1.2.3.1 bootloader
引導(dǎo)加載器, 用來引導(dǎo)程序, 不同操作系統(tǒng)的bootloader不一樣
Windows: ntloader, 僅支持啟動OS
Linux: 功能豐富, 提供菜單, 允許用戶選擇要啟動的系統(tǒng)或不同的內(nèi)核版本, 把用戶選定的內(nèi)核裝在到內(nèi)存的特定空間中, 解壓, 展開, 并把系統(tǒng)控制權(quán)移交給內(nèi)核
1.2.3.2 Linux的bootloader
LILO: Linux Loader, 早期的bootloader, 功能單一
GRUB: Grand Unified Bootloader, CentOS 6 GRUB 0.97:GRUB Legacy, CentOS7 以后使用 GRUB 2.02
1.2.3.3 GRUB啟動階段
- primary bootloader
1st stage: MBR的前446個(gè)字節(jié), 存放GRUB第一階段的數(shù)據(jù)
1.5 stage: MBR之后的扇區(qū)(加載對應(yīng)的文件系統(tǒng)驅(qū)動), 讓stage1中的bootloader能識別stage2所在分區(qū)上的文件系統(tǒng)
啟動菜單, 內(nèi)核等文件都是存在文件系統(tǒng)上的, 因此, 需要1.5階段, 幫助GRUB去識別文件系統(tǒng), 進(jìn)到對象的目錄拿到相應(yīng)的文件
MBR, 磁盤的第一個(gè)扇區(qū), 512個(gè)字節(jié)
前446個(gè)字節(jié)用來引導(dǎo)GRUB第一階段
中間64個(gè)字節(jié)分區(qū)表
后兩個(gè)字節(jié)標(biāo)記位
- secondary bootloader: 2階段, 分區(qū)文件/boot/grub, 保存二階段相關(guān)內(nèi)容, 比如啟動菜單
[08:30:10 root@centos-7-1 ~]#ll /boot/grub2 # CentOS6上保存在/boot/grub
total 32
-rw-r--r--. 1 root root 84 Oct 29 21:44 device.map
drwxr-xr-x. 2 root root 25 Oct 29 21:44 fonts
-rw-r--r--. 1 root root 4423 Oct 29 21:56 grub.cfg # 啟動菜單文件
-rw-r--r--. 1 root root 1024 Oct 29 21:45 grubenv
drwxr-xr-x. 2 root root 8192 Oct 29 21:44 i386-pc
drwxr-xr-x. 2 root root 4096 Oct 29 21:44 locale
grub.conf啟動菜單的修復(fù)-案例1
initramfs-3.10.0-1127.el7.x86_64.img # 存放文件系統(tǒng)驅(qū)動, 讓內(nèi)核加載操作系統(tǒng)的根, 模擬一個(gè)小型根系統(tǒng)
而1.5階段, 利用MBR后續(xù)扇區(qū)是為了讓bootloader能識別/boot分區(qū), 而/boot分區(qū)和根分區(qū)不一樣在同一分區(qū), 所有要有單獨(dú)的文件來幫助內(nèi)核加載根分區(qū)
initramfs和內(nèi)核文件都存放在了/boot目錄里, 因此在啟動菜單中, initramfs要放在kernel后, 先加載內(nèi)核
- 如果啟動菜單的順序有問題, 開機(jī)會提示initramfs需要在kernel之前啟動, 這時(shí)可以在開機(jī)菜單選擇中按e, 進(jìn)入菜單編輯
- 選中錯誤的選項(xiàng), 按d刪除, 這時(shí)只是臨時(shí)刪除, 之后系統(tǒng)啟動后, 還要去修改文件
- 添加正確的菜單, 按o鍵,再按e鍵, 輸入文件路徑, 可以tab補(bǔ)全, 啟動菜單必須有三行信息
- 寫完按回車, 檢查菜單
確認(rèn)無誤后, 按b啟動
啟動后修改grub.conf, 否則下次重啟還是無法啟動
grub.conf啟動菜單的修復(fù)-案例2
grub.conf存著啟動的菜單, 一旦該文件丟失, 系統(tǒng)將無法啟動
- 模擬文件丟失
mv /boot/grub/grub.conf /data
- 重啟測試
- 在錯誤界面, 補(bǔ)全菜單文件內(nèi)容, 按boot啟動
- 啟動后恢復(fù)grub.conf文件
CentOS6破解root口令
CentOS6啟動過程中, 加載完bootloader會加載內(nèi)核, 根文件系統(tǒng), 加載init進(jìn)程, 然后啟動init進(jìn)程
init進(jìn)程啟動時(shí)會讀取其配置文件, /etc/inittab, 其中定義了系統(tǒng)啟動的模式,7種模式: 0 - 6
- 如果啟動模式錯誤的改成6, 那么服務(wù)器會無限重啟, 這時(shí)也是需要修改啟動菜單, 啟動時(shí)先按任意鍵進(jìn)入菜單
- 選擇版本, 然后按a鍵
- 在quiet后加入本次啟動時(shí)想進(jìn)入的模式
- 輸入的數(shù)字相當(dāng)于內(nèi)核參數(shù), 也是通過干預(yù)本次啟動時(shí)菜單選項(xiàng)來修復(fù)
按回車, 進(jìn)入啟動, 然后修改/etc/inittab文件
若要破解root用戶, 需要啟動時(shí)進(jìn)入1,單用戶模式
單用戶模式, 只有一個(gè)用戶能使用Linux, 遠(yuǎn)程連接都會端斷開
可以切換用戶, 但是不能開啟多個(gè)終端, 也不能遠(yuǎn)程
一般在系統(tǒng)維護(hù)時(shí)可以使用
- 進(jìn)入啟動界面, 按任意鍵, 選擇版本, 然后按a鍵
輸入1, 按回車進(jìn)入單用戶模式
再次啟動后, 會直接進(jìn)入系統(tǒng), 而且身份是root, 無需密碼
passwd重置密碼即可
破解口令必須能到機(jī)房或者服務(wù)器面前去破解, 因此 雖然破解過程簡單, 但并不是所有人都有機(jī)會
給grub加密, 防止root破解
- 生成grub口令
- 添加到grub配置文件/boot/grub/grub.conf
- 此時(shí)服務(wù)器啟動時(shí), 是沒有a鍵選項(xiàng)的, 要想修改啟動默認(rèn), 需要按p鍵, 然后輸入grub密碼
- 輸入密碼后, 再用a鍵進(jìn)入菜單修改
注意: 即使grub加密了, 還是可以通過救援模式破解口令, 因此, 一定要確保服務(wù)器的物理安全
1.2.3.4 修復(fù)GRUB第一階段故障(CentOS6)
破壞GRUB第一階段, MBR前446個(gè)字節(jié), 可以通過救援模式修復(fù), 但是,grub.conf菜單文件是無法修復(fù)的, 需要手寫
1.2.4 加載內(nèi)核
內(nèi)核自身初始化的過程
1. 探測可識別到的所有硬件設(shè)備
2. 加載硬件驅(qū)動程序(借助于ramdisk加載驅(qū)動)
3. 以只讀方式掛載根文件系統(tǒng)
4. 運(yùn)行用戶空間的第一個(gè)應(yīng)用程序: /sbin/init
內(nèi)核特點(diǎn):
支持模塊化: .ko(內(nèi)核對象), 如: 文件系統(tǒng), 硬件驅(qū)動, 網(wǎng)絡(luò)協(xié)議等
支持內(nèi)核模塊的動態(tài)裝載和卸載
內(nèi)核組成部分:
核心文件: /boot/vmlinuz/VERSION-release
ramdisk: 輔助的偽根系統(tǒng), 加載相應(yīng)的硬件驅(qū)動, ramdisk --> ramfs提高速度
CentOS5 /boot/initrd-VERSION-release.img
CentOS6以后版本/波特/initramfs-VERSION-release.img
模塊文件: /lib/modules/VERSION-release
范例: 誤刪除內(nèi)核文件/boot/vmlinuz-2.6.32-754.el6.x86_64無法啟動的故障恢復(fù)
rm -rf /boot/vmlinuz-2.6.32-754.el6.x86_64
reboot
進(jìn)入救援模式
切根 chroot /mnt/sysimage
掛載光盤 mount /dev/sr0 /mnt
復(fù)制內(nèi)核文件 cp /mnt/isolinux/vmlinuz /boot/vmlinuz-2.6.32-754.el6.x86_64
sync
exit
reboot
ramdisk文件的制作
- mkinitrd命令
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
- dracut命令
dracut /boot/initramfs-$(uname -r).img $(uname -r)
案例: 誤刪除/boot/initramfs-2.6.32-754.el6.x86_64.img無法啟動, 故障恢復(fù)
rm -rf /boot/initramfs-2.6.32-754.el6x86_64.img
reboot
進(jìn)入救援模式
chroot /mnt/sysimages # /etc/fstab文件存在時(shí), 系統(tǒng)啟動后自動找到根分區(qū), 把根分區(qū)掛載到/mnt/sysimage
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
sync
exit
reboot
1.2.5 init初始化
POST --> BootSeqyence(BIOS) --> Bootloader(MBR) --> Kernel(ramdisk) --> rootfs(只讀) --> init(systemd)
init程序類型:
Upstart: init, CentOS6, 配置文件: /etc/inittab, /etc/init/*.conf
Systemd: systemd, CentOS7, 配置文件: /usr/lib/systemd/system, /etc/systemd/system
運(yùn)行級別
為系統(tǒng)運(yùn)行或維護(hù)等目的而設(shè)定, 0-6, 共7個(gè)級別, 一般使用3,5作為默認(rèn)級別
0 -- 關(guān)機(jī)
1 -- 單用戶模式(root自動登錄), 維護(hù)模式, 只有一個(gè)用戶能登錄
2 -- 多用戶模式, 啟動網(wǎng)絡(luò)功能, 但不會啟動NFS, 維護(hù)模式
3 -- 多用戶模式. 正常模式, 文本界面
4 -- 預(yù)留級別, 可同3級別
5 -- 多用戶模式, 正常模式, 圖形界面
6 -- 重啟
命令行切換級別
init 數(shù)字
CentOS6服務(wù)管理
- service命令: 手動管理服務(wù)
- /etc/rc*.d. 控制服務(wù)腳本的開機(jī)自動運(yùn)行
K開機(jī)不自動運(yùn)行, 數(shù)字越小, 越先運(yùn)行, 數(shù)字越小的服務(wù), 通過是依賴其他服務(wù)的服務(wù)
S開機(jī)自動運(yùn)行, 數(shù)字越小, 越先運(yùn)行, 數(shù)字越小的服務(wù), 通過為被依賴的服務(wù), 其他服務(wù)依賴其運(yùn)行
配置服務(wù)開機(jī)啟動
chkconfig
查看服務(wù)在所有級別的啟動或關(guān)閉情況
chkconfig [--list] [name]
編寫啟動腳本, 添加到/etc/rc.d/init.d(/etc/init.d)中, 實(shí)現(xiàn)服務(wù)開機(jī)自啟
#!/bin/bash
chkconfig: #### S數(shù)字 K數(shù)字 # 如果想讓服務(wù)在任何級別都不啟動, 級別用-表示
description: 描述信息
....
腳本寫完, 執(zhí)行 chkconfig --add NAME, 把服務(wù)添加到init.d中
將任務(wù)從init.d刪除
chkconfig --del NAME
服務(wù)剛加入到chkconfig列表時(shí), 所有運(yùn)行級別初始狀態(tài)都是off
CentOS6, 希望開機(jī)自動運(yùn)行但是不方便寫啟動腳本的命令可以放在/etc/rc.d/rc/local, 該文件會在所有init.d下的啟動文件運(yùn)行完運(yùn)行
CentOS7和8也兼容這種方式, 但是, 需要給該文件加執(zhí)行權(quán)限
非獨(dú)立服務(wù): 按需啟動, 需要被其他服務(wù)喚醒, 超級守護(hù)進(jìn)程(xinetd進(jìn)程)
以telnet服務(wù)為例
telnet是非獨(dú)立服務(wù), 平時(shí)不會工作, 有連接請求時(shí)會由xinetd喚醒
但是, 服務(wù)安裝后,默認(rèn)都是關(guān)閉狀態(tài), 因此, 需要先設(shè)置為開機(jī)自動啟動, chkconfig telnet-server on
另外, xinetd默認(rèn)系統(tǒng)是沒有的, 安裝非獨(dú)立服務(wù)后會自動安裝xinetd
1.3 啟動過程故障排錯
1.3.1 故障: rm -rf /boot/* , rm -rf /etc/fstab 后進(jìn)行恢復(fù)
恢復(fù)過程:
- 用光盤進(jìn)入救援模式, 找到/所在分區(qū)并恢復(fù)/etc/fstab
由于fstab文件被刪除, 系統(tǒng)啟動后無法識別根分區(qū), 也就無法把光盤中的/mnt/sysimage掛載到/目錄下
- 利用blkid查看硬盤分區(qū)對應(yīng)關(guān)系
- 由于不確定sda1, sda2,和sda3與分區(qū)的對應(yīng)關(guān)系, 可以用fdisk -l來查看分區(qū)空間大小來判斷
sda4為擴(kuò)展分區(qū), sda5為swap
sda1 只有一個(gè)G, 根分區(qū)不會這么小, 一般/boot在1-2個(gè)G左右
sda2和sda3就是根分區(qū)和數(shù)據(jù)分區(qū)了, 所以要大概知道原本每個(gè)分區(qū)的容量
- 臨時(shí)掛載一個(gè)目錄, 來判斷具體是哪個(gè)分區(qū)
創(chuàng)建/mnt/rootfs目錄, 將/dev/sda1掛載上去, 可以看到目錄是空的, 因?yàn)榭梢灾?dev/sda1是/boot分區(qū), 因?yàn)槔锩娴奈募急粍h了
- 掛載/dev/sda2 到 /mnt/rootfs
可以看到其中包含了/分區(qū)的目錄
- 因?yàn)閒stab被刪了, 所有找不到硬盤的根分區(qū)
- 創(chuàng)建fstab文件
sync同步, 重啟
再次進(jìn)入救援模式, 因?yàn)橐呀?jīng)修復(fù)了fstab, 那么是可以找到硬盤的根分區(qū)的, 會把根掛載到/mnt/sysimage下
- 安裝內(nèi)核包
sync同步
- 安裝grub, 內(nèi)核包安裝后, 除了grub目錄, 其他文件都會自動生成
- 編輯菜單文件, grub安裝會生成grub目錄, 但是菜單還是要手寫的
vim /boot/grub/grub.conf
- sync, reboot即可
2 /proc目錄和內(nèi)核參數(shù)管理
/proc目錄: 內(nèi)核把自己內(nèi)部狀態(tài)信息及統(tǒng)計(jì)信息, 以及可配置參數(shù)通過proc偽文件系統(tǒng)加以輸出
內(nèi)核參數(shù)分為:
只讀參數(shù): 只用于輸出信息
可寫參數(shù): 可接受用戶指定的"值"來實(shí)現(xiàn)對內(nèi)核某功能或特性的配置
/proc/sys的設(shè)置
- sysctl命令可用于查看或設(shè)定此目錄中諸多參數(shù)
sysctl -w path.to.oarameter=VALUE #臨時(shí)設(shè)置
- 默認(rèn)配置文件: /etc/sysctl.conf及以下文件
/run/sysctl.d/*.conf
/etc/sysctl.d/*.conf
/usr/local/lib/sysctl.d/*.conf
/usr/lib/sysctl.d/*.conf
/lib/sysctl.d/*.conf
/etc/sysctl.conf
范例:
sysctl -w kernel.hostname=123.com
echo命令通過重定向方式也可以修改大多數(shù)參數(shù)的值
echo "VALUE" > /proc/sys/path/to/parameter
echo "webserver" > /proc/sys/kernel/hostname
sysctl命令:
- 臨時(shí)設(shè)置參數(shù)
sysctl -w parameter=VALUE
- 通過讀取配文件設(shè)置參數(shù)
sysctl -p [/path/to/conf_file]
- 查看所有生效的參數(shù)
sysctl -a
- 讓參數(shù)永久生效
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p # -p默認(rèn)加載/etc/sysctl.conf文件, 如果配置放在了其他文件里, 需要-p指定路徑
常用內(nèi)核參數(shù)
net.ipv4.ip_forward # 開啟路由轉(zhuǎn)發(fā)
net.ipv4.icmp_echo_ignore_all # 禁ping
net.ipv4.ip_nonlocal_bind # 允許應(yīng)用程序可以監(jiān)聽本地不存在的ip地址
vm.drop_caches # 清理緩存
fs.file_max=1020000 # 最大打開文件個(gè)數(shù)限制
net.ipv4.ip_nonlocal_bind
讓服務(wù)器監(jiān)聽在本地不存在的端口, 一般用在調(diào)度器上, 配合keepalived, 監(jiān)聽在vip上
但是vip本身在調(diào)度器是不存在的, 所以要修改參數(shù)使服務(wù)器能監(jiān)聽這個(gè)本地不存在的ip
3 /sys目錄管理
/sys目錄主要和硬件相關(guān). 為用戶使用的偽文件系統(tǒng), 輸出內(nèi)核識別出的各硬件設(shè)備的相關(guān)屬性信息
也有內(nèi)核對硬件特性的設(shè)定信息, 有些參數(shù)是可以修改的, 用于調(diào)整硬件工作特性
udev通過此路徑下輸出的信息動態(tài)為各設(shè)備創(chuàng)建所需要的設(shè)備文件, udev是運(yùn)行用戶空間程序?qū)S霉ぞ? udevadmin, hotplug
udenv為設(shè)備創(chuàng)建設(shè)備文件時(shí), 會讀取其事先定義好的規(guī)則文件, 一般在/etc/udev/rules.d及/usr/lib/udev/rules.d目錄下
4 內(nèi)核模塊管理
內(nèi)核組成部分:
kernel: 內(nèi)核核心, 一般為bzImage, 通常在/boot目錄, vmlinuz-VERSION-RELEASE
kernel object: 內(nèi)核對象, 一般放置于 /lib/modules/VERSION-RELEASE/
輔助文件: ramdisk. initrd: CentOS5以前, initramfs: CentOS6以后
4.1 內(nèi)核版本
uname命令, 查看運(yùn)行中內(nèi)核信息
-n 顯示節(jié)點(diǎn)名稱
-r 顯示內(nèi)核版本
-a 顯示內(nèi)核所有信息
4.2 內(nèi)核模塊命令
lsmod命令:
顯示內(nèi)核已經(jīng)裝載好的內(nèi)核模塊, 內(nèi)容為模塊名稱, 大小, 使用次數(shù), 被哪些模塊所依賴
顯示的內(nèi)容來自:/proc/modules文件
5 systemd
systemd: 從CentOS7版本之后開始使用systemd實(shí)現(xiàn)init進(jìn)程, 7以后init僅為systemd的軟連接, 系統(tǒng)啟動和服務(wù)器守護(hù)進(jìn)程管理器, 負(fù)責(zé)在系統(tǒng)啟動或運(yùn)行時(shí), 激活系統(tǒng)資源, 服務(wù)器進(jìn)程和其他進(jìn)程
5.1 systemd新特性
系統(tǒng)引導(dǎo)時(shí)實(shí)現(xiàn)服務(wù)并行啟動
按需啟動守護(hù)進(jìn)行, 比如CentOS6上的非獨(dú)立服務(wù), 由xinetd喚醒. CentOS7上由systemd喚醒
自動化的服務(wù)依賴關(guān)系管理
同時(shí)采用socket式于D-Bus總線式激活服務(wù)
socker與服務(wù)程序分離 # 節(jié)約資源, socket文件處于打開狀態(tài)監(jiān)聽端口, 但是服務(wù)只有有人訪問時(shí)才啟動, 或者人為啟動. 第一次按需啟動, 之后一旦啟動就不會自動關(guān)閉了
向后兼容sysv init腳本
使用systemctl命令管理, systemclt命令固定不變, 不可擴(kuò)展, 非由systemd啟動的服務(wù), systemctl無法與之通信和控制
系統(tǒng)狀態(tài)快照
不同版本的服務(wù)啟動區(qū)別
- CentOS5: 無論各個(gè)服務(wù)之間有沒有依賴關(guān)系, 都按照固定的次序啟動服務(wù), 因此系統(tǒng)啟動時(shí)間是所有服務(wù)串行啟動的累加時(shí)間
- CentOS6: 對于有依賴關(guān)系的服務(wù), 采用串行啟動, 而沒有依賴的服務(wù), 并行啟動
- CentOS7: 所有服務(wù)全部并行啟動, 雖然各服務(wù)間存在依賴關(guān)系, 但是某些資源并不是啟動階段就立即需要的, 因此CentOS7和8啟動很快, 但是第一次訪問會比較慢
5.2 systemd的核心概念: unit
unit表示不同類型的systemd對象, 通過配置文件進(jìn)行識別和配置; 文件中主要包含系統(tǒng)服務(wù), 監(jiān)聽socket, 保存的系統(tǒng)快照以及其他與init相關(guān)的信息
unit主要類型
service.unit: 文件擴(kuò)展名為.service, 用于定義系統(tǒng)服務(wù)
socket.unit: .socket碼定義進(jìn)程間通信用的socket文件, 也可以在系統(tǒng)啟動時(shí), 延遲啟動服務(wù), 實(shí)現(xiàn)按需啟動
unit配置文件
/usr/lib/systemd/system: 每個(gè)服務(wù)最主要的啟動腳本設(shè)置. 類似/etc/init.d/
/lib/systemd/system: ubuntu的對應(yīng)目錄
/run/systemd/system: 系統(tǒng)執(zhí)行過程中所產(chǎn)生的服務(wù)腳本, 比上面目錄優(yōu)先運(yùn)行
/etc/systemd/system: 管理員建立的執(zhí)行腳本, 類似/etc/rcN.d/Sxx的功能, 比上面目錄優(yōu)先運(yùn)行
5.3 systemctl管理service unit
systemctl start | stop | restart | enable --now NAME
禁止自動和手動啟動服務(wù)
systemctl mask name.service
systemctl unmask name.service
5.4 運(yùn)行級別
target units: 相當(dāng)于CentOS6之前的runlevel
unit配置文件: .target
0 關(guān)機(jī)
1 救援模式
2,3,4 多用戶
5 圖形
6 重啟
lrwxrwxrwx. 1 root root 15 Oct 29 21:40 /usr/lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root 13 Oct 29 21:40 /usr/lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx. 1 root root 17 Oct 29 21:40 /usr/lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 Oct 29 21:40 /usr/lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 Oct 29 21:40 /usr/lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root 16 Oct 29 21:40 /usr/lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx. 1 root root 13 Oct 29 21:40 /usr/lib/systemd/system/runlevel6.target -> reboot.target
5.5 CentOS 7 之后版本引導(dǎo)順序
1. UEFI或BIOs初始化, 運(yùn)行POST開機(jī)自檢
2. 選擇啟動設(shè)備
3. 引導(dǎo)裝載程序, CentOS7后為grub2, 加載裝載程序的配置文件: /etc/grub.d /etc/default/grub /boot/grub2/grub.cfg
4. 加載initramfs驅(qū)動模塊
5. 加載內(nèi)核選項(xiàng)
6. 內(nèi)核初始化, CentOS使用systemd代替init
7. 執(zhí)行initrd.target所有單元, 包括掛載/etc/fstab
8. 從initramfs根文件系統(tǒng)切換到磁盤根目錄
9. systemd執(zhí)行默認(rèn)target配置, 配置文件/etc/systemd/system/default.target
10. systemd執(zhí)行sysinit.target初始化系統(tǒng)及basic.target準(zhǔn)備操作系統(tǒng)
11. systemd啟動multi-user.target下的本機(jī)與服務(wù)器服務(wù)
12. systemd執(zhí)行multi-user.target下的/etc/rc.d/rc.local
13. systemd執(zhí)行multi-user.target下的getty.target及登錄服務(wù)
14. systemd執(zhí)行g(shù)raphical需要的服務(wù)
5.6 破解CentOS7和8的root密碼
方法1:
- 啟動時(shí)按任意鍵暫停啟動
按e鍵進(jìn)入編輯模式
將光標(biāo)移動linux開始的行, 末尾添加內(nèi)核參數(shù)rd.break
- 按ctrl-x啟動
mount -o remount, rw /sysroot
chroot /sysroot
passwd root
如果SELinux是啟用的, 那么需要執(zhí)行下面操作, 如果沒有啟動, 不需執(zhí)行
touch /.autorelabel
8 exit, reboot
方法2:
啟動時(shí)任意鍵暫停啟動
按e進(jìn)入編輯模式
將光標(biāo)移動到linux開始的行, 末尾添加rw init=/sysroot/bin/sh
按ctrl -x啟動
chroot /sysroot
passwd root
# 如果SELinux是啟用的, 才需要執(zhí)行下面操作
touch /.autorelabel
exit
reboot
5.7 實(shí)現(xiàn)GRUB2安全
[20:09:19 root@centos-7-1 ~]#grub2-setpassword
Enter password:
Confirm password:
[20:15:58 root@centos-7-1 ~]#ls -l /boot/grub2
total 36
-rw-r--r--. 1 root root 84 Oct 29 21:44 device.map
drwxr-xr-x. 2 root root 25 Oct 29 21:44 fonts
-rw-r--r--. 1 root root 4423 Oct 29 21:56 grub.cfg
-rw-r--r--. 1 root root 1024 Oct 29 21:45 grubenv
drwxr-xr-x. 2 root root 8192 Oct 29 21:44 i386-pc
drwxr-xr-x. 2 root root 4096 Oct 29 21:44 locale
-rw------- 1 root root 298 Feb 5 20:15 user.cfg
[20:16:04 root@centos-7-1 ~]#cat /boot/grub2/user.cfg
GRUB2_PASSWORD=grub.pbkdf2.sha512.10000.CFE85393B86CB607472A627A7E351405116594BBDDE32B6092EF6DB32E22AEE8F8C083DD0B2078D9782AB89B3FFCA12E1440C400DACD672E7A1961F1591C258D.051CE5E46915AF217A54A7FCA87D97BC7CECE67003DBF6931D69BB15410B16567C8E39D43F1A180D6D4FF7FB8EA71AAFA588EEA2339F5A64B2C6F6AE10E2562F
清空grub2密碼
[20:18:22 root@centos-7-1 ~]#cat /dev/null > /boot/grub2/user.cfg
5.8 修復(fù)GRUB2
GRUB2: CentOS7 和 8 以及Ubuntu1804都適用
引導(dǎo)提示時(shí)可以使用命令行界面, 可從文件系統(tǒng)引導(dǎo)
主要配置文件:/boot/grub2/grub.cfg
修復(fù)配置文件: grub2-mkconfig > /boot/grub2/grub.cfg
修復(fù)grub2
grub2-install /dev/sda #BIOS環(huán)境
grub2-install #UEFI環(huán)境
案例: CentOS8刪除/boot下的文件后進(jìn)行恢復(fù)
- 光盤救援模式下安裝grub2
CentOS8 必須先安裝grub, 再安裝kernel, 否則安裝kernel-core時(shí)會提示grub出錯
chroot /mnt/sysimage
grub2-install /dev/sda
mount /dev/sr0 /mnt
- 安裝內(nèi)核
CentOS7
rpm -ivh /mnt/Packages/kernel-3.10.0-1062.el7.x86_64.rpm --force
CentOS8
rpm -ivh /mnt/BaseOS/Packages/kernel-core-4.18.0-147.el8.x86_64.rpm --force
- 修改grub配置文件
生成grub2.cfg文件
grub2-mkconfig -o /boot/grub2/grub.cfg
- 退出重啟
exit
exit