RHCE考試Troubleshooting中,linux 系統不能開機或可能出現的錯誤情況

RHCE考試Troubleshooting中,linux 系統不能開機或可能出現的錯誤情況  

 


RHCE考試Troubleshooting中,linux 系統不能開機或可能出現的錯誤情況



###############################################
# #
############################################### #
# # #
# 作者:羊([email][email protected][/email]) # #
# 主頁:[url]http://blueflybird.rest7.com[/url] # #
# 歡迎轉載,但請保留此段 # #
# ##
###############################################


下週一(2004年4月19日)就要到上海蔘加RHCE考試,考完後基本上不會再碰這些無
關緊要的問題。實際上,只要有充足的時間,任何一個對linux有充分興趣的大蝦小蝦們
都能想辦法在不重裝系統的前提下,上google查資料修復這些問題。但RHCE考試中時間
比較緊張,而一個系統管理員也不可能把所有千奇百怪的問題都遇到,所以瞭解一些常見
trouble還是有好處的。

RHCE不代表甚麼,雖然相對於其他許多考試RHCE要難一些,通過後也不會成爲“理論
家”,不知如何實戰,尤其在國內“假”文憑滿天飛的情況下(“假”不是指製假文憑假證
書那種假,現在非常多的非常正規的教育部門的文憑,實際上與假的沒甚麼區別),RHCE
比較容易受人尊敬(同時向CCIE敬禮),但RHCE考得畢竟比較淺,象許多罈子裏的RHCE
們說的,“RHCE的服務設置貴在廣而不是精”,“RHCE僅僅是開始”,拿不拿這個證就看
它對你有沒有用了。anyway,在準備RHCE的過程中,你會發現自己以前忽略的一些基礎
知識,對於考RHCE值不值這個問題總是仁者見仁,智者見智,就懶得想那麼多了。


(假設系統中至少已經安裝有grub或lilo程序,按錯誤可能發生的順序,包括root帳號不
能正常登錄的情況,寫這個錯誤情況最初的目的是讓自己有個大的概念,希望沒有誤人子
弟)


#######################
# #
####################### #
# # #
# 一、MBR錯誤。 # #
# ##
#######################

由於意外原因,主引導記錄被破壞,新手安裝多操作時系統常發生先裝linux再裝windows
類系統後只能引導win的情況。這種情況下,grub.conf或lilo.conf正常,只需進入rescue
模式重安裝一次MBR即可。
情況描述:只能進入win類系統或開機後BIOS自檢通過後黑屏無任何提示。


#######################
# #
####################### #
# # #
# 二(1)、引導程序錯誤# #
# ##
#######################

grub.conf或lilo.conf文件錯誤。修改了grub.conf或lilo.conf後,或者硬盤物理位置和分區
發生變化後造成不能正常啓動。進入rescue模式,修改grub.conf或lilo.conf即可。注意修
改了lilo.conf後需執行lilo命令(可加-v 參數查看詳細信息)
情況描述:
(一)grub的一般情況
1、如果沒有找到內核(vmlinuz-x.x.x文件),
  出現File not found
    Press any key to continue....
  說明root(hdx,x)錯誤,或內核文件名不對
2、如果找到內核後,運行一會,
  出現kernel Panic:Not init Found,
  一般來說是沒有找到根分區(/分區)即root=/dev/xxx不對
3、如果找到內核後,運行一會,
  出現Kernel panic: VFS: Unable to mount root fs on ...,
  一般來說可能忘了加上initrd /initrd-2.4.21-4.EL.img(大多情況發生在使用scsi硬盤)
4、總的來說grub.conf裏面必須存在的就幾行。
#more grub.conf
title linux
root (hd0,1) #/boot分區所在位置
kernel /vmlinuz-2.4.21-4.EL ro root=/dev/TEST/root 
#內核和根分區(/分區)位置
(根分區可能是LVM和raid,而不僅是hdx和sdx)
initrd /initrd-2.4.21-4.EL.img

