引言:在Linux運(yùn)行過程中,有時(shí)會(huì)因?yàn)檎`操導(dǎo)致系統(tǒng)無法啟動(dòng)。Linux自帶的救援模式,就可以解決此類故障。救援模式其實(shí)是微型的操作系統(tǒng),可以對(duì)系統(tǒng)進(jìn)行各種修復(fù),還可以對(duì)Linux進(jìn)行只讀數(shù)據(jù)的冷備份操作。救援模式只是在內(nèi)存中運(yùn)行,不會(huì)對(duì)真實(shí)系統(tǒng)的數(shù)據(jù)造成影響。本文就以常見的故障為例,介紹救援模式的使用方法。
當(dāng)Linux的引導(dǎo)程序出現(xiàn)問題后,就會(huì)導(dǎo)致系統(tǒng)無法正常啟動(dòng)。為此,可以以Linux光盤來引導(dǎo),在歡迎界面中(如圖1)選 擇“Resure installed system”項(xiàng),進(jìn)入救援模式。當(dāng)硬件初始化完成后,在向?qū)Ы缑嬷羞x擇語言版本,鍵盤布局,救援模式的介質(zhì)(這里 為“Local CD/DVD”)等參數(shù),之后救援模式會(huì)詢問是否啟用網(wǎng)絡(luò)模式,這里選擇“No”。在救援模式介紹畫面中點(diǎn)擊“Continue”按鈕,系統(tǒng)開始查找本地存儲(chǔ)設(shè)備,之后會(huì)提示系統(tǒng)已經(jīng)被掛載到“/mnt/sysimage”目錄上。點(diǎn)擊回車,選 擇“Shell Start shell”項(xiàng),在Shell中執(zhí) 行“chroot /mnt/sysimage/”命令,完成后會(huì)重新打開一個(gè) Shell,在其中執(zhí)行“df-h”命令,可以查看真實(shí)的系統(tǒng)分區(qū)情況。執(zhí)行“grubinstall /dev/sda”命 令,執(zhí)行引導(dǎo)程序的修復(fù)操作。當(dāng)出現(xiàn)“Installation finished. No error reported”內(nèi)容時(shí),說明修復(fù)操作已經(jīng)成功。連續(xù)執(zhí)行兩次“exit”命令,返回向?qū)Ы缑?,選擇“Reboot”項(xiàng)重啟系統(tǒng),之后系統(tǒng)就可以順利啟動(dòng)了。
如果MBR主引導(dǎo)記錄受損的話,系統(tǒng)是無法啟動(dòng)的。因?yàn)樵谙到y(tǒng)啟動(dòng)時(shí),會(huì)從讀取引導(dǎo)設(shè)備的第一個(gè)扇區(qū),其中保存在主引導(dǎo)記錄,分區(qū)表等信息。為此,在系統(tǒng)處于正常狀態(tài)時(shí),可以執(zhí)行“dd if=/dev/zero of =/dev/sda bs=446 count=1”命令,將MBR信息備份為獨(dú)立的文件,進(jìn)入“/tmp”目錄,可以看到備份的“MBR”文件,可以將該文件復(fù)制到網(wǎng)絡(luò)中的其他主機(jī)(假設(shè)IP為“172.16.1.101”)的根目錄下保存,便于之后出現(xiàn)問題后進(jìn)行修復(fù)。當(dāng)本機(jī)出現(xiàn)MBR損壞故障后,可以按照上述方法進(jìn)入救援模式。
圖1 進(jìn)入救援模式
圖2 設(shè)置網(wǎng)絡(luò)參數(shù)
圖3選擇所需的救援模式
所不同的是,在“Setup Networking” 窗口中 點(diǎn)擊“Yes”按 鈕,選 擇 所需的網(wǎng)卡,在“Enable network interface”窗 口(如 圖 2)中 選 擇“Enable IPv4 Support” 和“Manual Configuration”項(xiàng),為 該網(wǎng)卡設(shè)置IP地址(例如“172.16.1.100/24”),其 余設(shè)置保持默認(rèn),點(diǎn)擊OK按鈕保存配置。當(dāng)網(wǎng)絡(luò)設(shè)置完成后,點(diǎn)擊“Continue”按鈕,按照上述方法打開Shell界面,執(zhí)行“ifconfig”命令,可以看到該Shell環(huán)境的網(wǎng)絡(luò)配置情況。執(zhí)行“scp 172.16.0.101:/root/MBR .”命令,輸入其root賬戶密碼,將保存在目標(biāo)主機(jī)上的“MBR”復(fù)制過來。執(zhí)行“dd if=MBR of =/dev/sda”命令,恢復(fù)目標(biāo)磁盤上的MBR信息。之后按照上述方法重啟,就可以正常使用系統(tǒng)了。當(dāng)然,如果事先沒有備份MBR的話,可以使用第三方的工具(例如“Diskgenius”等),來搜索并修復(fù)磁盤。
在“/etc/fstab”文 件中存放了和文件系統(tǒng)相關(guān)的信息,在啟動(dòng)時(shí)Linux會(huì)讀取該文件,來自動(dòng)掛載所有的分區(qū),如果該文件丟失或者配置出錯(cuò)的話,就會(huì)導(dǎo)致系統(tǒng)無法啟動(dòng)。按照上述方法進(jìn)入救援模式,在“Rescue”窗口(如圖3)中點(diǎn)擊“Continue”按鈕,按照上述方法打開Shell界面,系統(tǒng)自動(dòng)將所有分區(qū)掛載到“/mnt/sysimage”目錄下。執(zhí)行“fdisk -l”命令,查看系統(tǒng)分區(qū)情況。因?yàn)閷?duì)應(yīng)的分區(qū)其實(shí)并沒有損壞,所以可以查看到系統(tǒng)分區(qū)的完整信息。因?yàn)槊總€(gè)分區(qū)對(duì)應(yīng)的名稱標(biāo)識(shí)不會(huì)顯示,所以可以使用“e2label”命令,對(duì)其逐一查看。例如執(zhí)行“e2label/dev/sda1”,“e2label /dev/sda2”,“e2label /dev/sda3”等命令,來查看對(duì)應(yīng)的分區(qū)名稱標(biāo)識(shí)信息。
這樣,就可以得到所有分區(qū)的掛載點(diǎn)信息。“fstab”文件存放在系統(tǒng)根目錄下,所以需要掛載原來系統(tǒng)的根分區(qū)。假設(shè)跟分區(qū)對(duì)一個(gè)的設(shè)備名為“/dev/sda2”,執(zhí)行“mkdir tmp”,“mount /dev/sda2 /tmp”,“df”等命令,可以將跟分區(qū)所有文件掛載到“/tmp”目錄下。之后執(zhí)行“vi /tmp/etc/fstab”命令,對(duì)“fstab”文件進(jìn)行編輯,依次輸入“Label=/ / ext3 default 1 1”,“Label=/boot /boot ext3 default 1 2”,“Label=/home /home ext3 default 1 2”等內(nèi)容,來重新構(gòu)建該文件??梢哉乙慌_(tái)同樣配置的Linux主機(jī),來查看正常的“fstab”文件內(nèi)容,并據(jù)此執(zhí)行上述編輯操作。之后退出Shell環(huán)境,重啟系統(tǒng)即可。
我們知道,Linux的啟動(dòng)配置信息保存在“/Boot/Grub/Grub.conf”文件中,其中包含啟動(dòng)菜單,啟動(dòng)分區(qū),內(nèi)核文件位置等參數(shù)。如果該文件丟失或者誤刪除的話,系統(tǒng)自然無法啟動(dòng)。按照上述方法進(jìn)入救援模式,選擇“shell Start shell”項(xiàng),在Shell中執(zhí)行“chroot/mnt/sysimage”和“df”命令,可以查看分區(qū)信息。執(zhí)行“grub-install /dev/sda”命令,對(duì)Grub進(jìn)行修復(fù)操作。之后進(jìn)入“/boot/grub”目錄,看到雖然修復(fù)了Grub,但是其配置文件并不存在。
執(zhí) 行“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”文件,其中的系統(tǒng)核心文件以及驅(qū)動(dòng)壓縮包名稱較長,可以進(jìn)入“/boot”目錄,來查看其具體的名稱。之后推出Shell并重啟,在“GNU GRUB”啟動(dòng)界面中選擇上述“RedHat Linux”項(xiàng),可以順利啟動(dòng)系統(tǒng)。
對(duì)于Root用戶來說,一旦忘記密碼,就無法正常登錄系統(tǒng)。利用救援模式,可以輕松重設(shè)密碼。按照上述方式進(jìn)入救援環(huán)境,按照上述方法,將系統(tǒng)掛載到“/mnt/sysimage”目錄下。在Shell環(huán)境中執(zhí)行“password root”命令,根據(jù)提示依次輸入新的密碼,當(dāng)出現(xiàn)“all authentication tokens updated successfully”字樣時(shí),說明密碼修改成功。之后按照上述方法重啟系統(tǒng),就可以以新的密碼登錄系統(tǒng)了。
內(nèi)核文件是Linux的核心數(shù)據(jù),進(jìn) 入“/boot”目錄,可以查看內(nèi)核文件“vmlinuz-2.6.32-220.e16.x86_64”等重要文件。如果內(nèi)核文件丟失或者受損,系統(tǒng)是無法正常啟動(dòng)的。按照上述方法進(jìn)入救援模式,選擇“shell Start shell”項(xiàng),在Shell中查看“/boot”分區(qū),如果其中沒有Grub文件的話,需要按照上面談到的方法,先對(duì)Grub進(jìn)行修復(fù)。對(duì)于內(nèi)核文件的修復(fù),可以利用“rpm”命令來實(shí)現(xiàn)。例如,執(zhí)行“rpm –qa vmlinuz-2.6.32-220.e16.x86_64”命令,查看到其來自于“kernel-2.6.32-220.e16.x86_64”包。當(dāng)然,不同版本的Linux的內(nèi)核文件名稱可能不同。執(zhí)行“rpm–qf initramfs-2.6.32.e16.x86_64.img”命令,查看到其也來自于上述安裝包。當(dāng)然,在“/boot”分區(qū)還有別的重要文件,可以從其他正常運(yùn)行的Linux主機(jī)上查看其具體名稱。例如,執(zhí) 行“rpm –qf System.map-2.6.32-220.e16.x86_64”命令,查看到其來自于上述安裝包。因此,只要將內(nèi)核文件重裝一遍,就可以解決上述問題。
執(zhí) 行“mount /dev/cdrom /media/”命令,將光驅(qū)掛載到指定的位置。進(jìn)入“/media/Packages” 目錄,將“kernel-2.6.32-220.e16.x86_64.rpm” 包復(fù)制過來。之后執(zhí)行“rpm –ivh kernel-2.6.32-220.e16.x86_64 --force”命令,強(qiáng)制安裝該包,耐心等候一段時(shí)間后,內(nèi)核即可修復(fù)完成。之后按照上述方法重啟系統(tǒng),如果出現(xiàn)“grub>”提示符,可以依次執(zhí)行“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” 等 命令,就可以順利啟動(dòng)系統(tǒng)了。
當(dāng)然,如果系統(tǒng)內(nèi)核文件存放在網(wǎng)絡(luò)中的某臺(tái)FTP服務(wù)器上,也可以在救援模式中配置好IP等網(wǎng)絡(luò)參數(shù),之后在Shell環(huán)境中執(zhí)行“ftp server1”命令,假設(shè)FTTP服務(wù)器的名稱為“server1”,之后按照提示輸入FTP的用戶名和密碼,當(dāng)出現(xiàn)“ftp>”提示符后,利用“cd /pub/packages/”命令,切換到存儲(chǔ)內(nèi)核文件的目錄中,假設(shè)其保存在“/pub/packages/”目錄中。之后使用“mget kernel-2.*.e16.x86_64.rpm”之類的命令,將Linux的內(nèi)置文件保存到本地。最后,執(zhí)行“quit”命令,退出FTP操作環(huán)境。利用上述命令,對(duì)下載的RPM包進(jìn)行解壓安裝即可,執(zhí)行“l(fā)s /boot”命令,可以查看內(nèi)核文件信息。
對(duì) 于Linux來 說,在“/etc”目錄及其下的“init”,“rc”等子目錄 下還 存 在“inittab”, “rc.sysinit”,“start-ttys.conf”,“prefdm.conf”,“rc.local”等配置文件,在其中保存了系統(tǒng)和用戶配置的相關(guān)信息。但這些配置文件丟失或受損后,對(duì)系統(tǒng)的正常啟動(dòng)也會(huì)造成很大的影響。按照上述方法進(jìn)入救援模式,在Shell中執(zhí)行“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”的 包,按照上述方法掛載光驅(qū),將在光盤中的“Packages”目錄中找到該包,將其復(fù)制出來。執(zhí)行“”rpm –ivh –force initscripts-9.03.27-1.e16.x86_64.rpm命令,執(zhí)行強(qiáng)制安裝操作,這樣,就將這些配置文件恢復(fù)過來。