1. 程式人生 > >Linux磁盤和文件系統簡介

Linux磁盤和文件系統簡介

新技術 linu 大文件 512字節 塊大小 柱面 容量 多參數 文件大小

Linux磁盤和文件系統簡介

1、文件系統:存儲設備上存儲數據的方式方法

磁盤主要由盤片、機械手臂、磁頭和主軸馬達組成,而數據的寫入實際是寫在盤片上,磁盤的最小存儲單位為扇區,每
個扇區為512字節,扇區組成一個圓就叫做磁道,而多個盤片的硬盤同一位置的磁道組成柱面

存儲容量 = 磁頭數 × 磁道(柱面)數 × 每道扇區數 × 每扇區字節(512字節)

Linux當中,硬盤是以掛載形式存在的,掛載就是利用一個目錄當成進入點,將磁盤分區的數據放在該目錄下,進入該目
錄即進入該分區的意思。

文件系統有:NTFS(New Technology File System)新技術文件系統、Windows專用;FAT、ext系列、xfs等
RHEL5當中默認文件系統為ext3、RHEL6當中默認文件系統為ext4、RHEL7當中默認文件系統為xfs。

每一個磁盤都有MBR,位於0,0,1的位置,存放了引導微代碼以及磁盤分區表和校驗值,所
以我們來看流程,當我們安裝一塊硬盤的時候,首先先應該要做的就是分區,分區表大小只有64字節,所以主分區+擴
展分區最多能創建4個,而且擴展分區能且只能創建一個,我們知道了硬盤的物理結構,應該對硬盤有一個認識了。
而分區其實就是告訴操作系統在此硬盤中可以訪問的區域是由A柱面到B柱面之間的塊,也就是說,磁盤分區就是指定分
區的起始與結束柱面。

2、磁盤分區的目的:方便管理磁盤文件

磁盤在分完區後需要進行格式化,格式化就是為了遵循該系統的存儲數據的方式,按照該方式進行寫入數據,其實格式
化就是為了將文件系統寫入到磁盤當中,讓磁盤變成能被操作系統所識別使用的系統格式

文件系統的運行是與操作系統的文件數據有直接關系的,比如RHEL6.5所用的文件系統為ext4,該文件系統中的文件數據
除了文件實際內容外還包含了很多屬性,例如Linux操作系統的文件權限rwx和文件屬性屬主屬組時間參數等,文件系統
通常將這兩部分數據分別存放在不同的塊,權限和屬性放置到inode中,至於實際數據則放到data block塊中,而且還
有一個超級塊(superblock)會記錄整個文件系統的整體信息,包括inode與block的總量、使用量、剩余量以及文件
系統的格式等很多參數信息。

inode:記錄文件的屬性,一個文件占用一個inode,同時記錄此文件的數據所在block號
block:實際記錄文件的內容,如果文件太大,會占用多個block
superblock:記錄此文件系統的整體信息

每個inode和block都有唯一編號,而且每個文件都會占用一個inode,inode中有文件真實數據所在的block號,所以
說,當我們找到一個文件的inode時,同時也就可以通過inode查找到該文件真實數據所在的block位置,即能夠讀取到
該文件的真實數據,這樣一來我們硬盤上的數據在短時間內就都能夠被讀取出來,讀取的性能就比較好
包括磁盤碎片的整理,都是通過將數據真實存放在的block進行整理

當我們的硬盤非常大,到達TB級別的時候,分區後inode和block的數量是非常巨大的,而且除非在修改文件系統的情況
下,inode和block是不會再發生變動的,所以龐大的數據量會導致很難管理,所以其實在我們進行格式化的時候,都是
分為多個塊組的,每一個塊組都有獨立的inode、block和superblock,而且在每一個分區當中,我們在將開機啟動流程
的時候有提到過我們每一個系統需要指定的文件系統且在不同分區,而每一個分區的文件系統中最前面有一個啟動分
區,就是我們說過的boot loader,這個boot loader可以安裝我們的操作系統引導裝載程序,所以才有了我們的多引導
環境。

那麽我們來詳細了解一下上面的各個參數:

block是存放數據的地方,在我們進行格式化的時候,會設定一個“分配單元大小”,這個值決定了我們block的大
小,而這個值也就決定了我們能夠存放的單一文件大小以及我們最大文件系統總的容量,”分配單元大小“越小越節省
空間,“分配單元大小”越大越浪費空間。也就是說block的大小和數量在格式化之後就不能夠再改變了(除非重新格式
化);每一個block當中只能存放一個文件的數據;如果文件大小大於block的大小,則一個文件占用多個block數量;如
果文件大小小於block的大小,則該block的剩余空間就不能再使用了

inode是存放文件屬性及block塊位置等信息的,所以肯定是以表的形式存在的,在inode當中至少記錄了:文件的
權限rwx;文件的屬主屬組;文件的大小;文件的atime、ctime、mtime;文件特性標誌,如Set位等;文件實際數據的
位置等信息。
inode的大小固定為128字節;每一個文件只會占用一個inode;所以,我們能創建的文件數量與inode的數量有關;系統
讀取文件的時候先找inode,並查詢inode中記錄的權限與用戶是否符合,符合才繼續讀取文件的真實內容。


inode和block的關系:
inode當中記錄了非常多的信息,而inode固定大小為128字節,單記錄一個block位
置需要占用4字節,當inode記錄的文件A大小為1GB時且block塊大小為4k時,A文件就會占用十多萬個block,而inode
當中也需要記錄十多萬的block位置,就會出現沖突,為了解決這一沖突,系統將inode記錄block號碼的區域定義為12
個直接、1個間接、一個雙間接、和一個三間接記錄。

這種情況下,我們通過inode能指定的block的數量(block大小以1k為例)如下:
12個直接指向:12*1K=12K \\由於是直接指向,所以可以有12條記錄
間接:256*1K=256K \\每個block記錄占4字節,因此1K能指定256個記錄
雙間接:256*256*1K=256^2K \\第一層的指向有256個記錄指向二層,二層每個記錄能指定256個
三間接:256*256*256*1K=256^3K \\同上
總額為 12+256+256*256+256*256*256(K)=16GB
所以當文件系統將block大小定義為1k時,單個文件大小最大為16G
這個計算方法不能用在2k和4k等更大上,大於2k的block會受到文件系統自身的限制,所以計算結果會有偏差。

superblock是記錄整個文件系統相關信息的地方,沒有超級塊,就沒有文件系統了,它主要記錄了:block與inode
的總量;未使用和已使用了的block和inode數量;block和inode的大小;文件系統掛載的時間、最近一次寫入數據的時
間等相關信息;以及一個文件系統是否被掛載的數值validbit,已掛載為0,未掛載為1。

當我將一個分區進行格式化之後,文件系統為ext4,(200G),假設分成了10個塊組block group,即有10個
superblock,但是ext機制讓系統在讀取該分區的時候首先讀取第一個塊組當中的超級塊(後面的塊組沒有超級塊),來
確定該分區的文件系統

Linux磁盤和文件系統簡介