平時練習grub.conf菜單文件的最好辦法是把這個文件刪掉,每次重啓時自己使用grub的
交互命令行就快就會對文件裏面的內容熟悉。
(二)lilo的一般情況
lilo中沒有找到內核文件或ramdisk文件(initrd-2.4.xx.x.ximg)出現的提示與grub中相同,
但如果是分區發生變化就會出現衆所周知的L、LI、010101等錯誤。
lilo.conf中必須出現的幾行。
image=/boot/vmlinuz-2.4.21-4.EL #內核所在位置
label=linux           #等於grub中的title
root=/dev/sdc1  #根分區所在位置
initrd=/boot/initrd-2.4.21-4.EL.img
注意如果lilo中不加boot=/dev/sdx,則運行lilo程序時,需加參數指明
lilo -b /dev/sdx

(三)綜述
1、grub.conf文件設置錯誤可以使用交互命令進入系統,而lilo.conf文件設置錯誤又沒有
設delay值的話,連sigle模式都無法進入,只能用rescue修復。修改文件後發正常的重啓
信號就行了,不用執行sync命令。
2、lilo.conf文件中基本上不管有沒有/boot分區,而grub就要區別有無/boot分區,grub.conf
中root(hdx,x),如果有/boot分區,這個root就是指/boot分區,如果/boot只是作爲一個目
錄在根分區中(/分區),這個root(hdx,x)就是/分區的所在位置。
3、那麼:lilo.conf文件中的內核和根分區(/分區)的位置能不能象grub.conf這樣寫呢:
lilo:
image=/boot/vmlinuz-2.4.21-4.EL root=/dev/sdc1
grub:
kernel /vmlinuz-2.4.21-4.EL ro root=/dev/TEST/root 
結果lilo是無法找到/分區。
4、記住lilo.conf和grub.conf都有4行必須寫,不同之處在於grub.conf中多了一行指明/boot
目錄(注意不是/boot分區,而僅僅是/boot目錄)所在分區的位置,而lilo.conf中把kernel
和根分區(/分區)拆行爲兩行。
5、我估計grub和lilo是troubleshooting中必考項目

#######################
# #
####################### #
# # #
# 二(2)、/initrd目錄 # #
# ##
#######################

這個該死的問題搞了我一整個下午,說來話長,寫在最後(估計考試中不大可能出這種題,
要不就太缺德了)。


#######################
# #
####################### #
# # #
# 三、/etc/inittab # #
# ##
#######################

***(/etc/initab還可能在後面發生錯誤)*****

(一)如果出現INIT: No inittab file found
    Enter runlevel:
一般來說就是inittab文件丟失或者有錯誤。
(二)如果啓動基本正常,到了
INIT:Entering runlevel: 3     (或者 5)
後,就開始出現一系列錯誤,很有可能/etc/inittab文件中
si::sysinit:/etc/rc.d/rc.sysinit 這一行發生錯誤
由於系統許多模塊還沒有初始化。

只能進入rescue模式,如果對inittab文件不很熟悉的話,最好把initscripts的rpm包重裝
一次。默認的/etc/inittab文件應該能正常啓動。


#######################
# #
####################### #
# # #
# 四、/etc/fstab # #
# ##
#######################

/etc/fstab文件錯誤(比/etc/inittab文件後出錯)

(一)出現WARNING:coundn't open /etc/fstab: No such file or directory
/etc/fstab文件丟失
/etc/fstab文件不屬於任何rpm包,利用fdisk和e2label命令查看根分區(/分區)、/boot、/home

/usr、/var分區(如果有這幾個分區),然後編輯/etc/fstab文件,注意fstab文件的格式,如
果記不住,可以查看幫助:如果未mount /分區,則先裝載,如果/usr分區單列,裝載/usr
分區。如果在rescue模式下則先chroot。
查找fstab的幫助文件:
1、直接man fstab
2、locate fstab
  你會發現有個叫fstab.5.gz的文件,一般在/usr/share/man/man5/fstab.5.gz
  可以 man /usr/share/man/man5/fstab.5.gz
  或者 zless /usr/share/man/man5/fstab.5.gz
