浅谈inode和block与磁盘性能的初级优化
什么是inode和block?
所謂的inode就是索引節點(index node)的意思,在每一個存儲設備被格式化創建文件系統后,所有的文件大致被分為了兩部分,分別是inode和block。
其中inode用來存儲文件屬性信息,其中包括了文件大小,文件的歸屬者,文件的歸屬組,權限,類型,修改時間,以及指向文件實體數據(block)的指針。
block中存儲的就是文件的實際數據,比如說,照片,視頻,音頻等等,但是有一點需要注意!就是inode當中不包含文件名!一個文件的文件名,存儲在上級目錄的block中!
其實inode和block之間的關系就像是一本書一樣,inode是一本書的目錄,一本書會有很多內容,一個知識點或者一個故事會占很多頁,一個block就相當于書中的一頁內容。
所以說一般情況下一個inode會對應一個或多個block。
inode和block的大小是可以手動去指定的,并且在不同的操作系統和文件系統下inode和block的大小是不一樣的,下面就以centos6為例,如果想查看指定分區的inode大小和block大小可以使用dumpe2fs命令去查看。
例如:
dumpe2fs /dev/sda1 | grep -i "Inode size"
查看inode大小。
dumpe2fs /dev/sda1| grep -i "block size"
查看block大小。
如果,在centos6系統下查看本機磁盤的inode使用情況可以使用df -i 命令去查看。
df命令的-i參數可以查看本機分區中一共生成了多少inode,以及使用了多少inode,還剩余多少inode可用。
簡單了解了inode和block后,下面說一個關于block與磁盤I/O性能的基礎調優。
磁盤在讀取數據的時候,是按照block為單位來讀取的。
其實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做一些調整,可以提高磁盤的利用率和讀取性能。
inode和block的大小在創建文件系統(格式化分區)時就可以指定了。下面是示例~
mkfs.ext4 -b 4096 -I 1024 /dev/sdb1
(-b參數用來指定這個分區每個block的大小,單位為byte)
(-i 參數用來指定每個inode的大小,單位同樣為byte)
最后做幾點補充:
一個文件的文件名,存放于上級目錄的block中。
多個文件可以占用同一個inode(linux的硬鏈接就是這個原理)
但是一個block只能屬于一個文件。
? ? ? 本文轉自蘇浩智 51CTO博客,原文鏈接:http://blog.51cto.com/suhaozhi/1904590,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的浅谈inode和block与磁盘性能的初级优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP - 如何在函数内访问另一个文件中
- 下一篇: linux查找文件里面的内容