今天在做服務器補丁部署,有一臺ESX4.1的服務器在升級後重啓過程中掛了,通過iLO口登陸看到如下信息:
fsck.ext3: Unable to resolve 'UUID=34d192db-17eb-442e-9613-c5c24c6fa9fa' And *** An error occurred during the file system check. *** Dropping you to a shell; the system will reboot *** when you leave the shell. |
意識到這肯定和磁盤文件系統有關係,對於我等Linux菜鳥,當時及癱倒在地,不知所措。
其實這個問題是由於升級過程中發生了某些問題導致的,VMware暫時沒有給出Cause Root,但是有臨時解決辦法。
先收集必要的信息:
遇到這種情況後,輸入root密碼進入修復模式(此時即便重啓,也無法正常使用,也無法進入排錯模式)。
輸入命令fsck,列出文件系統信息:
記錄每個“Unable to resolve”後邊的字符串,這是對應掛載點的UUID。
輸入命令cat /etc/fstab,列出文件系統表信息:
UUID=79815890-f11c-4907-80fe-d1cd6bf061f8 / ext3 defaults 1 1 |
輸入命令ls -l /dev/disk/by-uuid,列出磁盤跟UUID關係:
total 0 lrwxrwxrwx 1 root root 10 Nov 9 14:36 45460133-027b-40b6-8b4d-e52aaf4c417f -> ../../sdm1 lrwxrwxrwx 1 root root 10 Nov 9 14:36 e32ec5f4-d795-414a-8d73-a2bb3ea86342 -> ../../sdr1 lrwxrwxrwx 1 root root 10 Nov 9 14:36 34d192db-17eb-442e-9613-c5c24c6fa9fa -> ../../sdr2 lrwxrwxrwx 1 root root 10 Nov 9 14:36 79815890-f11c-4907-80fe-d1cd6bf061f8 -> ../../sdr5 |
依次記錄每個有問題的UUID和其對應的磁盤名稱、掛載點名稱。
下面是修復階段:
- 給有問題的掛載點重新生成新的UUID。
運行如下命令,再次確認UUID:- # tune2fs -l 磁盤名稱 | grep UUID
磁盤名稱 - 即你要修復的磁盤名稱,例如上面表述中的"/dev/sdr2"
運行如下命令,生成新的UUID
- tune2fs -U random 磁盤名稱
磁盤名稱 - 即你要修復的磁盤名稱,例如上面表述中的"/dev/sdr2"
運行如下命令,驗證是否已生成新UUID:
- # tune2fs -l 磁盤名稱 | grep UUID
磁盤名稱 - 即你要修復的磁盤名稱,例如上面表述中的"/dev/sdr2"
- 更新文件系統表。
運行如下命令,將根掛在爲可讀寫:
- mount / -o remount,rw
運行如下命令,打開fstab進行編輯,我們要把這個表裏舊的有問題UUID換成新的UUID。
具體修改方法,找到舊的的UUID,直接刪除寫入新的UUID即可。最後別忘了保存!
- vi /etc/fstab
運行如下命令,將根掛載爲只讀:
- mount / -o remount,ro
運行如下命令,重啓服務器:
- shutdown -r now
另外一種簡單的解決方法,重做系統....
以上解決方法我已經在生產環境下的ESX4.1使用過。
注意:如果出錯的文件系統與重要數據有關,最好小心一點兒,先備份數據,把共享的存儲關閉掉。