[RHCE] Link File

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等。
1327914609-1246656496.jpg-RHCE檔案連結

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

而最重要的是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。
1327937916-2607327432.jpg-RHCE檔案連結

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

HARD LINK

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

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

留言