inode、block塊、superblock和磁盤性能的關係

1、什麼是inode和block、superblock?

理解inode,要從文件儲存說起。
  文件儲存在硬盤上,硬盤的最小存儲單位叫做"扇區"(即:Sector)。每個扇區儲存512字節(相當於0.5KB)。
  操作系統讀取硬盤的時候,不會一個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取一個"塊"(block)。這種由多個扇區組成的"塊",是文件存取的最小單位。“塊"的大小,最常見的是4KB,即連續八個 sector組成一個 block。
  文件數據都儲存在"塊"中,那麼很顯然,我們還必須找到一個地方儲存文件的元信息,比如文件的創建者、文件的創建日期、文件的大小等等。這種儲存文件元信息的區域就叫做inode,中文譯名爲"索引節點”。
  block中存儲的就是文件的實際數據,比如說,照片,視頻,音頻等等,但是有一點需要注意!就是inode當中不包含文件名!一個文件的文件名,存儲在上級目錄的block中!
  其實inode和block之間的關係就像是一本書一樣,inode是一本書的目錄,一本書會有很多內容,一個知識點或者一個故事會佔很多頁,一個block就相當於書中的一頁內容。
  superblock:記錄此filesystem 的整體信息,包括inode/block的總量、使用量、剩餘量, 以及檔案系統的格式與相關信息等;

2、inode的內容

inode包含文件的元信息,具體來說有以下內容:

文件的字節數
文件擁有者的User ID
文件的Group ID
文件的讀、寫、執行權限
文件的時間戳,共有三個:ctime指inode創建時間,mtime指文件內容上一次修改的時間,atime指文件最後一次訪問的時間。
鏈接數,即有多少文件名指向這個inode
文件數據block的位置
可以用stat命令,查看某個文件的inode信息。
inode的大小

inode也會消耗硬盤空間,所以硬盤格式化的時候,操作系統自動將硬盤分成兩個區域。一個是數據區,存放文件數據;另一個是inode區(inode table),存放inode所包含的信息。
  每個inode節點的大小,一般是128字節或256字節。inode節點的總數,在格式化時就給定,一般是每1KB或每2KB就設置一個inode。假定在一塊1GB的硬盤中,每個inode節點的大小爲128字節,每1KB就設置一個inode,那麼inode table的大小就會達到128MB,佔整塊硬盤的12.8%。
  inode和block的大小是可以手動去指定的,並且在不同的操作系統和文件系統下inode和block的大小是不一樣的。
  由於每個文件都必須有一個inode,因此有可能發生inode已經用光,但是硬盤還未存滿的情況。這時,就無法在硬盤上創建新文件。但是可以通過更改inode大小來改變inode數量。

實際案例

情景:
在一臺配置較低的Linux服務器(內存、硬盤比較小)的/data分區內創建文件時,系統提示磁盤空間不足,用df -h命令查看了一下磁盤使用情況,發現/data分區只使用了66%,還有12G的剩餘空間,按理說不會出現這種問題。 後來用df -i查看了一下/data分區的索引節點(inode),發現已經用滿(IUsed=100%),導致系統無法創建新目錄和文件。
查找原因:
/data/cache目錄中存在數量非常多的小字節緩存文件,佔用的Block不多,但是佔用了大量的inode。
解決方案:
刪除/data/cache目錄中的部分文件,釋放出/data分區的一部分inode。
用軟連接將空閒分區/opt中的newcache目錄連接到/data/cache,使用/opt分區的inode來緩解/data分區inode不足的問題。
先將該磁盤數據備份,人工更改inode大小,增加inode數量
磁盤性能

其實block的大小與業務與磁盤的I/O性能有着密不可分的關係。 block並非越大越好或者越小越好,還是要看業務,下面就舉兩個例子:

如果遇到這種單個文件特別小(小於一個block),而且這種小文件特別多,block設置的太大則對block是一種浪費!這是因爲一個文件不管有多小,它都會佔用一個inode和一整個block,假如說一個block的大小爲4k,磁盤裏有一個小文件是1k,那麼這個小文件會把4k的一整個block全部佔用,剩下的3k就白白浪費掉了。

如果單個文件很大的情況下,block設置的很小,就需要讀取多個block,這對磁盤I/O是一種消耗(因爲每讀取一個block都會消耗磁盤I/O,磁盤每次讀取都是以block爲單位的)

如果單個文件很大,適當的加大block的大小則會提高磁盤的讀取效率,減少了磁盤的I/O。

當block設置的太小,則會影響大文件的讀取效率,如果block設置的太小,那麼存儲一個大文件就需要很多很多block,在讀取數據的時候就需要到很多block中去讀取內容,剛剛說過,磁盤每次讀取內容都是以block爲單位的,每讀取一個block都會浪費一次磁盤I/O,所以,磁盤讀取大文件的效率就回大大降低~

所以,綜上所述,在進行磁盤格式化區時根據業務的不同對block做一些調整,可以提高磁盤的利用率和讀取性能。

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