引言:在Linux運行過程中,有時會因為誤操導致系統無法啟動。Linux自帶的救援模式,就可以解決此類故障。救援模式其實是微型的操作系統,可以對系統進行各種修復,還可以對Linux進行只讀數據的冷備份操作。救援模式只是在內存中運行,不會對真實系統的數據造成影響。本文就以常見的故障為例,介紹救援模式的使用方法。
當Linux的引導程序出現問題后,就會導致系統無法正常啟動。為此,可以以Linux光盤來引導,在歡迎界面中(如圖1)選 擇“Resure installed system”項,進入救援模式。當硬件初始化完成后,在向導界面中選擇語言版本,鍵盤布局,救援模式的介質(這里 為“Local CD/DVD”)等參數,之后救援模式會詢問是否啟用網絡模式,這里選擇“No”。在救援模式介紹畫面中點擊“Continue”按鈕,系統開始查找本地存儲設備,之后會提示系統已經被掛載到“/mnt/sysimage”目錄上。點擊回車,選 擇“Shell Start shell”項,在Shell中執 行“chroot /mnt/sysimage/”命令,完成后會重新打開一個 Shell,在其中執行“df-h”命令,可以查看真實的系統分區情況。執行“grubinstall /dev/sda”命 令,執行引導程序的修復操作。當出現“Installation finished. No error reported”內容時,說明修復操作已經成功。連續執行兩次“exit”命令,返回向導界面,選擇“Reboot”項重啟系統,之后系統就可以順利啟動了。
如果MBR主引導記錄受損的話,系統是無法啟動的。因為在系統啟動時,會從讀取引導設備的第一個扇區,其中保存在主引導記錄,分區表等信息。為此,在系統處于正常狀態時,可以執行“dd if=/dev/zero of =/dev/sda bs=446 count=1”命令,將MBR信息備份為獨立的文件,進入“/tmp”目錄,可以看到備份的“MBR”文件,可以將該文件復制到網絡中的其他主機(假設IP為“172.16.1.101”)的根目錄下保存,便于之后出現問題后進行修復。當本機出現MBR損壞故障后,可以按照上述方法進入救援模式。

圖1 進入救援模式

圖2 設置網絡參數

