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