模拟系统故障及排除
模擬系統故障及排除
? 實驗背景:在維護Linux服務器的過程中,準確把握故障發生的原因是最終排除故障、解決問題的關鍵。通過對常見系統故障的模擬和分析排除,有助于管理員快速了解故障點,熟悉“對癥下藥”的Trouble Shooting思路。
實驗思路:
1.模擬磁盤/dev/sda的MBR故障,并執行修復。
2.模擬GRUB文件丟失故障,并執行修復。
3.模擬EXT3分區超級塊故障,并執行修復。
4. ? 系統密碼遺忘,進入單用戶模式修改。
實驗實踐:
1.使用cp制作光盤鏡像、使用dd實現設備復制。
1)cp直接讀設備(而不是掛載點)來拷貝:
# cp /dev/hdc /root/vmtools-linux.iso ? ? //拷貝光盤
#ll /root/vmtools-linux.iso ?
# file /root/vmtools-linux.iso ? ? //查看制作的文件類型
?以回環設備loop的方式掛載新制作的iso文件,檢查是否與光盤一致:
# mkdir /tmp/vmtools
# mount -o loop /root/vmtools-linux.iso /tmp/vmtools/
# ls /tmp/vmtools/
manifest.txt VMwareTools-9.2.2-893683.tar.gz
2)使用dd設備讀寫的方式制作光盤鏡像(推薦)
直接if=指定輸入設備,of指定輸出設備,執行設備復制:
#dd if=/dev/hdc of=/root/vmtools-linux-dd.iso
2.系統故障排除
1.模擬磁盤/dev/sda的MBR故障,并執行修復(加一塊磁盤sdb后分區格式化)
1)備份磁盤/dev/sda的MBR扇區
#df -hT /home
# dd if=/dev/sda of=/home/sda.mbr bs=512 count=1 //使用dd命令復制/dev/sda設備的第一個扇區(512字節),注意此處的sda.mbr不需要提前手動創建
#ls -l /home/sda.mbr
#mount /dev/sdb1 /media
#cp /home/sda.mbr ?/media
2)模擬對MBR扇區的破壞
# dd if=/dev/zero of=/dev/sda bs=512 count=1 ? ? //破壞MBR
#reboot//重啟
?##############################################
重啟系統后,因磁盤sda的MBR被破壞而無法找到分區表,從而也就無法加載Linux操作系統。如果網絡啟動或光盤啟動也失敗,則提示“Operating System not found“ 或者頁面暫停在 ?”dhcp/“
###############################################
3)進入RHEL 5光盤的救援模式
電源連接光盤,然后重啟虛擬機電源,默認將從光盤引導。待出現“boot:”提示界面時,輸入“linux rescue”指令
?此后將逐步進入RHEL 5光盤提供的救援模式,大部分交互接受默認即可。
?首先選擇要使用的語言,救援模式為命令行、不支持中文,因此接受默認的“English”,按Tab鍵定位到“Ok”后回車;
?然后選擇要使用的鍵盤類型,也接受默認設置;
?接下來選擇是否使用網絡,一般選擇“No”;
?再接下來會嘗試自動查找待修復的Linux系統,如果找到的話會自動將根分區掛載到光盤臨時系統的/mnt/sysp_w_picpath目錄。這里因為MBR損壞而無法讀取分區表,所以肯定是找不到的啦,接受默認的“Continue”繼續或“Skip”跳過都可以;
?提示是否初始化磁盤并刪除所有數據時(如果有多塊磁盤會提示多次),均選擇“No”;
?最終用戶將獲得一個在內存中運行的臨時Shell環境,從而可以執行大部分系統管理命令,進一步完成各種修復任務。
4)在救援模式下通過備份文件修復MBR
#mkdir /mnt/home//創建掛載點文件夾
#mount /dev/sdb1 /mnt/home //這里sdb1已經存放有mbr備份
#ls -l /mnt/home/sda.mbr
#dd if=/mnt/home.sda.mbr of=/dev/sda//使用dd命令執行恢復 ? ,讀取備份文件sda.mbr,覆蓋磁盤/dev/sda的第一個扇區
#exit//完成后,執行exit退出臨時Shell環境,系統將會自動重啟
2.模擬GRUB文件丟失故障,并執行修復
# rm -rf /boot/grub/grub.conf//直接刪除grub的配置文件
#ls -lh /boot/grub/grub.conf ? ? ? ? //確認刪除成功
#reboot
################################################
?重啟后會停滯在“grub>”提示符,因找不到內核等引導文件而無法進入系統。這個屬于MBR扇區中的引導程序好使,但找不到有效的啟動配置:
################################################
1.)grub>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//grub啟動配置丟失后,啟動時的停滯提示
2)重建GRUB引導程序、恢復grub.conf配置文件
如果系統沒有重啟而且有grub配置文件的備份時,可以
?參考前面以RHEL 5光盤啟動,并進入“linux rescue”救援模式。注意當提示是否探測(如圖-8所示)待修復的操作系統時,選擇“Continue”,找到并掛載成功后會提示用戶確認。
?這樣在修復時就可以直接到/mnt/sysp_w_picpath找到原來Linux的根目錄了。
#chroot /mnt/sysp_w_picpath//切換到待修復Linux的根環境
#cd /boot/grub
#cp grub.conf.bak grub.conf
#grub-install /dev/sda//重建grub引導程序
#exit
#exit//執行兩次exit(先退出chroot環境、再退出救援模式),系統將會自動重啟,重啟后原有的Linux系統即可恢復正常。
?如果系統沒有備份grub.conf,或者刪除整個grub目錄丟失,就需要自己手動寫:
重建grub引導
grub>root (hd0,0)//系統啟動流程,進入到/boot
? ?kernel /vm... ? ro root=/dev/sda2//選擇內核,只讀 +主分區
? ?initrd /init...//選擇init的鏡像問價
? ?boot//重新加載
此時可以重新進入系統,但是grub的配置文件是不存在的,現在就需要我們自己寫一個grub.conf:
default=0
timeout=5
title Red Hat Enterprise Linux Server //名字隨便起
? ? ? ?root (hd0,0)
? ? ? ?kernel /vmlinuz-2.6.18-348.el5 ro root=LABEL=/ rhgb quiet
? ? ? ?initrd /initrd-2.6.18-348.el5.img
//內核的名字與init鏡像名字存放在/boot目錄下,可以ls /boot,復制過來
#reboot//重啟能成功
3。/etc/inittab 文件丟失
###############################################
?inittab會啟動腳本,進行初始化,然后選擇運行級別,啟動服務,文件丟失后系統不知道怎么啟動或者不知道啟動哪個級別,啟動會提示Enter runlevel,刪除后會找不到系統運行級別, 或者提示 ”init :no initab file found“
###############################################
光盤啟動,進入救援模式,linux ?rescue,找到/mnt/sysp_w_picpath
#chroot /mnt/sysp_w_picpath //改為主機系統路徑
#mkdir date1
#mount /dev/hdc /date1 ? ?//不能掛載到mnt,因為掛載上之后原有 ? ? ? ? ? ? ? ? ?的問價將會被覆蓋,而我們還要用到mnt下的文件,這里的光盤路 ? ? ? ? ? ? ? ? ? ? ? ?徑不能用/dev/cdrom鏈接路徑,因為這種模式下不能識別
#cd /date1/Server
#ls
#rpm -ivh --force xxx.rpm ?//覆蓋安裝(刪除/etc/inittab),強制執行
#exit
#exit
4。模擬EXT3分區超級塊故障,并執行修復
? ? 重新進入修復好的Linux系統,選擇/dev/sdb1做超級塊破壞實驗,了解相關的故障現象及修復辦法。
1)破壞/dev/sdb1的超級塊
使用dd命令將/dev/sdb1的前4個扇區清零:
[# dd if=/dev/zero of=/dev/sdb1 count=512 count=4
?然后卸載/dev/sdb1,嘗試重新掛載到/home時將會失敗,因為超級塊被破壞而導致無法識別該設備上的文件系統:
# umount /dev/sdb1 ? ? ? ? ? ? ? ? ? ? //若已經掛載,則先卸載
# mount /dev/sdb1 /home ? ? ? ? ? ? ? ? //重新掛載失敗
2)修復建立在/dev/sdb1上的EXT3文件系統
使用fsck命令可執行修復,通過“-t ext3”指定文件系統類型、“-y”自動對出現的交互選擇“yes”確認:
# fsck -y -t ext3 /dev/sdb1
?執行第2次修復(第1次因塊數據不完整,可能只修復部分):
#~]# fsck -y -t ext3 /dev/sdb1
根據實際情況,可能還需要再執行幾次fsck,直到最后提示“clean”為止,表示該文件系統已經完好無損:
3)檢查完畢后,再次將其掛載到/home/目錄,確認掛載結果:
#mount /dev/sdb1 /home
#ls /home#重新掛載成功,顯示文件
5.修改密碼
?當忘記root用戶的密碼時,將無法登錄Linux系統執行管理、維護等任務,而只能通過其他用戶(普通用戶)登錄使用一些受限制的功能。
最簡單的方法是“單用戶模式” —— 開機時通過修改GRUB引導參數進入系統,這種情況下不需要提供口令即獲得最高系統權限,從而有機會重設root口令。稍微復雜一點的途徑是:以RHEL 5光盤進入救援模式,chroot到待修復的Linux系統后,再重設root用戶的口令。
進入單用戶模式并重設root口令的操作步驟如下所述。
1)重啟Linux并編輯GRUB引導參數
重啟系統到GRUB菜單界面后,按箭頭鍵定位到要進入的系統選擇項,比如“Red Hat Enterprise Linux Server”,然后按e鍵進入編輯狀態。
2)修改kernel引導行,添加單用戶模式參數
找到kernel行,再次按e鍵,在行尾添加“single”(或“s”、“1”)
3)以修改后的kernel配置進入Linux系統
回車確認后,返回到修改后的kernel引導界面,按b鍵啟動系統進入單用戶模式,直接獲得“#”特權Shell環境(不需要口令驗證)。
4)在單用戶模式的Shell環境中,重設root口令
進入Shell環境后,即可使用passwd命令重設root用戶的口令
實驗總結:
附上linux備份策略:
1,tar完全備份
-N ?yyyy-mm-dd備份..時間后更新的文檔
文件看ctime
目錄看atime
-p保留原有屬性權限
-P保留原有絕對路徑不變
--exclude ?排除不需要備份的文檔
2,touch:修改文件時間和創建新文件
atime:文件的內容被取用,如cat//access time
mtime:文件內容數據更改//modify time
ctime:文件的狀態改變,如權限與屬性//change time
? ls -lu ?查看atime
? ? ?-l ? 查看mtime
? ? ?-lc ?查看ctime
3,stat: 查看對應文件的響應時間信息
4,dump -級別 [選項]... -f 備份位置 ?源數據
-0 ?完全備份 1備份0后的更改,2備份1后的更改
-j ?啟用bzip2
-S ?檢查本次備份需要多少磁盤空間
-W ?檢查已標記dump分區是否備份過
4,restore ?[選項]... ?-f ?備份位置 ?
-t ?查看備份文檔列表
-r ?還原
5,dd if="從哪里來" ?of="到哪里去" bs="block_size" count="number"
bs 一個block大小,默認值512bytes
? ? ? ? ? ? ? ?count 多少個bs的意思
/dev/zero
/dev/null
linux 6.0版本上的進入單用戶模式,進行密碼修改,在修改之前要先關閉setenforce服務: setenforce 0 ? //1表示開始,0表示關閉
轉載于:https://blog.51cto.com/xujpxm/1365255
總結
- 上一篇: ftime()函数的用法----算函数运
- 下一篇: Windows Phone开发(37):