CentOS6系統啓動失敗故障排查An error occurred during the file sytem check

操作系統啓動失敗如下圖報錯:

wKiom1RKZXqgHGs6AANK_kNlQys060.jpg

 

故障現象:

從圖中可以看到,操作系統啓動的過程中,fsck在執行文件系統檢測時出現了錯誤,並且是在檢查/dev/mapper/VolGroup-lv_home時出錯,提示此文件不存在;

 

故障分析:

這是一個什麼界面,爲何會出現這個界面?

CentOS6.4的操作系統啓動的的大致過程爲:加載BootLoader-à加載kernel-àinit執行系統初始化-à用戶登錄;而在init執行系統初始化的過程中,會執行系統初始化腳本/etc/rc.d/rc.sysinit,在此腳本中即會執fsck -A進行文件系統檢測;

fsck -A會執行什麼操作呢?

fsck -A會遍歷文件/etc/fstab,檢查其中定義的所有的文件系統。fsck在做文件系統檢查前通常不會去檢查設備是否真實存在,所以如果某設備不存在,而又去做了fsck,fsck即會報錯,繼而導致啓動操作系統時會進入文件系統修復模式(file system repair mode),而中斷正常的操作系統啓動;

所以,這就是爲何會出現此界面的原因了。

 

解決方法

既然是fsck執行失敗,導致操作系統無法繼續啓動,所以可以在操作系統啓動時,讓fsck跳過檢查這個有問題的/dev/mapper/VolGrouplv_home即可正常啓動操作系統;(在/etc/fstab中設置此項的第6個字段fs_passno的值設爲0,即意爲fsck不檢查此行)

         但是此時文件系統修復模式下所有文件都是隻讀的,無法編輯/etc/fstab;所以此時可以選擇從系統光盤啓動,選擇進入緊急救援模式下去修改文件(因爲緊急修復模式不會執行/etc/rc.d/rc.sysinit,所以不會出現此報錯);下面3行是在緊急救援模式下的操作:

1
2
3
bash-4.1# chroot /mnt/sysimage
sh-4.1# vim /etc/fstab             ##將/dev/mapper/VolGrouplv_home這一行的第6個字段設爲0
sh-4.1# reboot -r

 

此時即可正常啓動系統,不過中途會看到如下界面:

wKiom1RKZ8LzU4kiAAHPtG_x4m8874.jpg

此時已沒有fsck的報錯,但是mount掛載文件系統時有一個failed的信息,這是因爲在系統初始化腳本/etc/rc.d/rc.sysinit中,文件系統檢測完成後的下一步即是根據/etc/fstab文件中的定義去掛載文件系統;此時即提醒找不到/dev/mapper/VolGroup-lv_home,所以會出現上圖紅圈內的報錯;

並且從此界面可以明確的看到問題的所在了,/dev/mapper/VolGroup-lv_home不存在;雖然有此failed信息,但不影響系統可以繼續啓動;

 

上圖綠色圈中的是需等待SELinux自動完成重新打標,若不想等待,可以在系統啓動時禁入編輯模式,禁用SELinux的啓動即可,如下圖:

wKiom1RKaESSAihxAADwKCnHGFA003.jpg

 

 

 

--------------------------------------------------------------------

至此操作系統已經可以啓動起來,此處需介紹下背景了,此係統安裝時是按照系統默認的分區佈局(partitioning layout),如下圖:

wKiom1RKaMvzQle7AAGPBvjJ-gE539.jpg

         一塊硬盤sda,分成了sda1sda2兩個分區,sda2做成物理卷,基於此物理卷創建的卷組名稱爲VolGroup,在此卷組上創建了3個邏輯卷,名稱分別爲lv_rootlv_homelv_swap,並且此邏輯卷lv_rootlv_home分別掛載到了文件系統中的/目錄和/home目錄;

    所以前文中/dev/mapper/VolGroup-lv_home即是此係統自動創建的掛載在/home的邏輯卷;比如由於誤操作(umount、lvremove,或是系統斷電等其他意外情況也可能會導致類似問題),刪除了此邏輯卷,然後在重啓電腦時,即會出現開篇處的報錯了。

 --------------------------------------------------------------------------------------------------------------------------------------

 

