前幾章講了文件系統的相關內容,在真實的世界中,文件是存放在磁盤等大容量存儲設備上的。本章來討論磁盤管理的一些問題。
把文件放在磁盤中,有兩種策略:
1. 爲一個文件分配連續的磁盤空間。
2. 把文件分成很多個塊,磁盤空間也分成很多個塊,來存儲文件。
幾乎所有的文件系統都把文件分割成固定大小的塊來存儲。
這就出現幾個問題:
跟內存管理中的頁面大小的分配一樣,到底多大合適?
塊太大,浪費空間。塊太小,浪費時間。
從歷史觀點來說,文件系統將大小設在1~4KB之間,但是隨着磁盤超過了1TB,還是將塊的大小提升到了64KB並且接受浪費空間。
空閒塊是未分配給文件和目錄的空間。
選定了塊大小,下一個問題就是怎樣跟蹤空閒塊。有兩種方法:
1)位圖
n塊磁盤需要n位位圖。
佔用空間小。
2)磁盤塊鏈表
鏈表的每個塊中包含儘可能多的空閒磁盤號。
佔有空間大。
多用戶操作系統提供一種強制性磁盤配額機制,每個用戶擁有一定數量的文件和塊,不能超過這個配額。
打開文件表裏有一個配額指針,指向配額表。
每個配額表記錄了每個用戶的配額,每往文件添加一塊時,文件所有者所有的數據塊的總數也增加,引發對配額硬限制和軟限制的檢查。
將所有磁盤文件複製到備份介質,稱爲完全備份。
自上一次備份起,更改的文件備份到備份介質,稱爲增量備份。
**物理轉儲:**從磁盤的第0塊開始,將全部的磁盤塊按序輸出到磁帶上。
**邏輯轉儲:**從一個或幾個指定的目錄開始,遞歸地轉儲自給定基準日期後有所更改的全部文件和目錄。
文件系統一致性:很多文件系統讀取磁盤塊,進行修改後,再寫回磁盤。如果在修改過的磁盤塊全部寫回之前系統崩潰,則文件系統有可能處於不一致的狀態。
爲了解決不一致問題,很多操作系統帶有檢驗文件系統一致性的程序,如UNIX中的fsck,Windows中的scandisk。
一致性檢查分爲兩種:塊的一致性檢查,文件的一致性檢查。
訪問磁盤比訪問內存要慢得多。
有各種優化措施來改善性能,如高速緩存、預先讀取等,不做深入討論。
隨着時間的流逝,文件被不斷的創建和刪除,磁盤就會產生很多的碎片,造成性能的降低。
移動文件使它們相鄰,把所有的空閒空間放在一個大的連續區域內。
SSD不需要碎片整理。