十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
做存儲和計算機架構(gòu)的研發(fā)人員需要深入理解數(shù)據(jù)在磁盤上的分布,只有這樣當(dāng)系統(tǒng)出現(xiàn)故障的時候才能手動進行系統(tǒng)恢復(fù)。目前,磁盤的容量越來越大,故障率越來越高,當(dāng)故障發(fā)生之后需要對磁盤數(shù)據(jù)進行恢復(fù),磁盤數(shù)據(jù)的恢復(fù)不僅要了解分區(qū)等基本的磁盤數(shù)據(jù)布局,而且需要知道文件系統(tǒng)在磁盤上的數(shù)據(jù)分布。這里首先討論分區(qū)等系統(tǒng)基本數(shù)據(jù)在磁盤上的分布。
DOS分區(qū)是目前常用的一種分區(qū)方式,其磁盤數(shù)據(jù)分布描述如下:
第一個扇區(qū)是主引導(dǎo)分區(qū)MBR,MBR描述了磁盤分區(qū)的結(jié)構(gòu),MBR的內(nèi)容包括引導(dǎo)代碼和分區(qū)表信息,最后以標(biāo)志0xaa55結(jié)尾。
MBR中的引導(dǎo)代碼是在BIOS啟動之后首先得到運行的代碼,通常引導(dǎo)代碼會檢查磁盤分區(qū)表,并且判斷哪個分區(qū)是啟動分區(qū),找到那個啟動分區(qū)之后,然后從啟動分區(qū)引導(dǎo)操作系統(tǒng)。
DOS分區(qū)規(guī)定了四個主分區(qū),每個分區(qū)大可以描述2TB的磁盤空間。當(dāng)磁盤容量增大后,需要采用擴展分區(qū)滿足應(yīng)用需求,擴展分區(qū)就是在主分區(qū)描述的空間中再建分區(qū)信息表。在四個主分區(qū)中,只能存在一個active的分區(qū),該分區(qū)即為啟動分區(qū)。
由于巨磁阻效應(yīng)的發(fā)現(xiàn),磁盤的容量日益增大,DOS分區(qū)存在2TB上限的問題,不能滿足日益增長的大分區(qū)需求,因此,微軟推出了GPT(GUID Partition Table),該分區(qū)表的磁盤結(jié)構(gòu)如下圖所示。
第一部分是保留MBR,占用一個扇區(qū);第二部分是EFI信息,該部分占用一個扇區(qū),該頭描述了分布區(qū)的位置信息;第三部分是 分區(qū)表,一共占用32個扇區(qū),每個分區(qū)表項占用128字節(jié),因此,最多可以容納128個分區(qū)表項;第四部分是分區(qū)區(qū)域;為了提高可靠性,第五部分為分區(qū)表備份區(qū)域,占用整個磁盤的最后32個扇區(qū)。
知道磁盤的分區(qū)信息之后,我們通常會關(guān)注操作系統(tǒng)的bootloader具體在哪里?以Linux為例,bootloader通常為grub,嵌入式系統(tǒng)通常采用uboot,這里以grub為例,grub功能比較強大。在安裝操作系統(tǒng)的時候,grub就被安裝在了boot分區(qū)。在Linux中的/boot目錄就包含了grub文件和操作系統(tǒng)p_w_picpath文件。
Grub是支持文件系統(tǒng)的,在/boot/grub目錄中存在e2fs_stage1_5、xfs_stage1_5等文件,這些文件統(tǒng)稱為stage1.5,其實就是各個不同文件系統(tǒng)的驅(qū)動。這里簡要介紹一下grub的構(gòu)成。Grub的啟動文件分為stage1和stage2兩大部分,stage1是在grub安裝的時候由grub拷貝到MBR中的,由于MBR的大小是512字節(jié),因此,stage1文件大小為512字節(jié)。Stage1的作用是引導(dǎo)stage2,由于stage2存儲在boot 上,其具有文件系統(tǒng)格式,而stage1程序不能很大,因此,無法識別boot分區(qū)文件系統(tǒng),只能采用了程序表的方式在stage1中存儲stage2文件和stage1.5文件的位置。
對于grub而言,由于需要獲取stage2文件,所以,需要修改MBR中的引導(dǎo)程序,所以,在安裝操作系統(tǒng)的時候,grub被安裝在了boot分區(qū)和MBR中。
熟悉磁盤數(shù)據(jù)分布對系統(tǒng)啟動過程的了解有一定幫助,在此簡要描述一下系統(tǒng)啟動過程。
1, 系統(tǒng)上電之后,直接將BIOS程序?qū)雰?nèi)存進行運行,BIOS程序會掃描硬件,并且實現(xiàn)一些基本硬件的驅(qū)動(例如PCI掃描)和自檢操作。BIOS程序會掃描系統(tǒng)中的啟動硬盤,一旦發(fā)現(xiàn)一個可以啟動的硬盤,BIOS會將啟動硬盤內(nèi)MBR中的引導(dǎo)程序裝載入內(nèi)存,并且將CPU交給引導(dǎo)程序。
2, MBR中的引導(dǎo)程序會進行分區(qū)表檢查,由于該引導(dǎo)程序是grub安裝時更新過的,其實際就是grub的stage1程序。當(dāng)所有事情完成之后,引導(dǎo)程序會通過固定地址的方式將啟動分區(qū)中的grub stage2程序裝載入內(nèi)存,并且將CPU交給stage2程序。
3, Stage2程序是grub的主體,其可以識別文件系統(tǒng)。boot分區(qū)上有文件系統(tǒng),這是由用戶在安裝操作系統(tǒng)時候格式化的,grub會將boot分區(qū)mount,這樣可以很容易的找到Linux操作系統(tǒng)的鏡像文件,在grub運行過程中,有些系統(tǒng)需要一些特殊的驅(qū)動,例如,系統(tǒng)根文件系統(tǒng)建立在一個特殊的軟RAID之上,那么在啟動Linux操作系統(tǒng)之前需要加載特殊的軟RAID驅(qū)動。為了達到這個目的,可以采用ramdisk的方式為Linux操作系統(tǒng)預(yù)加載驅(qū)動,ramdisk文件可以在grub配置文件中指定。Grub 完成一些預(yù)加載操作,并且將Linux內(nèi)核加載入內(nèi)存,然后將CPU資源釋放給Linux內(nèi)核。
4, 此時Linux內(nèi)核開始運行,由于grub已經(jīng)預(yù)加載了一些驅(qū)動,因此,Linux也能看到一些特殊的設(shè)備,然后Linux會做root switch操作,掛載真正的根文件系統(tǒng)。如果BIOS已經(jīng)為PCI等設(shè)備分配了資源,那么Linux可以直接采用,當(dāng)然也可以對PCI總線進行重新掃描,并且加載驅(qū)動程序。由于根文件系統(tǒng)已經(jīng)加載,因此,Linux可以根據(jù)/etc/inittab啟動各種服務(wù),至此Linux系統(tǒng)基本啟動完畢。
本文概述了分區(qū)以及bootloader在磁盤中的數(shù)據(jù)分布,對于存儲系統(tǒng)而言,這是最基本的。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。