4.1 文件系統(tǒng)的組成部分
4.1.1 block的出現(xiàn)
硬盤的讀寫IO一次是一個扇區(qū)512字節(jié),如果要讀寫大量文件,以扇區(qū)為單位肯定很慢很消耗性能,所以Linux中通過文件系統(tǒng)控制使用"塊"為讀寫單元?,F(xiàn)在的文件系統(tǒng)上,塊的大小一般為1024bytes(1K)或2048bytes(2K)或4096bytes(4K)。比如需要讀一個或多個塊時,文件系統(tǒng)的IO管理器通知磁盤控制器要讀取哪些塊的數(shù)據(jù),硬盤控制器將這些塊按扇區(qū)讀取出來,再通過硬盤控制器將這些扇區(qū)數(shù)據(jù)重組返回給計算機。
block的出現(xiàn)使得在文件系統(tǒng)層面上讀寫性能大大提高,也大量減少了碎片。但是它的副作用是可能造成空間浪費。由于文件系統(tǒng)以block為讀寫單元,即使存儲的文件只有1K大小也將占用一個block,剩余的空間完全是浪費的。在某些業(yè)務需求下可能大量存儲小文件,這會浪費大量的空間。
盡管有缺點,但是其優(yōu)點足夠明顯,在當下硬盤容量廉價且追求性能的時代,使用block是一定的。
4.1.2 inode的出現(xiàn)
如果存儲的1個文件占用了大量的block讀取時會如何?假如block大小為1KB,僅僅存儲一個10M的文件就需要10240個block,而且這些blocks很可能在位置上是不連續(xù)在一起的(不相鄰),讀取該文件時難道要從前向后掃描整個文件系統(tǒng)的塊,然后找出屬于該文件的塊嗎?顯然是不應該這么做的,因為太慢太傻瓜式了。再考慮一下,讀取一個只占用1個block的文件,難道只讀取一個block就結束了嗎?并不是,仍然是掃描整個文件系統(tǒng)的所有block,因為它不知道什么時候掃描到,掃描到了它也不知道這個文件是不是已經完整而不需要再掃描其他的block。
另外,每個文件都有屬性(如權限、大小、時間戳等),這些屬性類的元數(shù)據(jù)存儲在哪里呢?難道也和文件的數(shù)據(jù)部分存儲在塊中