【Linux系統】文件系統(1)——磁盤的基本知識

前言

文件系統是Linux系統的核心,在Linux系統中,一切皆文件。對於開發者而言,編程過程當中一般用到的是文件IO。在open函數打開文件,read函數讀取文件的過程底層原理如何?本文件系統系列文章主要嘗試針對的是這部份內容進行深刻的講解。編程

文件最終是存儲在磁盤上,文件的存取,最終是讀寫磁盤。所以,在本文章中,將主要介紹磁盤的一些基礎知識。架構

硬盤的物理結構

硬盤結構概述

clipboard.png

其中:函數

  • 每一個盤片有兩面,兩面均可以存儲數據。
  • 每一個盤面都有一個磁頭,用於存取數據。
  • 全部磁頭都是固定的,一塊兒作物理移動。可是每次只有一個磁頭執行存取數據的任務,選擇使用哪一個磁頭是由系統控制的。磁頭間的切換很是迅速,而磁頭擺動尋道則比較慢。
  • 磁頭擺動,找到要讀取數據所在的磁道;盤片經過轉動,將數據「送到」磁頭下。

磁頭數、磁道、柱面、扇區

clipboard.png

  • 磁頭數: 每一個盤面都有一個磁頭,所以磁頭數 = 盤面數
  • 磁道: 上以盤片軸心爲圓心,不一樣半徑的同心圓稱爲磁道,磁道不是真正肉眼可看見的一道一道「坑」,而是被磁盤上被磁化的區域,磁道之間有必定的間隙,以避免磁道之間磁介質相互影響。
  • 扇區: 每一個磁道被等分爲若干個弧段(扇區),每一個扇區能夠存放512個字節的數據。扇區是磁盤驅動器向磁盤讀寫數據的最小單元。
  • 柱面: 不一樣盤片半徑相同的磁道組成的一個「柱面」。

CHS編號

所謂硬盤的CHS,即Cylinder(柱面)、Head(磁頭)、Sector(扇區)。每一個柱面、磁頭、扇區都有本身的編號。spa

磁道編號規則

  • 磁頭編號: 從上到下,分別爲磁頭0號,磁頭1號......
  • 柱面編號: 最外圈的柱面編號爲0,往裏依次遞增1,2,3.....

扇區編號規則

每一個磁道均可以被分爲若干個扇區,假設有18個扇區,編號依次爲1,... 18。這裏的1...18在一個磁道中是惟一的,但不一樣磁道之間會重複。所以,要肯定一個扇區在硬盤(多個盤片)中的具體位置,則須要結合柱面號/磁頭號/扇區號來肯定——絕對扇區編號,或者是爲整個硬盤的全部扇區分配一個惟一的編號——DOS扇區編號(也稱爲相對扇區編號或邏輯扇區編號)。操作系統

  • 絕對扇區:柱面號/磁頭號/扇區號惟一肯定。
  • DOS(Disk Operating System)扇區(邏輯扇區): 磁盤操做系統爲了管理方便,會將柱面號/磁頭號/扇區號肯定的扇區編號轉換爲易於管理和計算的單一數字編號,稱爲相對扇區編號或邏輯扇區編號。DOS扇區編號是從柱面0/磁頭0/扇區1開始的,編號爲0,依次遞增,即柱面0/磁頭0/扇區18的DOS扇區編號爲18;柱面0/磁頭1/扇區1的DOS扇區編號爲19...。每一個分區的第一個扇區的邏輯扇區編號爲0。

經過CHS計算硬盤容量

硬盤存儲容量=磁頭數×柱面數×每一個磁道扇區數×每一個扇區字節數指針

磁盤存儲劃分

第一個扇區存儲的數據

硬盤的第一個扇區(邏輯編號爲0)能夠說是整個硬盤最重要扇區了,它主要存儲兩大信息:code

  • 主引導分區(Master Boot Record,MBR): 存放引導加載程序,大小爲446字節。
  • 分區表(partition table): 記錄整塊硬盤分區的狀態,佔64字節。

