快速修復一個Panic的Linux內(nèi)核的技巧

感謝腳本之家網(wǎng)友 鳶一雨音 的投稿
寫這篇文章是有原因的。為了配置完全的靜默啟動,筆者對自己的工作計算機上運行的Linux執(zhí)行了不當?shù)膍kinitcpio操作,原因是忽略了mkinitcpio.conf文件中的一處邏輯錯誤。這使得mkinitcpio生產(chǎn)了新的內(nèi)核文件,但這個內(nèi)核文件不能正常工作。重啟的時候,內(nèi)核啟動中止于Panic狀態(tài)。
一般情況下,新內(nèi)核不能正常工作時,可以通過使用initramfs內(nèi)核文件的fallback版本來臨時啟動系統(tǒng),甚至可以直接將fallback版本覆蓋回去以回退更改,但這次要命的是,mkinitcpio同時修改了vmlinuz內(nèi)核文件,而且vmlinuz沒有fallback版本。對于一般用戶,可以直接重裝系統(tǒng)解決;但是筆者的工作站環(huán)境配置相當復雜,這意味著除了可能損失我的工作文件之外,我還需要花費大量額外的時間來重配開發(fā)環(huán)境。
注意:本教程之“修復”,指“嘗試回退毀滅性的人為更改”,故不可用于恢復不知原因的內(nèi)核崩潰。
一、從LiveCD啟動并查看磁盤
憑著兼職Linux服務(wù)器運維那段時間積累的經(jīng)驗,我立即想到可以用LiveCD啟動來獲得一個臨時的、用于修復內(nèi)核的Linux環(huán)境。
筆者使用的是Arch Linux 64位版,所以我從從Arch Linux的LiveCD啟動。正確進入LiveCD內(nèi)建的root用戶之后,我們需要查看自己的主硬盤的設(shè)備名。執(zhí)行fdisk -l,在筆者的情況下,我的主硬盤、掛載至根目錄的分區(qū)對應(yīng)的設(shè)備文件是/dev/sdb2。
二、chroot至硬盤上的系統(tǒng)根目錄
要chroot到硬盤上的系統(tǒng)根目錄,并能正常調(diào)用硬盤上的系統(tǒng)組件對硬盤上的系統(tǒng)作出更改,我們首先要手動掛載硬盤上的根分區(qū)。執(zhí)行(我的設(shè)備文件是/dev/sdb2):
mount /dev/sdb2 /mnt
先不要急。這時候chroot到/mnt雖然能進入硬盤上主系統(tǒng)的bash,但是你幾乎不能正確完成任何復雜的任務(wù),因為還有一些重要的目錄沒有掛載。我們執(zhí)行指令,分別掛載proc目錄、/sys目錄、/dev目錄和/run目錄。進入/mnt,分別執(zhí)行:
mount -t proc proc proc/
mount --rbind /sys sys/
mount --rbind /dev dev/
mount --rbind /run run/
這些目錄的作用分別是:
proc目錄:虛擬的、Procfs格式的文件系統(tǒng),用于存放進程狀態(tài)文件(在Linux下,這些文件表面看起來都是文本文件,實際上是進程狀態(tài)的文件映射);
/sys目錄:對于Arch Linux,這是一個類似proc目錄的、Sysfs格式的虛擬文件系統(tǒng),用于儲存連接到系統(tǒng)的設(shè)備文件;對于傳統(tǒng)Unix和類Unix,它是一個指向內(nèi)核代碼樹的軟鏈接;
/dev目錄:儲存設(shè)備文件,比如你的硬盤就是/dev/sdXY之類的;
/run目錄:存放最近的啟動之后系統(tǒng)的部分信息;
掛載了這些東西之后,我們可以chroot到我們的主硬盤的根目錄了:
chroot /mnt
后悔藥++。對于我來說,我只需要修改mkinitcpio.conf文件并重新執(zhí)行mkinitcpio操作,就能重新生成正確的內(nèi)核文件。一般的,如果是錯誤地修改了配置導致的內(nèi)核Panic,這個環(huán)境可以解決大部分問題。
三、一些技巧
1、許多配置文件在LiveCD里的那個系統(tǒng)里有正確的版本或范本,如果不記得正常的時候是什么樣子的,可以參照一下它們;
2、對于Arch Linux,可以在不chroot到/mnt的情況下,直接使用pacstrap指令對/mnt這個掛載點進行軟件包管理;
3、可以在兩個tty下操作,這樣在chroot到/mnt下之后依然能從LiveCD的文件系統(tǒng)里向/mnt轉(zhuǎn)移文件。
本教程應(yīng)該對大部分Linux發(fā)行版都可用,希望能對部分Linux用戶產(chǎn)生幫助。
相關(guān)文章
- 在本文中,我們將介紹如何將大于 2TB 的新磁盤添加到現(xiàn)有的 Linux 服務(wù)器中(如 RHEL/CentOS 或 Debian/Ubuntu)中,感興趣的朋友可以一起看看2017-04-15
如何運行openSUSE?Win10中安裝SUSE Linux子系統(tǒng)的詳細圖文教程
此前微軟與Canonical達成合作協(xié)議并在Windows 10內(nèi)置了Ubuntu子系統(tǒng),支持使用Linux命令行工具等。如今開發(fā)者也可以選擇安裝使用SUSE Linux,下面就詳情來看看具體的安裝過2017-01-17linux系統(tǒng)安裝出錯提示this kernel requires an x86怎么辦?
linux系統(tǒng)安裝出錯提示this kernel requires an x86怎么辦?電腦在安裝DEBAIN 8的時候,發(fā)現(xiàn)安裝失敗提示遺傳英文:”This kernel requires an x86-64 cpu,but only dete2016-10-31VMware安裝RedHat Linux系統(tǒng)時出現(xiàn)該光盤無法被掛載錯誤怎么辦?
使用Vmware Workstation安裝RedHat Linux操作系統(tǒng)時鏡像文件有3個,在安裝過程中RedHat Linux會在適當?shù)臅r候提醒我們插入第2張或第3張光盤。版VMware安裝RedHat Linux系統(tǒng)2015-11-23- Linux下Chrome地址欄輸入卡頓該怎么辦?我的Chrome瀏覽器設(shè)置的字體是“微軟雅黑”,字體是從Windows 上拷貝的,于是就出現(xiàn)了地址欄卡頓,下面分享解決辦法,需要的朋友可2015-10-08
- linux中vi編輯軟件該怎么使用?vi類似windows的記事本,vi用起來比較麻煩,特別是對于初學者,很多朋友都不知道該怎么使用,下面簡單的說一下vi的使用教程,需要的朋友可以2015-09-23
Linux系統(tǒng)Vim編輯器如何安裝YouCompleteMe插件?
Linux系統(tǒng)中想要讓Vim編輯器發(fā)揮更大的作用,就要對它安裝一些插件,比如說YouCompleteMe插件,本文就來介紹Linux系統(tǒng)Vim如何安裝YouCompleteMe插件的相關(guān)內(nèi)容2015-09-02- 在Linux系統(tǒng)下安裝OSD的時候要格外小心,因為如果發(fā)生錯誤就會損壞文件系統(tǒng),如果您的Linux文件系統(tǒng)損壞了怎么辦?今天小編就為大家提供解決該問題的方法,希望可以幫助到2015-08-29
linux系統(tǒng)中的chrome瀏覽器打開網(wǎng)頁韓文字體重疊亂碼該怎么辦?
linux系統(tǒng)中的chrome瀏覽器打開網(wǎng)頁韓文字體重疊亂碼該怎么辦?Google Chrome瀏覽器的韓文字體,看似亂碼了,仔細看得話,就會發(fā)現(xiàn)是字體重疊了。下面分享解決辦法,需要的2015-08-21linux系統(tǒng)怎么截圖?linux系統(tǒng)中對指定區(qū)域進行截圖的詳細教程
linux系統(tǒng)怎么截圖?windows系統(tǒng)的截圖相當簡單,方法也很多,可以用瀏覽器自帶的截圖然間,也可以用qq截圖,但是linux系統(tǒng)怎么截圖?很多朋友都不知道,下面分享linux系統(tǒng)2015-08-16