河南 劉建臣
某單位的一臺服務器使用的是CentOS 6.X 系統,最近出現了無法啟動的故障,原因是該機上的某個服務無法正常啟動,技術員采取重新啟動的方式,試圖恢復該機的正常運行。但是,該機卻出現了無法啟動的問題。
因為該機安裝了OpenSSH 服務,筆者直接從客戶機上執行“ssh root@xx.x.x”命令,想從遠程連接該機進行檢測。但是連接無法進行,使用ping 命令,對該機進行探測,發現該機沒有任何響應。
筆者到機房直接開啟該機,發現屏幕出現了“/bin/chown:incalid user:'root:Ip'”,“invalid user:'rot:root '”之類的提示。
根據以上信息,可以看到該機是因為無效的Root 用戶引發的。Root 用戶是系統的管理員,該用戶如果出現問題,自然無法進行遠程訪問。
筆者重新開始開機,當系統啟動到Grub 引導界面時,點擊ESC 鍵,出現引導項目。選擇當前系統使用的引導內核選項,在編輯狀態中點擊上下箭頭鍵,選擇以“Kernel”開頭的項目,點擊“e”鍵,在其編輯欄尾部添加空格,輸入“single”,點擊回車鍵保存修改。之后點擊“b”鍵,讓系統引導到單用戶模式下,因為單用戶模式只加載最基本的系統,便于進行維護操作。
但是,系統仍然“固執”的上述引導畫面中,很顯然無法進入單用戶模式。無奈之下,只有使用CentOS 的鏡像優盤或者光盤來引導了,這里使用光盤進行引導,在歡迎界面中選擇“Rescue installed system”項,之后選擇語言和鍵盤布局,并啟動網絡配置,在“Rescue”窗口中點擊“Continue”按鈕,之后按照提示選擇“shell Start shell”項,進入擁有讀寫功能的修復環境下,因為在該模式下,分區實際上掛載到了“/mnt/sysimage”路徑下。
然后執行“vi/mnt/sysimage/etc/password”命令,查看所有用戶的屬性信息,奇怪的是,其中找不到Root 賬戶的蹤影。
繼續執行“vi/mnt/sysimage/etc/shadow”命令,在Shadow 文件可以找到Root 賬戶信息,顯示Root 用戶處于永不過期狀態。
根據以上信息,可以看到這其實是因為誤操作,導致Root 用戶信息丟失所引發的。
知道了原因,處理起來就簡單了,無非是在上述“/mnt/sysimage/etc/password”文件中加入“root:x:0:0root:/root:/bin/bash”行,即可修復該文件。
之后重啟系統,原以為這下就萬事大吉了,但是新的問題又出現了,系統雖然可以順利引導,不再顯示上述錯誤信息,但是在依次加載各服務時,卻出現卡頓的情況,當系統啟動了“Iptables”服務后就無法引導了,無法順利啟動。
反復啟動均如此,既然無法直接啟動,筆者只有重新進入上述修復環境,來查找具體原因。
對于Linux 來說,其啟動時會先開機自檢,之后依次執行MBR 引導,GRUB 菜單選擇,加載系統內核,運行INIT進程,讀取“/etc/inittab”配置文件,執行“/etc/rc.d/rc.sysinit”腳本,執行“/etc/rc.d/rc”腳本,啟動mingetty 等進入登錄界面等環節。對于INIT 內核進程來說,負責產生其他的進程和服務。這些服務會按照一定的順序依次啟動,如果其中某個服務出現問題,就很容易導致系統啟動失敗。
Linux 系統提供了7 種運行級別,常用的是第三種級別,即完全的的多用戶狀態,登錄后進入控制臺命令行界面,在“/etc/rc.d/rc.3d”目錄下保存了一些符號鏈接文件,指向init.d 目錄下的Service 腳本文件。
在修復環境下進入“/mnt/sysimage/etc/rc.d/rc.3d”目錄,執行“ls -al”命令,來查看這些鏈接文件和其與特定服務的映射關系,發現在上述“IPtables”服務之后是Mysqld 服務,可能是因為Mysqld 出現了問題,無法正常跟隨系統啟動的原因。
執 行“chroot/mnt/sysimage”,“chkconfig--level 35 mysqld off”命令,禁止Mysld 服務開機自運行。之后重啟系統,終于可以順利進行了。
在客戶機上運行“ssh root@x.x.x.x”命令,也可以順利連接到本機。因為該機安裝了MySQL,那么其為何無法啟動呢?執行“service mysqld start”命令,出現“MySQL Daemon failed to start.Starting mysqld:[FAILED]”的錯誤提示。造成MySQL 無法啟動。
為了便于查看錯誤日志,打開“my.cnf”文件,在其中添加“log-error=/usr/local/mysql/mysql-error.log”行,配置MySQL 的錯誤日志。
再次啟動失敗后,執行“tail -30/usr/local/mysql/mysql-error.log”命令,查看錯誤日志信息,發現MySQL 無法在“/tmp”目錄中創建文件。執行“chmod -R 1777/tmp”命令,賦予其讀寫權限,之后執行“service mysqld start”命令,可以順利啟動MySQL。