1. 程式人生 > 實用技巧 >檔案系統詳解

檔案系統詳解

我們知道目前個人計算機中常見硬碟的介面有兩種,一種是IDE介面的,另一種是SATA介面的,SATA介面的硬碟傳輸速度比IDE介面的硬碟傳輸速度快。因此SATA介面的硬碟以成為目前主流的硬碟。

當然,我們之前提過,在linux系統中,一切皆檔案,所以裝置在linux系統中,也是以檔案的形式存在的。那麼IDE硬碟和SATA硬碟如何在linux中命名的呢?

在IDE硬碟中有2個IDE介面,我們稱為IDE1介面和IDE2介面,每一個介面可以接2個IDE裝置,其中一個是主裝置,另一個稱為次裝置。

因此,IDE硬碟的檔案命名如下:

主裝置
次裝置
第一個IDE介面
/dev/hda
/dev/hdb
第二個IDE介面
/dev/hdc
/dev/hdd

而每一個裝置上存在著多個分割槽(分割槽),形如windows系統上面的c、d、e盤等等。那麼這些分割槽該如何命名呢?

只需要在每一個裝置的檔名後面加上數字即可。例如第一個分割槽為/dev/hda1...依次類推。

不過由於硬碟上面有分割槽的限制,主分割槽和擴充套件分割槽不能超過4個,因此當裝置名為/dev/hd5時表示為第一個邏輯分割槽。關於分割槽的概念將在後續探討。


關於SATA介面的硬碟命名與IDE硬碟不同,因為SATA硬碟命名是根據偵測到的裝置的先後順序來命名的。也就是說第一個偵測到的裝置命名為/dev/sda,第二個偵測到的裝置命名為/dev/sdb...依次類推。

其中SCSI介面的硬碟和USB介面的硬碟命名規則和SATA介面的硬碟命名方式一樣。因為這三種介面的硬碟都是用SCSI模組來驅動的。


由上面可以知道,硬碟的型別有多種多樣的,也就是說SATA型別的硬碟有/dev/sda,/dev/sdb這兩個硬碟;而SCSI型別的硬碟也有/dev/sda,/dev/sdb這兩個硬碟,那麼我們該如何識別這些硬碟呢?

其實很簡單,我們只要給每一個檔案加上一個主裝置號和次裝置號即可。

主裝置號:全程為major number,用來標識硬碟型別的,區分不同型別的硬碟的

次裝置號:全程為mintor number,用來標識同一種類型下的不同裝置檔案

因此,給每一個裝置加上主裝置號和次裝置號來區分即可。


那麼該如何建立一個裝置檔案呢?

語法格式:mknod [option] ...NAME TYPE [MAJOR MINTOR]

說明TYPE指的是裝置檔案型別(包含塊裝置檔案和字元裝置檔案),而不是指的是硬碟型別。硬碟是屬於塊裝置檔案的。

-m MODE:指定檔案的許可權

NAME:為裝置檔名



接下來我們開始談談硬碟的組成部分。

硬碟主要由磁碟盤面、機械手臂、磁頭、主軸馬達組成的。

而磁碟盤面又由扇區和磁柱組成。

扇區:特別是第一扇區裡面包含了MBR和分割表,;每一個扇區共512Byte

那麼什麼是MBR呢?

MBR:全稱Master Boot Record,是存放開機管理程式的地方,一共446Byte

分割表:全稱partition table:是記錄整個磁碟分割的狀態,一共64Byte,每16Byte

來標一個分割槽,因此只可以標識4個分割槽。

另外2Byte來標識MBR是否有效

磁柱:磁柱是檔案系統或者分割槽最小的組成單位,因此,磁柱的範圍決定了分割槽的大小。

磁柱分為起始磁柱和結束磁柱。



關於分割槽的概念

在上面談到的扇區裡面包含有分割槽,而分割槽就是來記錄磁碟分割槽的狀態的。那麼磁碟上面可以建立多少個分割槽呢?這些分割槽又有什麼區別的呢?

其實磁碟上面可以最多可以建立4個分割槽,包括主分割槽和擴充套件分割槽,其中擴充套件分割槽最多隻能有一個。

而擴充套件分割槽又可以劃分多個邏輯分割槽,這就是為什麼我們在系統上面看到不只有4個分割槽的原因。

所以磁碟上分割槽的組成是這樣的:

主分割槽+[(最多一個)擴充套件分割槽]


那麼主分割槽和擴充套件分割槽有什麼區別呢?

主分割槽:可以寫入資料,可以進行高階格式化,但是不能劃分邏輯分割槽

擴充套件分割槽:不能寫入資料,不能進行高階格式化,但是可以劃分邏輯分割槽。

邏輯分割槽:可以寫入資料,可以進行高階格式化

所謂高階格式化就是用來建立檔案系統的,低階格式化是來建立磁軌的


那麼什麼是檔案系統的呢?

剛剛說過主分割槽和邏輯分割槽可以進行高階格式化,而格式化後就是一個檔案系統。

檔案系統的組成結構

為了方便管理inode和block,檔案系統在格式化時會劃分多個塊組。

