搜尋此網誌

RHCE - 檔案連結


INDEXED FILE SYSTEM
在Linux系統中,檔案系統是使用索引式檔案系統(Indexed File System)。
也就是常看到的Ext2、Ext3、Ext4,所謂的Linux Extended File System。
在這種檔案系統中,檔案的存取是利用Inode去尋找Block,再把Block裡面的資料讀取出來。

Linux Extended File System在格式化的時後會將檔案系統分為多個Block Group。
每個Block Group中會有自己的Super Block、File Table、Inode Table、Block map等。
2012-01-30_170627.jpg

使用者進行所謂的存取檔案的動作時,其實就是經由這些資訊找到檔案存放的Block。
File Table用來紀錄檔名以及對應的Inode Table編號等資訊。
Inode Table會紀錄對應的Block map編號。
Block map會記錄資料存在於Date Block的位置。
藉由這樣一層一層的連結,使用者就可以正確的存取Block中的資料。
2012-01-30_231940.jpg

而最重要的是Super Block,用來紀錄著該檔案系統中許多重要資訊。
包括Inode和Block的總量、用量、大小、以及其他系統資訊。
如果Super Block損毀,整個檔案系統中的資料就可能會報廢。
每個檔案系統只需要一個Super Block,但是每個Block Group都有個自的Super Block。
這麼多個Super Block,其實只有第一個是負責紀錄檔案系統的系統資訊。
而之後的Block Group如果還有Super Block,則是負責備份第一個Super Block。

SOFT LINK
連結檔(Link)是Linux中的一種檔案,類似於Windows系統中的捷徑,但也不全然相同。
連結檔分成兩種,軟連結(Soft Link)跟硬連結(Hard Link)。
軟連結又可稱為符號連結(Symbolic Link)是連結到原檔案的連結中,而非直接存取檔案內容。

當使用者建立軟連結的時候,這個連結檔一樣會有自己的Inode、Block等等。
唯一的不同是,連結檔的Date Block會指向原檔的檔名,再利用原檔的連結去存取原檔的資料。
使用 #ln -s [原始檔名] [軟連結檔名] 可以建立軟連結。
例如下圖建立一個/tmp/test的軟連結,連結至原始檔案/etc/test。
2012-01-30_232923.jpg

在Linux的系統中,檔名會指向資料的Block,有被連結到的Block才可以存取其中的資料。
而刪除檔案則是刪除檔名,讓資料沒有檔名指向它,這個資料的Block就會被系統認定為空白Block。
所以軟連結中只要原始檔名被刪除,這個軟連結也會因為找不到資料的Block而宣告失效。

HARD LINK
硬連結又可稱為實體連結,硬連結是連結到原檔的Inode上,所以這兩個檔名的Inode是一樣的。
就算原檔的檔名刪除了,該筆資料依舊有被連結到,所以硬連結依舊可以存取資料,不會受到影響。
使用 #ln [原始檔名] [硬連結檔名] 可以建立硬連結。
例如下圖建立一個/tmp/test的硬連結,連結至/etc/test。
2012-01-31_000439.jpg

然而硬連結存在兩個限制,不能跨檔案系統,不能連結目錄。
因為硬連結是連結Inode,不同的檔案系統中,Super Block也不同。
所以就算Inode的編號相同,實際上也是指向不同的資料Block了。
不能連結目錄是因為硬連結是連結Inode,而不是檔名。
所以連結目錄時,需要對底下所有的檔案都建立硬連結。
而當兩邊目錄只要有任何一邊變動時,另外一邊的檔案也必須連帶變動。
如此會影響整個系統的效能,造成相當大的複雜度,所以硬連結不支援連結目錄。
 

Copyright © Jackie.Chen | Powered by Blogger | Template by 54BLOGGER | Fixed by Free Blogger Templates