文件系統(維護課堂2)

文件系統

文件系統主要就是負責管理文件在硬盤上的存儲的,如果說一般看到的都是羅基層的,那麼文件系統就是物理層跟邏輯層的橋樑,比如你存儲了一個文件,他在硬盤上是怎麼被存儲的。

還有如何組織文件系統更加高效,如何存儲更大的文件,如何降低磁盤碎片,如何優化提升文件系統性能,提升穩定性。這些都是文件系統的事情。

最早起的文件系統,比如fat16,簡單的把文件存儲到硬盤上進行管理,所以容易產生碎片,

也沒什麼優化,最大文件體積也很小,到了fat32,最大文件體積到了4Gb

windows是在win2000開始引入了NTFSNewTechnology File System)文件系統

NTFS屬於日誌文件系統

NTFS提供了更大文件支持,更好的權限管理,支持文件系統級別的壓縮,更好的穩定性,跟更少的碎片。

對於Linux來說現在最多的是ext文件系統,最新是ext4也是個日誌文件系統。

還有那種分佈式文件系統,比如googlegfs,根據gfs開發的hdfsgfs是塊文件系統,有一個索引服務器,底下的存儲借點存儲的都是數據快,而不是文件。

對於這種文件系統你要向索引服務器請求文件,索引服務器再從底下的節點中把相關的數據塊取出來發給你,這個就是分佈式文件系統。

對於分佈式文件系統,你必須需要一個所以來管理所有的文件存儲,你總不能存儲一個文件就要廣播一次詢問所有服務器,所以針對不同規模的文件系統有不同的設定。

現在的文件系統總的來說都是日誌文件系統。日誌文件系統(英語:Journaling file system),一種文件系統,指在文件系統發生變化時,先把相關的信息寫入一個被稱爲日誌的區域,然後再把變化寫入主文件系統的文件系統。在文件系統發生故障(如內核崩潰或突然停電)時,日誌文件系統更容易保持一致性,並且可以較快恢復。

無論是ext btrfs ntfs 還是machfs 都是日誌文件系統。

在文件系統裏你每一次操作系統文件都會有一個日誌負責記錄這些操作,一旦操作失敗系統可以根據日誌回滾操作。

而且現在都是用簇來當作單位,所謂的簇就是硬盤上最小的文件大小,就是說你建立了一個1kb的文件,但是在硬盤上它是被寫入了一個簇裏面。比如ntfs裏面默認簇大小是16kb,那麼這個1kb的文件就被寫入了一個16kb的簇裏面。所以你在windows的文件屬性中看到一個實際大小和一個佔用大小。

這樣的好處是大大的加快了硬盤的操作速度,最開始人們都是1bit 1bit的讀取,後來發現速度實在是太慢了,之後就有人提出才用塊的方案,一塊一塊的讀取,這樣就快多了。缺點就是可能會佔用很多多餘的空間。

現在都在開發下一代文件系統了,linux unix的比較多,linux還在爭,貌似主流傾向於btrfs,這個目前還是隻能創建訪問,但不是不能當做啓動分區,啓動分區還是要求ext4

unix系列來說麼,最牛X的當然是zfs了,這個號稱地球上最強的文件系統,據說塞滿這個文件系統所需要的物質已經超過這個宇宙了,zfs無論是功能還是穩定性都是奇佳。

但是缺點就是需求很大= =。根據官方指南,你要是用4T的硬盤,大概需要8GB的內存來支持這個文件系統,不過據說測試的話讀寫性能不如ext4,但是對於服務器來說穩定性纔是最重要的。

windows的文件系統也是經過了很多曲折的,vista推出之前放出過一個beta,那個版本里面微軟開發了一個號稱是革命性的文件系統winfs,用sql server作爲底層,再用sql server來組織管理文件系統,這個思路跟ext的思路差不多,後來被拋棄了。

不過在win server 2012裏面微軟正式發佈了他們的下一代文件系統ReFS彈性文件系統,目前只能啊在server2012裏看見。而且這個文件系統依然不能作爲啓動盤的分區。這個文件系統主要是針對大規模存儲設計的,可以很方便的進行橫向或者縱向擴展,方便企業隨時調整他們的存儲規模,可以也融入了一部分winfs的技術吧,不過跟NTFS一樣,資料不外泄= =

現在說所linuxext文件系統,這個文件系統比較特別,自從你創建開始你所能存儲的文件數目就是一定的。哪怕你硬盤沒有滿但是文件數達標了你也創建不了新的文件了。

這個磁盤格式開始格式化的時候會創建一個叫嘴inode的區域,每個文件的屬性都會寫入那個區域,在Linux裏面,一切都是文件,無論是文件夾設備還是什麼都是文件你都可以用操作文件的方式去操作他。ext可以實現很多ntfs實現不了的特性依託於inode

舉個例子,你在windows底下創建一個快捷鏈接,如果你移動原始文件那麼快捷連接就會失效了。但是linux底下不會,因爲你創建的快捷鏈接是指向inode裏面那個文件的記錄,而不是文件所在的位置,所以即使文件變了但是鏈接依舊不會失效,通過這個inode列表可以高效對文件進行操作,比如刪除文件,直接移除inode裏面的文件記錄就行了。這樣的效率其實比 ntfs高很多,這也是winfs的設計思路。

其實刪除文件並沒有把文件刪除,只是刪除了路徑,系統默認那個文件消失了。直到新的文件覆蓋了原先的位置,文件也就算真正意義上刪除了。回收站就會輸這個原理。

一般來說文件系統設計就這幾種了,向ntfs這樣,一個文件就是一個,Linuxext那樣通過inode統一管理文件,或者是zfs那樣,功能強大依託於日誌,不過以後在企業中大規模存儲,用的最多的還是SAN存儲網絡,一般都是塊存儲。都會有一個獨立索引服務器,或者叫存儲控制器的東西,他來存儲每個文件對應的數據塊是哪些,類似於GFS或者HDFS設計也是這個思路。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章