為什麼 Steam 刪除 80G 的遊戲隻用了一秒?

2024年2月5日 23点热度 0人点赞

為什麼Steam 刪除80G 的遊戲隻用了一秒?

你以為的下載、刪除:

電腦:黑板

下載:板報寫滿黑板

刪除:慢慢把黑板擦幹凈

實際上的下載、刪除:

電腦:黑板

下載:板報寫滿黑板

刪除:“啪”一張大黑紙覆蓋黑板,還嚷嚷一句:“黑板擦好了!”

在NTFS分區裡面,一個文件,根據文件大小的不同,有3處或者5處相關的信息:

  1. $MFT裡面的FILE記錄,大小固定為1K$MFT(MasterFileTable,主文件表)是NTFS最重要的文件,默認隱藏不能訪問,記錄著這個分區內所有的目錄和文件信息。一個文件在$MFT裡面的記錄主要記錄了文件名、所在文件夾的記錄號、大小、創建/上次修改/上次修改$MFT記錄/上次訪問時間等屬性。如果這條1K記錄剩餘的空間大於文件大小,使用一個特殊的屬性直接在記錄中保存文件的數據,這個屬性在NTFS稱為常駐屬性;如果剩餘空間小於文件大小,文件數據需要使用額外的簇保存,使用另一種屬性記錄這個保存這個文件數據所占用的簇,這個屬性稱為非常駐屬性。

  1. 在上級文件夾的索引數據中的記錄,大小不定,通常在88~600字節之間。每個文件夾(包括根目錄)在內,會記錄本文件夾下所有子文件夾、文件的信息,包括文件在$MFT裡面的記錄號、大小、創建/上次修改/上次修改$MFT記錄/上次訪問時間等屬性,這些信息占用82字節。此外還有這個文件/子文件夾的文件名,最大255個字符,每個字符占使用unicode編碼,占兩個字節。最後會補齊8個字節。此外,為了兼容DOS的8.3文件名,每個文件/子文件夾通常會有另一條文件名是8.3格式的記錄,這條記錄的大小一般不會大於96字節。

  1. $Secure裡面的記錄,數量和大小不定。$Secure記錄每個文件的權限,例如某個用戶/組對這個文件具有什麼樣的權限。對於傢用情況,沒多少用戶/組,一個文件的權限數據通常很小不會超過4K。

  1. $Bitmap中對應的位。NTFS分區中每一簇按順序對應$Bitmap文件中的1bit,0表示這一簇未被占用,1表示被占用。如果是文件在$MFT記錄中的數據屬性為非常駐屬性,文件所占用的每一簇在$Bitmap文件中對應的bit置1。

  1. 文件數據實際占用的簇。一般來說稍微大一點的文件,都很可能會形成多個碎片,但這個問題是刪除文件,無需考慮碎片的情況,這個後面會提到。

根據第1項的說明,如果文件夾數據/文件大小很小的話,上面4、5兩項是沒有的。如果是簇大小為4K的NTFS分區,80G的文件在$bitmap中占用80×1024×1024÷4=20Mbit=2.5MB。如果考慮到這些簇可能散亂分佈在整個分區中的不同位置,需要把整個$Bitmap文件更新一遍的話,一個1TB的分區的$Bitmap文件是32MB。

所以,每刪除一個文件/文件夾,都要更新1~4項的信息。第5項無需更新,文件所使用的簇在$Bitmap中對應的位置0後,將來如果這些簇用來保存新的文件數據會直接覆蓋。當然,如果是使用固態硬盤的話,Windows會發送trim指令給固態的主控,主控會在空閑的時候根據磨損算法回收對應的Page。

如果是機械硬盤的話,在沒有緩存的前提下,單是找到1~3項的記錄通常就需要十多次尋道。每一處記錄的更新必然有一次尋道,但對於固態來說隻要文件數量不是太多,這個尋道(固態其實應該叫尋址更合適點)時間都可以在1秒內完成。而每一處信息更新通常隻需要寫入1簇(4K)的數據,就算是機械硬盤,這個數據傳輸時間也是基本可以忽略的,固態就更不用說了。

最後,根據前面的論述,如果一個遊戲有1024個文件的話,寫入數據量是1024×12KB=12MB,加上$Bitmap文件的2.5~32MB,總計是14.5MB~44MB。SATA固態硬盤通常4K隨機讀性能在20MB/s以上,4K寫性能100MB/s以上,在這些數據都在緩存中的前提下,還是可以在1秒內完成的。如果文件數量更少,就更加沒有壓力了。

其實,需要刪除遊戲往往是因為我們的電腦硬盤空間有限,很多平時用不到但是又舍不得刪除的文件占據了電腦的大部分空間,導致留給遊戲的部分就很少了,這時候我們就可以考慮使用網盤來代替硬盤為我們存儲數據,把那些使用頻率不那麼高的數據存儲在我們的網盤裡,這樣就能給遊戲騰出更多的空間。

中國移動雲盤是中國移動面向所有用戶推出的一款安全、智能、不限速、移動用戶免流量的產品。產品涵蓋存儲備份、多端同步、在線管理的功能,非常適合移動用戶使用,非常可靠。