iNode與Block

1. inode和block

---------------------------------
    先介紹一下硬盤的整體結構。硬盤中包含多個硬盤盤片,硬盤盤片爲圓形,每個硬盤盤片都有一個可以讀寫的磁頭(Head),將這個磁頭固定,使硬盤盤片旋轉一週,所走軌跡就是磁道(Track)。硬盤內所有盤片的相同磁道號的集合成爲磁柱(Cylinder)。每一磁道被劃分成許多區域,每個區域叫一個扇區(Sector)。扇區是硬盤的最小存儲物理量,一個扇區的存儲容量大約是512字節(約0.5K)

    知道了硬盤的大體結構之後,再來談談怎麼進行硬盤分區。進行硬盤分割的最小單位是磁柱,分割完之後自然就是格式化(format)。在Linux中進行格式化必須考慮Block與inode,Block還好理解,它是磁盤可以記錄的最小單位,是由數個扇區組成,所以大小通常爲n*512Bytes,例如4K。

    Block是記錄文件內容的區域,inode則是記錄該文件的屬性及其放置在哪個Block之內的信息。所以,每個文件都會佔用一個inode。當Linux系統要查找某個文件時,它會先搜索inode table找到這個文件的屬性及數據存放地點,然後再查找數據存放的Block進而將數據取出。inode數量在一開始已被設定好,其設定方式通常是"硬盤大小/一個容量",這個容量比Block大一些較佳,例如剛纔將Block設爲4K,那麼這個容量可以設爲8K左右。所以,一塊1GB的硬盤如果以8K大小劃分它的inode數,則會有131072個inode。一個inode的大小爲128Byte,這樣,我們就可以清楚地知道,一個分區被格式化爲一個文件系統之後,基本上它一定會有inode table與數據區域兩大塊,一個用來記錄文件的屬性信息與該文件存放的Block塊,一個用來記錄文件的內容。

2. 硬鏈接
---------------------------------
    當系統要讀取某個文件時,它會先讀inode table,然後根據inode的信息到數據區域將數據取出備用。硬鏈接就是再建立一個inode鏈接到文件放置的Block塊。也就是說,進行硬鏈接時,實際上您的文件內容不會改變,只是原來的inode與後來添加的inode均可指定到該文件存放的地點,因此,讀取兩個inode的結果都是讀取同一個文件的內容。不過,這樣一來就有個問題,因爲inode會鏈接到Block塊,而"目錄"本身僅消耗inode,這樣,硬鏈接就不能鏈接目錄。所以,硬鏈接有兩個最大的限制:
    (1) 不能跨文件系統,因爲不同的文件系統有不同的inode table;
    (2) 不能鏈接目錄。

3. 軟鏈接(符號鏈接)
---------------------------------
    相對於硬鏈接,符號鏈接比較好理解,基本上,它是再建立一個獨立文件,而這個文件會讓數據讀取操作指向它鏈接的那個文件。由於只是利用文件作爲指向的動作,所以,當源文件被刪除,符號鏈接的文件就打不開了,屏幕會顯式"無法開啓某文件"。
    因此,硬鏈接比較安全,因爲即某一個inode被刪除,只要還有一個inode,該文件就能被找到。


總結

磁盤分區格式化爲ext4文件系統後會生成一定數量的inode和block;

一個文件被創建後至少要佔用一個inode和一個block;


用書來做比喻:

①首頁的目錄索引就相當於Inode;

②每一頁就是一個Block;

③整本書就是一個磁盤或分區。


inode的知識:

(1)inode是索引節點,作用是存放文件的屬性信息以及作爲文件的索引,指向文件的實體->Block;

(2)inode是一塊存儲空間,Centos6非啓動分區inode默認大小字節爲256字節,Centos5爲128字節;

(3)inode是一串數字,不同文件對應的inode(一串數字)在文件系統中是唯一的;

(4)inode相同的文件,互爲硬鏈接的文件;

(5)查看inode總量與使用量情況的命令:df -i:


Block的知識:

(1)磁盤Blck讀取數據是按block爲單位讀取的;

(2)ext3/ext4文件系統的Block存放的是文件的實際內容;

(3)一個文件可能佔用多個block,每讀取一個block就會消耗一次磁盤IO;

(4)如果要提升磁盤的性能的話,那麼就要儘可能一次性地讀取數據數量足夠多;

(5)如果文件很小,也至少要佔用一個block並且剩餘空間不能被使用;如果block的大小爲4k,那麼存放1K的文件,剩餘3K就浪費了;

(6)block並非越大越好,Block太大對於小文件的存放就會浪費磁盤空間;

例如:1000K的文件,Block爲4K,佔用250個Block;

    Block爲1K,佔用1000個Block。

消耗磁盤IO分別爲:1000次與250次,試問誰的效率更高?

(7)多數爲大文件(大於16K)一般設置Block大一點;

         多數爲小文件(小於16K)一般設置Block小一點。

(8)Block設置也是磁盤化分區的時候:

mkfs.ext4 -b 2048 -1 2056 /dev/sdb

(9)文件較大時Block設置大一些會提升磁盤效率;

(10)block的大小有1k,2k,4k,其中引導分區等均爲1k,其他普通分區爲4k(centos6)。(視頻等特殊業務可以調大block值)。


查看磁盤中inode及block的大小與數量:

Center

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章