一、linux文件系統分配策略: 塊分配( block allocation ) 和 擴展分配 ( extent allocation ) 塊分配:磁盤上的文件塊根據須要分配給文件,避免了存儲空間的浪費。但當文件擴充時,會形成文件中文件塊的不連續,從而致使過多的磁盤尋道時間。 每一次文件擴展時,塊分配算法就須要寫入文件塊的結構信息,也就是 meta-dada 。meta-data老是與文件一塊兒寫入存儲設備,改變文件的操做要等到全部meta-data的操做都完成後才能進行, 所以,meta-data的操做會明顯下降整個文件系統的性能。 擴展分配: 文件建立時,一次性分配一連串連續的塊,當文件擴展時,也一次分配不少塊。meta-data在文件建立時寫入,當文件大小沒有超過全部已分配文件塊大小時,就不用寫入meta-data,直到須要再分配文件塊的時候。 擴展分配採用成組分配塊的方式,減小了SCSI設備寫數據的時間,在讀取順序文件時具備良好的性能,但隨機讀取文件時,就和塊分配相似了。 文件塊的組或塊簇 ( block cluster) 的大小是在編譯時肯定的。簇的大小對文件系統的性能有很大的影響。 注: meta-data 元信息:和文件有關的信息,好比權限、全部者以及建立、訪問或更改時間等。 二、文件的記錄形式 linux文家系統使用索引節點(inode)來記錄文件信息。索引節點是一種數據結構,它包含了一個文件的長度、建立及修改時間、權限、所屬關係、磁盤中的位置等信息。 一個文件系統維護了一個索引節點的數組,每一個文件或目錄都與索引節點數組中的惟一的元素對應。每一個索引節點在數組中的索引號,稱爲索引節點號。 linux文件系統將文件索引節點號和文件名同時保存在目錄中,因此,目錄只是將文件的名稱和它的索引節點號結合在一塊兒的一張表,目錄中每一對文件名稱和索引節點號稱爲一個鏈接。 對於一個文件來講,有一個索引節點號與之對應;而對於一個索引節點號,卻能夠對應多個文件名。 鏈接分爲軟鏈接和硬鏈接,其中軟鏈接又叫符號鏈接。 硬鏈接: 原文件名和鏈接文件名都指向相同的物理地址。目錄不能有硬鏈接;硬鏈接不能跨文件系統(不能跨越不一樣的分區),文件在磁盤中只有一個拷貝。 因爲刪除文件要在同一個索引節點屬於惟一的鏈接時才能成功,所以硬鏈接能夠防止沒必要要的誤刪除。 軟鏈接: 用 ln -s 命令創建文件的符號鏈接。符號鏈接是linux特殊文件的一種,做爲一個文件,它的數據是它所鏈接的文件的路徑名。沒有防止誤刪除的功能。 三、文件系統類型: ext2 : 早期linux中經常使用的文件系統 ext3 : ext2的升級版,帶日誌功能 RAMFS : 內存文件系統,速度很快 NFS : 網絡文件系統,由SUN發明,主要用於遠程文件共享 MS-DOS : MS-DOS文件系統 VFAT : Windows 95/98 操做系統採用的文件系統 FAT : Windows XP 操做系統採用的文件系統 NTFS : Windows NT/XP 操做系統採用的文件系統 HPFS : OS/2 操做系統採用的文件系統 PROC : 虛擬的進程文件系統 ISO9660 : 大部分光盤所採用的文件系統 ufsSun : OS 所採用的文件系統 NCPFS : Novell 服務器所採用的文件系統 SMBFS : Samba 的共享文件系統 XFS : 由SGI開發的先進的日誌文件系統,支持超大容量文件 JFS :IBM的AIX使用的日誌文件系統 ReiserFS : 基於平衡樹結構的文件系統 udf: 可擦寫的數據光盤文件系統 四、虛擬文件系統VFS linux支持的全部文件系統稱爲邏輯文件系統,而linux在傳統的邏輯文件系統的基礎上增長料一個蓄念文件系統( Vitual File System ,VFS) 的接口層。 虛擬文件系統(VFS) 位於文件系統的最上層,管理各類邏輯文件系統,並能夠屏蔽各類邏輯文件系統之間的差別,提供統一文件和設備的訪問接口。 五、文件的邏輯結構 文件的邏輯結構可分爲兩大類: 字節流式的無結構文件 和 記錄式的有結構文件。 由字節流(字節序列)組成的文件是一種無結構文件或流式文件 ,不考慮文件內部的邏輯結構,只是簡單地看做是一系列字節的序列,便於在文件的任意位置添加內容。 由記錄組成的文件稱爲記錄式文件 ,記錄是這種文件類型的基本信息單位,記錄式文件通用於信息管理。 六、文件類型 普通文件 : 一般是流式文件 目錄文件 : 用於表示和管理系統中的所有文件 鏈接文件 : 用於不一樣目錄下文件的共享 設備文件 : 包括塊設備文件和字符設備文件,塊設備文件表示磁盤文件、光盤等,字符設備文件按照字符操做終端、鍵盤等設備。 管道(FIFO)文件 : 提供進程建通訊的一種方式 套接字(socket) 文件: 該文件類型與網絡通訊有關 七、文件結構: 包括索引節點和數據 索引節點 : 又稱 I 節點,在文件系統結構中,包含有關相應文件的信息的一個記錄,這些信息包括文件權限、文件名、文件大小、存放位置、創建日期等。文件系統中全部文件的索引節點保存在索引節點表中。 數據 : 文件的實際內容。能夠是空的,也能夠很是大,而且擁有本身的結構。 八、ext2文件系統 ext2文件系統的數據塊大小通常爲 1024B、2048B 或 4096B ext2文件系統採用的索引節點(inode): 索引節點採用了多重索引結構,主要體如今直接指針和3個間接指針。直接指針包含12個直接指針塊,它們直接指向包含文件數據的數據塊,緊接在後面的3個間接指針是爲了適應文件的大小變化而設計的。 e.g: 假設數據塊大小爲1024B ,利用12個直接指針,能夠保存最大爲12KB的文件,當文件超過12KB時,則要利用單級間接指針,該指針指向的數據塊保存有一組數據塊指針,這些指針依次指向包含有實際數據的數據塊, 假如每一個指針佔用4B,則每一個單級指針數據塊可保存 1024/4=256 個數據指針,所以利用直接指針和單級間接指針可保存 1024*12+1024*256=268 KB的文件。當文件超過268KB時,再利用二級間接指針,直到使用三級間接指針。 利用直接指針、單級間接指針、二級間接指針、三級間接指針可保存的最大文件大小爲: 1024*12+1024*256+1024*256*256+1024*256*256*256=16843020 KB,約 16GB 若數據塊大小爲2048B,指針佔4B,則最大文件大小爲: 2048*12+2048*512+2048*512*512+2048*512*512*512=268,960,792 KB 約 268GB 若數據塊大小爲4096B,指針佔4B,則最大文件大小爲: 4096*12+4096*1024+4096*1024*1024+4096*1024*1024*1024=4,299,165,744 KB ,約 4TB 注: 命令 tune2fs -l /dev/sda5 可查看文件系統 ext2文件系統最大文件名長度: 255個字符 ext2文件系統的缺點: ext2在寫入文件內容的同時並無同時寫入文件meta-data, 其工做順序是先寫入文件的內容,而後等空閒時候才寫入文件的meta-data。若發生意外,則文件系統就會處於不一致狀態。 在從新啓動系統的時候,linux會啓動 fsk ( file system check) 的程序,掃描整個文件系統並試圖修復,但不提供保證。 九、ext3文件系統: ext3基於ext2的代碼,因此磁盤格式與ext2相同,使用相同的元數據。 ext2文件系統無損轉化爲ext3文件系統: tune2fs -j /dev/sda6 日誌塊設備( Journaling block device layer,JBD)完成ext3文件系統日誌功能。JBD不是ext3文件系統所特有的,它的設計目標是爲了向一個塊設備添加日誌功能。 當一個文件修改執行時,ext3文件系統代碼將通知JBD,稱爲一個事務(transaction)。發生意外時,日誌功能具備的重放功能,能從新執行中斷的事務。 日誌中的3種數據模式: 1)、data=writeback :不處理任何形式的日誌數據,給用戶總體上的最高性能 2)、data=odered :只記錄元數據日誌,但將元數據和數據組成一個單元稱爲事務(transaction) 。此模式保持所句句的可靠性與文件系統的一致性,性能遠低於data=writeback模式,但比data=journal模式快 3)、data=journal :提供完整的數據及元數據日誌,全部新數據首先被寫入日誌,而後才被定位。意外發生事後,日誌能夠被重放,將數據與元數據帶回一致狀態。這種模式總體性能最慢,但數據須要從磁盤讀取和寫入磁盤時倒是3種模式中最快的。 ext3文件系統最大文件名長度: 255個字符 ext3文件系統的優勢:可用性、數據完整性、速度、兼容性 十、ReiserFS文件系統 ReiserFS文件系統是由Hans Reiser和他領導的開發小組共同開發的,整個文件系統徹底是從頭設計的,是一個很是優秀的文件系統。也是最先用於Linux的日誌文件系統之一。 ReiserFS的特色 先進的日誌機制 ReiserFS有先進的日誌(Journaling/logging)功能 機制。日誌機制保證了在每一個實際數據修改以前,相應的日誌已經寫入硬盤。文件與數據的安全性有了很大提升。 高效的磁盤空間利用 Reiserfs對一些小文件不分配inode。而是將這些文件打包,存放在同一個磁盤分塊中。而其它文件系統則爲每一個小文件分別放置到一個磁盤分塊中。 獨特的搜尋方式 ReiserFS基於快速平衡樹(balanced tree)搜索,平衡樹在性能上很是卓越,這是一種很是高效的算法。ReiserFS搜索大量文件時,搜索速度要比ext2快得多。Reiserfs文件系統使用B*Tree存儲文件,而其它文件系統使用B+Tree樹。B*Tree查詢速度比B+Tree要快不少。Reiserfs在文件定位上速度很是快。 在實際運用中,ReiserFS 在處理小於 4k 的文件時,比ext2 快 5 倍;帶尾文件壓縮功能(默認)的ReiserFS 比ext2文件系統多存儲6%的數據。 支持海量磁盤 ReiserFS是一個很是優秀的文件系統,一直被用在高端UNIX系統上,可輕鬆管理上百G的文件系統,ReiserFS文件系統最大支持的文件系統尺寸爲16TB。這很是適合企業級應用中。 優異的性能 因爲它的高效存儲和快速小文件I/O特色,使用ReiserFs文件系統的PC,在啓動X窗口系統時,所花的時間要比在同一臺機器上使用ext2文件系統少1/3。另外,ReiserFS文件系統支持單個文件尺寸爲4G的文件,這爲大型數據庫系統在linux上的應用提供了更好的選擇。