天天看點

模拟系統故障及排除

模拟系統故障及排除

  實驗背景:在維護Linux伺服器的過程中,準确把握故障發生的原因是最終排除故障、解決問題的關鍵。通過對常見系統故障的模拟和分析排除,有助于管理者快速了解故障點,熟悉“對症下藥”的Trouble Shooting思路。

實驗思路:

1.模拟磁盤/dev/sda的MBR故障,并執行修複。

2.模拟GRUB檔案丢失故障,并執行修複。

3.模拟EXT3分區超級塊故障,并執行修複。

4.   系統密碼遺忘,進入單使用者模式修改。

實驗實踐:

1.使用cp制作CD光牒鏡像、使用dd實作裝置複制。

1)cp直接讀裝置(而不是挂載點)來拷貝:

# cp /dev/hdc /root/vmtools-linux.iso     //拷貝CD光牒

#ll /root/vmtools-linux.iso  

# file /root/vmtools-linux.iso     //檢視制作的檔案類型

 以回環裝置loop的方式挂載新制作的iso檔案,檢查是否與CD光牒一緻:

# 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裝置讀寫的方式制作CD光牒鏡像(推薦)

直接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作業系統。如果網絡啟動或CD光牒啟動也失敗,則提示“Operating System not found“ 或者頁面暫停在  ”dhcp/“

###############################################

3)進入RHEL 5CD光牒的救援模式

電源連接配接CD光牒,然後重新開機虛拟機電源,預設将從CD光牒引導。待出現“boot:”提示界面時,輸入“linux rescue”指令

 此後将逐漸進入RHEL 5CD光牒提供的救援模式,大部分互動接受預設即可。

 首先選擇要使用的語言,救援模式為指令行、不支援中文,是以接受預設的“English”,按Tab鍵定位到“Ok”後回車;

 然後選擇要使用的鍵盤類型,也接受預設設定;

 接下來選擇是否使用網絡,一般選擇“No”;

 再接下來會嘗試自動查找待修複的Linux系統,如果找到的話會自動将根分區挂載到CD光牒臨時系統的/mnt/sysimage目錄。這裡因為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 5CD光牒啟動,并進入“linux rescue”救援模式。注意當提示是否探測(如圖-8所示)待修複的作業系統時,選擇“Continue”,找到并挂載成功後會提示使用者确認。

 這樣在修複時就可以直接到/mnt/sysimage找到原來Linux的根目錄了。

#chroot /mnt/sysimage//切換到待修複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“

CD光牒啟動,進入救援模式,linux  rescue,找到/mnt/sysimage

#chroot /mnt/sysimage //改為主機系統路徑

#mkdir date1

#mount /dev/hdc /date1    //不能挂載到mnt,因為挂載上之後原有                  的問價将會被覆寫,而我們還要用到mnt下的檔案,這裡的CD光牒路                        徑不能用/dev/cdrom連結路徑,因為這種模式下不能識别

#cd /date1/Server

#ls

#rpm -ivh --force xxx.rpm  //覆寫安裝(删除/etc/inittab),強制執行

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 5CD光牒進入救援模式,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

      本文轉自Jx戰壕  51CTO部落格,原文連結:http://blog.51cto.com/xujpxm/1365255,如需轉載請自行聯系原作者

繼續閱讀