Linux知識體系之磁盤與檔案系統管理

  硬盤的物理組成:由許許多多的圓形硬盤盤所組成。宜居硬盤盤可以容納的數據量,而有所謂的單碟或者多碟。node

  首先,硬盤裏必定會有所謂的磁頭(Head)在進行該硬盤上面的讀寫動做,而磁頭是固定在機械手臂上的,機械手臂上有多個磁頭能夠進行讀取的動做。而當磁頭固定不動,硬盤轉一圈所畫出來的圓就是所謂的磁道(Track)。而一個硬盤中可能具備多個硬盤盤,全部硬盤盤上面相同半徑的那一個磁道就組成了所謂的磁柱(Cylinder)異步

  

 

  一、基本概念操作系統

  在計算整個硬盤的存儲量時,簡單的計算公式就是:Cylinder X Head X Sector X 512 Bytes。另外,硬盤在讀取時,主要是 硬盤盤會轉動,利用機械手臂將磁頭移動到正確的數據位置。而後將數據依序讀出。因爲機械手臂上的磁頭與硬盤盤的接觸是很細微的空間,若是有抖動或者是髒污在磁頭與硬盤盤之間時,就會形成數據的損毀或者是實體硬盤整個損毀。3d

  硬盤的分隔(Partition),爲何要進行磁盤分隔?由於咱們必須告訴操做系統,能夠存儲的區域是由A磁柱到BB磁柱,如此一來,操做系統纔可以控制磁盤磁頭去A-B範圍內的磁柱存取數據。也就是記錄每個分割區(Partition)的起始與結束磁柱。orm

  主要開機扇區(Master Boot Recorder,MBR),MBR就是在一塊硬盤的第零軌上,也就是計算機開機以後要去利用該磁盤時,必需要讀取第一個區域。在這個區域內記錄的就是磁盤裏的全部分割信息,以及開機的時候能夠進行開機管理程序的寫入的處所。blog

  二、partition與blockcrontab

  每個 partition就是一個FileSystem,不管是哪種filesystem,既然硬盤是用來存儲數據的,硬盤的最小存儲單位是sector,可是用sector來存儲就太沒有效率了,一個sector只有512Bytes,而磁頭是一個一個sector的讀取,也就是說,若是個人檔案有10MBytes,那麼爲了讀這個檔案,磁頭必需要進行(I/O)20480次。難麼爲了克服這個效率上的問題,邏輯區塊 block就誕生了。邏輯區塊是在partition進行filesystem的格式化時,所指定的最小存儲單位。block的大小爲sector的2的次方倍數。若是格式化的時候,指定block爲4KBytes,即8個sector所構成一個block,那麼一樣一個10MBytes的檔案,磁頭要讀取的次數則大幅降低爲2560次,這樣能夠大大的增長檔案的讀取效能。可是不必定越大越好,由於加入有一個0.1Kbytes的容量的文檔,則會佔用整個4Kbytes的block。會形成磁盤空間的浪費。內存

  三、inode文檔

  當咱們要將一個partition格式化(format)爲ext2時,就必需要指定inode與Block的大小才行。也就是說,當partition被格式化爲ext2的文檔系統時,他必定會有inode table與block area這兩個區域。Block是記錄檔案內容數據的區域,inode則是記錄該檔案的屬性,以及檔案內容放置在哪個Block以內的信息。inode除了記錄檔案屬性之外,同時還具備指向功能,指向檔案內容防止的區域,好讓操做系統能夠正確的取得檔案的內容。it

  

  一塊partition自ext2底下會被格式化爲inode table與block area兩個區域,那麼讀取/etc/crontab的流程爲:

  (1)操做系統根據根目錄(/)的相關資料可取得/etc這個目錄所在的inode,並前往讀取/etc這個目錄的全部相關路徑。

  (2)根據/etc的inode的資料,能夠取得/etc這個目錄底下全部檔案的關聯數據是放在哪個Block當中,並前往該block讀取檔案的關聯性內容。

  (3)由上個步驟的inode當中,能夠取得 crontab這個檔案的全部屬性,而且可前往由 inode所指向的Block區域,順利的取得crontab的檔案內容。

  

  四、Linux 檔案系統的運做:

  整個ext2/ext3的數據存取是透過journal與metadata還有數據存放區在記錄的。在整部計算機的運做中,數據處理最快速的地方是CPU,接下來則是主存儲器(RAM),至於硬盤,會慢不少。爲了讓Linux加快整個系統的存取效率,Linux上面一般採起 異步處理 的方式。

  當系統讀取一個文檔時,則該檔案所在的區塊數據會被加載到內存中,因此該磁盤區塊就會被放置在主存儲器的緩衝快取區,若這些區塊的數據被改變時,剛開始數據僅有主存儲器的區塊數據會被改變,並且在緩衝區的區塊數據會被標記爲 Dirty,這個時候磁盤實體區塊還沒有被修正。這些 Dirty區塊的數據必須回寫到磁盤中,以維持磁盤實體1區塊上的數據與主存儲器中的區塊數據的一致性。

  可是,若是Linux不正常關機,則因爲數據還沒有寫入磁盤當中,會致使系統在再次開機時,會花至關多的時間進行校驗,同時也可能會形成磁盤的損壞。

 

參考文獻:《鳥哥的Linux私房菜》

相關文章
相關標籤/搜索