現在操作系統已經啓動登錄,也知道問題所在了,那麼接下來如何恢復此邏輯卷呢?

此時,系統中查看此邏輯卷的確是已被刪除;

1
2
3
4
5
6
7
[root@mysqlhost1 ~]# lvs
 LV      VG      Attr      LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
 lv_root VolGroup -wi-ao--- 50.00g                                             
 lv_swap VolGroup -wi-ao--- 992.00m                                             
[root@mysqlhost1 ~]# ll /dev/VolGroup/
lrwxrwxrwx 1 root root 7 10月 22 20:27lv_root -> ../dm-0
lrwxrwxrwx 1 root root 7 10月 22 20:27lv_swap -> ../dm-1

 

並且由於此邏輯卷是掛載在/home目錄下,此邏輯卷丟失,那麼/home目錄下的數據,是否也是一同丟失了呢?如何恢復/home目錄下原有的數據?

lvremove刪除邏輯卷,其只是會清除LVM的部分元數據信息(metadata),真正的數據仍會被完整的保留即雖然邏輯卷lv_home被刪除了,但是原/home下的數據仍然存在,只是現在暫且看不到;

並且默人的配置是,LVM的物理卷、卷組或是邏輯捲髮生任何改動之前,LVM的元數據信息都會自動保存至/etc/lvm/archive目錄下;

         所以我們只需恢復邏輯卷lv_home被刪除前的自動備份的LVM元數據信息,邏輯卷lv_home即可自動恢復,然後後重新掛載,即可查看到/home目錄下原有的數據了;如下操作步驟:

1
2
3
4
5
6
##查看和卷組VolGroup相關的元數據備份信息
[root@mysqlhost1 ~]# vgcfgrestore --list VolGroup  
  File:          /etc/lvm/archive/VolGroup_00001-560861966.vg
  VG name:            VolGroup
  Description:    Created *before* executing 'lvremove /dev/VolGroup/lv_home'
  Backup Time:  Wed Oct 22 17:33:17 2014

    此處的結果中可以看到在執行'lvremove /dev/VolGroup/lv_home'之前,卷組的元數據自動被備份到了文件/etc/lvm/archive/VolGroup_00001-560861966.vg

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
##從對應文件中恢復卷組VolGroup的那一刻的元數據信息 
[root@mysqlhost1 ~]# vgcfgrestore -f/etc/lvm/archive/VolGroup_00001-560861966.vg VolGroup
  Restored volume group VolGroup
##此時即可看到此邏輯卷lv_home了
[root@mysqlhost1 ~]# lvscan                                 
 ACTIVE           '/dev/VolGroup/lv_root' [50.00 GiB] inherit
 inactive         '/dev/VolGroup/lv_home' [108.54 GiB] inherit
 ACTIVE           '/dev/VolGroup/lv_swap' [992.00 MiB] inherit
##激活此邏輯卷
[root@mysqlhost1~]# lvchange -ay /dev/VolGroup/lv_home              
[root@mysqlhost1 ~]# lvscan
 ACTIVE           '/dev/VolGroup/lv_root' [50.00 GiB] inherit
 ACTIVE           '/dev/VolGroup/lv_home' [108.54 GiB] inherit
 ACTIVE            '/dev/VolGroup/lv_swap' [992.00 MiB] inherit
1
2
3
4
5
6
##恢復/etc/fstab中剛纔做的改動
[root@mysqlhost1 ~]# vi /etc/fstab  
##重新掛載         
[root@mysqlhost1 ~]# mount -a    
##/home目錄下原有的數據也都可以查看到了                       
[root@mysqlhost1 ~]# ls /home
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章