硬盤分區

分區的最小單位爲柱面(Cylinder),也就是說,分區其實就是指定從第幾個柱面到第幾個柱面屬於哪一個區。圖片

假設硬盤有400個柱面,平均分爲4個區(C、D、E、F盤),則第四個分區F的柱面範圍是第301號到第400號柱面。ip

分區表中,記錄的就是就是每一個分區的起始柱面號和結束柱面號。由於分區表只有64字節,所以最多隻能容納4個分區的記錄(硬盤默認),要想分更多的去,則須要經過擴展分區來建立邏輯分區開發

開機流程

  1. 加載BIOS: BIOS(Base Input Output System,基本輸入輸出系統,讀作/'baious/)是硬件廠商寫入到主板ROM裏的一個程序,電腦開機時,會最早執行BIOS。開機後,進入BIOS界面,以下:

    clipboard.png

  2. MBR: BIOS在執行的過程當中,會根據用戶設置(即在BIOS的Boot界面選擇的優先啓動項,U盤/硬盤/光驅),若是硬盤的優先級最高,則計算機會從硬盤的第一個扇區的MBR中的讀取引導加載程序(Boot Loader)。和BIOS同樣,主引導分區MBR是硬件自己會支持的東西。
  3. 引導加載程序:引導加載程序(Boot Loader)是用於讀取操做系統內核文件的一個小軟件,不一樣的操做系統有各自的引導加載程序。每一個分區均可以有本身的文件系統,有本身的引導扇區,在啓動的過程當中,用戶能夠選擇是直接加載引導程序所在分區的操做系統,仍是將引導加載功能交給各分區引導扇區中的加載程序。boot loader的功能主要有:

    • 提供菜單:讓用戶選擇不一樣的開機選項,是多重引導的重要功能。
    • 載入內核文件:直接指向可開機的程序區段,開始操做系統。
    • 轉交其餘loader: 將引導加載功能轉交給其餘loader負責。
  4. 操做系統內核文件:最後,引導加載程序加載操做系統的內核文件,啓動操做系統!

要點

  1. 每一個分區都有本身的引導扇區(boot sector)。
  2. 實際可開機的操做系統內核文件是存放在各個分區內的,如在C盤安裝Windows系統,在D盤安裝Linux操做系統。
  3. 引導加載程序(boot loader)只會認識本身所在分區內的可開機內核文件,以及其餘boot loader(至關於一個指針,指向其餘loader)。
  4. loader能夠直接指向或者間接地講管理權交給其餘loader。
  5. 一點經驗:若是要安裝多系統,最好先安裝Windows,後安裝Linux。由於Windows會強制覆蓋MBS,也就是說,若是你先裝Linux再裝Windows,MBR中就只有Windows的相關選項(Linux的被覆蓋掉了)。而Linux則不會強制覆蓋MBR,你能夠選擇將Linux的引導程序安裝在MBR或者其所在分區的引導扇區中;你也能夠在Linux的引導程序中設置Windows的開機選項。

磁盤存儲數據的形式

磁盤以二進制的形式存儲數據。咱們平時編程過程當中讀寫文件模式可能有文本形式/二進制形式,文件也有文本文件、音頻文件、圖片文件...等各類不一樣類型的文件,但這些文件在磁盤上都是以二進制的方式存儲。

能夠想像一下,二進制中的0,對應磁盤上的一個「凹」點,1對應磁盤上的一個「凸」點。(只是形象比喻,不是真的凹凸)。

總結

至此,硬盤(機械硬盤)的基本結構和一些核心的概念已瞭解的差很少了,也瞭解了開機過程當中須要用到硬盤的地方。文件的存取,最終會落在硬盤的讀寫上。在後面的文章中,將逐漸自底向上介紹架構在磁盤之上的Linux操做系統的文件系統的一些理論性知識。

相關文章
相關標籤/搜索