搜尋此網誌
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等。
使用者進行所謂的存取檔案的動作時,其實就是經由這些資訊找到檔案存放的Block。
File Table用來紀錄檔名以及對應的Inode Table編號等資訊。
Inode Table會紀錄對應的Block map編號。
Block map會記錄資料存在於Date Block的位置。
藉由這樣一層一層的連結,使用者就可以正確的存取Block中的資料。
而最重要的是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。
在Linux的系統中,檔名會指向資料的Block,有被連結到的Block才可以存取其中的資料。
而刪除檔案則是刪除檔名,讓資料沒有檔名指向它,這個資料的Block就會被系統認定為空白Block。
所以軟連結中只要原始檔名被刪除,這個軟連結也會因為找不到資料的Block而宣告失效。
HARD LINK
硬連結又可稱為實體連結,硬連結是連結到原檔的Inode上,所以這兩個檔名的Inode是一樣的。
就算原檔的檔名刪除了,該筆資料依舊有被連結到,所以硬連結依舊可以存取資料,不會受到影響。
使用 #ln [原始檔名] [硬連結檔名] 可以建立硬連結。
例如下圖建立一個/tmp/test的硬連結,連結至/etc/test。
然而硬連結存在兩個限制,不能跨檔案系統,不能連結目錄。
因為硬連結是連結Inode,不同的檔案系統中,Super Block也不同。
所以就算Inode的編號相同,實際上也是指向不同的資料Block了。
不能連結目錄是因為硬連結是連結Inode,而不是檔名。
所以連結目錄時,需要對底下所有的檔案都建立硬連結。
而當兩邊目錄只要有任何一邊變動時,另外一邊的檔案也必須連帶變動。
如此會影響整個系統的效能,造成相當大的複雜度,所以硬連結不支援連結目錄。