Linux故障處理(二)更改root密碼和修復文件系統
一、遺忘root用戶的密碼
大多數時候Linux主機中具有root權限的用戶只有一個,因此需要通過其他途徑來重設root賬號密碼。最簡單的途徑是在開機時通過修改GRUB引導參數進入單用戶模式,另一個途徑是使用系統光盤進入急救模式。
1、通過單用戶模式重設root賬戶的密碼
步驟如下
1)、重新啟動主機,在出現GRUB菜單時按“↑”、“↓”箭頭鍵取消倒計時,並定位到要進入的操作系統選擇項,按e鍵進入編輯模式。
2)、定位到以kernel開頭的一行並按e鍵,在行尾添加“single”的啟動參數,其中“single”也可以換成字母“s”或數字“1”,也可以表示進入到單用戶模式。
3)、輸完之後按Enter鍵確認,按b鍵將系統引導進入單用戶模式,直接進入Shell環境(不需要任何密碼驗證)。
4)、在單用戶模式的Shell環境中,可以執行“passwd ”命令重新設置root用戶的密碼。設置完畢重新啟動系統。
二、排除文件系統類故障
1、修復文件系統
當文件系統的超級塊數據損壞時,Linux將無法識別該文件系統,掛載時會出現“you must specify the filesystem type”的提示而不能正常使用。
例如,執行以下操作可以破壞/dev/sdb1文件系統的超級塊數據庫,嘗試掛載時將不能成功。
[root@twgdh ~]# dd if=/dev/zero of=/dev/sdb1 bs=512 count=4 記錄了4+0 的讀入 記錄了4+0 的寫出 2048字節(2.0 kB)已復制,0.024955 秒,82.1 kB/秒 [root@twgdh ~]# mount /dev/sdb1 /tmp/ mount: you must specify the filesystem type
對於通過/etc/fstab文件自動掛載且設置了fsck參數(第6列的非0)的文件系統,若超級塊出現錯誤,則Linux系統在啟動時會報錯,並提示“Give root password for maintenance”,
出現這種情況時,根據提示輸入root用戶密碼,即可進入到一個臨時的Shell環境,在這裏用戶可以對出現錯誤的文件系統進行修復。修復完畢後執行“exit”命令即可退出並重啟系統。
修復一般的文件系統錯誤可以使用“fsck”命令進行,結合“-t”選項指定文件系統類型,結合“-y”選項對發現的問題自動回答“yes”。
重新掛載時,即可成功掛載!
2、磁盤資源耗盡故障
當一個文件系統的磁盤空間耗盡以後,將無法繼續在該分區中創建新的文件數據,從而導致故障的出現。例如執行“
在每一個ext3文件系統中,能夠使用的文件數量(對應i節點數量)也是有限的。當一個文件系統被格式化以後,其i節點數也即文件數量就已經固定下來了。如果用戶在該分區中創建了巨量的細小文件(耗盡i節點),將可能出現這種情況:雖然分區中仍然有大量的剩余磁盤空間,但是卻無法再建立新的文件。
模擬i節點耗盡故障
2.1)、新建一個約1G大小的EXT4文件系統,掛載到/temp目錄下。使用“df –i”命令確認該文件系統中i節點的使用情況。
[root@twgdh ~]# mkdir /temp [root@twgdh ~]# mount /dev/sdb1 /temp/ [root@twgdh ~]# df -i /temp/ Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sdb1 66384 11 66373 1% /temp ■ Filesystem:文件系統 ■ Inode: i節點總數 ■ IUsed:(I)已用 ■ IFree:(I)可用 ■ IUse%:已用% ■ Mounted on: 掛載點
2.2)、寫一個測試程序腳本,模擬i節點耗盡
[root@twgdh ~]# vim mkfile.sh #!/bin/bash i=1 while [ $i -le 66384 ] do touch /temp/file$i let i++ done [root@twgdh ~]# sh mkfile.sh [root@twgdh ~]# df -i /temp/ Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sdb1 66384 66384 0 100% /temp
可以看到i節點的數量已經占滿,再使用df –hT命令查看一下磁盤空間。並且創建一個文件查看信息。
2.3)、查看結果
[root@twgdh ~]# df -hT /temp/ Filesystem Type Size Used Avail Use% Mounted on /dev/sdb1 ext2 1020M 2.8M 965M 1% /temp 可以看到,/temp還有很多磁盤空間 [root@twgdh ~]# touch /temp/123456 touch: 無法創建"/temp/123456": 設備上沒有空間
創建一個文件提示設備上沒有,這種情況一般就屬於i節點耗盡
2.4)、修復i節點耗盡故障
理解i節點故障的根結以後,問題就比較好解決了。只需要找出分區中占用大量i節點的細小文件,並進行轉移或者刪除即可。對於許多用戶公用的文件系統,建議為相關用戶設置磁盤配額限制(包括磁盤空間和文件數量兩方面)。
[root@twgdh ~]# rm -rf /temp/file* [root@twgdh ~]# df -i /temp Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sdb1 66384 10 66374 1% /temp
3、檢測硬盤壞道
磁盤壞道分為邏輯壞道和物理壞道兩種,前者主要由於軟件操作不當造成,可以使用軟件修復;後者則是物理性損壞,只能通過更改磁盤分區或扇區的占用位置來進行改善,排除掉包含有壞塊的磁盤空間。當磁盤出現以下現象時,磁盤設備發出異常聲響。
■ 讀取磁盤中的數據時,磁盤設備發出異常聲響。
■ 訪問磁盤中的某個文件時,反復讀取且出錯,提示文件損壞。
■ 對於新建立的分區無法完成格式化。
■ 系統使用該磁盤時頻繁死機。
硬盤出現壞道後,如果不及時更換或進行技術處理,壞道就會越來越多,並可能造成頻繁死機和數據丟失的後果。所以必要時應該對磁盤進行定期檢測,檢查是否存在壞道。
在linux系統中,檢測磁盤的壞道情況可以使用badblocks命令進行,結合“-s”選項用於顯示進度信息,“-v”選項用於顯示詳情。
[root@twgdh ~]# badblocks -sv /dev/sdb 正在檢查從 0 到 20971519的塊 Checking for bad blocks (read-only test): 完成 Pass completed, 0 bad blocks found.
在長期使用計算機的過程中,文件系統和磁盤類的故障現象很難完全避免,對於此類故障的修復處理需要十分謹慎,如果操作不慎可能會加中數據破壞的程度。
Linux故障處理(二)更改root密碼和修復文件系統