18-系統啟動故障修復-實踐

說明:重啟時可以選擇性在vmlinuz所在行末尾添加 selinux=0;或者直接編輯/etc/selinus/config文件,更改 SELINUX=disabled 關閉SELINUX??梢员苊獯驑撕?,節省啟動時間

以下操作都需要進入bootloader引導加載項修改內核啟動參數,在vmlinuz所在行末尾添加一個啟動選項
如何進入bootloader引導加載項?
對于CentOS6:

POST加點自檢后由MBR找到bootloader開始引導Grub之前的畫面:
18-系統啟動故障修復-實踐

此時按任意鍵進入啟動菜單:

按e鍵編輯:
18-系統啟動故障修復-實踐

按下箭頭鍵選擇vmlinuz所在行,再按e鍵進入編輯:
18-系統啟動故障修復-實踐
TAB鍵可補全,Esc鍵取消修改,Enter鍵接受修改并繼續啟動。
對于CentOS7:

按任意鍵進入啟動菜單:
18-系統啟動故障修復-實踐

按e鍵編輯:
18-系統啟動故障修復-實踐

按下箭頭鍵向下翻到vmlinuz所在行:
18-系統啟動故障修復-實踐

Ctrl+x鍵接受修改并繼續啟動,Ctrl+c啟動命令行,Esc鍵取消修改并返回上級菜單,TAB鍵列出可用的補全列表。
忘記root密碼
CentOS6:添加1或S或s或single,以單用戶模式啟動
CentOS7:
由于在/etc/inittab里設置了runlevel為6導致系統無限重啟
CentOS6:
添加 3,以多用戶模式啟動,編輯/etc/inittab文件
CentOS7:
添加 rd.break,中斷啟動進入initramfs
默認掛載在/sys/目錄下,編輯/etc/inittab文件
由于在crontab任務里設置了@reboot(注意:任何用戶都有reboot執行權限)導致系統無限重啟
CentOS7:
添加 rd.break,中斷啟動進入initramfs
默認掛載在/sys/目錄下,編輯定義該任務的crontab文件
vim /sys/var/spool/cron/

以下修復操作都在光盤救援模式下執行,另外救援模式會嘗試自動掛載分區,如果出現沒有掛載的情況,首先需要掛載分區,對于MBR和bootloader的恢復而言主要是/和/boot,才能執行恢復操作。
破壞stage1,由于MBR前446字節數據損壞無法引導啟動(dd id=/dev/zero of=/dev/sda bs=1 count=446) :grub-install
hexdump -C /dev/sda -n 512
chroot /mnt/sysimage
grub-install /dev/sda
hexdump -C /dev/sda -v -n 512
如果不切根,可以這樣執行:
grub-install –root-directory=/mnt/sysimage/ /dev/sda

但是這里有個BUG:
18-系統啟動故障修復-實踐

該BUG從2008年就存在了: https://bugzilla.redhat.com/show_bug.cgi?id=429785
解決方法就是創建一個軟鏈接:ln -s /usr/sbin/grub /sbin/grub
再執行:grub-install –root-directory=/mnt/sysimage /dev/sda

