系統分區
它是專門為Linux設計的,擁有最快的速度和最小的CPU占用率。
Linux作為自由軟件,赢得了許多用戶,其磁盤分區格式一種是Linux Native主分區,另一種是Linux Swap交換分區,并且主分區和交換分區都采用同一種格式,既Native和Swap格式。
這兩種分區格式的安全和穩定性相當好,使用Linux操作系統死機的機會将大大減少。但是,目前支持這類分區格式的操作系統也有Linux和Android。
EXT的數據存儲
雖然從Ext2到Ext4,找數據的方式發生了變化,但是,磁盤的布局還是非常相似的。其實這個東西也不需要變化,因為現在也沒什麼特别巧妙的方式,而且磁盤的吞吐量、效率的瓶頸也不在這裡。當然,這裡排除那些根據自身文件特點設計的數據庫,畢竟還是為了支持通用文件。
Boot在第一個塊,放的應該是引導程序,超級塊就放在了第二個塊上,如果不是可以在mount的時候通過參數sb來設置。對于經常要訪問(比較重要)的内容可以在每個塊組中都存儲(當然這是比較浪費空間的,所有有的隻選擇在部分),在不同的塊組中訪問這些内容的時候磁頭移動的距離就小了。如果開啟了sparse block功能,那麼隻會在3、5、7的幂級的塊組上才冗餘這些信息。
在超級塊裡面保存了這個文件系統的統計信息等,而且從中可以看出這個文件系統的特點。在内存中裝載的時候也從超級塊開始,知道了磁盤上的布局之後才能順利的進行後面的操作,ext4_super_block的内容大概如下:
(1)塊、inode等統計信息,訪問時間等。
(2)塊大小、以及每塊數目等布局信息。
(3)uid、gid。
(4)特性相關。
(5)預先分配相關。
(6)日志支持相關。
(7)64位的支持,其實保存了需要的高16位。
塊組中其實沒有保存什麼有用的信息(例如超級塊),ext4_group_desc的存在就是為了把磁盤分成一個個的塊組。那分成塊組之後有什麼好處呢?試想一下如果沒有塊組,那麼是不是位圖這個關鍵的數據是不是要集中放到磁盤上的一個固定的位置?訪問當然是沒有問題的,但是不管在磁盤上的什麼地方訪問的時候都要跑到一個相同的地方去再訪問一次位圖,這樣的代價就比較大了。而且在分配的時候盡量把文件的數據塊放在同一個組,那麼能在分配階段就一定程度地避免了碎片。下面是ext4_group_desc中大概的内容(和Ext2中的不同的是對更大範圍的支持):
(1)塊組中塊位圖、inode位圖、inode表的位置
(2)空閑塊(inode)、目錄的數目
(3)校驗
接下來就是塊位圖、inode位圖了。為什麼需要inode位圖呢?因為ext4文件系統在要分配一個新的inode的時候并不是像在内存中分配其他數據結構的時候需要的時候分配數據結構占用的空間,而是預先分配好一組放在位圖後面,就像一個inode池的感覺。那麼在需要ext4_inode的時候就需要知道哪些是空閑的,哪些是用過的,這就是位圖的作用了。位圖具體就沒什麼好介紹的了,下面看ext4_inode的内容:
(1)mode、uid、gid等我們能看到的信息
(2)各種時間戳
(3)i_data用來找到數據塊
(4)file acl
EXT的數據查找
在對Ext文件系統還什麼都不知道的時候應該比較關心從路徑名到ino的過程。這個過程的大部分工作量應該在VFS中吧,而且感覺沒什麼特别的地方。現在查找數據對這部分的内容就忽略不計了。我們關系的是,給定ino&offset,怎麼樣知道在磁盤上的位置呢?在課本上學到的隻是告訴我們這個地方應該是用B樹的,但是從Ext2好像沒看的B樹的影子,反而看到了内存管理中見過的東西:間接塊。
間接塊管理磁盤上文件的數據塊位置和内存中分頁的效果有點像,當然細節還是不同的。不過這個地方的壞處就很明顯了,如果是訪問大文件中的兩個順尋的物理塊,那麼即使他們物理上也是相鄰的(如果内存中沒有其緩存的話),也要從第一層的間接塊開始訪問,直到最後一層才知道真正的塊号。在内存中分頁當然是問題不大的,但是磁盤上這樣高出幾倍的訪問時間效率會很差。
日志
什麼是日志以及日志的作用就不在這裡說了。Ext3與Ext2的管理數據塊的方式都是差不多的,不同之處是加上了記錄日志的功能,可以從Ext2平滑地過渡到Ext3。Ext3日志文件系統的思想就是對文件系統任何的高級操作都分兩步進行,首先,把待寫入的塊的一個副本存放在日志中;其次,當發往日志的I/O數據傳送完成時,塊就寫入文件系統。當發往文件系統的I/O數據傳送終止時,日志的塊副本就被丢棄。
Ext3既可以隻對元數據的修改做日志,也可以記錄所有的日志。有下面的三種日志模式:
(1)journal,把所有數據塊的改變都記入日志,最安全也最慢。
(2)ordered,隻記錄元數據的改動,Ext3會把元數據和相關的數據塊進行分組,以便把元數據寫入磁盤之前寫入數據塊。
(3)writeback,隻記錄元數據改動,最快的一種模式。
(4)傳統的Web應用系統的客戶端采用同步交互方式,簡單的交互功能也需要編寫大量的腳本來完成,而且交互速度緩慢,用戶多數時間處于等待狀态,顯然無法滿足用戶與開發人員的要求。近幾年,RIA技術大放異彩,特别是EXT,它是一個開源的Ajax框架,提供了豐富的跨浏覽器的UI組件,對于企業級的Web應用系統開發,EXT非常适用。