每一個塊組裡包含有Superblock 、inode、data block、inode bitmap、block bitmap等資訊。

在檔案系統的最前面有一個啟動扇區(boot sector),裡面存放的是開啟啟動程式bootloader。

檔案系統的結構圖如下:

wKioL1XlGeHBA9v5AABeDrSp4nM993.jpg

每一個block group的組成部分如圖所示:

wKioL1OwGgHC7Gc9AAHMZ00nF9k384.jpg

其中藍色方框為block group(塊群組),每一個塊群組裡麵包含了Superblock、Filesystem Description、inode table、data block、inode bitmap以及block bitmap等資訊。

Superblock:用來記錄整個檔案系統的相關資訊,包括block和inode的總量及大小,還有檔案系統的掛

載時間和、最近一次資料寫入的時間和最近一次磁碟檢驗的時間等相關資訊。Superblock

可以有多個,其他的Superblock是第一個Superblock的備份。

inode size為128Bytes

block size=[1024Bytes|2048Bytes|4096Bytes]

Filesystem Description:這個裡面記錄的是每一個block group的起始block號和結束block號,以及

Superblock、inode table、data block、inode bitmap和block bitmap所在的block號。

Superblock在0或1block中。

data block:其實就是檔案實際內容存放的地方

inode table:記錄的是指定檔案的元資料及該存放該檔案實際內容的block號(注意不存放檔名

檔案的元資料:檔案的許可權(rwx)、檔案的大小、檔案的時間戳、檔案屬主和屬組。

block bitmap:這個裡面記錄的是哪些block是沒有使用的的,哪些block是已經使用的

inode bitmap:和block bitmap一樣,記錄的是哪些inode是已經使用的,哪些還沒有使用。

其實我們可以把檔案系統比喻成一個圖書館,而塊群組就是每一個書架,書架上面放著許多的書,而這些書可以看做是data block,而某本書一定存放在某個特定的位置上,因此只要找到這個位置就可以找到這本書,這個位置可以看做是inode。而inode bitmap可以來看作標記哪些位置是空的,哪些不是空的,以便於可以重新放書。而block bitmap可以理解為書架上已經存放了多少本書,還有多少本書沒有存放。

inode的特點

1、每一個檔案佔用一個inode。

2、每一個inode的固定大小均為128bytes。

3、系統能夠建立的檔案數量和inode的數量有關。


目錄樹的組成結構

從上面知道每一個檔案都對應這一個inode,因此目錄也是檔案,所以也有一個inode號與之對應。

那麼目錄下到底存在著什麼內容呢?

其實目錄下只存放著檔名以及該檔名所對應的inode號。通過檔案的inode號,查詢inode table就可以知道實際存放該檔案內容的block號,找到該block號就可以讀取檔案中的內容了。

目錄下的結構為:

wKiom1OwJh3BqCw7AABKiDYvEO0448.jpg


以下示例將演示一個完整檔案讀取的流程:以/etc/passwd為例

1、首先系統通過自引用,找到/inode,在找到/所對應的block號

2、通過上面的block號,找到該block裡面含有etc/檔案以及該檔案所對應的inode號(如1111)

3、通過上面的1111inode號,可以找到etc/的block號

4、找到etc/block後,發現裡面含有passwd檔案以及passwd檔案所對應的inode號(如2222)

5、通過2222inode號,找到passwd的block號

6.找到passwd的block號,就可以讀取passwd裡面的實際內容了


瞭解了上面的檔案系統後,再來談談檔案系統的型別

linux支援的檔案系統型別有:

ext2,ext3,ext4,xfs,reiserfs,ifs,nfs,ocfs2,gfs2,swap等

每一種檔案系統型別的讀取方式可能不一樣,所以當我們讀取某個檔案系統上面的檔案時,是不是需要指定特別檔案系統呢?當然不是,其實linux整個系統都是透過VFS(virtual FileSystem)的核心功能來讀取檔案系統的。透過VFS來管理各種各樣的檔案系統的。當用戶讀取某個檔案系統上面的內容時,VFS可以將其轉換成某種特定的檔案系統來讀取。


硬連結和符合連結

硬連結:就是多個檔案佔用一個inode,所以刪掉其中一個檔案時,檔案並沒有刪除。

硬連結具有的特效:

1、只對普通檔案有效,對目錄無效

2、不能跨越檔案系統

3、建立硬連結時被連結的連結次數增加

wKiom1Ow6U6gN2NSAAGKhKYQiuc612.jpg

軟連線或者符號連結:就是建立一個新檔案,並將資料的讀取指向它連線的檔名(不是檔案的inode)。

1、可以應用於目錄

2、可以跨檔案系統

3、不會增加被連線的連結次數

4、檔案的大小就是該路徑的字元個數

wKioL1Ow6TCTqBacAAHo7AOcaPU991.jpg

語法格式:

ln [-sv] SRC DES

-s:用於建立軟連結,預設為建立硬連結

-v:顯示建立過程



轉載於:https://blog.51cto.com/xslwahaha/1432201