■ 新疆 馬小川 喬卿丞
編者按:本文通過筆者遇到的一次對服務器啟動故障的處理,講解了CentOS 7中使用的XFS文件系統(tǒng)和LVM邏輯盤卷管理器的相關知識。
筆者維護的一臺服務器因非正常掉電而關機了。而當再啟動該設備時,該服務器的系統(tǒng)無法正常啟動,報錯如圖1所示。
該服務器安裝的系統(tǒng)是Centos7,從報錯信息中可以了解到,服務器文件系統(tǒng)出現(xiàn)了錯誤,無法正常啟動。而造成文件系統(tǒng)出現(xiàn)錯誤的原因,應該是非正常關機造成的系統(tǒng)文件損壞。
該服務器系統(tǒng)因無法正常啟動,而進入了緊急模式。緊急模式是Linux用于系統(tǒng)修復的一種模式。在緊急模式下可進行查看系統(tǒng)日志,還原配置文件,文件系統(tǒng)修復,硬盤分區(qū)維護,用戶口令更改等操作。
在此例中,根據(jù)報錯信息的提示,通過鍵入“jour nalctl”命令查看日志,日志中的報錯信息與圖1中提示的報錯信息是一致的,都是關于XFS(dm-0)相關的報錯信息。那么什么是XFS(dm-0)呢?
文件系統(tǒng)是存儲設備上負責組織、管理的軟件機構(gòu),它負責為用戶建立、存入、讀出、修改以及轉(zhuǎn)儲文件,控制文件的存取等。
在CentOS 7之前,Cent OS采用的是Ext文件系統(tǒng),其中CentOS 5采用的是ext3,CentOS 6采用ext4。CentOS 7采用了XFS文件系統(tǒng)。
圖1 服務器的系統(tǒng)無法正常啟動并提示報錯
XFS文件系統(tǒng)是美國硅圖公司(Silicon Graphics,SGI)開發(fā)的高性能日志文件系統(tǒng),目前的各Linux系統(tǒng)都支持XFS文件系統(tǒng)。XFS文件系統(tǒng)具備保證數(shù)據(jù)完整性、快速反應性、高可擴展性和高傳輸帶寬等特點。XFS系統(tǒng)保證數(shù)據(jù)完整性是指XFS文件系統(tǒng)開啟了日志功能,即使計算機發(fā)生宕機引起文件受損,XFS文件系統(tǒng)都可以根據(jù)所記錄的日志在很短的時間內(nèi)迅速恢復磁盤文件內(nèi)容。
日志文件系統(tǒng)的原理是將所有的文件的改變記錄在日志文件中。日志文件不僅記錄對信息節(jié)點(inode)的更改,同時也記錄對文件內(nèi)容的更改。每次對文件系統(tǒng)的改變都會記錄在日志文件的尾部。記錄不經(jīng)過磁盤緩沖區(qū)直接寫入磁盤,在系統(tǒng)崩潰后,只需檢查日志文件的尾部,就能夠找到文件系統(tǒng)崩潰前的狀態(tài),從而迅速恢復系統(tǒng)。
在Linux中設備都是以文件的形式存在,Linux的設備文件都在/dev目錄下。設備文件為管理設備提供了接口,在/dev目錄下可以找到dm-0。那么這個“dm-0”是一個什么“設備”呢?
圖2 查看LVM設備的信息
從Linux 2.6開始,Linux內(nèi)核提供了Device Mapper機制,該機制是支持邏輯卷管理的通用設備機制。CentOS 7默認使用的LVM就是基于該機制。LVM(Logical Volume Manger)是邏輯卷管理器的簡稱,可以將多個物理磁盤集合在一起,看作單一的邏輯設備,創(chuàng)建、管理邏輯磁盤的分區(qū),可以動態(tài)調(diào)整存儲空間大小。這提高了磁盤分區(qū)管理的靈活性。
在LVM中,物理磁盤的分區(qū)PV可被加入到虛擬資源池VG,形成一個虛擬的磁盤進行統(tǒng)一的分配和管理。在這個虛擬磁盤中,再劃分邏輯分區(qū)LV。通過命令“dmsetup ls”可以查看到LVM設備的信息,如圖2所示?!癲msetup”是用來與Device Mapper溝通的工具。在圖2中可以看到有兩個邏輯分區(qū)centos-swap和centos-root。其中centosroot分區(qū)的設備號是(253:0),“253”是該邏輯分區(qū)的主設備號,“0”是分設備號。
在Linux系統(tǒng)中設備都有設備號,每個設備號又分為主設備號和次設備號。其中主設備號用來區(qū)分不同種類的設備,而次設備號用來區(qū)分同一類型的多個設備。通過命令“cat/proc/devices”可以查詢到device-mapper的設備號為“253”。以此可以說明此計算機安裝的CentOS系統(tǒng)的root分區(qū)和swap分區(qū),都是在虛擬磁盤(設備號253)上的邏輯分區(qū),root分區(qū)和swap分區(qū)的分設備號分別是0和1。
“dm-0”就是虛擬磁盤中分設備號為0的邏輯分區(qū)。“dm-1”就是分設備號為1的邏輯分區(qū)。“dm-0”就是系統(tǒng)的root分區(qū)?!癲m-1”就是系統(tǒng)的swap分區(qū)。這個可以通過命令行“l(fā)s -l/dev/mapper”來印證。在/dev/mapper目錄中可以查看邏輯分區(qū)的映射情況,如圖3所示。
圖3 查看邏輯分區(qū)的映射情況
本文中服務器報送的錯誤基本都是“dm-0”分區(qū)的。如上所述,“dm-0”分區(qū)就是Linux系統(tǒng)的root分區(qū),也就是根分區(qū),當根分區(qū)掛載時出現(xiàn)錯誤,系統(tǒng)無法正常啟動。造成根分區(qū)掛載錯誤的原因,應該是由于該服務器非正常掉電造成了根分區(qū)文件損壞。
由于CentOS 7系統(tǒng)采用了XFS文件系統(tǒng),XFS能夠通過日志很好的保護系統(tǒng)數(shù)據(jù)的完整性。因此,即便文件出現(xiàn)了損壞,也可以很快進行修復。修復的方法是使用XFS文件系統(tǒng)的修復工具“xfs_repair”。
修復方法如下:
通過使用命令行“xfs_repair -L/dev/dm-0”進行修復。該命令中加入?yún)?shù)“-L”強制將XFS的日志清零,修復系統(tǒng)/dev/dm-0。執(zhí)行命令后,重啟計算機,已能正常進入系統(tǒng)。故障處理完畢。
在本例中,服務器在啟動過程中出現(xiàn)了故障,從而造成無法進入系統(tǒng)。那么Linux系統(tǒng)的服務器的啟動過程究竟是什么樣的?
以X86計算機為例,啟動順序應該是在啟動電源后,計算機首先會從CMOS加載BIOS,并檢測基本的硬件信息。之后BIOS尋找硬盤的MBR(Master Boot Record)并運行記錄在MBR上的程序,系統(tǒng)從MBR上運行GRUB。
GRUB負責加載Linux內(nèi)核程序,此時系統(tǒng)正式進入Linux。隨后程序systemd執(zhí)行target配置文件初始化系統(tǒng),包括磁盤掛載等,最終完成Linux系統(tǒng)的完全啟動。
在本例中,服務器已經(jīng)完成內(nèi)核加載,在后續(xù)的系統(tǒng)初始化階段,系統(tǒng)掛載時出現(xiàn)了故障。通過“fdsik-l”命令查看系統(tǒng)的掛載硬盤情況也可以看出,如圖4所示。
系統(tǒng)掛載了2塊硬盤,其中系統(tǒng)內(nèi)核/boot在/dev/sda1中,/dev/sda1硬盤分區(qū)類型是Linux。而硬盤/dev/sda2是邏輯磁盤,分區(qū)類型是“Linux LVM”。在/dev/sda2中主要安裝的是文件系統(tǒng),包含兩個分區(qū)root(根)分區(qū)和swap(虛擬內(nèi)存)分區(qū)。
圖4 查看系統(tǒng)的掛載硬盤情況
以上分區(qū)的情況,說明了系統(tǒng)內(nèi)核單獨分在一塊硬盤分區(qū)上,而文件系統(tǒng)則分配在邏輯磁盤中,提高系統(tǒng)磁盤空間管理的靈活性。
以上就是安裝CentOS 7系統(tǒng)的計算機啟動的過程,以及系統(tǒng)磁盤的分區(qū)情況,了解這些是維護人員判斷和處理計算機啟動過程中的硬盤加載相關故障的基礎。
CentOS是廣泛使用的Linux發(fā)布版本之一。筆者通過一次對服務器啟動故障的處理,學習和了解到了CentOS 7中使用的XFS文件系統(tǒng)和LVM邏輯盤卷管理器的相關知識,這些知識對今后做好設備的運行維護有很好的幫助。