SDelete v2.05

作者:Mark Russinovich

發佈時間:2023 年 9 月 29 日

Download下載 SDelete(304 KB)

簡介

Windows NT/2000 (Win2K) C2 合規性的其中一項功能,就是會實作物件重複使用保護。 這表示當應用程式配置檔案空間或虛擬記憶體時,無法檢視先前儲存在 Windows NT/2K 為其配置的資源中的資料。 Windows NT 會以零填入記憶體,並將放置檔案所在的磁碟上的磁區歸零,再將任一類型的資源呈現給應用程式。 不過,物件重複使用不會指出檔案所佔用的空間在刪除之前歸零。 這是因為 Windows NT/2K 的設計假設作業系統會控制系統資源的存取權。 不過,當作業系統不在使用中時,可以使用原始磁碟編輯器和復原工具來檢視和復原作業系統已解除配置的資料。 即使您使用 Win2K 的加密檔案系統 (EFS) 來加密檔案,檔案的原始未加密檔案資料也會在建立新加密版本的檔案之後留在磁碟上。

確保已刪除檔案以及使用 EFS 加密的檔案不會復原的唯一方法,是使用安全刪除應用程式。 安全刪除應用程式會使用讓磁碟資料無法復原的技術覆寫已刪除檔案的磁碟上資料,即使使用可在顯示弱式刪除檔案的磁性媒體中讀取模式的復原技術也一樣。 SDelete (安全刪除) 是此類應用程式。 您可以使用 SDelete 安全地刪除現有的檔案,以及安全地清除磁碟未配置部分中的任何檔案資料 (包括您已刪除或加密的檔案)。 SDelete 會實作「國防部」清除和清理標準 DOD 5220.22-M,讓您確信一旦使用 SDelete 進行刪除,您的檔案資料就會永遠消失。 請注意,SDelete 會安全地刪除檔案資料,但是不會刪除位於可用磁碟空間中的檔案名稱。

使用 SDelete

SDelete 是採用許多選項的命令列公用程式。 在任何指定的使用中,它可讓您刪除一或多個檔案和/或目錄,或清除邏輯磁碟上的可用空間。 SDelete 接受萬用字元作為目錄或檔案規範的一部分。

使用方式:

sdelete [-p passes] [-r] [-s] [-q] [-f] <file or directory [...]>
sdelete [-p passes] [-q] [-z|-c] <drive letter [...]>
sdelete [-p passes] [-q] [-z|-c] <physical disk number [...]>
參數 描述
-c 清除可用空間。
-f 強制引數只包含要視為檔案/目錄而非磁碟的字母。
如果引數包含其他字元 (例如路徑分隔符號或副檔名),則不需要。
-p 指定覆寫傳遞數目 (預設值為 1)。
-q 無訊息模式。
-r 移除唯讀屬性。
-s 遞迴子目錄。
-z 零可用空間 (適用於虛擬磁片最佳化)。
-nobanner 不顯示啟動橫幅及著作權訊息。
  • 磁碟不得有任何磁碟區才能清除。
  • 針對磁碟機代號,包括 :,例如 D:

SDelete 運作方式

安全地刪除沒有特殊屬性的檔案相對直接:安全刪除程式只會使用安全刪除模式覆寫檔案。 更棘手的是安全地刪除 Windows NT/2K 壓縮、加密和疏鬆檔案,並安全地清除磁碟可用空間。

壓縮、加密和疏鬆是由 NTFS 在 16 個叢集區塊中管理。 如果程式寫入這類檔案的現有部分,NTFS 會在磁碟上配置新的空間來儲存新的資料,並在寫入新資料之後,解除配置先前由檔案佔用的叢集。 NTFS 會基於與資料完整性相關的原因採用這個保守的方法,而且在壓縮和疏鬆檔案的情況下,如果新的配置大於現存項目 (新的壓縮資料大於舊的壓縮資料)。 因此,覆寫這類檔案將無法成功從磁碟刪除檔案的內容。