3、rpm -ql mount | grep fstab 也能找到fstab的幫助文件
4、find / -iname "*fstab*"  最笨的辦法
如果不是在rescue模式,修改fstab文件時出來Read-only file system咋辦?重新裝載成讀
寫模式
mount -o remount,rw /dev/sdax /

(二)mount 文件丟失或被替換
mount 文件錯誤會出現/proc文件相關錯誤,紅字顯示很醒目,
此時比較麻煩,需進入rescue模式而不是進入輸入root口令進行修改,因爲根分區現在被
mount成只讀(ro)模式,你沒有mount命令來把根分區mount 成讀寫的(rw)。

(三)文件系統錯誤
1、使用fsck進行修復,鬱悶的是無論出現什麼提示只能選y,要不繫統依然有問題。
2、可能文件系統的superblock有問題,把備份的恢復即可。(考試中這種情況幾乎不可能)
fsck.ext3 -b (8192*n)+1

(四)raid或LVM錯誤
使用raid和lvm的知識進行修復,如果raid盤或lvm盤中沒有數據,則可把/etc/fstab中提
到的/dev/mdx和/dev/xxxxxx/xxx相關的註釋掉。如何修復raid或lvm上的數據估計Redhat
是不會考的。
我在做實驗時,發現RedHat Enterprise AS3的/etc/rc.sysinit有個小bug
如果我在做raid的基礎上把raid做到LVM裏面去,重啓系統時,會報告出錯。
例如:
1、編輯/etc/raidtab #設一個任意級別的 md0
2、mkraid /dev/md0  #假設一切都正常,該raid則可使用了
3、pvcreate /dev/md0 #建立LVM的pv
4(方法一)、vgextend VGname /dev/md0 #把md0加到現有vg中
4(方法二)、vgcreate VGname /dev/md0 /dev/sdax #新建一個vg
5、lvcreate -L 5G -n newlv VGname #在VGname這個vg中建立一個5G
的名字newlv的lv
6、mkfs.ext3 /dev/VGname/newlv #格式化成ext3文件系統
7、把/dev/VGname/newlv加到/etc/fstab中
8、reboot
你會發現系統出錯。原來/etc/rc.sysinit在啓動raid時,是根據/etc/fstab這個文件來的,如
果/etc/fstab中沒有以/dev/mdx開頭行,則不啓動/etc/raidtab中的md0、md1
.....,重啓系統,
你會發現啓動raid時有(skiped)的東東。如果這個raid是屬於LVM中的一個pv,所以在
啓動LVM的時候,也跟着出錯。
臨時辦法倒是有:編輯/etc/rc.sysinit,因爲在rc.sysinit文件中確定/etc/fstab中是否有raid?br>?
用的grep命令:
INFSTAB=`LC_ALL=C grep -c "^$i" /etc/fstab`
其中INFSTAB是確定命令是否成功的變量,$i是/etc/raidtab 文件中的md0或md1...etc,
把$i前面的^去掉即可。

(五)quota設置錯誤
大不了把/etc/fstab中的usrquota和grpquota全部關閉。
FIXME:是否還有其他發生錯誤的可能?


#######################
# #
####################### #
# # #
# 五、/etc/inittab # #
# ##
#######################

***/etc/inittab文件錯誤***
系統反覆重啓或啓動後就關機
設置了錯誤的runlevel,如0或6

#######################
# #
####################### #
# # #
# 六、其他daemon錯誤 # #
# ##
#######################

情況比較複雜,根據顯示出錯誤信息決定如何修復。


#######################
# #
####################### #
# # #
# 七、/etc/inittab # #
# ##
#######################

***如果服務基本已經啓動完畢卻出現***

INIT: no more processes left in this runlevel

可能是沒有程序守護 tty1或tty2…………等,即/etc/inittab文件中少了
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
等等

