首先看linux內核重要文件grub
阿新 • • 發佈:2018-03-29
x86 背景圖片 lsi 標題 flow 登錄 position which fst
二:破壞MBR的前446字節的信息,修復(stage1階段修復)
dd if=/dev/zero of=/dev/sda bs=1 count=4426
破壞stage1階段
此時發現系統重啟進入光盤界面
重啟系統直接進入光盤界面,也就是光盤上的MBR沒有啟動代碼
選擇第三項進入救援模式
修復步驟
1.切根 chroot /mnt/sysiamge
此時所處的位置並不是磁盤上的根,真正的根位於/mnt/sysimage下
起因:在救援模式自身是不提供grub-install的只有切根才可以
2.grub-install /dev/sda
修復grub,此過程stage[1,1.5,2]都可以修復
此時出現分區別標簽的錯誤,不用管,此步驟容易出現故障
3.sync
確保磁盤已經寫入進去了
此時不僅修復了mbr還修復了grub裏面不同stage的文件
4.退出shell,重新啟動
總結:此時stage1階段的恢復完成,主要通過grub-install進行恢復
-------------------------------補充關閉selinux---------------------------
1、重啟系統按c鍵,直接進入grub
grub> kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=/dev/sda2 selinux=0
grub> initrd /initramfs-2.6.32-696.el6.x86_64.img
grub> boot
2、通過修改/etc/sysconfig/selinux 把selinux=disabled
-----------------------------------------------------------------------------------
linux內核啟動修復
首先看linux內核重要文件grub.conf
# grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/sda2 # initrd /initrd-[generic-]version.img #boot=/dev/sda default=0 #如果有多個菜單,默認選擇的菜單為0 timeout=5 #菜單選項欄等待5s splashimage=(hd0,0)/grub/splash.xpm.gz #/dev/sda1即/boot下開機啟動圖片 hiddenmenu #影藏菜單 title CentOS 6 (2.6.32-696.el6.x86_64) #標題為CentOS 6 (2.6.32-696.el6.x86_64),此標題不能沒有 root (hd0,0) #第一塊磁盤,第1個分區,指的是/boot kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=9ca5bdac-ce61-410e-a9fb-19a7877163cc rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSF ONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet # kernel相對於/boot的路徑,此處根值/boot,kenrl後面跟有系統啟動相關參數 rhgb 圖形化工具(轉圈圈),刪除rhgb直接到正常啟動界面 quiet默認隱藏內核的啟動過程 initrd /initramfs-2.6.32-696.el6.x86_64.img title CentOS 6 (2.6.32-696.el6.x86_64) #標題為CentOS 6 (2.6.32-696.el6.x86_64),此標題不能沒有 kernel (hd0,0)/vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=9ca5bdac-ce61-410e-a9fb-19a7877163cc rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSF ONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet # 沒有定義根,後面不能調用只能在前面添加(hd0,0) initrd (hd0,0)/initramfs-2.6.32-696.el6.x86_64.img
一:刪除/boot/grub/*下所有文件,只保留grub.conf配置文件,系統能否正常啟動修復?
系統能夠正常啟動 stage2階段就是一個grub.conf配置文件,其它文件都不起到直接的作用 此時重新啟動系統只會在一開始報一個沒有啟動圖片的錯誤,此錯誤不影響系統的正常啟動(可忽略),/boot/grub下的所有文件只做暫時備份使用即stage1 stage1_5階段的備份文件,只有當1和1.5階段出現故障的時候 可以通過一些命令進行修復,修復的時候會用到此處的備份文件二:破壞MBR的前446字節的信息,修復(stage1階段修復)
dd if=/dev/zero of=/dev/sda bs=1 count=4426
破壞stage1階段
此時發現系統重啟進入光盤界面
重啟系統直接進入光盤界面,也就是光盤上的MBR沒有啟動代碼
選擇第三項進入救援模式
修復步驟
1.切根 chroot /mnt/sysiamge
此時所處的位置並不是磁盤上的根,真正的根位於/mnt/sysimage下
起因:在救援模式自身是不提供grub-install的只有切根才可以
2.grub-install /dev/sda
修復grub,此過程stage[1,1.5,2]都可以修復
此時出現分區別標簽的錯誤,不用管,此步驟容易出現故障
3.sync
確保磁盤已經寫入進去了
此時不僅修復了mbr還修復了grub裏面不同stage的文件
4.退出shell,重新啟動
總結:此時stage1階段的恢復完成,主要通過grub-install進行恢復三 破壞512字節之後的內容進行修復(stage1.5階段過程)
dd if=/dev/zero of=/dev/sda bs=1 count=10240 seek=512此時會發現菜單都看不到 stage1.5出故障使用光盤引導 修復步驟: 1.按Esc鍵進入光盤引導界面 2.選擇第三項進入救援模式 3.切根 chroot /mnt/sysimage 4.grub-install或者使用grub命令
sh-4.1# grub
grub>root (hd0,0) #表示boot在第一塊磁盤第1個分區setup (hd0) #此步驟依賴於/boot/grub/*下面的文件 -------------------------------------------------------------------------------------------------------- 表示把grub按在哪個硬盤上,沒有寫分區的原因在於有一部分是裝在MBR裏面的即boot分區裏面,boot裏面有一個目錄名為grub,告訴各個路徑在什麽地方 ------------------------------------------------------------------------------------------------------------- 5.sync #設置通過到磁盤 6.reboot #退出shell,重啟系統方可恢復
四 在“三”的基礎上再重新做“一”的操作,在啟動會出現報錯,狀態碼是Error 15
修復方案: 如把stage2文件復制到/boot/grup目錄下,系統可以重新啟動 解釋 重啟系統,此時可以知道重新安裝grub以後stage2並不是起備份作用了,“一”中之所以成功是通過磁盤上別的空間來讀取數據,可以明白stage1.5階段已經成功了 註:如果後期沒有更改時間,grub.conf文件時間就是安裝操作系統的時間 在grub.conf文件下kernel沒有寫/boot分區是因為boot是一個獨立分區,此文件是相對於boot分區,/=/boot 如果沒有指定root的位置必須指定kernel,initrd的位置及在前面加上(hd0,0),即為/boot五 如果沒有root(hd0,0)且kernel,initrd不指定/boot的位置會出現如下報錯
title CentOS 6 (2.6.32-696.el6.x86_64) #標題為CentOS 6 (2.6.32-696.el6.x86_64),此標題不能沒有 kernel vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=9ca5bdac-ce61-410e-a9fb-19a7877163cc rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSF ONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet # 沒有定義根,後面不能調用只能在前面添加(hd0,0) initrd initramfs-2.6.32-696.el6.x86_64.img
此時只能進入救援模式切根修改文件 title CentOS 6 (2.6.32-696.el6.x86_64) #標題為CentOS 6 (2.6.32-696.el6.x86_64),此標題不能沒有 kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=9ca5bdac-ce61-410e-a9fb-19a7877163cc rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSF ONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet # 沒有定義根,後面不能調用只能在前面添加(hd0,0) initrd /initramfs-2.6.32-696.el6.x86_64.img
六 如果在默認文件中去掉root (hd0,0)一行系統啟動會出現的情況
title CentOS 6 (2.6.32-696.el6.x86_64) kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=9ca5bdac-ce61-410e-a9fb-19a7877163cc rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSF ONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-696.el6.x86_64.img開頭出現下面的提示,但是系統能夠正常的啟動
七 調換kernel和initrd調換順序,開機啟動情況?
title CentOS 6 (2.6.32-696.el6.x86_64) initrd /initramfs-2.6.32-696.el6.x86_64.img kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=9ca5bdac-ce61-410e-a9fb-19a7877163cc rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSF ONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
解釋:直接報錯,大概意思是linux kernel必須在initrd之前加載,否則系統無法啟動 只有加載kernel才會知道操作系統的根,找到根了才會找到內存用戶驅動 修復步驟 修復方法,顯示刪除initrd添加一新行,在編輯新行grub> initrd /initramfs-2.6.32-696.el6.x86_64.img
八 單用戶模式下可以輕易破解口令,如何明文加密口令?
加上密碼口令並不影響啟動,只是不能菜單編輯 在title的上一行加上passwd 密碼 此時驗證的時候不知道都不會成功password zangfans
驗證會出現Failed 操作 在hidddenmenu上方和initrd下方各插入一行
# grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/sda2 # initrd /initrd-[generic-]version.img #boot=/dev/sda default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz password centos6 #編輯菜單項輸入密碼 hiddenmenu title CentOS 6 (2.6.32-696.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=9ca5bdac-ce61-410e-a9fb-19a7877163cc rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSF ONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-696.el6.x86_64.img title CentOS 6 (2.6.32-696.el6.x86_64) kernel (hd0,0)/vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=9ca5bdac-ce61-410e-a9fb-19a7877163cc rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSF ONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet # initrd (hd0,0)/initramfs-2.6.32-696.el6.x86_64.img password centos6 #啟動輸入密碼
九 如何通過密文設置加密口令
使用加密算法對口令進行加密,可以使用MD5.SHA512 明文加密 1、使用grub-md5-crypt設置密碼[root@Centos6 ~]# grub-md5-crypt Password: Retype password: $1$Z.gAn/$Xd647hXfPj/sJ.i8A0By8.
進入/boot/grub/grub.conf文件使用vim編譯器的功能 輸入密碼和驗證,即可生成一段md5加密的字符串
password --md5 $1$V1hAn/$hSLRXWfIZWwVtYz4th5rg1
密文加密 2、使用grub-crypt及sha512進行加密
[root@Centos6 ~]# grub-crypt Password: Retype password: $6$jkKAT.eUrv3d4bfM$f41lkKlqQk3fAPqNwgy93J6Wi6bVF.zB5b.24V1QPwAGXkVVmwk2MGdi1UxzStHBaPWarW20AppaOvwheNRRj.
修改/boot/grub/grub.conf文件
password --encrypted $6$ndPVD/LnVhjBwHaG$XlSiTmJfRJrWufrmH0tLzle/zlmCB.Zyi/WClkcL8G43NDpXlKuQPvsw4AiIJqT1fJrb2Kh8DgZLY68pIAKFI0
十 如果忘記root賬號口令,如何修復?
修復方案: 可以通過救援模式刪除口令 刪除口令之後進入系統直接輸入root用戶無需密碼驗證就可以登錄十一 設置啟動背景圖片
圖片像素和格式是有要求的 使用convert工具對圖片像素進行設置 首先得安裝convert命令所提供的包[root@Centos6 ~]# which convert /usr/bin/convert [root@Centos6 ~]# rpm -qf `which convert` ImageMagick-6.7.2.7-6.el6.x86_64 [root@Centos6 ~]# convert -resize 640x480 -colors 14 zf.jpg zf.xpm #此命令必須在zf.jpg位置使用,使用less zf.xpm可以在頭部看到相關信息 [root@Centos6 ~]# cp zf.xpm /boot/grub [root@Centos6 grub]# vim grub.conf splashimage=(hd0,0)/grub/zf.xpm
進入grub界面就能看到設置的背景圖片 查看內核啟動參數內核參數
[root@Centos6 ~]# cat /proc/cmdline ro root=UUID=9ca5bdac-ce61-410e-a9fb-19a7877163cc rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
十二 刪除grub.conf文件,啟動修復
環境:/boot/grub 目錄下只有stage2文件,刪除原有的grub.conf文件 重啟系統進入如下界面 解釋:stage1、stage1.5沒有問題主要stage2有問題,連菜單都進不去,直接跳到grub 修復方案: grub支持交互式輸入,如果沒有grub.conf文件可以手動輸入十三 刪除/boot/grub整個目錄,如何修復?
[root@Centos6 ~]# rm -rf /boot/grub重啟進入如下界面 修復方案: 1、進入救援模式 2、chroot /mnt/sysimage 切根 3、使用grub-install /dev/sda 4、sync同步磁盤,此時grub目錄已經修復好了 5、寫一個grub.conf文件 因為修復時並沒有grub.conf文件必須手寫
#必須寫三項分別是title kernel initrd default 0 timeout 3 title Centos6 kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=/dev/sda2 #方便的小技巧,防止手敲出錯 initrd /initramfs-2.6.32-696.el6.x86_64.img
使用UUID也是可以的 註:r!blkid|grep /dev/sda2 #UUID後面註意去掉引號
十四 刪除/boot下所有文件如何修復?
環境:[root@Centos6 ~]# ls /boot config-2.6.32-696.el6.x86_64 initramfs-2.6.32-696.el6.x86_64.img System.map-2.6.32-696.el6.x86_64 efi lost+found vmlinuz-2.6.32-696.el6.x86_64 grub symvers-2.6.32-696.el6.x86_64.gz [root@Centos6 ~]# rm -rf /boot rm: cannot remove `/boot‘: Device or resource busy [root@Centos6 ~]# ls /boot [root@Centos6 ~]#修復分析: 主要修復/boot裏面的內核,虛擬文件系統,grub。內核:可以在光盤裏面找或者去其它相同系統的機子上拷一份 修復方案: 1、進入救援模式 2、chroot /mnt/sysimage 切根 3、掛載光盤 mount /dev/sr0 /mnt 4、cd /mnt/selinux/ vmlinuz 大小和剛開始文件系統大小是一樣的,說明內核是一個固定不變的東西 5、cp vmlinuz /boot 復制內核到/boot下 6、mkinitrd /boot/initramfs.img `uname -r` 7、grub-install /dev/sda 8、在/boot/grub目錄下新建一個grub.conf文件 default o timeout 3 title Centos6 kernel /vmlinuz ro root=/dev/sda2 initrd /initramfs.img 9、重啟恢復正常
十五 誤刪除/sbin/init,無法進入系統如何修復?
[root@Centos6 ~]# mv /sbin/init ~/恢復方案; 1、進入grub 2、按a鍵在後面添加 init=/bin/bash #指定不用系統默認的init,使用/bin/bash來代替 用bash來作為計算機的第一個進程,bash內置了一些內部命令 4、回車之後進入如下界面,可以輸入一些命令 5、查看/sbin/bash命令來自哪個包
bash-4.1# rpm -qf /sbin/init #upstart包提供此時掛載是只讀掛載,不能安裝此包 6、重新掛載根,默認只讀掛載
bash-4.1# mount -o remount,rw /7、安裝upstart包 註意此時光盤已經掛載,安裝包要覆蓋安裝,--force選項,upstart包畢竟已經安裝過了
#默認光盤已經掛載在/mnt bash-4.1# cd /mnt bash-4.1# rpm -ivh /Packages/upstart-xxxxxx --force8、同步到磁盤
bash-4.1# sync9、檢查一下可以看到/sbin/bin 總結:/sbin/bin文件誤刪除後,不需要進入救援模式就可以直接通過命令進行修復,過程中發現根是只讀掛載的,必須重新掛載才能安裝upstart包
十六 誤刪除/etc/fstab文件和/boot下的所有文件如何修復?
[root@Centos6 ~]# rm -rf /etc/fstab [root@Centos6 ~]# rm -rf /boot重啟後進入如下界面 修復分析:進入救援模式怎麽區分/boot,/,/swap?可以通過掛載分區,進入掛載目錄裏面,查看內容,以區分區掛載目錄
bash-4.1# mkdir /mnt/tmp #創建 bash-4.1# mount /sda1 /mnt/tmp #掛載到臨時文件 bash-4.1# ls /mnt/tmp #查看裏面的內容,此處可以看到沒有任何文件可以判斷為/boot 通過以上方法就可以知道每個分區到底是什麽
恢復方案: 1、進入救援模式 2、chroot /mnt/sysimage #切根 3、mkdir /mnt/tmp 4、mount /dev/sda2 /mnt/tmp 5、touch /mnt/tmp/etc/fstab #創建刪除的文件 6、vi /mnt/tmp/etc/fstab /dev/sda1 /boot ext4 defaults 0 0 /dev/sda2 / ext4 defaults 0 0 /dev/sda5 swap swap defaults 0 0 錯誤一:擴展內存加上了/ 錯誤二:文件系統類型為ext4 註:此處是一個大坑,稍有出錯會導致在救援系統裏面無法掛載光盤 7、重啟系統進入救援模式 8、切根掛載光盤 chroot /mnt/sysimage/ mount /dev/cdrom /mnt 9、重新安裝內核 rpm -ivh /mnt/Packege/kernel-xxxxx.rpm --force 這裏不同於“十四”,重新安裝內核,“十四”是通過復制光盤的文件到/boot,重寫grub.conf進行恢復 10、此時/boot會生成一些新文件 (看教程使用在強制安裝kernel後在做grub-instlal /dev/sda,通過我的操作過程我了解在重新安裝內核會自動生成grub目錄裏面的內容) 11、新建grub.conf文件
#必須寫三項分別是title kernel initrd default 0 timeout 3 title Centos6 kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=/dev/sda2 initrd /initramfs-2.6.32-696.el6.x86_64.img12、重啟系統,恢復正常
十七 根文件系統放在邏輯卷上,若誤操作刪除/fstab /boot/*文件該如何修復?
[root@Centos6-LVM ~]# mv /etc/fstab /root [root@Centos6-LVM ~]# rm -rf /boot/*
此時boot裏面的內核文件已經刪除了,所以不能通過手寫恢復,只有通過救援模式 重啟直接進入grub 修復分析:boot分區是不能放在邏輯卷上的,那麽有多快邏輯卷如何區分哪塊邏輯卷是根? 恢復方案: 1、進入救援模式 2、創建一個臨時目錄 mkdir /mnt/tmp 3、激活邏輯卷 vgchage -ay #當前邏輯卷狀態處於非活動狀態,必須激活才可以 4、根據我的機器我從裏面文件的結構和大小了解到,Vo100,Vo101app,Vo102分別為root、app、swap 5、掛載/dev/vg_centos6lvm/LogVo100到/mnt/tmp mount /dev/vg_centos6lvm/LogVo100 /mnt/tmp 6、新建fstab文件 touch /mnt/tmp/etc/fstab 7、對fstab文件添加掛載信息 vi /mnt/tmp/etc/fstab 8、重啟系統,掛載一下分區,然後進入救援模式 9、切根 chroot /mnt/sysimage 到此步不能用第十四題思路對grub解題 10、重新安裝內核 rpm -ivh /mnt/Packege/kernel-xxxxx.rpm --force 這裏不同於“十四”,重新安裝內核,“十四”是通過復制光盤的文件到/boot,重寫grub.conf進行恢復 11、重寫grub.conf文件
#必須寫三項分別是title kernel initrd default 0 timeout 3 title Centos6_lvm kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=/dev/vg_centos6lvm/LogVo100 selinux=0 initrd /initramfs-2.6.32-696.el6.x86_64.img12、重啟系統,恢復正常
首先看linux內核重要文件grub