假如讓你設(shè)計(jì)文件系統(tǒng)
簡(jiǎn)單來(lái)講文件系統(tǒng)就是用來(lái)管理文件和磁盤的,是用戶文件和磁盤之間的一個(gè)橋梁。
文件系統(tǒng)要管理磁盤就要有管理的規(guī)則,所有的管理都要先分組,或者說(shuō)要條帶化,然后按組進(jìn)行組織管理。
那按照什么粒度劃分呢?通常是以4KB為單位的對(duì)磁盤進(jìn)行邏輯上的劃分,一個(gè)4k稱為一個(gè)block。文件系統(tǒng)就按照block為最小的管理單位進(jìn)行磁盤管理。
劃分好了最小管理單元后就要對(duì)他們進(jìn)行再分組,哪些block分到一個(gè)組里專門干一件事,也有可能一個(gè)組里就只有一個(gè)block。
這些組分別要做什么呢?想先想到的就是要有一個(gè)組用來(lái)放文件,那這個(gè)組就被稱為datablock。
除了存放文件,還要有一個(gè)組存放文件的大小、創(chuàng)建時(shí)間、文件存放在哪個(gè)block中等信息,這些信息被稱為meta data,而這個(gè)組被稱為inodes。
另外還要有一個(gè)組來(lái)記錄磁盤的整體情況,例如磁盤的大小、inodes的大小等,這個(gè)組被稱為superblock。
磁盤抽象化
于是就有了這么幾個(gè)組:bootblock,superblock,inodes,datablock。bootblock和引導(dǎo)有關(guān),這里文件系統(tǒng)關(guān)系不大,下面首先看看superblock。
超級(jí)塊
superblock中包含了文件系統(tǒng)的meta data,文件系統(tǒng)中有多少個(gè)inodes和data blocks,標(biāo)明是何種文件系統(tǒng)類型的magic number等都記錄在superblock中。
如何找到文件
要找到存放在datablock中的文件,就需要有個(gè)地方記錄文件的位置,這個(gè)記錄文件位置的東西叫做index node(索引節(jié)點(diǎn)),所有的indes node放到一個(gè)地方這個(gè)地方就是inodes。
所以inodes中就是存放了一條條的數(shù)據(jù),每條數(shù)據(jù)都對(duì)應(yīng)datablock中的一個(gè)文件。除了具有指向文件所在block的指針外,還包括文件的mode、size、timestamps等。
如何找到目錄
通過(guò)index node可以找到文件,同樣可以找到目錄,index node中如果mode是目錄,那么所指向的block中就記錄的是一個(gè)目錄項(xiàng)(目錄數(shù)據(jù)塊)。
目錄項(xiàng)中就記錄了目錄中的所有文件名稱以及文件所在的index node編號(hào)。這樣就可以再去通過(guò)inodes中的index node去查詢文件以及下一級(jí)目錄了。
總結(jié)
現(xiàn)在文件系統(tǒng)的種類繁多,ext3、ext4、xfs等,他們的實(shí)現(xiàn)復(fù)雜,但是文件系統(tǒng)的原理很簡(jiǎn)單,就是本文所講的幾個(gè)基本元素:文件data,查找文件的inode以及管理整個(gè)文件系統(tǒng)的superblock。
現(xiàn)在復(fù)雜的文件系統(tǒng)就是在這么一個(gè)設(shè)計(jì)思想上衍生出來(lái)的。關(guān)于文件系統(tǒng)的設(shè)計(jì)細(xì)節(jié)我們后面再具體介紹。