出現這種情況,如果不大明白//etc/inittab的格式,強制重裝initscripts的rpm包即可


#######################
# #
####################### #
# # #
# 八、xwindow錯誤 # #
# ##
#######################

一般來說與/etc/X11/XF86config文件有關,考試中不可能涉及硬盤問題。
運行redhat-config-xfree86一般都能解決,可能發生的問題較多,普通點的就是刷新率,顯
示模式如800x600等。


#######################
# #
####################### #
# # #
# 九、root不能正常登錄# #
# ##
#######################

********密碼及PAM相關*******

(一)出現Login incorrect 多半與密碼相關
1、的確是密碼錯誤 單用戶模式修改
2、root用戶被鎖 單用戶模式 usermod -U root 即可
3、沒有root用戶,即沒有uid爲0的用戶
4、/etc/securetty文件中沒有tty*(*表示1,2,3,4等)

(二)輸入用戶名和密碼後,只見屏幕一閃,,那多半與authconfig、pam有關了
1、三輪車伕同志遇到的。authconfig時,選了ldap認證,後來ldap服務器的地址變了後,
就無法登錄。
   解決辦法:運行 authconfig取消該選項。
2、/etc/pam.d/system-auth中添加了
   account required /lib/security/$ISA/pam_access.so
   或其他類似的pam模式限制,如pam_listfile.so、pam_time.so等。
  解決辦法同上,運行authconfig後會自動刪掉。
3、/etc/pam.d/login中添加了
   account required /lib/security/$ISA/pam_access.so
   或其他類似的pam模式限制,如pam_listfile.so、pam_time.so等。
  解決辦法:只有手工去查看login文件,運行authconfig後不會自動取消。
4、/etc/pam.d/ 目錄中的system-auth 或login中的模塊文件名有誤。
  模塊文件名錯誤同樣會使系統無法登錄。
  建議發生無法登錄的情況時,到單用戶或rescue模式,首先查看/var/log/secure 和
message文件。






****************************************************************
**********************關於第二點的說明**************************
****************************************************************
#######################
# #
####################### #
# # #
# 二(2)、/initrd目錄 # #
# ##
#######################

該問題困擾了整個下午。從頭說起:

中午在linuxsir.org的論壇上發現一位叫Proarfei的發了個貼子,內容如下:

---------------------------發貼內容--------------------------------
RHAS3-請求幫助!
安裝RHAS3時很順利,由於是雙系統,而且我希望是ntldr做主啓動程序,所以我選擇了
GRUB安裝位置在引導分區的第一扇區,但很奇怪的是,AS在安裝完成處沒有提示創建
引導盤,在RH9中是有這一步的,我在查詢AS3的安裝說明中也沒有這步驟,但在說明
GRUB配置時說可以創建引導在別的盤上,我不是很清楚AS3是如何創建引導程序在軟盤
上的,請各位高手指點一二。
---------------------------發帖結束--------------------------------


AS3中的確沒有創建引導盤這一步,當時我不明白Proarfei究竟是想用軟盤引導還是想在
ntldr中引導linux,於是回貼如下:


---------------------------回帖內容--------------------------------
如果想用軟盤啓動linux與grub無關。
製作啓動盤
mkbootdisk `uname -r`

如果想在nt啓動菜單選擇啓動
ntldr是由配置文件boot.ini提供工作參數的,該文件位於Windows XP系統分區的根目錄下,
具有隱藏、系統、只讀屬性。我們只需要將Red Hat Linux的引導記錄作爲一個文件備份到
C盤的根目錄下,並相應地在boot.ini文件裏添加一個項目來指向它們,就可以實現雙重系
統了。
參見:
target="_blank">[url]http://tech.ccidnet.com/pub/article/c738_a79178_p1.html[/url]
----------------------------回帖結束------------------------------


由於平時從來沒有用過mkbookdisk做過系統盤,不知是否有效,於是自己順便做個實驗,
以免亂說誤人子弟。誰知道偶在AS3上用這個命令做盤時,顯示:

