檔案系統在磁碟中大致分為三個區域:1.超級塊 2.i-節點表 3.資料區
1. 超級塊:作用是存放檔案系統本身的結構資訊,比如每個區域的大小以及有哪些空餘的磁碟塊資訊
2. i-節點表:儲存檔案的屬性,比如大小以及所有者之類的。每個i-節點結構的大小一致,而且訪問的方式就和陣列類似,比如要訪問i-節點號為9的i-節點結構,就對應i-節點表中的第10個位置。
3. 資料區:檔案的內容就儲存在這個區域,磁碟上的所有塊的大小都是相同的,如果該檔案的內容儲存下來不止需要乙個塊,那就使用多個塊進行儲存。如果檔案很大的話,就需要很多個磁碟塊才能儲存下來。
事實上,建立乙個檔案經歷了以下步驟:
1. 儲存屬性:核心找到乙個空閒的i-節點結構,把該檔案的屬性存入該結構中。
2. 儲存資料:核心緩衝區將資料分塊儲存到多個塊中
3. 記錄分配情況:這麼多塊,要想順利的讀到這些資料,就需要把這些塊的編號按順序儲存到i-節點結構中去。
4. 新增檔名到目錄:目錄的實質其實也是一張表,裡面儲存了當前目錄下的檔案及目錄的i-節點號和檔案/目錄名。(目錄也是檔案,符合linux的一切皆檔案)
大檔案的儲存:
建立乙個檔案時,如果有多個資料塊,就需要把這些塊的編號按順序儲存到i-節點結構中去,但是問題是i-節點結構的大小是有限的,如果有非常多的資料塊序列,當i-節點結構存不下時,就會使用資料塊來儲存存不下的資料塊序列,最後將該資料塊的序列存進i-節點結構中,就相當於乙個二級對映。這樣的處理方式還是有一定的問題,當i-節點結構存不下二級對映過的資料塊序列時又該怎麼辦?可以繼續使用**對映,就是儲存資料塊序列的資料塊中最後再儲存另乙個用於儲存資料塊序列的資料塊序列。
但是這樣一直使用這種方法,會導致最後讀取乙個檔案需要通過很多級對映,這時的解決方法就是把這個大檔案分成另外乙個檔案系統了。
上面提到目錄的實質其實是一張表,裡面儲存了當前目錄下的檔案及目錄的i-節點號和檔案/目錄名。大家都知道每個目錄下都有兩個隱藏檔案,乙個是.
,另乙個是..
,這兩項也儲存在目錄表中。那麼目錄的子目錄該怎麼理解呢?子目錄的i-節點號和目錄名也存在當前目錄下,想找到子目錄很簡單,就是通過對比i-節點號和目錄名。可以通過ls -i
命令檢視檔案的i-節點號。說到這就不得不提到符號鏈結和硬鏈結的本質區別了。
符號鏈結又稱軟鏈結,它建立了之後,擁有自己的i-節點號,但是它的內容卻是指向的鏈結的檔案。這樣的機制就決定了軟鏈結可以跨越檔案系統進行鏈結。
硬鏈結建立了之後,它的i-節點號是共用的鏈結的檔案,所以硬鏈結產生的檔案相當於只是多了乙個名字,而且修改了其中乙個的內容,另外乙個檔案的內容也會隨之改變(因為資料塊是一樣的,只是檔名不同)。由於是共用i-節點,又由於磁碟可能有多個檔案系統,而每個檔案系統的i-節點是重複的,所以跨檔案系統的硬鏈結是不被允許的。
UNIX檔案系統概述
unix檔案系統是unix系統的心臟部分,提供了層次結構的目錄和檔案。檔案系統將磁碟空間劃分為每1024個位元組一組,稱為塊 block 也有用512位元組為一塊的,如 sco xenix 編號從0到整個磁碟的最大塊數。全部塊可劃分為四個部分,塊0稱為引導塊,檔案系統不用該塊 塊1稱為專用塊,專用塊...
unix檔案系統 鏈結與檔案
說明 以下是在讀小駱駝書 perl 語言入門 第十二章 目錄操作 中 鏈結與檔案 一節 p189 193 中的讀書筆記。目錄是一種由系統管理的特殊檔案,它基本上是乙份列表。每份檔案都會儲存在乙個編好號的inode裡,我們可以把它想象成磁碟上的門牌號碼。ls l命令,硬鏈結的數量會顯示在許可權標記的右...
Unix檔案系統(一)
此文著重介紹系統是如何表示目錄的以及pwd命令的編寫。我們都知道unix將磁碟分為三部分 超級塊 superblock 節點表 inode table 以及資料區。超級塊中記錄檔案系統本身的結構資訊。節點表中記錄檔案的屬性,檔案系統中每個檔案在表中都至少有乙個i 節點,表中每個節點的大小相同。資料區...