學到linux上的軟連線和硬鏈結,不得不了解inode,要想知道inode,不得不了解一些檔案系統,至少是linux檔案系統
檔案系統是什麼
我的理解,檔案系統類似現實中的檔案管理,條理化的儲存資料。它定義了磁碟上儲存檔案的方法和資料結構。
不同的人管理檔案有不同的管理方法,那麼相對於不同的系統格式有不同的儲存辦法,所以就有了不同的檔案系統型別。什麼ext2,ext3,ext4,xfs,ntfs,fat等。但是不同人的管理方法有的領導不承認或者是不認識,那麼領導就不能來按照他的管理方法來查詢檔案,就像不同的作業系統只認識特定的檔案系統一樣。要想讓「領導」認識某些檔案系統,則需要教會領導,那麼這就涉及到更深層次的編譯系統了。
inode是什麼
inode又要扯到儲存了,我們知道資料是儲存在磁碟中的,磁碟上最小儲存資料的是扇區,每個扇區一般都是可以存放512位元組的資料。
那麼如果資料大於512位元組時候,磁碟需要不停地移動磁頭來查詢資料,我們知道一般地檔案很容易超過512位元組那麼如果把多個扇區合併為乙個塊,那麼磁碟就可以提高效率了,。那麼磁頭一次讀取多個扇區就為乙個塊「block」(linux上稱為塊,windows上稱為簇)。
乙個塊多為4kb,因為塊是檔案系統層面上的概念,所以塊也可以在格式化時候自行定義。
檔案資料都儲存在"塊"中,那麼很顯然,我們還必須找到乙個地方儲存檔案的元資訊,比如檔案的建立者、檔案的建立日期、檔案的大小等等。這種儲存檔案元資訊的區域就叫做inode,中文譯名為"索引節點"。
linux檔案系統工作原理初識
我們知道檔案系統記錄的資料,除了其自身外,還有資料的許可權資訊,所有者等屬性,這些資訊都儲存在inode中,那麼誰來記錄inode資訊和檔案系統本身的資訊呢,比如說檔案系統的格式,inode與data的數量呢?那麼就有乙個超級區塊(supper block)來記錄這些資訊了.
每個inode和block,都有編號。通俗講
inode:記錄檔案的屬性資訊,可以使用stat命令檢視inode資訊。
block:實際檔案的內容,如果乙個檔案大於乙個塊時候,那麼將占用多個block,但是乙個塊只能存放乙個檔案。(因為資料是由inode指向的,如果有兩個檔案的資料存放在同乙個塊中,就會亂套了)
inode用來指向資料block,那麼只要找到inode,再由inode找到block編號,那麼實際資料就能找出來了。我來試著畫乙個簡圖
linux檔案系統格式化時候,格式化上面三個區域,supper block, inode 與 block 的區塊,假設某乙個資料的屬性與許可權資料是放置到 inode 5 號,而這個 inode 記錄了檔案資料的實際放置點為 3,4,10 這四個 block 號碼,此時我們的作業系統就能夠據此來尋找資料了。稱為索引式檔案系統。
windows中的fat檔案系統就不是索引式檔案系統,如下簡圖
引用自鳥哥
很明顯,我們懂了每乙個資料塊都存放下乙個資料塊的索引,如上1>7>4>15。
但這就有了乙個問題,如果檔案系統中碎片太多,那麼將大大降低資料的讀取速度。雖然linux系統也會存在碎片化的問題,但由於是索引式檔案系統,所以影響並不大,所以一般情況下windows需要經常進行碎片化整理,而linux很少需要進行整理,但是也可以寫指令碼進行整理,不過這都是那些高手們幹的事情。
inode內容
可以使用stat命令進行檢視
inode大小與數量
inode也會占用磁碟空間,大小一般為128k或256k.
inode 數量也可以使用mke2fs -n來進行指定,這在實際的生產中很有必要,比如說論壇系統,因為裡面的檔案很小,並且很多,很可能會出現inode先用完,而資料空間並沒沒有使用完。此時就需要根據經驗,根據磁碟總空間來進行估算出inode的需求,最好在使用inode完的同時,block也使用完。
生產環境下如果inode不夠使用了的緩解辦法
如果/data 所在分割槽inode不夠使用
1、刪除/data/cache目錄中的部分檔案,釋放出/data分割槽的一部分inode。
2、用軟連線將其他分割槽目錄連線到/data/cache,使用其他分割槽的inode來緩解/data分割槽inode不足的問題:
ln -s /opt/newcache /data/cache
硬鏈結與軟連線
說到inode,那麼硬鏈結與軟連線不用說我們就可以明白了其中的原理了,我就總結了點兩者的不同吧。
(1).軟硬鏈結實現的原理不同
硬鏈結是建立乙個目錄項,包含檔名和檔案的inode,但inode是原來檔案的inode號,並不建立其所對應得資料。所以硬鏈結並不占用inode。
軟連線也建立乙個目錄項,也包含檔名和檔案的inode,但它的inode指向的並不是原來檔名所指向的資料的inode,而是新建乙個inode,並建立資料,資料指向的是原來檔名,所以原來檔名的字元數,即為軟連線所佔位元組數
(2).軟硬鏈結所能建立的目標有區別
因為每個分割槽各有一套不同的inode表,所以硬鏈結不能跨分割槽建立而軟連線可以,因為軟連線指向的書檔名。
(3).硬鏈結不能指向目錄
如果說目錄有硬鏈結那麼可能引入死迴圈,但是你可能會疑問軟連線也會陷入迴圈啊,答案當然不是,因為軟連線是存在自己的資料的,可以檢視自己的檔案屬性,既然可以判斷出來軟連線,那麼自然不會陷入迴圈,並且系統在連續遇到8個符號連線後就停止遍歷。但是硬鏈結可就不行了,因為他的inode號一致,所以就判斷不出是硬鏈結,所以就會陷入死迴圈了。
Linux 的檔案系統 inode
linux 的檔案系統 inode 看完了上面的說明,您應該對於硬碟有一定程度的認識了!好了,那麼接下來就是要談一談 linux 的檔案系統 filesystem 囉!我們這裡以 linux 最標準的 ext2 這個檔案系統來作為說明。還記得我們在 linux 檔案屬性與目錄配置 那個章節提到的,在...
linux 檔案系統之 inode 和 block
inode 和 block 1 含義 index node 索引節點 用來存放檔案屬性的空間,通過inode 號碼來找到這個空間 inode號碼 家庭位址 inode空間 家房子 2 怎麼來的 格式化建立檔案系統時來的 3 特點 1。inode 是存放檔案屬性 2.我們每建立乙個檔案占用乙個inod...
Linux檔案系統中的inode
磁碟中最小的儲存單位是 扇區 作業系統中檔案最小的儲存單位是 塊 乙個 塊 由連續的8個 扇區 組成,乙個檔案可以由多個 塊 組成,而這些 塊 並不一定是連續的。作業系統要讀取乙個檔案時,是如何找到這些 塊 的呢?這就需要一種對映關係,方便系統通過檔名找到對應的 塊 inode就用來維持這種對映關係...