■ 新疆 馬小川 喬卿丞
編者按:本文通過筆者遇到的一次對服務器啟動故障的處理,講解了CentOS 7中使用的XFS文件系統和LVM邏輯盤卷管理器的相關知識。
筆者維護的一臺服務器因非正常掉電而關機了。而當再啟動該設備時,該服務器的系統無法正常啟動,報錯如圖1所示。
該服務器安裝的系統是Centos7,從報錯信息中可以了解到,服務器文件系統出現了錯誤,無法正常啟動。而造成文件系統出現錯誤的原因,應該是非正常關機造成的系統文件損壞。
該服務器系統因無法正常啟動,而進入了緊急模式。緊急模式是Linux用于系統修復的一種模式。在緊急模式下可進行查看系統日志,還原配置文件,文件系統修復,硬盤分區維護,用戶口令更改等操作。
在此例中,根據報錯信息的提示,通過鍵入“jour nalctl”命令查看日志,日志中的報錯信息與圖1中提示的報錯信息是一致的,都是關于XFS(dm-0)相關的報錯信息。那么什么是XFS(dm-0)呢?
文件系統是存儲設備上負責組織、管理的軟件機構,它負責為用戶建立、存入、讀出、修改以及轉儲文件,控制文件的存取等。
在CentOS 7之前,Cent OS采用的是Ext文件系統,其中CentOS 5采用的是ext3,CentOS 6采用ext4。CentOS 7采用了XFS文件系統。

圖1 服務器的系統無法正常啟動并提示報錯
XFS文件系統是美國硅圖公司(Silicon Graphics,SGI)開發的高性能日志文件系統,目前的各Linux系統都支持XFS文件系統。XFS文件系統具備保證數據完整性、快速反應性、高可擴展性和高傳輸帶寬等特點。XFS系統保證數據完整性是指XFS文件系統開啟了日志功能,即使計算機發生宕機引起文件受損,XFS文件系統都可以根據所記錄的日志在很短的時間內迅速恢復磁盤文件內容。
日志文件系統的原理是將所有的文件的改變記錄在日志文件中。日志文件不僅記錄對信息節點(inode)的更改,同時也記錄對文件內容的更改。每次對文件系統的改變都會記錄在日志文件的尾部。記錄不經過磁盤緩沖區直接寫入磁盤,在系統崩潰后,只需檢查日志文件的尾部,就能夠找到文件系統崩潰前的狀態,從而迅速恢復系統。
在Linux中設備都是以文件的形式存在,Linux的設備文件都在/dev目錄下。設備文件為管理設備提供了接口,在/dev目錄下可以找到dm-0。那么這個“dm-0”是一個什么“設備”呢?

圖2 查看LVM設備的信息
從Linux 2.6開始,Linux內核提供了Device Mapper機制,該機制是支持邏輯卷管理的通用設備機制。CentOS 7默認使用的LVM就是基于該機制。LVM(Logical Volume Manger)是邏輯卷管理器的簡稱,可以將多個物理磁盤集合在一起,看作單一的邏輯設備,創建、管理邏輯磁盤的分區,可以動態調整存儲空間大小。這提高了磁盤分區管理的靈活性。
在LVM中,物理磁盤的分區PV可被加入到虛擬資源池VG,形成一個虛擬的磁盤進行統一的分配和管理。在這個虛擬磁盤中,再劃分邏輯分區LV。通過命令“dmsetup ls”可以查看到LVM設備的信息,如圖2所示。“dmsetup”是用來與Device Mapper溝通的工具。在圖2中可以看到有兩個邏輯分區centos-swap和centos-root。其中centosroot分區的設備號是(253:0),“253”是該邏輯分區的主設備號,“0”是分設備號。
在Linux系統中設備都有設備號,每個設備號又分為主設備號和次設備號。其中主設備號用來區分不同種類的設備,而次設備號用來區分同一類型的多個設備。通過命令“cat/proc/devices”可以查詢到device-mapper的設備號為“253”。以此可以說明此計算機安裝的CentOS系統的root分區和swap分區,都是在虛擬磁盤(設備號253)上的邏輯分區,root分區和swap分區的分設備號分別是0和1。
“dm-0”就是虛擬磁盤中分設備號為0的邏輯分區。“dm-1”就是分設備號為1的邏輯分區。“dm-0”就是系統的root分區。“dm-1”就是系統的swap分區。這個可以通過命令行“ls -l/dev/mapper”來印證。在/dev/mapper目錄中可以查看邏輯分區的映射情況,如圖3所示。

圖3 查看邏輯分區的映射情況
本文中服務器報送的錯誤基本都是“dm-0”分區的。如上所述,“dm-0”分區就是Linux系統的root分區,也就是根分區,當根分區掛載時出現錯誤,系統無法正常啟動。造成根分區掛載錯誤的原因,應該是由于該服務器非正常掉電造成了根分區文件損壞。
由于CentOS 7系統采用了XFS文件系統,XFS能夠通過日志很好的保護系統數據的完整性。因此,即便文件出現了損壞,也可以很快進行修復。修復的方法是使用XFS文件系統的修復工具“xfs_repair”。
修復方法如下:
通過使用命令行“xfs_repair -L/dev/dm-0”進行修復。該命令中加入參數“-L”強制將XFS的日志清零,修復系統/dev/dm-0。執行命令后,重啟計算機,已能正常進入系統。故障處理完畢。
在本例中,服務器在啟動過程中出現了故障,從而造成無法進入系統。那么Linux系統的服務器的啟動過程究竟是什么樣的?
以X86計算機為例,啟動順序應該是在啟動電源后,計算機首先會從CMOS加載BIOS,并檢測基本的硬件信息。之后BIOS尋找硬盤的MBR(Master Boot Record)并運行記錄在MBR上的程序,系統從MBR上運行GRUB。
GRUB負責加載Linux內核程序,此時系統正式進入Linux。隨后程序systemd執行target配置文件初始化系統,包括磁盤掛載等,最終完成Linux系統的完全啟動。
在本例中,服務器已經完成內核加載,在后續的系統初始化階段,系統掛載時出現了故障。通過“fdsik-l”命令查看系統的掛載硬盤情況也可以看出,如圖4所示。
系統掛載了2塊硬盤,其中系統內核/boot在/dev/sda1中,/dev/sda1硬盤分區類型是Linux。而硬盤/dev/sda2是邏輯磁盤,分區類型是“Linux LVM”。在/dev/sda2中主要安裝的是文件系統,包含兩個分區root(根)分區和swap(虛擬內存)分區。

圖4 查看系統的掛載硬盤情況
以上分區的情況,說明了系統內核單獨分在一塊硬盤分區上,而文件系統則分配在邏輯磁盤中,提高系統磁盤空間管理的靈活性。
以上就是安裝CentOS 7系統的計算機啟動的過程,以及系統磁盤的分區情況,了解這些是維護人員判斷和處理計算機啟動過程中的硬盤加載相關故障的基礎。
CentOS是廣泛使用的Linux發布版本之一。筆者通過一次對服務器啟動故障的處理,學習和了解到了CentOS 7中使用的XFS文件系統和LVM邏輯盤卷管理器的相關知識,這些知識對今后做好設備的運行維護有很好的幫助。