若要處理這些類型的檔案,SDelete 需仰賴重組 API。 使用重組 API,SDelete 可以精確判斷磁碟上的哪些叢集是由屬於壓縮、疏鬆和加密檔案的資料所佔用。 一旦 SDelete 知道哪些叢集包含檔案的資料,就可以開啟磁碟進行原始存取,並覆寫這些叢集。

清除可用空間帶來了另一個挑戰。 由於 FAT 和 NTFS 無法讓應用程式直接定址可用空間,因此 SDelete 有兩個選項之一。 第一個選項,如同針對壓縮、疏鬆和加密檔案所做的一樣,開啟磁碟進行原始存取,並覆寫可用空間。 這種方法有一個大問題:即使 SDelete 已編碼為能夠完全計算 NTFS 和 FAT 磁碟機的可用空間部分 (這並非微不足道),也會有在系統上與作用中檔案作業發生衝突的風險。 例如,假設 SDelete 判斷叢集可用,而就在此時檔案系統驅動程式 (FAT、NTFS) 決定為另一個應用程式正在修改的檔案配置叢集。 檔案系統驅動程式會將新資料寫入叢集,然後 SDelete 會隨之而來,並覆寫新寫入的資料:檔案的新資料已消失。 如果叢集配置給檔案系統中繼資料,因為 SDelete 會損毀檔案系統的磁碟結構,問題更嚴重。

第二種方法,也是 SDelete 採用的方法,是間接覆寫可用空間。 首先,SDelete 會盡其所能配置最大檔案。 SDelete 會使用非快取檔案 I/O 來執行這項作業,因此不會擲回 NT 檔案系統快取的內容,並以與 SDelete 霸佔空間檔案相關聯的無用資料取代。 因為非快取檔案 I/O 必須是對齊的磁區 (512 位元組),所以即使 SDelete 無法進一步增加檔案,也可能會有一些未配置給 SDelete 檔案的剩餘空間。 若要擷取任何剩餘的空間,SDelete 接下來會盡其所能配置最大快取檔案。 針對這兩個檔案,SDelete 都會執行安全覆寫,確保先前可用的所有磁碟空間都會安全地清除。

在 NTFS 磁碟機上,SDelete 的作業不一定會在配置並覆寫這兩個檔案之後通過。 SDelete 也必須以符合 MFT 記錄的檔案填入 NTFS MFT (主要檔案資料表) 的任何現有可用部分。 MFT 記錄的大小通常是 1 KB,而且磁碟上的每個檔案或目錄至少需要一個 MFT 記錄。 小型檔案會完全儲存在 MFT 記錄內,而不符合記錄的檔案會配置在 MFT 外部的叢集。 SDelete 為了負責處理可用 MFT 空間要做的就是盡其所能配置最大檔案,當檔案佔用 MFT 記錄 NTFS 中的所有可用空間時,會防止檔案變大,因為磁碟上沒有剩餘的可用叢集 (它們是由先前配置的兩個檔案 SDelete 所保留)。 SDelete 接著會重複此程序。 當 SDelete 無法再建立新的檔案時,就知道 MFT 中所有先前可用記錄已完全填入安全覆寫的檔案。

為了覆寫您所刪除檔案的檔案名稱,SDelete 會重新命名檔案 26 次,每次以連續字母字元取代檔案名稱的每個字元。 例如,"foo.txt" 的第一次重新命名會成為 "AAA.AAA"。

清除磁碟可用空間時,SDelete 不會安全地刪除檔案名稱的原因是,刪除它們需要直接操作目錄結構。 目錄結構可以有包含已刪除檔案名稱的可用空間,但是可用目錄空間無法配置給其他檔案。 因此,SDelete 無法配置此可用空間,以便安全地覆寫。

Download下載 SDelete(304 KB)

執行於:

  • 用戶端:Windows 10 和更新版本。
  • 伺服器:Windows Server 2012 和更新版本。
  • Nano Server:2016 和更新版本。