iT邦幫忙

2026 iThome 鐵人賽

DAY 22
0
Security

新手的30天數位鑑識之旅系列 第 22 篇

22|MFT 深入解析:Resident、Non-Resident、LCN、VCN

  • 分享至 

  • xImage
  •  

上一篇介紹了 NTFS 的四個核心:

$MFT
$Boot
$Bitmap
$LogFile

其中最重要的就是 $MFT。


MFT Record 裡的 Attribute

NTFS 會把與 File 有關的資訊拆成不同的 Attribute。

例如:

Attribute 用途
$STANDARD_INFORMATION File 時間、屬性等資訊
$FILE_NAME File Name
$DATA File Content
$ATTRIBUTE_LIST 記錄其他 Attribute 的位置

Resident

Resident Attribute 是資料直接放在 MFT Record 裡。

例如:

MFT Record
┌────────────────────────────┐
│ Header                     │
├────────────────────────────┤
│ $STANDARD_INFORMATION      │
├────────────────────────────┤
│ $FILE_NAME                 │
├────────────────────────────┤
│ $DATA                      │
│                            │
│  Hello World               │
│                            │
└────────────────────────────┘

資料本身就在 MFT Record 裡。

所以不需要再去其他 Cluster 找 File Content。


什麼樣的資料適合 Resident?

資料夠小,就有可能直接放進 MFT Record。

但不是小於某個固定大小就一定 Resident。

因為 MFT Record 還需要放:

  • Header

  • File Name

  • Standard Information

  • 其他 Attribute

所以實際可用空間會受到整個 MFT Record 結構影響。


Non-Resident

如果資料太大,MFT Record 放不下怎麼辦?

這時候就會使用Non-Resident Attribute。

資料不放在 MFT Record 裡,而是放到其他 Cluster。

例如:

MFT Record
┌──────────────────────────┐
│ Header                   │
├──────────────────────────┤
│ $STANDARD_INFORMATION    │
├──────────────────────────┤
│ $FILE_NAME               │
├──────────────────────────┤
│ $DATA                    │
│                          │
│ 「資料放在哪裡?」 ───────┼──────┐
└──────────────────────────┘      │
                                  ↓
                          Disk Clusters
                          ┌───┬───┬───┬───┐
                          │   │   │   │   │
                          └───┴───┴───┴───┘

MFT Record 裡不放完整的 File Content,而是記錄這些資料要去哪裡找。

假設:

secret.jpg

是一個很大的檔案。

它的資料可能分散在:

Cluster 100
Cluster 101
Cluster 102

...

Cluster 500
Cluster 501

那 NTFS 怎麼知道這些 Cluster 是 secret.jpg 的資料?

這時就需要 VCN 和 LCN。


LCN vs VCN

VCN (Virtual Cluster Number)
 ↓
File 裡面的 Cluster 位置

LCN (Logical Cluster Number)
 ↓
Volume 上的 Cluster 位置

VCN 是從檔案本身的角度來看,表示資料位於檔案中的第幾個 Cluster。

LCN 則是從整個 NTFS Volume 的角度來看,表示這些資料位於 Volume 中的哪一個 Logical Cluster。

例如一個檔案需要 4 個 Cluster,可能會是:

檔案
VCN 0 → LCN 100
VCN 1 → LCN 101
VCN 2 → LCN 500
VCN 3 → LCN 501

這代表檔案的前兩個 Cluster 放在 Volume 的 LCN 100、101,但後兩個 Cluster 跑到了 LCN 500、501。

也就是說,檔案在邏輯上是連續的,但實際配置的位置可以是不連續的。

NTFS 會透過對應資訊記錄 VCN 與 LCN 的關係,而這些連續配置的 Cluster 會形成一個 Extent(Run)。例如 VCN 0~1 對應 LCN 100~101,可以視為一個連續區段;VCN 2~3 則對應到另一個區段。


Run List / Mapping Pairs

Run List / Mapping Pairs 的功能是 描述 File 的 VCN 如何對應到 Volume 上的 LCN。

假設:

secret.txt

總共有 6 個 Cluster。

實際配置:

VCN 0 → LCN 100
VCN 1 → LCN 101
VCN 2 → LCN 102

VCN 3 → LCN 500
VCN 4 → LCN 501
VCN 5 → LCN 502

可以發現:

VCN 0~2
    ↓
LCN 100~102

VCN 3~5
    ↓
LCN 500~502

所以不用一個一個記:

0 → 100
1 → 101
2 → 102
3 → 500
4 → 501
5 → 502

而可以表示成兩個 Run:

Run 1
VCN 0~2 → LCN 100~102

Run 2
VCN 3~5 → LCN 500~502

這就是 Run List 的概念。


小結

                    MFT Record
                         │
                         ↓
                      $DATA
                         │
                ┌────────┴────────┐
                ↓                 ↓
            Resident          Non-Resident
                │                 │
                ↓                 ↓
          Data 在 MFT 裡      Data 在其他 Cluster
                                  │
                                  ↓
                              Run List
                                  │
                           ┌──────┴──────┐
                           ↓             ↓
                         VCN           LCN
                           │             │
                           ↓             ↓
                    File 裡的位置    Volume 上的位置

上一篇
21|NTFS 的核心:$MFT、$Boot、$Bitmap、$LogFile
下一篇
23|Big Endian & Little Endian
系列文
新手的30天數位鑑識之旅 共 26 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言