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