什么是inode和block?
所謂的inode就是索引節點(index node)的意思,在每一個存儲設備被格式化創建文件系統后,所有的文件大致被分為了兩部分,分別是inode和block。
其中inode用來存儲文件屬性信息,其中包括了文件大小,文件的歸屬者,文件的歸屬組,權限,類型,修改時間,以及指向文件實體數據(block)的指針。
block中存儲的就是文件的實際數據,比如說,照片,視頻,音頻等等,但是有一點需要注意!就是inode當中不包含文件名!一個文件的文件名,存儲在上級目錄的block中!
其實inode和block之間的關系就像是一本書一樣,inode是一本書的目錄,一本書會有很多內容,一個知識點或者一個故事會占很多頁,一個block就相當於書中的一頁內容。
所以說一般情況下一個inode會對應一個或多個block。
inode總結:
磁盤分區后格式化為etx4文件系統后,產生一定數量的inode和block
inode存放文件屬性信息以及指向文件實體的指針
ext3/ext4文件系統block存放文件的實際數據
inode表現形式為一串數字,不同文件對應的inode在os中是唯一的
ext3/ext4文件系統下,正常情況一個文件創建有且只能占用一個inode和至少占用一個block,大文件占用多個block,如果一個block未占完,剩余空間也無法使用
簡單了解了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 的大小一般有1k,2k,4k,除引導分區1k外,其他分區為4k。
block總結:
磁盤讀取數據是按block為單位讀取
一個文件可能占有多個block,每讀取一個block就會消耗一次磁盤IO,想提升IO性能,盡可以一次讀取盡量多。
一個block只能存放一個文件,也就是無論文件多小,這個block剩余空間浪費掉了,假如一個文件大小為4k,但是一個小文件1k,3k剩余空間被浪費了,磁盤IO是衡量磁盤性能重要指標。
性能
簡單了解了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(linux的硬鏈接就是這個原理)
但是一個block只能屬於一個文件。