
在Windows作業系統命令列中,當我需要快速建立任意大小的檔案時,我使用命令:
fsutil file createnew <filename> <size_in_bytes>
我最近使用這個本機工具創建了一個 100GB 的文件,令我驚訝的是創建該文件的時間不到 500 毫秒。我在之前填充有數據的盤片硬碟上創建了該文件。
出於好奇,我在十六進制編輯器中打開了該文件,它看起來完全是空的(誠然,我沒有手動檢查所有 100GB)。我以為它會填滿硬碟以前的內容,因為它不可能在 500 毫秒內寫入 100GB 的資料。
實際上在做什麼fsutil file createnew
?而且,根據它的實際用途,它是否可以用作低安全性快速擦除技術(單通道)?
答案1
我以為它會填滿硬碟以前的內容,
多用戶作業系統通常不允許這種情況發生,因為這將是繞過作業系統級檔案保護功能的不必要的簡單方法,並且至少對於 Windows 來說這是明確的其安全認證的一部分。
fsutil file createnew 其實在做什麼?
至少有兩個選項,我懷疑(但尚未檢查)fsutil 使用第一個 - 它依賴作業系統來追蹤「資料結束」。
檔案系統可以保留兩個單獨的指標-「檔案結尾」和「有效資料結尾」。這就是 NTFS 在 Windows 中的工作原理。
您可以致電設定檔案結束符()(對應Linux截斷())建立一個沒有資料的大文件,讀取時「有效資料結束」和「文件結束」之間的空格將自動傳回所有0x00位元組。
(特權帳戶實際上可以使用 SetFileValidData() 呼叫來強製作業系統傳回磁碟上已有的數據,但這不是常用的操作。)
如果檔案系統是基於範圍的,那麼它不會追蹤單一磁碟區簇,而是追蹤組成檔案的整個連續的「開始-結束」範圍。這允許創建稀疏文件,其中某些範圍被簡單地標記為根本沒有任何物理分配(即「洞」)——這些位置在讀取時將返回 0x00(當然,直到那裡寫入其他內容)。
一般來說,簡單來說尋求如果可能的話,超出文件末尾並繼續寫入將自動產生稀疏文件。
fsutil 有子指令來檢查「有效資料」指標和檔案的範圍清單。
有些檔案系統不支援這些技術(例如 FAT),在這種情況下作業系統將要需要明確地將相應的磁碟區域清零。
而且,根據它的實際用途,它是否可以用作低安全性快速擦除技術(單通道)?
不,不在機械磁碟上。