linux 系统盘无法ls,系统故障排除
1.系統故障排除
1)模擬磁盤/dev/sda的MBR故障,并執行修復
01.備份磁盤/dev/sda的MBR扇區
選擇一個/dev/sda以外的文件系統(比如/dev/sdb1)來存放備份文件:
[root@svr5 ~]# df -hT/home//選擇/dev/sdb1存放備份
文件系統???????? 類型???? 容量???? 已用???? 可用???? 已用%???? 掛載點
/dev/sdb1???? ext3????19G????? 173M???? 18G?????1%? ????/home
使用dd命令復制/dev/sda設備的第一個扇區(512字節):
[root@svr5 ~]# dd if=/dev/sdaof=/home/sda.mbr bs=512 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.013492 seconds,37.9 kB/s
確認已存放到/dev/sdb1下的備份文件:
[root@svr5 ~]# ls -l /home/sda.mbr
-rw-r--r-- 1 root root 512 10-15 15:50/home/sda.mbr
02.模擬對MBR扇區的破壞
使用dd命令對MBR扇區清零,然后重啟系統:
[root@svr5 ~]# dd if=/dev/zero of=/dev/sdabs=512 count=1//破壞MBR
1+0 records in
1+0 records out
512 bytes (512 B) copied, 2e-05 seconds, 26MB/s
[root@svr5 ~]# reboot//重啟系統
.. ..
重啟系統后,因磁盤sda的MBR被破壞而無法找到分區表,從而也就無法加載Linux操作系統。如果網絡啟動或光盤啟動也失敗,則提示“Operating System not found”而停滯,如圖-2所示。
圖-2
03.進入RHEL 5光盤的救援模式
修改RHEL 5虛擬機的光盤設置,將其改為RHEL 5系統的.iso安裝鏡像文件,比如rhel-server-5.9-x86_64-dvd.iso,如圖-3所示。
圖-3
然后重啟虛擬機電源,默認將從光盤引導。待出現“boot:”提示界面時,輸入“linux rescue”指令,如圖-4所示,按回車鍵。
圖-4
此后將逐步進入RHEL 5光盤提供的救援模式,大部分交互接受默認即可。
首先選擇要使用的語言,救援模式為命令行、不支持中文,因此接受默認的“English”,按Tab鍵定位到“Ok”后回車,如圖-5所示。
圖-5
然后選擇要使用的鍵盤類型,也接受默認設置,如圖-6所示。
圖-6
接下來選擇是否使用網絡,一般選擇“No”,如圖-7所示,否則根據提示設置好網絡參數即可。
圖-7
再接下來會嘗試自動查找待修復的Linux系統,如果找到的話會自動將根分區掛載到光盤臨時系統的/mnt/sysp_w_picpath目錄。這里因為MBR損壞而無法讀取分區表,所以肯定是找不到的啦,接受默認的“Continue”繼續或“Skip”跳過都可以,如圖-8所示。
圖-8
提示是否初始化磁盤并刪除所有數據時(如果有多塊磁盤會提示多次),均選擇“No”,如圖-9所示。
圖-9
找不到待修復的Linux系統時,會提示用戶知曉,如圖-10所示,回車確認即可。
圖-10
最終用戶將獲得一個在內存中運行的臨時Shell環境,如圖-11所示,從而可以執行大部分系統管理命令,進一步完成各種修復任務。
圖-11
04.在救援模式下通過備份文件修復MBR
創建掛載點文件夾,并掛載存放備份文件的/dev/sdb1分區,如圖-12所示,確認備份文件。
圖-12
使用dd命令執行恢復,讀取備份文件sda.mbr,覆蓋磁盤/dev/sda的第一個扇區,如圖-13所示。
圖-13
完成后,執行exit退出臨時Shell環境,系統將會自動重啟,如圖-14所示。重啟后原有Linux系統即可恢復正常。
圖-14
注意:萬一重啟后出現“GRUB_”提示符后停止、仍然無法進入系統,如圖-15所示,請參考接下來的GRUB修復操作。
圖-15
2)模擬GRUB文件丟失故障,并執行修復
01.??備份grub.conf配置文件,破壞GRUB引導程序
在正常的Linux操作系統中,轉移grub.conf配置文件并重啟后可模擬引導故障,或者像前一節的MBR示例中,有時恢復不完整也會出現異常,癥狀如圖-15所示。
如果是手動轉移grub.conf配置文件,可參考以下操作:
[root@svr5 ~]# mv/boot/grub/grub.conf /boot/grub/grub.conf.bak
//轉移grub.conf文件
[root@svr5 ~]# ls -lh/boot/grub/grub.conf//確認轉移結果
ls: /boot/grub/grub.conf:沒有那個文件或目錄
[root@svr5 ~]# reboot//重啟系統
重啟后會停滯在“grub>”提示符,因找不到內核等引導文件而無法進入系統。這個屬于MBR扇區中的引導程序好使,但找不到有效的啟動配置:
grub>//grub啟動配置丟失后,啟動時的停滯提示
02.??重建GRUB引導程序、恢復grub.conf配置文件
參考前一節以RHEL 5光盤啟動,并進入“linux rescue”救援模式。注意當提示是否探測(如圖-8所示)待修復的操作系統時,選擇“Continue”,找到并掛載成功后會提示用戶確認,如圖-16所示。
圖-16
這樣在修復時就可以直接到/mnt/sysp_w_picpath找到原來Linux的根目錄了。
在救援模式的臨時Shell環境下,執行“chroot /mnt/sysp_w_picpath”切換到待修復Linux的根環境,然后從備份恢復grub.conf配置文件,并執行“grub-install /dev/sda”在磁盤sda上重建GRUB引導程序,如圖-17所示。
圖-17
確認修復完畢后,執行兩次exit(先退出chroot環境、再退出救援模式),系統將會自動重啟,如圖-18所示。重啟后原有的Linux系統即可恢復正常。
圖-18
3)模擬EXT3分區超級塊故障,并執行修復
重新進入修復好的Linux系統,選擇/dev/sdb1做超級塊破壞實驗,了解相關的故障現象及修復辦法。
01.備份/dev/sdb1的超級塊
理論上此步驟可不做,保險起見還是做一下(必要時,其中的文檔最好也備份),萬一后面修復不好還有機會還原。若要破壞EXT3文件系統的超級塊,一般將前4個扇區dd清零就差不多了,所以備份也保存這4個塊:
[root@svr5 ~]# dd if=/dev/sdb1of=/root/sdb1.sblock count=512 count=4
4+0 records in
4+0 records out
2048 bytes (2.0 kB) copied, 4.5e-05seconds, 45.5 MB/s
[root@svr5 ~]# ls -l /root/sdb1.sblock???????????? //確認備份文件
-rw-r--r-- 1 root root 2048 10-15 17:31/root/sdb1.sblock
02.破壞/dev/sdb1的超級塊
使用dd命令將/dev/sdb1的前4個扇區清零:
[root@svr5 ~]# dd if=/dev/zero of=/dev/sdb1count=512 count=4
4+0 records in
4+0 records out
2048 bytes (2.0 kB) copied, 2.7e-05 seconds,75.9 MB/s
然后卸載/dev/sdb1,嘗試重新掛載到/home時將會失敗,因為超級塊被破壞而導致無法識別該設備上的文件系統:
[root@svr5~]# umount /dev/sdb1????????????????????//若已經掛載,則先卸載
[root@svr5 ~]# mount/dev/sdb1 /home???????????????? //重新掛載失敗
mount: you must specify the filesystem type
03.修復建立在/dev/sdb1上的EXT3文件系統
使用fsck命令可執行修復,通過“-t ext3”指定文件系統類型、“-y”自動對出現的交互選擇“yes”確認:
[root@svr5 ~]# fsck -y -t ext3 /dev/sdb1
fsck 1.39 (29-May-2006)
e2fsck 1.39 (29-May-2006)
Couldn't find ext2 superblock, tryingbackup blocks...
/dev/sdb1: recovering journal
fsck.ext3: unable to set superblock flagson /dev/sdb1
執行第2次修復(第1次因塊數據不完整,可能只修復部分):
[root@svr5 ~]# fsck -y -t ext3 /dev/sdb1
fsck 1.39 (29-May-2006)
e2fsck 1.39 (29-May-2006)
/dev/sdb1 was not cleanly unmounted, checkforced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong for group #2(32257, counted=32249).
Fix? yes
Free blocks count wrong for group #3(31232, counted=31224).
Fix? Yes
.. ..
Directories count wrong for group #143 (0,counted=4).
Fix? yes
Free inodes count wrong (2443189, counted=2443058).
Fix? yes
/dev/sdb1: ***** FILE SYSTEM WAS MODIFIED*****
/dev/sdb1:142/2443200 files (1.4% non-contiguous), 125963/4885760 blocks
根據實際情況,可能還需要再執行幾次fsck,直到最后提示“clean”為止,表示該文件系統已經完好無損:
[root@svr5 ~]# fsck -y -t ext3 /dev/sdb1
fsck 1.39 (29-May-2006)
e2fsck 1.39 (29-May-2006)
/dev/sdb1: clean, 142/2443200 files,125963/4885760 blocks
檢查完畢后,再次將其掛載到/home/目錄,確認掛載結果:
[root@svr5 ~]# mount /dev/sdb1 /home???????????????? //掛載成功
[root@svr5 ~]# ls/home?????????????????????? ??????//查看掛載的目錄內容
aquota.group kdev nick pingpingsda.mbr-20131015 vina
aquota.user kenthy obama rsync.test stu20zengye
hunter lost+found pangpang sda.mbr stu21
04.增加單用戶模式密碼
在啟動項前增加但用戶模式密碼
[root@RHEL5 ~]# vim /boot/grub/grub.conf
hiddenmenu
password 123456
titleRed Hat Enterprise Linux Server (2.6.18-348.el5)
4)系統文件丟失(/etc/inittab)
1)備份/etc/inittab文件
[root@RHEL5~]#cp /etc/inittab? /root/
2)刪除/etc/inittab文件
[root@RHEL5~]#rm -rf /etc/inittab
3)重啟、查看故障現象(INIT:No inittab file found)
4)修復此故障
a)進光盤救援模式
boot:linux rescue
b)chroot? /mnt/sysp_w_picpath
Sh-3.2#chroot?/mnt/sysp_w_picpath
c)檢查/etc/inittab文件屬于哪個包
Sh-3.2#rpm -qf /etc/inittab
initscripts-8.45.42-1.el5_8.1
d)將RHEL5.9光盤設備掛載到/mnt/dvd/
Sh-3.2#mkdir /mnt/dvd
Sh-3.2#mount /dev/sr0(hdc) /mnt/dvd
e)根據步驟c查詢結果,從光盤掛載點安裝對應的包
Sh-3.2#rpm -ivh --force
/mnt/dvd/Server/initscripts-8.45.42-1.el5_8.1.x86_64.rpm
Preparing...??????????? ?###########################################[100%]
1:initscripts??????????? ###########################################[100%]
f)exit 退出chroot環境
Sh-3.2#exit
g)exit 退出救援模式,自動重啟、修復完成
Sh-3.2#exit
01.磁盤或分區的壞道檢測
故障現象
--讀取磁盤數據時,發出異常聲響
--訪問某個文件時,讀取出錯或提示文件損壞
--新建立的分區無法執行格式化
--讀寫該磁盤時頻繁司機
1)檢查分區/dev/sda1是否存在壞道
[root@RHEL5 ~]# badblocks -sv /dev/sdb
Checkingblocks 0 to 20971520
Checkingfor bad blocks (read-only test):??????????????0/?? done
Passcompleted, 0 bad blocks found.
02.誤刪除文件恢復
1.安裝extundelete 軟件包
yum -y groupinstall開發工具 開發庫 ??//安裝開發工具
./configure ????????????????????????????????????????? //配置
ls
make && make install?????????????????????????????? //編譯安裝
echo $??????????????????????????????????????????????????????? //查看狀態
cd
rm /boot/vmlinuz-2.6.18-348.el5 ????? //刪除測試
Umount? /boot
extundelete --inode 2 /dev/sda1???????? //查看可恢復文件
extundelete --restore-all /dev/sda1??? //回復所有可恢復文件
ls RECOVERED_FILES/????????????????????????????????????? //查看恢復目錄
Mount /dev/sda1 /boot
mv RECOVERED_FILES/vmlinuz-2.6.18-348.el5? /boot/ //移動刪除文件
ls /boot/
5)i節點測試
i節點耗盡驗證(盡管有磁盤空間,但已無法寫入文件)
建一個小分區(40MB),
格式化:mkfs -text3 /dev/sdb10
|-->創建超級塊(superblock)—— inode數量、blocks數量
查看超級塊:tune2fs -l /dev/sdb10
快速消耗i節點資源:
mkdir? /mnt/testdir
mount? /dev/sdb10? /mnt/testdir
for? i? in $(seq 15000) ; do? touch?"/mnt/testdir/file$i.txt"?;? done
|-->設一個超過可用i節點數量的數值
** seq命令用來生成一個數字序列,for是一個循環語句(Shell課程會詳細介紹)
** inode,i節點—— 檔案編號,每一個文件都需要
**文件名 --> i節點 --> 文件內容
6)wget下載整個網站:
wget?-crpk -np?http://www.lfs.org.cn/book/index.html
選項說明:
-r,--recursive:遞歸下載所有鏈接
-p,--page-requisites:包括頁面顯示必需的目標
-k,--convert-links:下載完成后轉換鏈接目標以便本地瀏覽
-np,--noparent:只向下遞歸,防止下載父級鏈接或外部鏈接等網頁對象
-c,--continue:支持斷點續傳
-t,--tries=:指定重試次數
總結
以上是生活随笔為你收集整理的linux 系统盘无法ls,系统故障排除的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python爬取b站排行榜_实时爬取B站
- 下一篇: oracle删除唯一索引sql语句_高级