一塊新磁盤投入使用時,須要進行分區和格式化。磁盤的分區能夠當作是一個「物理」的操做。而分區完成後還須要進行格式化,格式化就是將磁盤定義爲合適的文件系統,以便操做系統能夠理解。(通常狀況下,一個分區是一個單獨的文件系統,但也不必定。)node
每一個文件都有數據信息,也有文件自己的屬性信息(如全部者、所屬的組、建立時間、權限等)。在文件系統的設定裏,數據和屬性是放在不一樣的位置的。ide
通常的文件系統裏都包括block(主要是存放真正的文件內容,各block有不一樣的編號,從0開始編號)、inode(存放文件都放在哪些個block裏,同時還有權限等屬性信息)、superblock(存放文件系統已用了多少、inode編號用了多少、block用了多少等信息)。操作系統
若是一個分區太大的話,通常還會將之分紅不一樣的block group,每一個group裏有本身的inode/block/superblock信息(每一個分區的第一個扇區都是boot sector,而一塊磁盤的第一個分區放的是MBR)。blog
嚴格來講,每個block group都包含如下6個部分:ip
Data Block:此部分放置的是文件的內容(而不是屬性)。Linux支持每個Block能夠爲1k、2k或4k的大小,能夠根據本身的系統的狀況在格式化的時候選擇不一樣的block大小。每個block都有編號。get
Inode Table:此部分放置的文件的屬性,包括權限、幾個不一樣的時間、全部者、所屬組、大小以及該文件所對應的block的編號。須要注意的是,每一個inode大小固定爲128byte,而每一個文件都只會佔用一個inode。系統在讀取的時候,會先找到inode,分析權限,權限合適時,纔會去找block中的數據。it
一個文件只會佔用一個inode。而一個文件根據內容的大小,能夠放在一個block裏或分放在多個block裏。但一個block最多能放一個文件,也就是說,若是block的大小爲4k,但文件才1k,那麼該block會浪費3k的空間。io
承上,一個inode爲128byte,而inode每記錄一個block號碼須要用掉4byte。照這樣計算,一個inode最多隻能記錄32個block號碼,也就是說,文件最大隻能是4k*32=128k,更況且這128byte裏除了記錄號碼還要記錄文件的屬性信息。那麼對於大文件,系統採用了將inode區域劃分爲權限區、12個直接記錄區、一個間接記錄區、一個雙間接記錄區和一個三間接記錄區的方法來解決。table
直接記錄區就是直接寫入的block號碼。而間接記錄區是記錄了一個block號碼,此block並無寫文件數據,而寫的也是block號碼(至關於從block區域‘借’來了block看成了inode)。此時,假設當前文件系統的block大小爲1k,那麼此1k大小的block就能夠寫入1k/4byte=256筆記錄,便可以再對應256個block。同理,雙間接,能夠再對應256*256個block,三間接能夠對應256*256*256個block。這樣的話,使用12個直接、1個間接、1個雙間接、1個三間接,對於block大小爲1k的文件系統來講,就能最多表示16GB的文件了。class
SuperBlock:存放的是該文件系統總體狀況,包括block與inode的總量、未使用與已使用的量等。(SuperBlock可能並非每一個block group都有,可能就第一個block group纔有)。
Filesystem Discription:是對整個文件系統的描述,包括每一個block group的開始號碼、結束號碼等。
block bitmap:記錄的是哪些block已使用,哪些未使用。
inode bitmap:記錄的是哪些inode已使用,哪些未使用。
block bitmap和inode bitmap記錄都是使用或未使用的具體編號,而superblock裏記錄的只是一個總量和使用率等整體概念。
inode table存放的是權限等屬性,而block存放的真實的數據,這兩塊叫作數據存放區;而inode bitmap存放的是當前這個分區裏有哪些inode還未用,block bitmap裏存放的是有哪些block還未用,superblock裏存放的整個分區的使用狀況等,故這三個區域能夠叫作數據中介區。
格式化的時候,block都是從0開始編號。而且後續對文件系統的全部描述都是根據此編號進行的。在一個block group中,假設inode tabe佔用了34--44這11個block,因爲每一個inode是128字節,而每一個block假設是4k,那麼此11個block裏能夠存儲4k/128字節=32個inode。
df命令,即disk free,是用來查看磁盤的使用狀況的,也能夠列出當前系統的掛載狀況;dumpe2fs(dump ext2/ext3 file system的簡寫)能夠看出當前系統的inode、block等信息。
當新建一個目錄時,系統會給該目錄分配一個inode,並給該目錄分配一個block。inode會記錄該目錄的權限等屬性信息,並記錄inode對應的block編號。而該block裏會記錄該目錄下的文件信息,如文件名和文件佔用的inode信息。若是文件太多,而1個block盛不下的話,系統還會自動分配多個block給目錄使用。
這樣的話,當咱們查找一個文件時,先找到所屬目錄的inode,而後找到目錄的block,而後找到文件的inode,查看權限符合時,纔去查找文件inode所記錄的block編號,找到文件的block。須要注意的是,文件的inode裏面並不記錄文件名,文件名是在所屬目錄的block裏記錄的。
新建一個文件的時候,會自動分配一個inode,同時會根據文件的大小來給它分配block數量。
每一個filesystem的頂層inode編號都是2,所以,對於Linux系統中不一樣的掛載點來講,當ls -id的時候,會發現這幾個目錄的inode編號都是2.(具體有幾個掛載點,是在安裝系統時進行分區時設定的)。