很多時候,我們可能因為做了某些配置,或者是因為不正常關機 (例如未經通知的停電等等) 而導致系統的 filesystem 錯亂,此時,linux 可能無法順利啟動成功,那怎麼辦呢?難道要重灌?當然不需要啦!
進入 run level 1 (單人維護模式) 去處理處理,應該就 ok 的啦!底下我們就來談一談如何處理幾個常見的問題!
忘記 root 口令的解決之道
大家都知道鳥哥的記憶力不佳,容易忘東忘西的,那如果連 root 的口令都忘記了,怎麼辦? 其實在 linux 環境中 root 口令忘記時還是可以救回來的!
只要能夠進入並且掛載 / , 然後重新配置一下 root 的口令,就救回來啦!這是因為啟動流程中,若強制核心進入 runlevel 1 時, 預設是不需要口令即可取得乙個 root 的 shell 來救援的。整個動作有點像這樣:
1.重新啟動!一定要重新啟動!怎麼重開都沒關係;
在啟動進入 grub 選單後, (1)在你要進入的選單上面點 'e' 進入詳細配置; (2)將光棒移動到 kernel 上方並點 'e' 進入編輯畫面; (3)然後出現如下畫面來處理:
grub edit> kernel /vmlinuz-2.6.18-92.el5 ro root=label=/ rhgb quiet single
重點就是那個特殊字型的咚咚啦!
按下 [enter] 再按下 b 就能夠啟動進入單人維護模式了。
進入單人維護模式後,系統會以 root 的許可權直接給你乙個 shell ,
此時你就能夠執行『 passwd 』這個命令來重建 root 的口令啦!然後直接『 init 5 』就可以切換成為 x 視窗介面羅!就是這麼簡單。
init 配置檔錯誤
前乙個 root 口令挽救的方法其實可以用在很多地方,唯一乙個無法挽救的情況,那就是 /etc/inittab 這個檔案配置錯誤導致的無法啟動!根據啟動流程,
我們知道 runlevel 0~6 都會讀取 /etc/inittab 配置檔, 因此你使用 single mode (runlevel 1) 當然也是要讀取 /etc/inittab 來進行啟動的。那既然無法進入單人維護模式, 就表示這題無解羅?非也非也,既然預設的 init 無法執行,那我們就告訴核心不要執行 init ,改呼叫 bash 啊! 可以略過 init 嗎?可以的,同樣在啟動進入 grub 後,同樣在 grub edit 的情況下這樣做:
grub edit> kernel /vmlinuz-2.6.18-92.el5 ro root=label=/ rhgb quiet init=/bin/bash
因為我們指定了
核心呼叫的第一支程式 (init) 變成 /bin/bash,因此 /sbin/init 就不會被執行。 又根據啟動流程的說明,我們知道此時雖然可以利用 root 取得 bash 來工作,
但此時 (1)除了根目錄外,其他的目錄都沒有被掛載; (2)根目錄被掛載成為唯讀狀態。因此我們還需要進行一些動作才行!如下所示:
tu 鳥哥僅下達兩個命令,
『 mount -o remount,rw / 』用途是將根目錄重新掛載成為可讀寫,至於
『 mount -a 』則是參考 /etc/fstab 的內容重新掛載檔案系統! 此時你又可以啟動進行救援的工作了!只是救援完畢後,你得要使用『
reboot 』重新啟動一次才行!
bios 磁碟對應的問題 (device.map)
由於目前硬碟很便宜啊,所以很多朋友就想說:『那我能不能將 windows 安裝在 /dev/hda 而 linux 安裝在 /dev/hdb , 然後調整 bios 的啟動裝置順序,如此則兩套系統各有各的 loader 安裝在個別硬碟的 mbr 當中了!』。 這個想法非常好,如此一來兩者就不會互相干擾,因為每顆磁碟的 mbr 個別有不同作業系統的 loader 嘛! 問題是,grub 對磁碟的裝置代號使用的是偵測到的順序啊! 也就是說,你調整了 bios 磁碟啟動順序後,你的 menu.lst 內的裝置代號就可能會對應到錯誤的磁碟上了!啊!真想哭!
沒關係的,我們可以透過 /boot/grub/device.map 這個檔案來寫死每個裝置對 grub 磁碟代號的對應喔! 舉例來說,鳥哥的這個檔案內容如下:
[root@www ~]# cat /boot/grub/device.map(fd0) /dev/fd0
(hd0) /dev/hda
如果你不清楚如何處理的話,也可以利用 grub-install 的功能喔!例如:
[root@www ~]# grub-install --recheck /dev/hda1
這樣 device.map 就會主動的被公升級了!這樣了解乎?
因檔案系統錯誤而無法啟動
如果因為配置錯誤導致無法啟動時,要怎麼辦啊?這就更簡單了!最容易出錯的配置而導致無法順利啟動的步驟,通常就是 /etc/fstab 這個檔案了,尤其是使用者在實作 quota 時,最容易寫錯引數, 又沒有經過 mount -a 來測試掛載,就立刻直接重新啟動,真要命!無法啟動成功怎麼辦? 這種情況的問題大多如下面的畫面所示:
tu 看到最後兩行,他說可以輸入 root 的口令繼續加以救援喔!那請輸入 root 的口令來取得 bash 並以
mount -o remount,rw / 將根目錄掛載成可讀寫後,繼續處理吧!其實會造成上述畫面可能的原因
除了 /etc/fstab 編輯錯誤之外,如果你曾經不正常關機後,也可能導致檔案系統不一致 (inconsistent) 的情況, 也有可能會出現相同的問題啊!如果是磁區錯亂的情況,請看到上圖中的第二行處, fsck 告知其實是 /dev/md0 出錯, 此時你就應該要利用 fsck 去檢測 /dev/md0 才是!等到系統發現錯誤,並且出現『clear [y/n]』時,輸入『 y 』吧!
這個 fsck 的過程可能會很長,而且如果你的 partition 上面的 filesystem 有過多的資料損毀時, 即使 fsck 完成後,可能因為傷到系統槽,導致某些關鍵系統檔案資料的損毀,那麼依舊是無法進入 linux 的。此時,就好就是將系統當中的重要資料複製出來,然後重新安裝,並且檢驗一下, 是否實體硬碟有損傷的現象才好!不過一般來說,不太可能會這樣啦~ 通常都是 fsck 處理完畢後,就能夠順利再次進入 linux 了。
利用 chroot 切換到另一顆硬碟工作
仔細檢查一下,你的 linux 裡面應該會有乙個名為 chroot 的命令才對!這是啥?
這是『 change root directory 』的意思啦!意思就是說,可以暫時將根目錄移動到某個目錄下, 然後去處理某個問題,最後再離開該 root 而回到原本的系統當中。
舉例來說,補習班中心最容易有兩三個 linux 系統在同乙個主機上面,假設我的第乙個 linux 無法進入了,那麼我可以使用第二個 linux 啟動,然後在第二個 linux 系統下將第乙個 linux 掛載起來, 最後用 chroot 變換到第乙個 linux ,就能夠進入到第乙個 linux 的環境當中去處理工作了。
你同樣也可以將你的 linux 硬碟拔到另乙個 linux 主機上面去,然後用這個 chroot 來切換, 以處理你的硬碟問題啊!那怎麼做啊?粉簡單啦!
用盡任何方法,進入乙個完整的 linux 系統 ( run level 3 或 5 );
假設有問題的 linux 磁碟在 /dev/hdb1 上面,且他整個系統的排列是:
掛載點 裝置檔名
/ → /dev/hdb1
/var → /dev/hdb2
/home → /dev/hdb3
/usr → /dev/hdb5
若如此的話,那麼在我目前的這個 linux 底下,我可以建立乙個目錄,然後可以這樣做:
掛載點 裝置檔名
/chroot/ → /dev/hdb1
/chroot/var/ → /dev/hdb2
/chroot/home/ → /dev/hdb3
/chroot/usr/ → /dev/hdb5
全部掛載完畢後,再輸入『 chroot /chroot 』嘿嘿!你就會發現,怎麼根目錄 (/) 變成那個 /dev/hdb1 的環境啦!這樣說明,了了嗎? ^_^
**:
第二十二章 Teamware需求
teamware正如他的名字一樣,是乙個團隊使用的groupware。groupware的定義是 teamware的功能需求 公共功能 使用者管理 角色管理 客戶管理 crm 專案管理 安全 授權和認證 業務功能 公告欄 notice 位址本 address book todo列表 todo lis...
第二十二章 橋接模式
很多情況下用繼承會帶來麻煩。比如,物件的繼承關係是在編譯時就定義好了的,所以無法在執行時改變從父類繼承的實現。子類的實現與它的父類有非常緊密的依賴關係,以至於父類實現中的任何變化必然會導致子類發生變化。當你需要復用子類時,如果繼承下來的實現不適合解決新的問題,則父類必須重寫或被其他更適合的類替換。這...
第二十二章 在死亡的陰影下
第二十二章 在死亡的陰影下 命運常常以意想不到的方式在人們的生活中發揮作用。致恩尼奧德喬治,在海邊的一天裡,它出現在所有的悲劇中。夏天,德喬治經常去萊切,在那裡他享受他的家庭,在大學裡呆過,喜歡和朋友出去玩。當我們在這裡的時候我們每週去海灘一兩次記得公尺歇爾 卡里羅,分析薩倫託大學教授 我們常常在愛...