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

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

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

  

 

  1、基本概念

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

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

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

  2、partition與block

  每一個 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。會造成磁盤空間的浪費。

  3、inode

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

  

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

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

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

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

  

  4、Linux 檔案系統的運作:

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

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

  但是,如果Linux不正常關機,則由於數據尚未寫入磁盤當中,會導致系統在再次開機時,會花相當多的時間進行校驗,同時也可能會造成磁盤的損壞。

 

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

  

 

 

   

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章