假設:
1 Cluster = 4096 Bytes
現在有一個檔案:
test.txt
大小:3000 Bytes
因為一個 Cluster 有 4096 Bytes,所以這個檔案需要使用一個 Cluster:
┌────────────────────────────┐
│ test.txt │
│ │
│ 3000 Bytes │
│ │
├────────────────────────────┤
│ 剩下 1096 Bytes │
└────────────────────────────┘
1 Cluster
4096 B
但檔案只有 3000 Bytes。
剩下的:
4096 - 3000 = 1096 Bytes
並沒有被目前這個檔案使用。
這一部分就稱為 Slack Space。
Slack Space = 已經分配給檔案的 Cluster 中,沒有被目前檔案內容使用的空間。
這些沒有被目前檔案使用的空間,有時候可能會留下其他資料的殘留。
例如:
┌────────────────────────────┐
│ test.txt │
│ 3000 Bytes │
├────────────────────────────┤
│ 可能殘留舊資料的空間 │
└────────────────────────────┘
因此在分析檔案時,有時候也會檢查 Slack Space。
但如果這部分原本就是空的,或之後被其他資料覆蓋,就不一定能找到有用的內容。
接下來看另一個概念。
假設硬碟目前有四個 Clusters:
┌──────────┬──────────┬──────────┬──────────┐
│ File A │ File A │ File B │ File B │
└──────────┴──────────┴──────────┴──────────┘
這些空間目前都有檔案使用,因此屬於 Allocated Space。
但如果使用者把 File B 刪除:
┌──────────┬──────────┬──────────┬──────────┐
│ File A │ File A │ │ │
└──────────┴──────────┴──────────┴──────────┘
↑ ↑
Unallocated Space
原本分配給 File B 的空間,就可能被檔案系統標記為可以再次使用。
這些目前沒有被分配給任何檔案的空間,就是 Unallocated Space。
一般刪除檔案時,檔案系統主要會更新相關的管理資訊,讓原本使用的空間可以重新被分配。
刪除前
File A → Cluster 1
File B → Cluster 2
File C → Cluster 3
刪除 File B 後:
File A → Cluster 1
Cluster 2 → 可以重新使用
File C → Cluster 3
此時 Cluster 2 已經不再被視為 File B 正在使用的空間。
但是:
原本的資料內容不一定會在刪除的瞬間被清除。
因此,原本的內容可能暫時殘留在這些空間中。
這個觀念很重要。
Unallocated 的意思不是這裡什麼都沒有,
而是:
「目前沒有被檔案系統分配給檔案。」
例如:
┌──────────┬──────────┬──────────┬──────────┐
│ File A │ File A │ 原本資料 │ 原本資料 │
└──────────┴──────────┴──────────┴──────────┘
↑ ↑
Unallocated
這裡的「原本資料」可能還殘留,但也可能已經被新的資料覆寫。
所以分析 Unallocated Space 時,可能找到:
已刪除檔案的部分內容
檔案片段
文字片段
其他殘留資料
但也可能什麼都找不到。
Cluster
┌──────────────────┐
│ 檔案內容 │
├──────────────────┤
│ 未使用的空間 │ ← Slack
└──────────────────┘
已分配給檔案的 Cluster 中,沒有被目前檔案使用的部分。
┌──────────┬──────────┬──────────┐
│ File A │ │ File C │
└──────────┴──────────┴──────────┘
↑
Unallocated
目前沒有被檔案系統分配給檔案的空間。
刪除檔案,不代表原本的資料一定會立刻消失。 只要原本的空間還沒有被新的資料覆寫,就有可能留下可以分析的殘留資料。