1. 程式人生 > >Linux系統啟動排錯實驗集合

Linux系統啟動排錯實驗集合

boot分區 服務啟動 linux roo 在操作 splay 守護 故障 進程

Centos6系統啟動流程

1. post 加電自檢 檢查硬件環境

2. 選擇一個硬件類型引導啟動 mbr 446字節 grub stage1

3. 加載boot分區的文件系統驅動 掛在/boot目錄 grub stage1.5

4. 讀取 /boot/grub/grub.conf 加載內核啟動菜單 grub stage2

5. 加載vmlinuz內核 通過內核加載操作系統的 / 需要/boot/initramfs.img配合來加載根分區文件系統的驅動

6. 啟動操作系統根下的第一個進程 /sbin/init

7. 通過啟動第一個進程運行 rc.sysinit(系統初始化)腳本

8. 讀取 /etc/inittab 配置文件,設置系統啟動級別

各個啟動級別的區別本質上就是在操作系統啟動的時候設置哪些服務需要啟動,哪些服務不需要啟動.(不同服務的各種組合)

9.運行 /etc/rc[0-6].d/[S,K]的腳本 ----> link /etc/init.d/

10.運行 /etc/rc.local

11.顯示登錄界面

實驗1:Boot目錄下的文件全部被刪除

1.啟動故障現象:

技術分享圖片

2.重啟系統的時候按F2,設置從光盤引導,進入救援模式

技術分享圖片

3.啟動救援系統後開啟一個shell窗口

1. chroot /mnt/sysimage && mkdir /mnt/cdrom

2. mount /dev/sr0 /mnt/cdrom

方法2: rpm -ivh /mnt/cdrom/Packages/kernel-2.6.32-el6.x86_46.rpm --root=/mnt/sysimage/ --force

這條命令會在/boot目錄下自動生成內核文件和偽文件系統

然後執行grub-install /dev/sda 和創建 grub.conf 文件即可

3.cp /mnt/cdrom/isolinux/vmlinuz /boot

4. cd /boot && mkinitrd initramfs.img `uname -r`

5.grub-install /dev/sda

6.cd /grub && 創建一個grub.conf配置文件

在grub文件夾中/表示的是boot目錄所在的分區,不是指操作系統的根分區.

技術分享圖片

7.exit 退出切根狀態

8.exit 退出shell窗口

9.選擇重啟系統

技術分享圖片

10.出現如下菜單

技術分享圖片

結論:boot目錄下的內核和偽根系統的文件名稱可以不用加版本號,grub-install /dev/sda 不能生成grub.conf

文件,這個文件必須手動創建

技術分享圖片

實現2:同時刪除boot目錄和etc/fstab文件

現象:進入救援模式後會出現無法掛載操作系統的/到/mnt/sysimage目錄上

技術分享圖片

1.fdisk -l 查看分區的詳細信息

2.手動掛載每個分區,查看分區裏的數據,直到找到系統根所在的分區

3.修復根分區中的/etc/fstab配置文件

技術分享圖片

4.重啟系統並重新進入救援模式,使救援系統能自動掛載根分區

5.修復boot目錄

實驗3:/sbin/init文件被損壞

故障現象:

技術分享圖片

進入救援模式系統

1. mkdir /mnt/cdrom

2. mount /dev/sr0 /mnt/cdrom

3.rpm2cpio /mnt/cdrom/Packages/upstart-0.3.el6.x86_64.rpm | cpio -idv ./sbin/init 解壓到當前目錄

4.cp ./sbin/init /mnt/sysimage/sbin

5.exit

6.reboot

實驗4:後臺服務啟動異常

把啟動模式切換到單用戶模式,然後再去修改對應的服務腳本

實驗5:自定制Linux系統

1.給一塊新磁盤分區 fdisk 至少要分兩個區

2.給新創建的分區創建文件系統 mkfs.ext4 /dev/sdb1

3.掛載boot

mkdir /mnt/boot 子目錄必須為boot

mount /dev/sdb1 /mnt/boot

4.安裝grub

grub-install --root-directory=/mnt /dev/sdb

5.復制內核和initramfs文件

cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /mnt/boot/

cp /boot/initramfs-2.6.32-642.el6.x86_64.img /mnt/boot

6.創建grub.conf 寫入內核菜單信息

vim /mnt/boot/grub.conf

title yxhlinux

root (hd0,0)

kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/sda2

selinux=0

init=/bin/bash

initrd /initramfs-2.6.32-642.el6.x86_64.img

7.創建一級目錄

mkdir /mnt/sysroot mount /dev/sdb2 /mnt/sysroot

mkdir –pv /mnt/sysroot/{etc,lib,lib64,bin,sbin,tmp,var,usr,sys,proc,opt,home,root,boot, dev,mnt,media}

復制bash和相關庫文件

復制相關命令及相關庫文件 如:ifconfig,insmod,ping,mount,ls,cat,df,lsblk,blkid等

實驗6:內核編譯

內核組成部分:

kernel: 內核核心,一般為bzImage,通常在/boot目錄下,名稱為 vmlinuz-VERSION-RELEASE

kernel object: 內核對象,一般放置於 /lib/modules/VERSION-RELEASE/ [ ]: N [M]: M [*]: Y

輔助文件:ramdisk initrd initramfs

實驗7:邏輯卷啟動配置文件損壞

1.重啟進入救援模式

2.邏輯卷不能像分區那樣直接掛載 救援模式無法自動激活邏輯卷,所有的邏輯卷處於非活動狀態.

3. lvdisplay 查看當前系統上的邏輯卷詳情

4. vgchange -ay 激活所有的邏輯卷

5. mount /dev/VolGroup/lv_root /mnt/rootfs 邏輯卷只有被激活後才能被成功掛載

6. 修復/mnt/rootfs目錄下的相關配置文件

centos7 Systemd 介紹

POST > Boot Sequence > Bootloader > kernel + initramfs > rootfs > /sbin/init

POST > Boot Sequence > Bootloader > kernel + initramfs > rootfs 這些和centos6啟動方式一致

/sbin/init 在centos7上做了一個軟鏈接 把/sbin/init 指向了 systemd

之所以系統啟動後第一個進程的名字必須為/sbin/init 是因為在內核源碼中編寫成固定的字符串了

systemd新特性:

系統引導時候實現服務並行啟動

按需啟動守護進程

自動化的服務依賴關系管理

同時采用socket式與D-Bus總線式激活服務

系統狀態快照

Linux系統啟動排錯實驗集合