Centos 6
實驗環境:VMware Workstation Pro 14(試用版)
系統平台:
CentOS release 6.9 (Final) 核心 2.6.32-696.el6.x86_64
ramdisk(ramfs)丢失損壞
核心中的特性之一:使用緩沖和緩存來加速對磁盤上的檔案通路,并加載相應的硬體驅動
沒有此檔案,系統無法加載 / 分區,也就無法啟動系統。
CentOS 5 檔案名: initrd
CentOS 6,7檔案名: initramfs
當系統的ramfs檔案丢失或損壞時,系統啟動時表現為
修複如下:
進入救援模式,重新生成ramdisk檔案即可。
為目前正在使用的核心重新制作ramdisk檔案,以下2種指令都可以。
# mkinitrd initramfs-`uname -r`.img `uname -r`
# dracut initramfs-`uname -r`.img `uname -r`
GRUB相關
MBR:
446: bootloader, 64: 分區表, 2: 55AA
GRUB:
階段
存放位置
作用
stage1
MBR的446位元組内
MBR引導
stage1_5
MBR之後的27個扇區
讓stage1中的bootloader能識别stage2所在的分區上的檔案系統,這個階段可以加載驅動
stage2
/boot/grub(grub2)
grub的核心功能
stage1是以二進制存放于磁盤,并不是檔案形式。
/boot/grub下的檔案為:
主要是驅動與grub配置檔案。這個目錄下的檔案隻保留grub.conf的時候,系統是可以正常啟動的
stage1破壞修複
stage1也就是bootloader所在,
模拟破壞(請不拿生産中的機器來做試驗,本人不負責任)
#dd if=/dev/zero of=/dev/sda bs=1 count=446
系統啟動時表現為
1.進入救援模式
2.啟動一個shell
3.切換至原系統的根目錄,一般救援模式進來的時候會提醒.(假如能找到/檔案系統)
# chroot /mnt/sysimage
4.安裝grub
方法(1) grub-install
安裝grub stage1和stage1_5到/dev/DISK磁盤上,并複制GRUB相關檔案到 DIR/boot目錄下
grub-install /dev/DISK .注意,是磁盤而非分區。--root-directory=DIR 參數可選
此方法會一并重新生成/boot/grub下除了grub.conf之外的檔案
方法(2) grub
grub> root (hd#,#)
grub> setup (hd#)
可以看到系統已經寫入GRUB資訊至MBR
第2種方法修複時,需要/boot/grub下有這些檔案
# ls -1
device.map e2fs_stage1_5 fat_stage1_5 ffs_stage1_5 grub.conf iso9660_stage1_5 jfs_stage1_5
menu.lst minix_stage1_5 reiserfs_stage1_5 splash.xpm.gz stage1 stage2 ufs2_stage1_5
vstafs_stage1_5 xfs_stage1_5
5.重新開機系統
#exit 并reboot
開機直接出現grub>
grub> root (hd#,#) root目錄指的是/boot分區所在的磁盤位置。
grub> setup (hd#)
小提示:root (hd0,然後按tab鍵補全,會有如下顯示
輸入kernel /vm 按tab鍵如果可以補全則說明是正确的,接着輸入ro root=/dev/sda1 回車.注意(hd0,0)=/dev/sda1 (hd0,1)=/dev/sda2如圖
接着輸入initrd /ini 按tab鍵補全,回車
輸入boot指令,這時系統會重新啟動
stage1.5破壞修複
模拟破壞
# dd if=/dev/zero of=/dev/sda bs=1 count=13000 skip=512 seek=512
進入救援模式
1.# chroot /mnt/sysimage
2.安裝grub (上面有方法)
3.多輸入幾次sync
4.#exit并reboot
stage2破壞修複
grub.conf丢失
3.檢查/boot/grub/grub.conf是否存在且正确
4.重新開機系統
核心檔案被破壞
2.touch 一個檔案 /boot檢查磁盤是可寫,如果為隻讀,mount -o remount,rw /dev/sdX /boot
3.如果挂載的救援模式是原ISO的DVD1的話,裡面會有核心檔案,如果沒有DVD1CD光牒,請去其他地方下載下傳同一核心版本的rpm包。
執行安裝指令
# rpm -ivh /CD光牒位置或指定位置/Packages/kernel-2.6.32-696.el6.x86_64.rpm --force
/sbin/init 丢失破壞
# rm -rf /sbin/init
此時輸入什麼都是報錯誤的
1.重新開機系統至引導菜單,注意按上下箭頭,以免逾時跳過去。按 e
2 在kernel一行中,按 e 編輯
使用 /bin/bash 代替sbin/init
按 b 啟動系統
任意輸入一條指令,如果能出來結果,表示 系統啟用/bin/bash為第一個程序
3. 重新挂載 / 分區為 讀寫模式
#mount -o remount,rw /
4 挂載CD光牒
# mount /dev/sr0 /mnt
5.重新安裝/sbin/init 。此執行檔案對應的安裝為upstart 各個作業系統版本不一樣,注意即可。
# rpm -ivh /mnt/Packages/upstart-0.6.5-16.el6.x86_64.rpm --force
使用以下方法也能達到同樣效果:
# rpm2cpio /mnt/Packages/upstart-0.6.5-16.el6.x86_64.rpm | cpio -idv ./sbin/init
# cp sbin/init /sbin/
6. # ls /sbin/init 是否已經生成。
7.直接按硬體按鈕的重新開機吧
至此,修複完成
邏輯卷環境下 /boot分區破壞,/etc/fstab丢失
原先的系統是以LVM卷方式安裝的
# rm -rf /boot/ /etc/fstab
會提示
啟動shell
1.#vgs 檢視下VG卷
2. #fdisk -l找出原來系統的boot分區,帶*号啟動的應該是/boot
3.#lvdisplay檢視LV卷狀态,可以看到是未激活狀态
4 .# vgchange -ay 激活VG卷
5 #lvdisplay檢視LV卷狀态,可以看到是已激活狀态
6 #blkid 能看到分區檔案系統和挂載路徑和UUID
7.建立臨時目錄挂載找到的分區,确認/和/boot分區。注意,這裡是支援TAB鍵補全的。
# mkdir /mnt/root
# mount /dev/VolGroup/lv_root /mnt/root
# mkdir /mnt/boot 正常情況,因為是使用rm -rf /boot 挂載時應該是沒有任何檔案的
# mount /dev/sda1 /mnt/boot
8 cat /etc/mtab 能看到目前挂載情況
9 建立原有系統的fstab ,注意這裡生成的檔案位置
#cat > /mnt/root/etc/fstab << eof
/dev/mapper/VolGroup-lv_root / ext4 defaults 0 0
/dev/sda1 /boot ext4 defaults 0 0
eof
10 #exit 選reboot
11.再次進入救援模式
現在救援模式能偵測到根系統了
按照向導開啟shell
12 # chroot /mnt/sysimage
#lsblk 可以看出原有系統的挂載情況了
13 挂載CD光牒
# mkdir /mnt/cdrom
# mount /dev/cdrom /mnt/cdrom
14 安裝核心
# rpm -ivh /mnt/cdrom/Packages/kernel-2.6.32-696.el6.x86_64.rpm --force
15 修複Grub
# grub-install /dev/sda
16 修複grub.conf
# vi /boot/grub/grub.conf ,可以使用vi的指令這些功能
列出指令結果到目前編輯行的下一行,支援TAB補全
列出裝置的UUID
最終寫好的檔案如下
#exit 重新開機
如果啟用了selinux的話,系統會在第一次重新開機時進行配置、
第二次重新啟動時,系統就正常了。之後再把把
17 把swap添加到fstab,并啟用
UUID=8e0a6121-97d7-4c70-b113-bbe4cefe0380 swap swap defaults 0 0
# swapon -a
建議把fstab檔案重新修正為使用UUID方式
至此,系統修複完成。
手動在grub指令行接口啟動系統
grub> kernel /vmlinuz-VERSION-RELEASE ro
root=/dev/DEVICE
grub> initrd /initramfs-VERSION-RELEASE.img
grub> boot
root密碼破解
方法1:
1.重新開機系統至引導菜單,注意按上下箭頭,以免逾時跳過去。
按 a ,健入以下字元,1代表是單使用者模式
1, s, S或single都可以,之後直接回車啟動系統
無需要輸入密碼就以root身份進入系統了,直接passwd root修改
方法2:
進入救援模式,chroot /mnt/sysimage 之後,直拉用passwd root修改
方法3:
進入救援模式,chroot /mnt/sysimage 之後,直接修改/etc/shadow ,把root的密碼欄位清空。需要vi時加入wq!
不過,重新開機後注意盡快修改密碼
grub加密
當然,既然有破解密碼的,也有相應加強安全的.
将下面一行放入不同位置将會有不同的效果
password [--md5|--encrypted ] 加密的字元串
放在每個title之前行 : 啟動grub菜單時進行進行認證
放在每個title之末尾行 : 啟動標明的核心或作業系統時進行認證
生成grub密碼
grub-md5-crypt 對應的是--md5
grub-crypt 對應的是--encrypted
Centos 7
CentOS Linux release 7.4.1708 (Core) 核心 3.10.0-693.el7.x86_64
模拟stage1 stage1.5 stage2 階段破壞
# dd if=/dev/zero of=/dev/sda bs=1 count=446
# rm -rf /boot



系統發現根系統

2. 切換至待修複的根系統

檢視到/dev/sda确實沒有MBR資訊

3.修複Grub
# grub2-install /dev/sda .注意,是磁盤而非分區

4.安裝核心
挂載CD光牒
如果挂載的救援模式是原ISO的DVD1的話,裡面會有核心檔案,如果沒有DVD1CD光牒,請去其他地方下載下傳同一核心版本的rpm包。
# rpm -ivh /CD光牒位置或指定位置/Packages/kernel-3.10.0-693.el7.x86_64.rpm --force

5.生成gurb配置檔案
注意這一步不能和第4步颠倒
# grub2-mkconfig -o /boot/grub2/grub.cfg

6.儲存并重新開機
# exit
#sync
#reboot
Centos 7修複與Centos 6相差不大,隻是使用的指令有些不同。
本文轉自 ljpwinxp 51CTO部落格,原文連結:http://blog.51cto.com/191226139/2058884