硬盤,拆過機的同志應該知道就是一塊小剛體嘛。拆過主機硬盤和筆記本硬盤也應該知道不一樣的硬盤的接口是不同的,主機的硬盤通常會有一條線鏈接到主板而筆記本的硬盤直接有插槽。這個概念只是爲了引發硬盤有不一樣的種類存在,當咱們在linux系統中輸出命令fdisk -l的時候,大體會有設備名稱等信息。其中有可能有/dev/sd[a-p][1-15]或者/dev/hd[a-d][1-63]等等,前者表示SCSI,SATA,USB等接口的磁盤文件名,後者表示IDE接口磁盤文件名(這個比較老了)。html
磁盤會有多個概念,爲了方便理解,先設定一個場景,假定咱們在吃雞遊戲的地圖上,這個地圖只有一個圓柱大樓,每層樓都是一個環形操場跑道。node
這是個人電腦的磁盤分佈,一個扇區是512bytes,一次io讀取是8個扇區能讀到4KB。總的容量很明顯是由255盤面*n柱面*m扇區(512bytes)構成的。linux
磁盤是如何讀取數據的呢,咱們知道買磁盤是有轉速指標的,因此咱們能夠設想磁頭不動當靠旋轉就能夠得到某柱面的全部磁道的數據。其實磁盤IO步驟就是如此。git
時間花費,1w轉的磁盤旋轉一圈是不到6ms,存取也就是零點幾毫秒否則磁盤都轉過去了是否是還要等一圈再來讀取。。因此咱們能夠猜到尋道時間是最長的大概是3-15ms。github
所以進行磁盤分區的時候,咱們劃分標準是以柱面做爲分區partition的最小單位。否則按照盤面來分區,那尋道時間的比重會增長天然增長了IO時間。能夠看到上圖,按照扇區連續性進行了分區。數據庫
咱們應該清楚,如今只是分區完成,每個區能夠有本身獨立的文件系統進行管理它所分配到的區域。有不一樣的文件系統體制,咱們假定分配到的區域每一扇區給個序號從1到100。對於FAT格式,一個文件表示形式是鏈表的樣式,多是8->6->7->67->5等等,對於ext2格式,它將1-4做爲一個inode的節點表明了一個文件,存儲了這個文件的實際數據存儲的block序號(5,6,7,8,67),咱們成爲索引式文件系統。緩存
以上說的概念能夠這麼理解,地球就是一塊硬盤,每個國家就是一個分區,每個國家本身的文件系統格式能夠是資本主義也能夠是社會主義。spa
雖然咱們標題說的是Ext2文件系統,可是圖片放的是Ext4文件系統,區別只是GDT而已,爲了跟進時代加進來無妨。操作系統
先談談該圖的整體概念,Entire disk=MBR+Partition table+Partitions. Partition=boot sector+block group. block group=super lock+Group Descriptors+Reserved GDT Blocks+Data Block Bitmap+inode Bitmap+inode Table+Data Blocks.設計
其實這裏設計到了啓動操做系統的過程,這個之後再詳細描述。大概思路是當咱們通過了通電自檢等進入BIOS到指定到磁盤啓動,第一扇區是MBR和Partition table,分區表只有64B,咱們知道磁盤分區最低單位是柱面,柱面範圍是0-255,八個bit就能夠表示,因此16B表示一個分區範圍。一個磁盤理論上只能四個分區,因此爲了拓展容許有3個主分區和一個擴展分區,這個擴展分區能夠擁有多個邏輯分區。那麼咱們分好的每個分區就是一個文件系統了。每個分區都預留的boot sector是載入操做系統內核的引導代碼,它的副本將放在MBR中,固然說雙系統你可能更容易理解,每一個分區能夠指定一個系統,可是隻有一個boot loader能放在MBR中,其中linux的boot loader能夠釋放權限加載別的文件系統的boot sector從而加載雙系統了。
並且實際並非每個Block Group都是如此排布,太多super block說實話浪費空間,冗餘的超級塊和組描述符的副本只保留在組號爲 0 或組號爲 3,5,7 的倍數的塊組中。同時還會有純粹的數據存儲塊,只有後四者。
G0是起始的primary superblock,G1是存有super block,G2是純粹數據存儲。
這是block塊的一種線性目錄結構,它表述了存儲的特殊數據表示格式,例如是目錄文件的block,它將目錄下的文件名及其對應的inode號記錄在目錄的block中。
咱們知道目錄也是一個文件,一個文件的文件名由目錄文件存儲,文件系統新建一個目錄時會分配一個inode與至少一個block給該目錄,inode記錄目錄的相關權限和屬性,分配到的block記錄目錄下的文件名和該文件名佔用的inode號碼信息。因此indoe自己不記錄文件名,文件名記錄在目錄的block中,所以新增/刪除/重命名文件名與目錄的w權限有關。那麼由於文件名記錄在目錄的block中,所以當咱們要讀某一個文件,必須通過目錄的inode與block而後才能找到哪一個待讀取的文件的inode才能讀到block數據。
目錄樹是由根目錄讀起,系統經過掛載點的掛載信息就能夠找到掛載點的inode號碼,一般一個文件系統的最頂層indoe號碼是2(1是指向不佔空間的proc目錄),而後經過根目錄一層層往下讀。
如圖咱們訪問/etc/passwd須要經過/+rx權限(r是讀,x是進入該目錄)而後一步步找到下一個inode節點。
參考