[root@blueflybird root]# mkbootdisk --device /dev/fd0 `uname -r`
Insert a disk in /dev/fd0. Any information on the disk will be lost.
Press <Enter> to continue or ^C to abort:
cp: writing `/tmp/mkbootdisk.MPg6Cy/initrd.img': No space left on device
cat: write error: No space left on device
cat: write error: No space left on device
20+0 records in
20+0 records out

靠,空間不足,而且還不說到底是哪個盤的空間不足,整得我連忙用df查看。
結果畢竟還是做好了啓動盤(只是不能使用該盤正常啓動)

而此時偶又想起,如果Proarfei同志只是要引導linux,把lilo或grub安裝到軟盤上也行啊,
根本不用mkbookdisk做系統盤。等到論壇上回完貼,心裏很不爽,爲什麼偶用mkbookdisk
做的盤就不能啓動呢?

突然偶又想起(偶已經想起了很多次什麼東東了),是不是偶用的scsi硬盤造成ramdisk太
大的原因哦,管他三七二十二,還是二十三,去找個IDE盤接上,把scsi中的文件複製到
ide中

cp -a /bin /sbin /var /lib /etc /boot /dev /usr /IDE/
由於根分區中的/root區內編譯2.6的內核也佔了1G,所以/root /tmp /proc 幾個區就自己建
了,swap,暫時不用吧
象/mnt /home /misc 目前對我來說毫無價值,懶得管他,這樣拷了好久(幸虧還有筆記本
可以用)。

終於拷完,把grub也裝上,卸下scsi盤,再把IDE放到第一個位置,reboot
從SCSI開始出錯。

---------------------------屏幕結束--------------------------------
/lib/BusLogic.o:init_module:
Hint: insmod errors can be caused by incorrect module parameters, including invalid IO
or IRQ
parameters.
you may find more information in syslog or the output from dmesg
ERROR:/bin/insmod exited abnormally!
.
.
調ext3.o module正常
.
.
Mounting root filesystem 正常
.
.
pivortroot:pivot_root(/sysroot,/sysroot/initrd)failed: 2
umount /initrd/proc failed: 2
Freeing unused kernel memory: 164k freed
Kernel panic: No init found. Try passing init= option to kernel
---------------------------顯示結束--------------------------------

以後的事讓我越來越不爽,甚至變得氣急敗壞,許許多多的事反反覆覆做了許多遍。
一、拆下IDE,裝上SCSI
二、拆下SCSI,裝上IDE
三、看/var/log/dmesg,反覆拆,反覆看,裏面屁都沒有一個最新的
四、mkinitrd /boot/initrd.2.4.x.x.xEl `uname -r`
五、加參數--omit-scsi-modules
六、加參數--omit-raid-modules
七、加參數--omit-lvm-modules
八、試用各種組合方式
九、重新回想系統啓動的順序
十、IDE和SCSI整在一起,考文件,拷了刪,再刪了拷
十一、差點就準備用dd
十二、發狂中
十三、看電視、胃痛
十四、啓動時向內核加參數init=/bin/sh、加1。
十五、用帶scsi-modules 的ramdisk和不帶scsi-modules 的ramdisk
十六、明明知道本來許多無關的情況,都儘量試試關掉再打開。
十七、再重新回想系統啓動的順序

怎麼會想得到與/initrd 這個目錄有關係?????正絕望中看到
umount /initrd/proc failed: 2
心想總不可能與/initrd有關係吧,管他媽的,試了再說。

好了,進入rescue建立/initrd目錄後,他媽的一切正常了。
然後製作了一個不帶scsi、raid、lvm的ramdisk,initrd.2.4..x.x.x.img的尺寸小了一大半,
重啓也正常,再用

[root@blueflybird root]# mkbootdisk `uname -r`

一切非常正常,也可以正常用該軟盤啓動。說明ramdisk調用的模塊多了後可能無法建系
統盤。
現在已經22:51,我在發狂中吃了晚飯。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章