資料在磁碟上的布局

2021-09-03 04:47:49 字數 2115 閱讀 2545

dos分割槽是目前常用的一種分割槽方式,其磁碟資料分布描述如下:

第乙個扇區是主引導分割槽mbr,mbr描述了磁碟分割槽的結構,mbr的內容包括引導**和分割槽表資訊,最後以標誌0xaa55結尾。

mbr中的引導**是在bios啟動之後首先得到執行的**,通常引導**會檢查磁碟分割槽表,並且判斷哪個分割槽是啟動分割槽,找到那個啟動分割槽之後,然後從啟動分割槽引導作業系統。

dos分割槽規定了四個主分割槽,每個分割槽最大可以描述2tb的磁碟空間。當磁碟容量增大後,需要採用擴充套件分割槽滿足應用需求,擴充套件分割槽就是在主分割槽描述的空間中再建分割槽資訊表。在四個主分割槽中,只能存在乙個active的分割槽,該分割槽即為啟動分割槽。

由於巨磁阻效應的發現,磁碟的容量日益增大,dos分割槽存在2tb上限的問題,不能滿足日益增長的大分割槽需求,因此,微軟推出了gpt(guid partition table),該分割槽表的磁碟結構如下圖所示。

第一部分是保留mbr,占用乙個扇區;第二部分是efi資訊,該部分占用乙個扇區,該頭描述了分布區的位置資訊;第三部分是

分割槽表,一共占用32個扇區,每個分割槽表項占用128位元組,因此,最多可以容納128個分割槽表項;第四部分是分割槽區域;為了提高可靠性,第五部分為分割槽表備份區域,占用整個磁碟的最後32個扇區。

知道磁碟的分割槽資訊之後,我們通常會關注作業系統的bootloader具體在**?以linux為例,bootloader通常為grub,嵌入式系統通常採用uboot,這裡以grub為例,grub功能比較強大。在安裝作業系統的時候,grub就被安裝在了boot分割槽。在linux中的/boot目錄就包含了grub檔案和作業系統image檔案。

grub是支援檔案系統的,在/boot/grub目錄中存在e2fs_stage1_5、xfs_stage1_5等檔案,這些檔案統稱為stage1.5,其實就是各個不同檔案系統的驅動。這裡簡要介紹一下grub的構成。grub的啟動檔案分為stage1和stage2兩大部分,stage1是在grub安裝的時候由grub拷貝到mbr中的,由於mbr的大小是512位元組,因此,stage1檔案大小為512位元組。stage1的作用是引導stage2,由於stage2儲存在boot 上,其具有檔案系統格式,而stage1程式不能很大,因此,無法識別boot分割槽檔案系統,只能採用了程式表的方式在stage1中儲存stage2檔案和stage1.5檔案的位置。

對於grub而言,由於需要獲取stage2檔案,所以,需要修改mbr中的引導程式,所以,在安裝作業系統的時候,grub被安裝在了boot分割槽和mbr中。

熟悉磁碟資料分布對系統啟動過程的了解有一定幫助,在此簡要描述一下系統啟動過程。

1,系統上電之後,直接將bios程式匯入記憶體進行執行,bios程式會掃瞄硬體,並且實現一些基本硬體的驅動(例如pci掃瞄)和自檢操作。bios程式會掃瞄系統中的啟動硬碟,一旦發現乙個可以啟動的硬碟,bios會將啟動硬碟內mbr中的引導程式裝載入記憶體,並且將cpu交給引導程式。

2,mbr中的引導程式會進行分割槽表檢查,由於該引導程式是grub安裝時更新過的,其實際就是grub的stage1程式。當所有事情完成之後,引導程式會通過固定位址的方式將啟動分割槽中的grub stage2程式裝載入記憶體,並且將cpu交給stage2程式。

3,stage2程式是grub的主體,其可以識別檔案系統。boot分割槽上有檔案系統,這是由使用者在安裝作業系統時候格式化的,grub會將boot分割槽mount,這樣可以很容易的找到linux作業系統的映象檔案,在grub執行過程中,有些系統需要一些特殊的驅動,例如,系統根檔案系統建立在乙個特殊的軟raid之上,那麼在啟動linux作業系統之前需要載入特殊的軟raid驅動。為了達到這個目的,可以採用ramdisk的方式為linux作業系統預載入驅動,ramdisk檔案可以在grub配置檔案中指定。grub 完成一些預載入操作,並且將linux核心加載入記憶體,然後將cpu資源釋放給linux核心。

4,此時linux核心開始執行,由於grub已經預載入了一些驅動,因此,linux也能看到一些特殊的裝置,然後linux會做root switch操作,掛載真正的根檔案系統。如果bios已經為pci等裝置分配了資源,那麼linux可以直接採用,當然也可以對pci匯流排進行重新掃瞄,並且載入驅動程式。由於根檔案系統已經載入,因此,linux可以根據/etc/inittab啟動各種服務,至此linux系統基本啟動完畢。

本文概述了分割槽以及bootloader在磁碟中的資料分布,對於儲存系統而言,這是最基本的。

倒排表在磁碟上的布局

由於倒排表的大小一般都很大,所以大部分搜尋引擎都將倒排表儲存在磁碟上。下圖是乙個倒排表的總體結構布局 磁碟是由乙個個資料塊 block,大小固定,例如64kb 組成的。倒排表中的乙個列表 乙個單詞對應的列表 可能跨越多個block,開始於某個block中的某處,結束於另外乙個block的某處。blo...

磁碟分割槽,檔案在磁碟上的儲存

一 磁碟物理結構 碟片 機械手臂 磁頭 主軸馬達 磁碟構成描述 磁軌 扇區 柱面 主引導扇區 0磁軌0柱面1扇區,分為 1 主引導記錄mbr 2 分割槽表dpt共64位元組 每個分割槽資訊佔16位元組,故最多四個分割槽 想要實現更多分割槽,可利用擴充套件分割槽 指向乙個更大空間存更多分割槽資訊 建立...

mysql 是怎麼在磁碟上是儲存 NULL 的?

大家知道一般表中char,vachar這些欄位都是有值的,那如果某個字段允許為空,且值確實為空,mysql又是怎麼處理的呢?是不是直接儲存null呢?假設這個欄位的null值我們在磁碟上儲存的時候,就是按照 null 這麼個字串來儲存,是不是很浪費儲存空間?因為字串要占用空間的啊 乙個 null 字...