破壞stage1.5,/boot/grub/*1_5 (dd id=/dev/zero of=/dev/sda bs=1 count=14000 seek=512,意即搜尋目標位置從512bytes字節后開始操作)
注意:該dd破壞必需在手動執行過grub-install后才有效,因為只有手動執行過grub-install /dev/sda,grub的stage1.5的數據出現于MBR所在的512bytes之后的27個扇區內(513-14000bytes區間,總共13.5Kbytes)

hexdump -C /dev/sda -n 14000     #十六進制查看磁盤前14000字節的數據(注意到512bytes后的數據都已被dd命令成功清空,置為零)
18-系統啟動故障修復-實踐

方法1:
chroot /mnt/sysimage
grub-install /dev/sda
方法2:
df -h
grub
grub> root (hd0,0)     #假如/boot分區位于第一塊硬盤的第一個分區

grub> setup (hd0)     #需要/boot/grub/*1_5備用文件
18-系統啟動故障修復-實踐

如果/boot/grub/*1_5備用文件不存在,這種方法不會修復成功:(對比上圖,下圖中提示e2fs_stage1_5文件不存在,如果用命令 “hexdump -C /dev/sda -n 14000” 查看,512字節后數據依然為零,說明并未將屬于stage1.5的27個扇區的數據嵌入磁盤(hd0))
18-系統啟動故障修復-實踐


破壞stage2,由于/boot/grub/grub.conf內容有誤無法引導啟動
df -h
fdisk -l
chroot /mnt/sysimage
# grub2-mkconfig -o /boot/grub/grub.conf     #CentOS7可直接執行該命令重新生成grub配置文件
#手動執行grub命令啟動
root (hd0,0)
kernel /vmlinuz<TAB鍵補全>  root=/dev/sda2
initrd /initramfs<TAB鍵補全>
boot
#進系統后再編輯/boot/grub/grub.conf配置文件即可

kernel行若未指明root=/dev/</partition> 會報錯如下:
18-系統啟動故障修復-實踐


刪除初始化內存盤文件導致無法進入系統(rm -f /boot/initramfs-*.img ):mkinitrd制作initramfs
18-系統啟動故障修復-實踐

chroot /mnt/sysimage
mkinitrd /boot/initramfs-`uname-r`.img `uname -r`

刪除內核文件導致無法進入系統 (rm -f /boot/vmlinuz-* ):從光盤的kernel包解壓出vmlinuz文件
18-系統啟動故障修復-實踐

mkdir /mnt/cdrom
mount /dev/sr0 /mnt/cdrom
cp /mnt/cdrom/Packages/kernel-*.rpm  /mnt/sysimage/root/
cd /mnt/sysimage/root/
rpm2cpio kernel-*.rpm | cpio -idv  ./boot/vmlinuz-2.6.32-642.el6.x86_64
或者:
cp /mnt/cdrom/isolinux/vmlinuz  /mnt/sysimage/boot/vmlinuz-`uname -r`

刪除/boot/grub(rm -rf /boot/grub/)

chroot /mnt/sysimage/

grub-install /dev/sda
18-系統啟動故障修復-實踐

cd  /mnt/sysimage/boot/grub/
vim grub.conf
default=0
timeout=3
tile centos
root (hd0,0)
:r!ls /boot/vmlinuz /boot/initramfs.img

刪除/boot(rm -rf /boot)
18-系統啟動故障修復-實踐

方法1:
chroot /mnt/sysimage
df -h
mount /dev/cdrom /mnt
#重新強制安裝內核
rpm -ivh /mnt/Packages/kernel-* –force|–replacepkgs
grub-install /dev/sda
vim /boot/grub/grub.conf     #手寫grub.conf
default=0
timeout=3
title centos6
root (hd0,0)
kernel /vmlinuz root=/dev/sda2
initrd /initramfs-.img
方法2:
chroot /mnt/sysimage
df -h
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
cp /mnt/cdrom/isolinux/vmlinuz /boot/vmlinuz
mkinitrd /boot/initramfs.img `uname -r`
grub-install /dev/sda
vim /boot/grub/grub.conf     #手寫grub.conf
default=0
timeout=3
title centos
root (hd0,0)
kernel /vmlinuz root=/dev/sda2
initrd /initramfs.img

由于在/etc/fstab里設置了某個必需自檢的設備損壞導致無法進入系統
vim /mnt/sysimage/etc/fstab    #將該損壞的設備的自檢對應值設為0

刪除/etc/fstab,普通分區(rm -rf /etc/fstab)
18-系統啟動故障修復-實踐

#恢復/etc/fstab文件
fdisk -l     #根據分區大小,猜測分區
blkid
mkdir /mnt/tmp
mout /dev/sda2 /mnt/tmp     #嘗試掛載各個分區
ls /mnt/tmp     #通過內容猜測分區原來的掛載點
vi /mnt/root/etc/fsatb
/dev/sda1 /boot     ext4 defaults 0 0
/dev/sda2 /     ext4 defaults 0 0 
/dev/sda3 /home    ext4 defaults 0 0
/dev/sda4 swap 
#按猜測到的狀態掛載分區
mkdir /mnt/root
mount /dev/sda2 /mnt/root
mount /dev/sda1 /mnt/root/boot

刪除/boot/和/etc/fstab,普通分區(rm -rf /boot/ /etc/fstab)
#先恢復/etc/fstab文件
fdisk -l     #根據分區大小,猜測分區
blkid     #
mkdir /mnt/tmp
mout /dev/sda2 /mnt/tmp     #嘗試掛載各個分區
ls /mnt/tmp     #通過內容猜測分區原來的掛載點
vi /mnt/root/etc/fsatb
/dev/sda1 /boot     ext4 defaults 0 0
/dev/sda2 /     ext4 defaults 0 0 
/dev/sda3 /home    ext4 defaults 0 0
/dev/sda4 swap 
#按猜測到的狀態掛載分區
mkdir /mnt/root
mount /dev/sda2 /mnt/root
mount /dev/sda1 /mnt/root/boot
#再恢復/boot
#啟動后查看
fdisk -l
mount
df -h

刪除/boot/和/etc/fstab,邏輯卷LVM(rm -rf /boot/ /etc/fstab)
#恢復/etc/fstab
lvs     #查看lv信息:vg和lv名字
vgchange -ay     #激活所有卷組
ls /mnt/sysimage
vim /mnt/sysimage/etc/fstab
/dev/vg0/root     /     ext4 defalults 0 0 
/dev/vg0/var     /var/     ext4 defaults 0 0
/dev/vg0/usr     /usr     ext4 defaults 0 0
/dev/sda1     /boot     ext4 defaults 0 0
/dev/vg0/swap swap swap defaults 0 0
#掛載分區
mkdir /mnt/root
mount /dev/vg0/root /mnt/root
mount /dev/sda1 /mnt/root/boot
mount /dev/vg0/var /mnt/root/var
mount /dev/vg0/usr /mnt/root/usr
#恢復/boot
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
cp /mnt/cdrom/isolinux/vmlinuz /boot/vmlinuz
mkinitrd /mnt/root/boot/initramfs.img `uname -r`
vim /boot/grub/grub.conf     #手寫grub.conf
default=0
timeout=3
title centos
root (hd0,0)
kernel /vmlinuz root=/dev/sda2
initrd /initramfs.img
刪除/sbin/init(rm -rf /sbin/init)
在vmlinuz所在行末尾添加 init=/bin/bash
從另外一個系統拷貝/sbin/init文件過來

原創文章,作者:Leion,如若轉載,請注明出處:http://www.www58058.com/72341

(0)
LeionLeion
上一篇 2017-04-02 20:29
下一篇 2017-04-02 21:10

相關推薦

  • 第十七周 作業–結合圖形描述lvs原理

        LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集群系統。本項目在1998年5月由章文嵩博士成立,是中國國內最早出現的自由軟件項目之一。   Lvs有三種模式分別是lvs-nat、lvs-dr、lvs-tun。下面分別介紹lvs-nat、lvs-dr…

    Linux干貨 2016-12-07
  • Linux 文件系統上的權限

    文件系統上的權限是指文件系統上的文件和目錄的權限,由于Linux是一種多用戶的操作系統,而且允許同一時間登錄多個用戶操作,所以我們就需要一定的管理機制來對限定不同用戶對同一文件或目錄的操作權限。 文件系統上的權限主要針對三類對象(訪問者)進行定義: owner:屬主 u; g 屬組 group; o: 其它 other 每個文件針對每類訪問者都定義了三種權限…

    2017-06-04
  • 源碼編譯安裝Apache

    編譯安裝Apache 系統環境:centos 7.2 前提: 提供開發工具及開發環境 開發工具:make, gcc等 開發環境:開發庫,頭文件 glibc:標準庫 方式: 通過“包組”提供開發組件 centos 6 [root@centos6 ~]# yum groupinstall "Develo…

    Linux干貨 2016-08-24
  • cp復制軟鏈接失效的原因

    在學習cp命令時我們會知道復制軟鏈接時,如果要保留鏈接文件使用-d,但當我們實際操作時卻常常出現如下情況 [root@localhost ~]# ls -l /etc/redhat-release     #此文件為鏈接文件 lrwxrwxrwx. …

    Linux干貨 2016-10-25
  • Ubuntu 葵花寶典入門篇——要練此功,可能得自宮?

        此文章給初入ubuntu的小伙伴們寫一篇裝機篇和使用心得。第二期會給小伙伴介紹軟件安裝篇。如題目所說,烏班圖確實是葵花寶典,練好了天下無敵。只是如果要安裝UBUNTU系統,只是在虛擬機上跑跑是不夠的,你必須在實際的桌面環境和服務器環境上才能體會到它的運行方式,而桌面環境和服務器環境幾乎差不多。所以安裝桌面版可以更好的理解…

    Linux干貨 2017-03-26
  • Linux中/etc目錄下常用的配置文件及其含義總結

         在linux中有一個很重要的思想就是一切皆文件,也就是說所有的系統參數的配置都是保存在各種各樣的配置文件當中的,這點Linux和Windows有很大的差別。      因為Linux中有眾多配置文件,學習起來難免會不容易記憶,所以在此把一些常用的配置文件記錄下來,做一個歸納總結。根據FHS…

    Linux干貨 2017-03-26
欧美性久久久久