圖3選擇所需的救援模式
所不同的是,在“Setup Networking” 窗口中 點擊“Yes”按 鈕,選 擇 所需的網卡,在“Enable network interface”窗 口(如 圖 2)中 選 擇“Enable IPv4 Support” 和“Manual Configuration”項,為 該網卡設置IP地址(例如“172.16.1.100/24”),其 余設置保持默認,點擊OK按鈕保存配置。當網絡設置完成后,點擊“Continue”按鈕,按照上述方法打開Shell界面,執行“ifconfig”命令,可以看到該Shell環境的網絡配置情況。執行“scp 172.16.0.101:/root/MBR .”命令,輸入其root賬戶密碼,將保存在目標主機上的“MBR”復制過來。執行“dd if=MBR of =/dev/sda”命令,恢復目標磁盤上的MBR信息。之后按照上述方法重啟,就可以正常使用系統了。當然,如果事先沒有備份MBR的話,可以使用第三方的工具(例如“Diskgenius”等),來搜索并修復磁盤。
在“/etc/fstab”文 件中存放了和文件系統相關的信息,在啟動時Linux會讀取該文件,來自動掛載所有的分區,如果該文件丟失或者配置出錯的話,就會導致系統無法啟動。按照上述方法進入救援模式,在“Rescue”窗口(如圖3)中點擊“Continue”按鈕,按照上述方法打開Shell界面,系統自動將所有分區掛載到“/mnt/sysimage”目錄下。執行“fdisk -l”命令,查看系統分區情況。因為對應的分區其實并沒有損壞,所以可以查看到系統分區的完整信息。因為每個分區對應的名稱標識不會顯示,所以可以使用“e2label”命令,對其逐一查看。例如執行“e2label/dev/sda1”,“e2label /dev/sda2”,“e2label /dev/sda3”等命令,來查看對應的分區名稱標識信息。
這樣,就可以得到所有分區的掛載點信息。“fstab”文件存放在系統根目錄下,所以需要掛載原來系統的根分區。假設跟分區對一個的設備名為“/dev/sda2”,執行“mkdir tmp”,“mount /dev/sda2 /tmp”,“df”等命令,可以將跟分區所有文件掛載到“/tmp”目錄下。之后執行“vi /tmp/etc/fstab”命令,對“fstab”文件進行編輯,依次輸入“Label=/ / ext3 default 1 1”,“Label=/boot /boot ext3 default 1 2”,“Label=/home /home ext3 default 1 2”等內容,來重新構建該文件。可以找一臺同樣配置的Linux主機,來查看正常的“fstab”文件內容,并據此執行上述編輯操作。之后退出Shell環境,重啟系統即可。
我們知道,Linux的啟動配置信息保存在“/Boot/Grub/Grub.conf”文件中,其中包含啟動菜單,啟動分區,內核文件位置等參數。如果該文件丟失或者誤刪除的話,系統自然無法啟動。按照上述方法進入救援模式,選擇“shell Start shell”項,在Shell中執行“chroot/mnt/sysimage”和“df”命令,可以查看分區信息。執行“grub-install /dev/sda”命令,對Grub進行修復操作。之后進入“/boot/grub”目錄,看到雖然修復了Grub,但是其配置文件并不存在。
執 行“vimgrub.conf”命令,在編輯界面中依次輸入“default=0”,“timeout=5”,“title Red Hat Linux”,“root(hd0,0)”,“kernel/vmlinuz-2.6.32-220.e16.x86_64 ro root=/dev/sda2”,“initrd /initramfs-2.6.32.e16.x86_64.img”等行,之后保存該文件。這樣,就通過手工的方式重建了“Grub.conf”文件,其中的系統核心文件以及驅動壓縮包名稱較長,可以進入“/boot”目錄,來查看其具體的名稱。之后推出Shell并重啟,在“GNU GRUB”啟動界面中選擇上述“RedHat Linux”項,可以順利啟動系統。
對于Root用戶來說,一旦忘記密碼,就無法正常登錄系統。利用救援模式,可以輕松重設密碼。按照上述方式進入救援環境,按照上述方法,將系統掛載到“/mnt/sysimage”目錄下。在Shell環境中執行“password root”命令,根據提示依次輸入新的密碼,當出現“all authentication tokens updated successfully”字樣時,說明密碼修改成功。之后按照上述方法重啟系統,就可以以新的密碼登錄系統了。
內核文件是Linux的核心數據,進 入“/boot”目錄,可以查看內核文件“vmlinuz-2.6.32-220.e16.x86_64”等重要文件。如果內核文件丟失或者受損,系統是無法正常啟動的。按照上述方法進入救援模式,選擇“shell Start shell”項,在Shell中查看“/boot”分區,如果其中沒有Grub文件的話,需要按照上面談到的方法,先對Grub進行修復。對于內核文件的修復,可以利用“rpm”命令來實現。例如,執行“rpm –qa vmlinuz-2.6.32-220.e16.x86_64”命令,查看到其來自于“kernel-2.6.32-220.e16.x86_64”包。當然,不同版本的Linux的內核文件名稱可能不同。執行“rpm–qf initramfs-2.6.32.e16.x86_64.img”命令,查看到其也來自于上述安裝包。當然,在“/boot”分區還有別的重要文件,可以從其他正常運行的Linux主機上查看其具體名稱。例如,執 行“rpm –qf System.map-2.6.32-220.e16.x86_64”命令,查看到其來自于上述安裝包。因此,只要將內核文件重裝一遍,就可以解決上述問題。
執 行“mount /dev/cdrom /media/”命令,將光驅掛載到指定的位置。進入“/media/Packages” 目錄,將“kernel-2.6.32-220.e16.x86_64.rpm” 包復制過來。之后執行“rpm –ivh kernel-2.6.32-220.e16.x86_64 --force”命令,強制安裝該包,耐心等候一段時間后,內核即可修復完成。之后按照上述方法重啟系統,如果出現“grub>”提示符,可以依次執行“root(hd0,0)”,“ kernel/vmlinuz-2.6.32-220.e16.x86_64 ro root=/dev/sda2”, initrd /initramfs-2.6.32.e16.x86_64.img”,“boot” 等 命令,就可以順利啟動系統了。
當然,如果系統內核文件存放在網絡中的某臺FTP服務器上,也可以在救援模式中配置好IP等網絡參數,之后在Shell環境中執行“ftp server1”命令,假設FTTP服務器的名稱為“server1”,之后按照提示輸入FTP的用戶名和密碼,當出現“ftp>”提示符后,利用“cd /pub/packages/”命令,切換到存儲內核文件的目錄中,假設其保存在“/pub/packages/”目錄中。之后使用“mget kernel-2.*.e16.x86_64.rpm”之類的命令,將Linux的內置文件保存到本地。最后,執行“quit”命令,退出FTP操作環境。利用上述命令,對下載的RPM包進行解壓安裝即可,執行“ls /boot”命令,可以查看內核文件信息。
對 于Linux來 說,在“/etc”目錄及其下的“init”,“rc”等子目錄 下還 存 在“inittab”, “rc.sysinit”,“start-ttys.conf”,“prefdm.conf”,“rc.local”等配置文件,在其中保存了系統和用戶配置的相關信息。但這些配置文件丟失或受損后,對系統的正常啟動也會造成很大的影響。按照上述方法進入救援模式,在Shell中執行“rpm-qa /etc/inittab”,“ rpm-qa /etc/rc.sysinit”,“ rpm -qa /etc/init/start-ttys.conf”等命令,可以看到其都來自于名為“initscripts-9.03.27-1.e16.x86_64.rpm”的 包,按照上述方法掛載光驅,將在光盤中的“Packages”目錄中找到該包,將其復制出來。執行“”rpm –ivh –force initscripts-9.03.27-1.e16.x86_64.rpm命令,執行強制安裝操作,這樣,就將這些配置文件恢復過來。