41
FAT32 Lê Gia Công – Khoa CNTT – Đại hc Đà Lt Trang 1 Quá trình khi động Tóm tt quá trình khi động máy tính tkhi người sdng bt ngun cho ti khi máy tính sn sàng làm vic. o Bt công tc ngun (bm nút power), quá trình POST được thc hin: Bngun chính (power supply) hot động, cung cp cho mainboard các dòng đin 12V, 5V, 3.3V. Các mch n áp hot động. Mch to xung clock hot động. Chipset nam hot động. Chipset bc hot động. To ra tín hiu reset CPU. CPU hot động. CPU phát tín hiu truy cp ROM để np chương trình BIOS. Chương trình BIOS kim tra RAM, card video, np bn lưu cu hình máy trong RAM CMOS, kim tra các cng, các đĩa theo thiết lp trong CMOS. o Quá trình POST kết thúc. o Nếu trong BIOS thiết lp khi động tđĩa cng, hthng struy cp đĩa cng và np hđiu hành. Vùng đĩa cng được hthng truy cp trong quá trình khi động được gi là vùng khi động (boot sector hay boot block). Vùng khi động (Boot Sector hay Boot Block) Vùng khi động là mt vùng trên đĩa cng, đĩa mm, đĩa quang hoc các thiết blưu trdliu khác mà có cha mã khi động. Mã khi động là mã máy sđược np vào RAM trong quá trình khi động. Mc đích ca vùng khi động trên mt đĩa là giúp quá trình khi động np được hđiu hành đã được cài đặt trên chính đĩa đó vào RAM. Vtrí và kích thước ca vùng khi động tùy thuc vào thiết kế ca các hthng khác nhau. Trên các dòng máy tương thích IBM PC, BIOS sla chn thiết bđể khi động, sau đó chép ni dung trong sector đầu tiên ca thiết b(có thlà MBR, VBR hoc đon mã khi động bt k) vào RAM, bt đầu ti địa ch0x7C00. Quá trình này có thkhác nhau tùy thuc vào các hthng khác nhau. Có hai loi vùng khi động chính trên đĩa cng, đĩa mm và các thiết blưu trtương t: o MBR (master boot record): là sector đầu tiên trên thiết blưu trđã được chia thành các phân vùng (partition), MBR có thcha mã khi động để xác định partition nào đã được đánh du là có khnăng khi động (active) và đọc ni dung VBR trong partition đó.

He thong FAT32

Embed Size (px)

DESCRIPTION

Tìm hiểu về hệ thống FAT32

Citation preview

Page 1: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 1

Quá trình khởi động

Tóm tắt quá trình khởi động máy tính từ khi người sử dụng bật nguồn cho tới khi máy tính sẵn sàng làm việc.

o Bật công tắc nguồn (bấm nút power), quá trình POST được thực hiện:

• Bộ nguồn chính (power supply) hoạt động, cung cấp cho mainboard các dòng điện 12V, 5V, 3.3V.

• Các mạch ổn áp hoạt động.

• Mạch tạo xung clock hoạt động.

• Chipset nam hoạt động.

• Chipset bắc hoạt động. Tạo ra tín hiệu reset CPU.

• CPU hoạt động.

• CPU phát tín hiệu truy cập ROM để nạp chương trình BIOS.

• Chương trình BIOS kiểm tra RAM, card video, nạp bản lưu cấu hình máy trong RAM CMOS, kiểm tra các cổng, các ổ đĩa theo thiết lập trong CMOS.

o Quá trình POST kết thúc.

o Nếu trong BIOS thiết lập khởi động từ đĩa cứng, hệ thống sẽ truy cập đĩa cứng và nạp hệ điều hành. Vùng đĩa cứng được hệ thống truy cập trong quá trình khởi động được gọi là vùng khởi động (boot sector hay boot block).

Vùng khởi động (Boot Sector hay Boot Block)

Vùng khởi động là một vùng trên đĩa cứng, đĩa mềm, đĩa quang hoặc các thiết bị lưu trữ dữ liệu khác mà có chứa mã khởi động. Mã khởi động là mã máy sẽ được nạp vào RAM trong quá trình khởi động.

Mục đích của vùng khởi động trên một đĩa là giúp quá trình khởi động nạp được hệ điều hành đã được cài đặt trên chính đĩa đó vào RAM.

Vị trí và kích thước của vùng khởi động tùy thuộc vào thiết kế của các hệ thống khác nhau.

Trên các dòng máy tương thích IBM PC, BIOS sẽ lựa chọn thiết bị để khởi động, sau đó chép nội dung trong sector đầu tiên của thiết bị (có thể là MBR, VBR hoặc đoạn mã khởi động bất kỳ) vào RAM, bắt đầu tại địa chỉ 0x7C00. Quá trình này có thể khác nhau tùy thuộc vào các hệ thống khác nhau.

Có hai loại vùng khởi động chính trên đĩa cứng, đĩa mềm và các thiết bị lưu trữ tương tự:

o MBR (master boot record): là sector đầu tiên trên thiết bị lưu trữ đã được chia thành các phân vùng (partition), MBR có thể chứa mã khởi động để xác định partition nào đã được đánh dấu là có khả năng khởi động (active) và đọc nội dung VBR trong partition đó.

Page 2: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 2

o VBR (volume boot record): là sector đầu tiên trên thiết bị lưu trữ không được chia partition, hoặc là sector đầu tiên của mỗi partition trong các thiết bị đã được chia partition. VBR có thể chứa mã khởi động để tìm kiếm và nạp hệ điều hành đã được cài đặt trên thiết bị hoặc trên partition chứa nó.

Trong các dòng máy tương thích với IBM PC, hệ x86; theo quy ước, hai byte mang giá trị 0x55 và 0xAA được đặt ở cuối của boot sector. Đây là dấu hiệu để báo cho hệ thống biết là trong boot sector này có chứa đoạn mã khởi động có thể thực thi được (bootloader), nhưng có dấu hiệu này, không có nghĩa là đoạn mã khởi động ở đây có thể nạp được hệ điều hành. Dấu hiệu này cũng không thể đảm bảo được là trong đĩa đã được định dạng bằng một hệ thống quản lý tập tin hoặc đã có hệ điều hành hay chưa?

Trong thực tế, BIOS thường không quan tâm tới việc đĩa có được chia partition hay không? nó đang làm việc với VBR hay MBR? BIOS cứ đọc sector đầu tiên trên thiết bị lưu trữ, nếu thiết bị chưa được chia partition thì sector đó sẽ là VBR, còn nếu đĩa đã được chia partition thì sector đó sẽ là MBR và sau đó MBR sẽ tự biết cách để chuyển điều khiển cho VBR nào đã được thiết lập là có khả năng khởi động hệ thống (active partition).

MBR (master boot record)

Với các đĩa cứng đang được sử dụng trên các máy tính cá nhân, thường được chia thành ít nhất là hai phân vùng (partition), sector đầu tiên trên đĩa cứng chính là MBR, hình dưới đây thể hiện tổ chức của đĩa cứng đó:

MBR Partition partition …. Partition

Tuy nhiên, với các đĩa cứng không được chia partition (cả đĩa cứng là một partition) thì tổ chức của cả đĩa cứng sẽ tương tự như tổ chức của một partition.

MBR gồm 512 byte đầu tiên của đĩa cứng (sector vật lý đầu tiên, sector 0).

MBR chứa các thông tin về việc chia partition của cả đĩa cứng, hệ thống quản lý tập tin trên mỗi partition, tìm kiếm và triệu gọi đoạn mã khởi động trong VBR.

Khái niệm MBR được đưa ra vào năm 1983. Với các đĩa cứng có dung lượng lớn hơn 2TB, việc chia đĩa cứng dựa trên MBR gặp một số hạn chế, do đó hệ thống GPT đã được phát triển để thay thế.

Công cụ được sử dụng để chia partition là FDISK, partition magic, công cụ có sẵn trên các đĩa cài đặt hệ điều hành...v.v.

MBR có cấu trúc như sau:

Địa chỉ

Hệ 16 Hệ 8 Hệ 10 Mô tả Số byte

Page 3: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 3

0000 0000 0 Vùng mã (Code Area) 440 (tối đa 446)

01B8 0670 440 Mô tả đĩa (Optional Disk signature) 4

01BC 0674 444 Chứa giá trị Null (0x0000) 2

01BE 0676 446 Thông tin mô tả các primary partition

(partition table)

64

01FE 0776 510 55h

01FF 0777 511 AAh

Dấu hiệu nhận dạng boot sector (0xAA55)

2

Tổng kích thước của MBR 512

Thông tin mô tả các primary partition gồm 64 byte được chia thành bốn phần bằng nhau (gọi là các entry), mỗi entry gồm 16 byte (theo mô hình của IBM PC). Vì vậy, nếu đĩa cứng được chia thành các partition kiểu primary thì chỉ tạo được tối đa là bốn partition.

Cấu trúc của mỗi entry:

Địa chỉ Offset

Số byte Mô tả

0x00 1 Trạng thái khởi động:

- 0x80: có khả năng khởi động

- 0x00: không có khả năng khởi động

- Giá trị khác: không hợp lệ

0x01 3 Địa chỉ bắt đầu của partition. Sử dụng địa chỉ dạng CHS. Giá trị CHS được mô tả cụ thể trong ba byte dưới đây.

0x01 1 Chỉ số head của CHS, kí hiệu là H 0x02 1 Chỉ số sector của CHS, được lưu trong sáu bit thấp (bit 5–

0); hai bit: thứ 6 và thứ 7 được chuyển qua thành bit thứ 8 và thứ 9 của chỉ số cylinder.

0x03 1 Tám bit thấp của chỉ số cylinder (chỉ số của cylinder gồm 10 bit).

0x04 1 Kiểu của partition (partition type).

0x05 3 Địa chỉ kết thúc của partition. Sử dụng địa chỉ dạng CHS. Giá trị CHS được mô tả cụ thể trong byte dưới đây.

Page 4: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 4

0x05 1 Chỉ số head của CHS, kí hiệu là H.

0x06 1 Chỉ số sector của CHS, được lưu trong sáu bit thấp (bit 5–0); hai bit: thứ 6 và thứ 7 được chuyển qua thành bit thứ 8 và thứ 9 của chỉ số cylinder.

0x07 1 Tám bit thấp của chỉ số cylinder (chỉ số của cylinder gồm 10 bit).

0x08 4 Sector bắt đầu của partition. (sector được đánh số theo dạng LBA – Logical Block Address).

0x0C 4 Tổng số khối (block, sector) của partition, được lưu trữ theo định dạng little-endian.

Địa chỉ dạng CHS

CHS là dạng viết rút gọn của Cylinder-Head-Sector, là một phương pháp đánh địa chỉ cho khối dữ liệu trên đĩa cứng.

Đơn vị nhỏ nhất cho mỗi khối dữ liệu là sector. Địa chỉ dạng CHS sẽ chỉ ra vị trí của sector trên track, và vị trí của track được xác định bằng số head và cylinder. Kí hiệu S trong CHS chính là chỉ số sector.

Track là dải sector được tổ chức theo hình tròn, đồng tâm.

Cylinder là tập hợp các track có cùng bán kính trên tất cả các mặt đĩa. Kí hiệu C trong CHS chính là chỉ số cylinder.

Đĩa cứng gồm nhiều phiến đĩa (platter), mỗi phiến đĩa có hai mặt đĩa (side), mỗi mặt đĩa có một đầu đọc/ghi (head). Kí hiệu H trong CHS chính là chỉ số head.

Hình sau minh họa về sector, track, cylinder, head.

Page 5: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 5

Với các đĩa cứng theo phương pháp mã hóa dữ liệu MFM và RLL, số sector trên mỗi cylinder (hay track) luôn luôn bằng nhau. Do đó, giá trị CHS còn thể hiện cấu trúc vật lý của ổ đĩa. Ví dụ, một ổ đĩa với giá trị CHS là 500:4:32, sẽ có 500 track trên một mặt đĩa, hai phiến đĩa, 32 sector/track, và có dung lượng 500 x 4 x 32 x 512 = 32.768.000 byte (khoảng 31,25 MiB).

Các đĩa cứng theo chuẩn ATA/IDE lưu trữ dữ liệu hiệu quả hơn, bằng việc sử dụng hệ thống Zone Bit Recording (ZBR) thay cho MFM và RLL.

Quay trở lại cấu trúc của mỗi entry trong MBR, trường CHS bắt đầu và CHS kết thúc gồm ba byte. Trong đó, chỉ số H gồm tám bit của byte đầu tiên, chỉ số S gồm sáu bit thấp của byte thứ hai, chỉ số C gồm tám bit của byte thứ ba cộng với hai bit cao của byte thứ hai. Xem hình minh họa dưới đây:

Hình: sector, track, cylinder, head

Page 6: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 6

Từ hình vẽ trên, với ba byte dữ liệu của CHS (1, 2, 3), tính ra giá trị hệ 10: H = 254, S = 63 và C = 723.

Kiểu của partition (partition type hay partition ID)

Đĩa cứng thường được chia thành các đơn vị lưu trữ hay các phân vùng nhỏ hơn gọi là các partition.

Có nhiều phương pháp chia, tổ chức và lưu trữ thông tin partition khác nhau, phần này chỉ tập trung mô tả về partition cho hệ thống máy tính chạy hệ điều hành DOS, Windows, Linux và các hệ thống tương thích với IBM PC khác.

Có hai loại partition là: primary partition và extended partition.

Một đĩa cứng có thể chia thành nhiều nhất là bốn primary partition, hoặc ba primary partition + một extended partition. Tất nhiên có thể chia thành một hoặc hai primary partition + một extended partition. Các thông tin về chia partition này được lưu trong các entry 16-byte tại phần Thông tin mô tả các primary partition (partition table) trong MBR. Partition table có kích thước 64 byte.

Partition type là một trường có kích thước một byte, giá trị của byte này chính là ‘‘mã’’ cho biết hệ thống tập tin (file system) nào được sử dụng trong partition. Tuy nhiên, có một số “mã” (ví dụ 0x05, 0x0F) được sử dụng để chỉ ra partition đó chính là extended partition.

‘‘Mã’’ này sẽ được bootloader sử dụng để xác định xem nó có thể làm việc được với partition đó hay không?

Giá trị của partition type còn là cơ sở để hệ thống thực hiện các thao tác khác, ví dụ: ẩn partition không cho hệ điều hành thấy. Tuy nhiên, nếu hệ điều hành hoặc một công cụ chia partition nào đó đã được lập trình để xem boot sector của mọi partition thì việc ẩn này không còn ý nghĩa. Ngoài ra, giá trị này cũng có thể bị thay đổi bởi các phần mềm khác.

Hình: Ba byte CHS

Page 7: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 7

Primary partition

Mỗi primary partition sử dụng một hệ thống quản lý tập tin duy nhất (file system). Trong hệ điều hành DOS hoặc các phiên bản Microsoft Windows đầu tiên, phân vùng của hệ thống (phân vùng cài đặt hệ điều hành) luôn được yêu cầu là partition đầu tiên trên ổ đĩa cứng. Các hệ điều hành Microsoft Windows gần đây (Windows XP, 7...v.v) có thể cài đặt ở mọi phân vùng, với điều kiện là tập tin khởi động (boot file: bootmgr, ntldr...v.v.) phải được đặt ở primary partition. Tuy nhiên, BIOS cũng có thể đưa ra yêu cầu partition nào sẽ phải chứa hệ điều hành khởi động.

Với primary partition, “mã” có thể cho biết kiểu của hệ thống tập tin (ví dụ: 0x07 là NTFS hoặc HPFS) hoặc cho biết partition đó được sử dụng cho mục đích đặc biệt (ví dụ: 0x82 là partition swap của hệ thống Linux).

Có nhiều “mã” khác nhau cho hệ thống tập tin FAT16 và FAT32 do các giới hạn của các phiên bản hệ điều hành DOS và Windows.

Mặc dù hệ điều hành Linux có thể làm việc được với các hệ thống tập tin khác nhau (ext4, ext3, ext2...v.v), nhưng chúng vẫn sử dụng cùng một “mã” là 0x83.

Extended partition

Mỗi đĩa cứng chỉ có duy nhất một extended partition. Từ extended partition này có thể tiếp tục chia nhỏ thành nhiều logical partition. Trong các hệ thống DOS/Windows, mỗi logical partition được gán bằng một kí tự ổ đĩa (D:\, E:\ ...v.v).

Địa chỉ dạng LBA

LBA (logical block addressing) là một hệ thống đánh địa chỉ, được sử dụng để đánh địa chỉ cho các khối dữ liệu (block hay sector) trên các thiết bị lưu trữ của máy tính, thường là các hệ thống lưu trữ thứ cấp (ví dụ: đĩa cứng).

LBA là hệ thống đánh địa chỉ tuyến tính đơn giản, các khối dữ liệu được đánh chỉ mục bằng các số nguyên. Khối đầu tiên mang giá trị 0, khối tiếp theo mang giá trị 1, ...v.v.

Đĩa cứng theo chuẩn IDE sử dụng địa chỉ LBA 22-bit, chuẩn ATA-1 (1994) là 28-bit, chuẩn ATA-6 (2003) là 48-bit. Hầu hết các ổ đĩa cứng sản xuất sau năm 1996 sử dụng hệ thống địa chỉ LBA.

Với các đĩa cứng sử dụng zone bit recording, số sector trên mỗi track không bằng nhau mà phụ thuộc vào vị trí của track trên đĩa cứng, nên hệ thống đánh địa chỉ CHS không còn phù hợp.

Công thức đổi địa chỉ CHS sang LBA :

LBA = ((C x HPC) + H) x SPT + S – 1

Trong đó:

o C, H, S là giá trị của địa chỉ dạng CHS.

o HPC: số head tối đa/cylinder.

o SPT: số sector tối đa/track.

Page 8: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 8

Chú ý: C được đánh số từ 0, H đánh số từ 0 và S đánh số từ 1.

Ví dụ: giá trị của ba byte CHS là “FE FF FF”. Tính được H = 254, S = 63, C = 1023.

Đổi từ địa chỉ CHS sang địa chỉ dạng LBA.

Áp dụng công thức ở trên:

LBA = ((1023 x 255) + 254) x 63 + 63 - 1 = 16,450,559

Tính ra byte:

(16450559 + 1) x 512 = 8,422,686,720 byte = ~ 8,4 GB hay 7.8GiB. (do LBA đánh từ 0 nên

phải cộng thêm 1).

Định dạng kiểu “little endian” và “big endian”

Tất cả các hệ thống FAT ban đầu được thiết kế cho các máy tính dòng IBM PC. Đặc điểm quan trọng cần lưu ý là các máy tính này lưu dữ liệu trên đĩa theo kiểu “little endian”.

Có hai kiểu lưu trữ dữ liệu phổ biến trên hệ thống đĩa là “little endian” và “big endian”.

- Little endian: phần giá trị trên byte thấp (của biến, thanh ghi) được lưu vào vùng địa chỉ thấp (của đĩa cứng), giá trị trên byte cao được lưu vào vùng địa chỉ cao.

- Big endian: phần giá trị trên byte thấp được lưu vào vùng địa chỉ cao, giá trị trên byte cao được lưu vào vùng địa chỉ thấp.

- Hình minh họa :

Ví dụ: ta có một số hệ-16 chứa trong hai byte là AB45(16)

- AB(16) là giá trị của byte cao

- 45(16) là giá trị của byte thấp

Khi lưu trên đĩa theo kiểu little endian:

byte thứ 0 1 2 …

45 AB

Page 9: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 9

Khi lưu trên đĩa theo kiểu big endian:

byte thứ 0 1 2 …

AB 45

Vì vậy, khi đọc và ghi dữ liệu trên đĩa cứng cần lưu ý đặc điểm này, để thao tác cho phù hợp.

Ví dụ minh họa về MBR

Sử dụng phần mềm Partition Magic chia đĩa cứng thành ba partition:

o Một primary partition kích thước 4 GB, partition type là FAT32.

o Một primary partition kích thước 2 GB, partition type là NTFS.

o Một extended partition kích thước 2GB, trong extended partition tạo hai ổ đĩa logic (chia tiếp thành hai logical partition), mỗi ổ đĩa kích thước 1GB. Cả hai ổ đĩa đều chọn partition type là FAT32.

Kết quả như hình dưới đây:

Khởi động lại máy tính, sử dụng phần mềm Norton Disk Editor 2002 (trong đĩa Hiren’s Boot, phiên bản đang sử dụng là 10.1) đọc sector 0 của đĩa cứng. Có thể đọc thêm bài viết “Đọc đĩa cứng bằng phần mềm Disk Editor”.

Kết quả được thể hiện trong hình dưới đây:

Page 10: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 10

Dựa vào cấu trúc của MBR, định vị vùng partition table, vùng này bắt đầu tại địa chỉ 0x01BE.

Vùng 64 byte này (vùng tô màu) được chia thành bốn phần bằng nhau (bốn entry). Mỗi entry gồm 16 byte, mô tả thông tin về một partition:

- Entry 1: bắt đầu tại địa chỉ 0x01BE, kết thúc tại 0x01CD.

- Entry 2: bắt đầu tại địa chỉ 0x01CE, kết thúc tại 0x01DD.

- Entry 3: bắt đầu tại địa chỉ 0x01DE, kết thúc tại 0x01ED.

- Entry 4: bắt đầu tại địa chỉ 0x01EE, kết thúc tại 0x01FD.

Dấu hiệu kết thúc của MBR mang giá trị “55AA”.

Trong bốn entry trên, chỉ có ba entry đầu có dữ liệu, toàn bộ các byte của entry cuối mang giá trị 0x00. Có thể kết luận đĩa cứng trên gồm ba partition.

Giá trị các trường của mỗi entry:

Entry 1:

Offset Số byte Mô tả

Physical Sector: Absolute Sector 0

00000000: 33 C0 8E D0 BC 00 7C FB - 50 07 50 1F FC BE 1B 7C 3.....|.P.P...|

00000010: BF 1B 06 50 57 B9 E5 01 - F3 A4 CB BD BE 07 B1 04 ...PW...........

00000020: 38 6E 00 7C 09 75 13 83 - C5 10 E2 F4 CD 18 8B F5 8n.|.u..........

00000030: 83 C6 10 49 74 19 38 2C - 74 F6 A0 B5 07 B4 07 8B ...It.8,t.......

00000040: F0 AC 3C 00 74 FC BB 07 - 00 B4 0E CD 10 EB F2 88 ..<.t...........

00000050: 4E 10 E8 46 00 73 2A FE - 46 10 80 7E 04 0B 74 0B N..F.s*.F..~..t.

00000060: 80 7E 04 0C 74 05 A0 B6 - 07 75 D2 80 46 02 06 83 .~..t....u..F...

00000070: 46 08 06 83 56 0A 00 E8 - 21 00 73 05 A0 B6 07 EB F...V...!.s.....

00000080: BC 81 3E FE 7D 55 AA 74 - 0B 80 7E 10 00 74 C8 A0 ..>.}U.t..~..t..

00000090: B7 07 EB A9 8B FC 1E 57 - 8B F5 CB BF 05 00 8A 56 .......W.......V

000000A0: 00 B4 08 CD 13 72 23 8A - C1 24 3F 98 8A DE 8A FC .....r#..$?.....

000000B0: 43 F7 E3 8B D1 86 D6 B1 - 06 D2 EE 42 F7 E2 39 56 C..........B..9V

000000C0: 0A 77 23 72 05 39 46 08 - 73 1C B8 01 02 BB 00 7C .w#r.9F.s......|

000000D0: 8B 4E 02 8B 56 00 CD 13 - 73 51 4F 74 4E 32 E4 8A .N..V...sQOtN2..

000000E0: 56 00 CD 13 EB E4 8A 56 - 00 60 BB AA 55 B4 41 CD V......V.`..U.A.

000000F0: 13 72 36 81 FB 55 AA 75 - 30 F6 C1 01 74 2B 61 60 .r6..U.u0...t+a`

00000100: 6A 00 6A 00 FF 76 0A FF - 76 08 6A 00 68 00 7C 6A j.j..v..v.j.h.|j

00000110: 01 6A 10 B4 42 8B F4 CD - 13 61 61 73 0E 4F 74 0B .j..B....aas.Ot.

00000120: 32 E4 8A 56 00 CD 13 EB - D6 61 F9 C3 49 6E 76 61 2..V.....a..Inva

00000130: 6C 69 64 20 70 61 72 74 - 69 74 69 6F 6E 20 74 61 lid partition ta

00000140: 62 6C 65 00 45 72 72 6F - 72 20 6C 6F 61 64 69 6E ble.Error loadin

00000150: 67 20 6F 70 65 72 61 74 - 69 6E 67 20 73 79 73 74 g operating syst

00000160: 65 6D 00 4D 69 73 73 69 - 6E 67 20 6F 70 65 72 61 em.Missing opera

00000170: 74 69 6E 67 20 73 79 73 - 74 65 6D 00 00 00 00 00 ting system.....

00000180: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

00000190: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

000001A0: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

000001B0: 00 00 00 00 00 2C 44 63 - B9 8F B9 8F 00 00 80 01 .....,Dc........

000001C0: 01 00 0B FE 7F FD 3F 00 - 00 00 3F 04 7D 00 00 00 ....�.?...?.}...

000001D0: 41 FE 17 FE BF FC 7E 04 - 7D 00 3F 82 3E 00 00 00 A.....~.}.?.>...

000001E0: 81 FD 0F FE FF FF BD 86 - BB 00 57 64 44 00 00 00 ..........WdD...

000001F0: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 55 AA ..............U.

Page 11: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 11

0x00 1 “80” – có khả năng khởi động (đã được set active) 0x01 3 “01 01 00” (ba byte địa chỉ bắt đầu dạng CHS) 0x01 1 1 (head) 0x02 1 1 (sector) 0x03 1 0 (cylinder) 0x04 1 “0B”: FAT32 0x05 3 “FE 7F FD” (ba byte địa chỉ kết thúc dạng CHS) 0x05 1 254 (head) 0x06 1 63 (sector) 0x07 1 509 (cylinder) 0x08 4 “3F 00 00 00” (địa chỉ dạng LBA, sector bắt đầu là: 63) 0x0C 4 “3F 04 7D 00” (tổng số sector: 8193087; ~4GB)

Entry 2:

Offset Số byte Mô tả 0x00 1 “00” – không có khả năng khởi động 0x01 3 “00 41 FE” (ba byte địa chỉ bắt đầu dạng CHS) 0x01 1 0 (head) 0x02 1 1 (sector) 0x03 1 510 (cylinder) 0x04 1 “17”: Hidden, primary partition, NTFS 0x05 3 “FE BF FC” (ba byte địa chỉ kết thúc dạng CHS) 0x05 1 254 (head) 0x06 1 63 (sector) 0x07 1 764 (cylinder) 0x08 4 “7E 04 7D 00” (địa chỉ LBA, sector bắt đầu là: 8193150) 0x0C 4 “3F 82 3E 00” (tổng số sector: 4096575; ~2GB)

Entry 3:

Offset Số byte Mô tả 0x00 1 “00” – không có khả năng khởi động 0x01 3 “00 81 FD” (ba byte địa chỉ bắt đầu dạng CHS) 0x01 1 0 (head) 0x02 1 1 (sector) 0x03 1 765 (cylinder) 0x04 1 “0F”: extended partition 0x05 3 “FE FF FF” (ba byte địa chỉ kết thúc dạng CHS) 0x05 1 254(head) 0x06 1 63(sector) 0x07 1 1023(cylinder) 0x08 4 “BD 86 BB 00” (địa chỉ LBA, sector bắt đầu là:

12289725)

Page 12: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 12

0x0C 4 “57 64 44 00” (tổng số sector: 4482135; ~2GB)

EBR (Extended Boot Record)

Như đã đề cập ở phần trước, có hai loại partition là: primary partition và extended partition.

Khi extended partition được tạo, hệ thống sẽ dành một entry trong partition table của MBR để mô tả thông tin cho extended partition. Đây được xem như chỉ dẫn để đến được EBR đầu tiên (EBR1).

Mỗi đĩa cứng chỉ có duy nhất một extended partition. Từ extended partition này có thể tiếp tục chia nhỏ thành nhiều logical partition.

EBR là sector chứa thông tin mô tả cho logical partition (ổ đĩa logic) nằm trong extended partition. Như vậy, trong một đĩa cứng có thể không có EBR nào, có một EBR, hoặc có rất nhiều EBR.

Trong các hệ thống DOS/Windows, mỗi logical partition được gán bằng một kí tự trong bảng chữ cái (D:\, E:\ ...v.v).

Khi tạo primary partition, thông tin mô tả về primary partition được lưu trong partition table tại MBR, do chỉ có bốn entry nên số lượng primary partition tạo được nhiều nhất là bốn. Với logical partition thì khác, EBR là sector đầu tiên trong mỗi logical partition, mô tả thông tin về logical partition đó, và nếu có logical partition đằng sau nữa, EBR sẽ chứa một con trỏ (địa chỉ) để trỏ tới EBR kết tiếp. Như vậy, EBR trước sẽ liên kết với EBR sau tạo thành một chuỗi các EBR. Nghĩa là việc tạo các logical partition là không giới hạn, nó chỉ phụ thuộc vào dung lượng của đĩa cứng cấp cho extended partition.

Hình sau minh họa về các EBR :

Cấu trúc của EBR

EBR đầu tiên (EBR1) nằm tại sector bắt đầu của extended partition (logical partition đầu tiên).

Cấu trúc của EBR cũng tương tự như MBR, gồm 512 byte, được mô tả trong bảng dưới đây:

Địa chỉ (offset)

Hệ 16 Hệ 8 Hệ 10 Mô tả Số byte

C:\ D:\ E:\

MBR EBR1 EBR2

Page 13: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 13

0000 0000 0 Không sử dụng 446

01BE 0676 446 Bảng thông tin về các logical partition (partition table)

64

01FE 0776 510 55h

01FF 0777 511 AAh

Dấu hiệu nhận dạng

Boot sector (0xAA55)

2

Tổng kích thước: 512

Partition table của EBR gồm 64 byte, gồm bốn entry, mỗi entry 16 byte. Cụ thể như sau:

Địa chỉ

(offset)

Kích thước

(byte)

Mô tả

01BE 16 Thông tin mô tả cho logical partition hiện tại

01CE 16 Nếu có giá trị, là liên kết tới logical partition kế tiếp

01DE 16 Không sử dụng

01EE 16 Không sử dụng

Ví dụ về EBR

Quan sát một phần MBR của đĩa cứng sau:

Entry thứ ba của partition table, bắt đầu tại địa chỉ 0x01DE, kết thúc tại 0x01ED, có trường “partition type” mang giá trị 0x0F, nên đây là entry chứa thông tin về extended partition.

Các trường của entry thứ ba:

Offset Số byte Mô tả 0x00 1 “00” – không có khả năng khởi động 0x01 3 “00 81 FD” (ba byte địa chỉ bắt đầu dạng CHS) 0x01 1 0 (head)

00000180: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

00000190: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

000001A0: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

000001B0: 00 00 00 00 00 2C 44 63 - B9 8F B9 8F 00 00 80 01 .....,Dc........

000001C0: 01 00 0B FE 7F FD 3F 00 - 00 00 3F 04 7D 00 00 00 ....�.?...?.}...

000001D0: 41 FE 17 FE BF FC 7E 04 - 7D 00 3F 82 3E 00 00 00 A.....~.}.?.>...

000001E0: 81 FD 0F FE FF FF BD 86 - BB 00 57 64 44 00 00 00 ..........WdD...

000001F0: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 55 AA ..............U.

Page 14: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 14

0x02 1 1 (sector) 0x03 1 765 (cylinder) 0x04 1 0x0F: extended partition 0x05 3 “FE FE FF” (ba byte địa chỉ kết thúc dạng CHS) 0x05 1 254(head) 0x06 1 63(sector) 0x07 1 1023(cylinder) 0x08 4 “BD 86 BB 00” (sector bắt đầu là: 12289725) 0x0C 4 “57 64 44 00” (tổng số sector: 4482135; ~2,3GB)

Từ thông tin mô tả của extended partition ở trên, có hai thông tin quan trọng: sector bắt đầu của extended partition là 12289725 và kích thước là ~2,3GB.

Nội dung của EBR đầu tiên (EBR1) nằm tại sector 12289725.

Sector 12289725 được minh họa trong hình sau:

EBR1 gồm 512 byte, trong đó chỉ có trường partition table là có dữ liệu. Trường partition table bắt đầu tại địa chỉ 0x01BE, gồm 64 byte. Cụ thể:

Địa chỉ (offset)

Kích thước (byte)

Mô tả

01BE 16 Thông tin mô tả về logical partition đầu tiên (ổ đĩa D:\)

01CE 16 Liên kết tới phần mô tả thông tin cho logical partition kế tiếp (EBR2)

01DE 16 Không sử dụng

01EE 16 Không sử dụng

Entry đầu tiên của partition table, bắt đầu tại 0x01BE, kết thúc tại 0x01CD là thông tin mô tả cho logical partition đầu tiên (ổ đĩa logic đầu tiên của Extended partition), cụ thể:

Physical Sector: Absolute Sector 12,289,725

00000000: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

00000010: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

.....

.....

.....

000001B0: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 01 ................

000001C0: 81 FD 0B FE FF 7C 3F 00 - 00 00 41 60 1F 00 00 00 .....|?...A`...

000001D0: C1 7D 05 FE FF FF 80 60 - 1F 00 D7 03 25 00 00 00 .}.....`...%...

000001E0: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

000001F0: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 55 AA ..............U.

Page 15: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 15

Offset Số byte Mô tả 0x00 1 “00” – không có khả năng khởi động 0x01 3 “01 81 FD” (ba byte địa chỉ bắt đầu dạng CHS) 0x01 1 1 (head) 0x02 1 1 (sector) 0x03 1 765 (cylinder) 0x04 1 0x0B: FAT32 0x05 3 “FE FF 7C” (ba byte địa chỉ kết thúc dạng CHS) 0x05 1 254(head) 0x06 1 63(sector) 0x07 1 892(cylinder) 0x08 4 “3F 00 00 00” (sector bắt đầu là: 63) 0x0C 4 “41 60 1F 00” (tổng số sector: 2056257; ~1GB)

Lưu ý: sector bắt đầu của ổ đĩa logic (dạng LBA) là số sector tương đối, nghĩa là, tính từ nơi bắt đầu của extended partition.

Entry thứ hai của partition table, bắt đầu tại 0x01CE, kết thúc tại 0x01DD là thông tin liên kết đến EBR2. Cụ thể:

Offset Số byte Mô tả 0x00 1 “00” – không có khả năng khởi động 0x01 3 “00 C1 7D” (3 byte địa chỉ bắt đầu dạng CHS) 0x01 1 0 (head) 0x02 1 1 (sector) 0x03 1 893 (cylinder) 0x04 1 “05” – extended partition 0x05 3 “FE FF FF” (3 byte địa chỉ kết thúc dạng CHS) 0x05 1 254(head) 0x06 1 63(sector) 0x07 1 1023(cylinder) 0x08 4 “80 60 1F 00” (địa chỉ LBA, sector bắt đầu là: 2056320) 0x0C 4 “D7 03 25 00” (tổng số sector: 2425815; ~1,2GB)

Từ thông tin về EBR2, biết được EBR2 bắt đầu tại sector: 2056320. Đây cũng chính là sector chứa nội dung của EBR2.

Vì sector bắt đầu của EBR2 là vị trí tương đối, nên để tới được sector vật lý của EBR2, cần phải cộng thêm sector bắt đầu của Extended partition: 2.056.320 + 12.289.725 = 14.346.045.

Đọc sector 14.346.045, được kết quả như hình dưới đây:

Page 16: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 16

Vì trong extended partition chỉ tạo hai logical partition (hai ổ đĩa logic), nên chỉ có 2 EBR, EBR2 không còn liên kết tới EBR nào nữa.

Dưới đây là nội dung partition table của EBR2:

Địa chỉ dạng Hex (offset) Kích thước (byte) Mô tả

01BE 16 Thông tin mô tả cho logical partition thứ hai (ổ đĩa E:\)

01CE 16 Không sử dụng

01DE 16 Không sử dụng

01EE 16 Không sử dụng

Thông tin mô tả cho logical partition thứ hai của extended partition (ổ đĩa E:\):

Offset Số byte Mô tả 0x00 1 “00” – không có khả năng khởi động 0x01 3 “01 C1 7D” (3 byte địa chỉ bắt đầu dạng CHS) 0x01 1 1 (head) 0x02 1 1 (sector) 0x03 1 893 (cylinder) 0x04 1 “0B”: FAT32 0x05 3 “FE FF FF” (3 byte địa chỉ kết thúc dạng CHS) 0x05 1 254(head) 0x06 1 63(sector) 0x07 1 1023(cylinder) 0x08 4 “3F 00 00 00” (địa chỉ LBA, sector bắt đầu là: 63) 0x0C 4 “98 03 25 00” (tổng số sector: 2425752; ~1,2GB)

---------------------------------

Physical Sector: Absolute Sector 14,346,045

00000000: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

00000010: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

00000020: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

...

...

...

000001B0: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 01 ................

000001C0: C1 7D 0B FE FF FF 3F 00 - 00 00 98 03 25 00 00 00 .}....?.....%...

000001D0: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

000001E0: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

000001F0: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 55 AA ..............U.

Page 17: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 17

Hệ thống FAT32

Như đã trình bày ở phần trước, đĩa cứng luôn bắt đầu bằng MBR, tiếp sau đó là các partition.

MBR Partition Partition …. Partition

Có hai loại partition là primary partition và extended partition. Extended partition có thể được chia tiếp thành các logical partition. Như vậy, ổ đĩa (C:\, D:\, E:\...v.v) có thể là primary partition hoặc logical partition. Xem hình vẽ minh họa bên dưới.

Mỗi một ổ đĩa logic sẽ sử dụng một hệ thống quản lý tập tin (file system) duy nhất để quản lý các tập tin. Ví dụ ổ đĩa C:\ là FAT32, D:\ là NTFS, E:\ là NTFS.

Phần này tập trung trình bày về hệ thống FAT (cụ thể là FAT32).

FAT (File Allocation Table) là hệ thống quản lý tập tin được phát triển bởi Microsoft vào cuối những năm 1970 – đầu những năm 1980. Hệ điều hành MS-DOS của Microsoft là hệ điều hành đầu tiên sử dụng hệ thống FAT.

Theo thời gian, hệ thống quản lý tập tin này luôn được nâng cấp để hỗ trợ nhiều loại đĩa có dung lượng lớn hơn. Ví dụ: đĩa cứng, đĩa USB, thẻ nhớ…v.v.

Tất cả các hệ điều hành Windows và hầu hết các hệ điều hành Unix đều hỗ trợ hệ thống FAT.

Hệ thống FAT có ba loại: FAT12, FAT16 và FAT32. Sự khác biệt chủ yếu của ba loại này là kích thước của mỗi entry. (entry là một đơn vị lưu trữ, được sử dụng để lưu địa chỉ của các cluster). Mỗi entry trong hệ thống FAT12 là 12 bit, FAT16 là 16 bit và FAT32 là 32 bit.

Cấu trúc của một ổ đĩa logic định dạng theo hệ thống FAT gồm ba vùng:

C:\ D:\ E:\

primary partition logical partition logical partition

extended partition

Page 18: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 18

- Vùng đầu tiên là Reserved, chứa các thông tin mô tả của hệ thống quản lý tập tin. Kích

thước của vùng này được lưu trong Boot Sector của ổ đĩa logic (trong VBR). Với FAT12, FAT16 vùng này thường là một sector, với FAT32 gồm nhiều sector.

- Vùng FAT: chứa hai FAT Structure, vùng này bắt đầu ngay sau vùng Reserved, gồm: một FAT Structure chính, một FAT Structure dự phòng. Kích thước của vùng FAT được tính dựa vào số lượng FAT Structure nhân với kích thước của mỗi FAT Structure, hai thông tin này được lưu trong Boot Sector.

- Vùng Data chứa các cluster lưu trữ nội dung của tập tin. Vùng này bắt đầu ngay sau vùng FAT. Kích thước được tính bằng tổng sector của ổ đĩa logic trừ đi sector bắt đầu của vùng Data. Tổng số sector của ổ đĩa được lưu trong Boot Sector.

Trong vùng Data, có một cấu trúc dữ liệu quan trọng là Root Directory. Root Directory là siêu dữ liệu của tập tin (file metadata).

Trong hệ thống FAT, mỗi thư mục hoặc tập tin (gọi chung là tập tin) sẽ có một cấu trúc dữ liệu để mô tả nó, gọi là Directory Entry. Directory Entry chứa tên tập tin, kích thước, địa chỉ bắt đầu của vùng nội dung và một số thông tin khác.

Đối với FAT12/FAT16, Root Directory luôn nằm ở phần đầu tiên của vùng Data, có kích thước cố định, kích thước này được lưu trong Boot Sector. Xem hình minh họa dưới đây.

Reserved FAT Data

Root Directory

Hệ thống FAT12/FAT16

Reserved FAT Data

Các vùng của một ổ đĩa logic định dạng theo hệ thống FAT

Page 19: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 19

Với FAT32, vị trí bắt đầu của Root Directory không cố định, nó có thể nằm ở vị trí bất kì trong vùng Data, kích thước của Root Directory cũng không cố định, nó có thể tăng lên tùy ý. Địa chỉ bắt đầu của Root Directory được lưu trong Boot Sector, kích thước của Root Directory được tính dựa vào FAT Structure. Xem hình minh họa dưới đây.

-----------------------------------

Vùng dành riêng (Reserved)

Đây là vùng đầu tiên trong ổ đĩa logic, vùng này có chứa Boot Sector của ổ đĩa logic.

Vùng này chứa các thông tin mô tả chung nhất về hệ thống quản lý tập tin, mã khởi động. Dựa vào vùng này sẽ tìm được các thông tin quan trọng về vị trí bắt đầu của các vùng khác trên ổ đĩa logic.

Kích thước của vùng Reserved:

- Với FAT12/FAT16: một sector.

- Với FAT32: nhiều hơn một sector

Các thành phần trong vùng Reserved được minh họa trong hình dưới đây.

Boot Sector

Boot Sector

Reserved

Các thành phần trong vùng Reserved FAT32

FSINFO Boot Sector dự phòng

Sector 0 Sector 1 Sector 6

Reserved FAT Data

Root Directory

Hệ thống FAT32

Page 20: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 20

Boot Sector là sector đầu tiên trong vùng Reserved.

Boot Sector chứa các thông tin mô tả về tổ chức của hệ thống quản lý tập tin.

Ví dụ, để định vị được Boot Sector của ổ đĩa logic đầu tiên (primary partition đầu tiên), dựa vào thông tin của entry số 1, trong Partition Table, trong MBR, xác định được vị trí bắt đầu của Boot Sector là sector vật lý 63.

Nội dung của Boot Sector được thể hiện ở hình bên dưới.

Phiên bản Boot Sector của FAT12/FAT16 khác so với phiên bản Boot Sector của FAT32, tuy nhiên, 36 byte đầu tiên của Boot Sector trên cả hai hệ thống đều giống nhau.

Nội dung của 36 byte đầu tiên được minh họa ở hình bên dưới.

Physical Sector: Absolute Sector 63

00000000: EB 58 90 4D 53 57 49 4E - 34 2E 31 00 02 04 26 00 .X.MSWIN4.1...&.

00000010: 02 00 00 00 00 F8 00 00 - 3F 00 FF 00 3F 00 00 00 ........?...?...

00000020: 3F 04 7D 00 45 3E 00 00 - 00 00 00 00 02 00 00 00 ?.}.E>..........

00000030: 01 00 06 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

00000040: 80 01 29 59 2D 2F 51 20 - 20 20 20 20 20 20 20 20 ..)Y-/Q

00000050: 20 20 46 41 54 33 32 20 - 20 20 33 C9 8E D1 BC F4 FAT32 3.....

00000060: 7B 8E C1 8E D9 BD 00 7C - 88 4E 02 8A 56 40 B4 08 {......|.N..V@..

00000070: CD 13 73 05 B9 FF FF 8A - F1 66 0F B6 C6 40 66 0F ..s......f...@f.

00000080: B6 D1 80 E2 3F F7 E2 86 - CD C0 ED 06 41 66 0F B7 ....?.......Af..

00000090: C9 66 F7 E1 66 89 46 F8 - 83 7E 16 00 75 38 83 7E .f..f.F..~..u8.~

000000A0: 2A 00 77 32 66 8B 46 1C - 66 83 C0 0C BB 00 80 B9 *.w2f.F.f.......

000000B0: 01 00 E8 2B 00 E9 48 03 - A0 FA 7D B4 7D 8B F0 AC ...+..H...}.}...

000000C0: 84 C0 74 17 3C FF 74 09 - B4 0E BB 07 00 CD 10 EB ..t.<.t.........

000000D0: EE A0 FB 7D EB E5 A0 F9 - 7D EB E0 98 CD 16 CD 19 ...}....}.......

000000E0: 66 60 66 3B 46 F8 0F 82 - 4A 00 66 6A 00 66 50 06 f`f;F...J.fj.fP.

000000F0: 53 66 68 10 00 01 00 80 - 7E 02 00 0F 85 20 00 B4 Sfh.....~.... ..

00000100: 41 BB AA 55 8A 56 40 CD - 13 0F 82 1C 00 81 FB 55 [email protected]

00000110: AA 0F 85 14 00 F6 C1 01 - 0F 84 0D 00 FE 46 02 B4 .............F..

00000120: 42 8A 56 40 8B F4 CD 13 - B0 F9 66 58 66 58 66 58 [email protected]

00000130: 66 58 EB 2A 66 33 D2 66 - 0F B7 4E 18 66 F7 F1 FE fX.*f3.f..N.f...

00000140: C2 8A CA 66 8B D0 66 C1 - EA 10 F7 76 1A 86 D6 8A ...f..f....v....

00000150: 56 40 8A E8 C0 E4 06 0A - CC B8 01 02 CD 13 66 61 [email protected]

00000160: 0F 82 54 FF 81 C3 00 02 - 66 40 49 0F 85 71 FF C3 [email protected]..

00000170: 4E 54 4C 44 52 20 20 20 - 20 20 20 00 00 00 00 00 NTLDR .....

00000180: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

00000190: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

000001A0: 00 00 00 00 00 00 00 00 - 00 00 00 00 0D 0A 4E 54 ..............NT

000001B0: 4C 44 52 20 69 73 20 6D - 69 73 73 69 6E 67 FF 0D LDR is missing..

000001C0: 0A 44 69 73 6B 20 65 72 - 72 6F 72 FF 0D 0A 50 72 .Disk error...Pr

000001D0: 65 73 73 20 61 6E 79 20 - 6B 65 79 20 74 6F 20 72 ess any key to r

000001E0: 65 73 74 61 72 74 0D 0A - 00 00 00 00 00 00 00 00 estart..........

000001F0: 00 00 00 00 00 00 00 00 - 00 AC BF CC 00 00 55 AA ..............U.

Nội dung của Boot Sector

Page 21: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 21

Cụ thể các trường được minh họa ở bảng dưới đây.

Các trường của 36 byte đầu tiên

Byte thứ

(hệ 10)

Giá trị

ví dụ

Mô tả

0 – 2 “EB 58 90” Lệnh nhảy tới vùng mã khởi động (boot code).

3 – 10 “4D 53 57 49 4E 34 2E 31”

Nội dung của OEM.

(MSWIN4.1)

11 – 12 “00 02”

=> 512

Kích thước một sector, tính bằng byte. Chấp nhận các giá trị: 512, 1024, 2048, 4096.

13 – 13 “04”

=> 4

Số sector/cluster. Cho phép các giá trị là lũy thừa của 2, tuy nhiên kích thước của cluster không vượt quá 32KB.

14 – 15 “26 00”

=> 38

Số sector của vùng Reversed.

16 – 16 “02”

=> 2

Số FAT Structure, thường có hai FAT Structure. Một FAT Structrure chính và một FAT Structure dự phòng.

17 – 18 “00 00” Số entry tối đa trong vùng Root Directory. Hoặc số tập tin tối đa được tạo trong thư mục gốc của ổ đĩa logic.

Với FAT32, trường này luôn mang giá trị 0.

19 - 20 “00 00” Tổng số sector của ổ đĩa logic. Nếu số sector của ổ đĩa vượt quá khả năng biểu diễn của 16 bit thì trường này sẽ mang giá trị 0, khi đó tổng số sector của ổ đĩa sẽ được lưu ở một

Physical Sector: Absolute Sector 63

00000000: EB 58 90 4D 53 57 49 4E - 34 2E 31 00 02 04 26 00 .X.MSWIN4.1...&.

00000010: 02 00 00 00 00 F8 00 00 - 3F 00 FF 00 3F 00 00 00 ........?...?... 00000020: 3F 04 7D 00 45 3E 00 00 - 00 00 00 00 02 00 00 00 ?.}.E>..........

Nội dung của 36 byte đầu tiên

Page 22: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 22

trường gồm bốn byte bắt đầu tại byte 32.

21 – 21 “F8” Mã mô tả loại đĩa

22 – 23 “00 00” Số sector cho mỗi FAT Structure. Với FAT32, trường này mang giá trị 0.

24 – 25 “3F 00”

=> 63

Số sector/track

26 – 27 “FF 00”

=> 255

Số mặt đĩa (đầu đọc)

28 – 31 “3F 00 00 00” Số sector trước partition. Nếu là primary partition đầu tiên, hoặc ổ đĩa logic đầu tiên trong extended partition, giá trị này sẽ là 63. Tuy nhiên, nếu là primary partition thứ hai, ba, bốn hoặc các ổ đĩa logic từ thứ hai trở đi trong extended partition, giá trị này sẽ là tổng số sector của các vùng trước nó tính từ đầu đĩa cứng vật lý (nếu là primary partition) hoặc tính từ nơi bắt đầu của extended partition (nếu là ổ đĩa logic trong vùng extended partition).

32 – 35 “3F 04 7D 00”

=> 8193087

Tổng số sector của ổ đĩa logic.

Nội dung của các byte kế tiếp trong Boot Sector FAT32.

Byte thứ

(hệ 10)

Giá trị

Ví dụ

Mô tả

36 – 39 “45 3E 00 00”

=> 15941

Số sector của một FAT Structure

40 - 41 “00 00” Cho biết trạng thái hoạt động của các FAT Structure.

- Bit 0-3: chỉ mục của các FAT Structure, cho biết FAT Structure nào được cập nhật dữ liệu, khi đó, vị trí của bit tương ứng có giá trị giá trị 0, ngược lại, mang giá trị 1.

Page 23: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 23

- Bit 4-6: không sử dụng.

- Bit 7: mang giá trị 0, nếu tất cả các FAT Structure đều được cập nhật. Mang giá trị 1 nếu chỉ có một FAT Structure được cập nhật, tham khảo bit 0 -3.

- Bit 8-15: không sử dụng.

42 – 43 “00 00” Số phiên bản major và minor.

44 – 47 “02 00 00 00”

=> 2

Cluster bắt đầu của Root Directory

48 – 49 “01 00”

=> 1

Vị trí sector bắt đầu của FSINFO

(kí hiệu:SecFSINFO)

50 – 51 “06 00” Vị trí của Boot Sector dự phòng

52 – 63 “00….00” Chưa sử dụng

64 – 64 “80”

=> 128

Định danh của ổ đĩa cứng vật lý.

65 – 65 “01” Không sử dụng

66 – 66 “29” Dấu chỉ, cho biết ba byte kế tiếp có được sử dụng hay không? Giá trị “29” có nghĩa là có sử dụng.

67 – 70 “59 2D 2F 51” Định danh của ổ đĩa logic, hệ điều hành sinh ra chuỗi số này dựa vào ngày/giờ ổ đĩa được định dạng.

71 – 81 “20...20” Tên ổ đĩa do người dùng đặt dạng ASCII.

82 – 89 “46 41 54 33 32 20 20 20”

=> FAT32

Tên của hệ thống quản lý tập tin. (chỉ để hiển thị, không thể dựa vào trường này để kết luận là ổ đĩa đã được định dạng theo kiểu hệ thống quản lý tập tin nào?).

90 – 509 Mã khởi động, thông báo lỗi.

510 – 511 “AA 55” Dấu chỉ kết thúc.

---------------------------------

Page 24: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 24

FSINFO

Ổ đĩa định dạng theo FAT32 thường có dung lượng lớn, để tăng tốc độ xử lý của hệ thống, thông tin về các cluster còn trống hay không gian đĩa còn trống sẽ được lưu trữ tại FSINFO.

Vị trí của FSINFO được lưu trong trường SecFSINFO (byte thứ 48 – 49), tại Boot Sector của ổ đĩa logic.

Trên các hệ thống Windows giá trị này luôn là 1, vậy FSINFO nằm trên sector vật lý: 63 + 1 = 64.

Nội dung của FSINFO được thể hiện trong hình dưới đây.

Cấu trúc của FSINFO được mô tả trong bảng sau:

Byte thứ Mô tả Giá trị ví dụ

0 – 3 Dấu hiệu nhận biết nơi bắt đầu của FSINFO.

“52 52 61 41”

4 – 483 Vùng dự trữ, chưa sử dụng.

484 - 487 Dấu hiệu nhận biết, nơi bắt đầu của các trường có dữ liệu.

“72 72 41 61”

488 - 491 Cho biết tổng số các cluster còn trống trên ổ đĩa.

- Nếu giá trị là 0xFFFFFFFF: không biết được số các cluster còn trống, hệ thống phải thực hiện việc tính toán.

- Nếu nó mang giá trị khác: số cluster còn trống.

“D0 45 13 00”

=> 1263056 cluster

492 - 495 Cluster kế tiếp còn trống.

Giúp hệ điều hành biết nơi bắt đầu

“98 50 00 00”

=> cluster 20632

Physical Sector: Absolute Sector 64

00000000: 52 52 61 41 00 00 00 00 - 00 00 00 00 00 00 00 00 RRaA............

00000010: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

……

……

000001D0: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

000001E0: 00 00 00 00 72 72 41 61 - D0 45 13 00 98 50 00 00 ....rrAa.E...P..

000001F0: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 55 AA ..............U.

Nội dung của FSINFO

Page 25: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 25

để tìm kiếm các cluster còn trống trên vùng FAT.

Trường này giúp tiết kiệm thời gian cho hệ thống, thay vì phải tìm số hiệu cluster còn trống từ đầu của vùng FAT, từ cluster số 2.

Giá trị này thường là số hiệu của cluster vừa mới được hệ thống cấp phát gần đây nhất.

Nếu giá trị này là 0xFFFFFFFF, có nghĩa là không có giá trị gợi ý và hệ thống phải tìm kiếm từ đầu vùng FAT.

496 – 507 Vùng dự trữ, chưa sử dụng.

508- 511 Dấu hiệu nhận biết vị trí kết thúc của FSINFO.

“00 00 55 AA”

Boot Sector dự phòng

Do tính chất quan trọng của Boot Sector trên mỗi ổ đĩa logic, nên hệ thống FAT32 sử dụng sector 6 làm sector dự phòng cho Boot Sector.

Trong trường hợp Boot Sector bị ghi đè làm mất dữ liệu, các chương trình tiện ích sẽ khôi phục lại dựa vào thông tin tại Boot Sector dự phòng.

Nếu Boot Sector bị hỏng, thông tin tại Boot Sector dự phòng sẽ được sử dụng để giúp người dùng truy cập và lấy lại dữ liệu trước khi thay đĩa khác.

Đối với hệ thống FAT32 vùng được gọi là “Boot Sector” thực tế gồm ba sector đầu tiên, và cả ba sector này đều được lưu dự phòng.

Sector vật lý của Boot Sector dự phòng: 63 + 6 = 69.

Nội dung của Boot Sector dự phòng được minh họa trong hình dưới đây.

Page 26: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 26

-----------------------

Vùng FAT

Vùng dữ liệu quan trọng kế tiếp của một ổ đĩa logic FAT32 là vùng FAT (File Allocation Table).

Vùng FAT có hai nhiệm vụ quan trọng:

- Cho biết trạng thái cấp phát các cluster trong vùng Data.

- Xác định các cluster thuộc về một tập tin. Nếu biết được cluster bắt đầu của một tập tin, dựa vào vùng FAT sẽ biết được các cluster còn lại của tập tin này.

Reserved FAT Data

Root Directory

Hệ thống FAT32

Physical Sector: Absolute Sector 69

00000000: EB 58 90 4D 53 57 49 4E - 34 2E 31 00 02 04 26 00 .X.MSWIN4.1...&.

00000010: 02 00 00 00 00 F8 00 00 - 3F 00 FF 00 3F 00 00 00 ........?...?...

00000020: 3F 04 7D 00 45 3E 00 00 - 00 00 00 00 02 00 00 00 ?.}.E>..........

00000030: 01 00 06 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

00000040: 80 00 29 59 2D 2F 51 00 - 00 00 00 00 00 00 00 00 ..)Y-/Q.........

00000050: 00 00 46 41 54 33 32 20 - 20 20 FA 33 C9 8E D1 BC ..FAT32 .3....

……

……

00000150: 18 91 F7 76 18 42 87 CA - F7 76 1A 8A F2 8A E8 C0 ...v.B...v......

00000160: CC 02 0A CC B8 01 02 8A - 56 40 CD 13 61 8D 64 10 [email protected].

00000170: 5E 72 0A 40 75 01 42 03 - 5E 0B 49 75 B4 C3 03 18 ^[email protected].^.Iu....

00000180: 01 27 0D 0A 49 6E 76 61 - 6C 69 64 20 73 79 73 74 .'..Invalid syst

00000190: 65 6D 20 64 69 73 6B FF - 0D 0A 44 69 73 6B 20 49 em disk...Disk I

000001A0: 2F 4F 20 65 72 72 6F 72 - FF 0D 0A 52 65 70 6C 61 /O error...Repla

000001B0: 63 65 20 74 68 65 20 64 - 69 73 6B 2C 20 61 6E 64 ce the disk, and

000001C0: 20 74 68 65 6E 20 70 72 - 65 73 73 20 61 6E 79 20 then press any

000001D0: 6B 65 79 0D 0A 00 00 00 - 49 4F 20 20 20 20 20 20 key.....IO

000001E0: 53 59 53 4D 53 44 4F 53 - 20 20 20 53 59 53 7E 01 SYSMSDOS SYS~. 000001F0: 00 57 49 4E 42 4F 4F 54 - 20 53 59 53 00 00 55 AA .WINBOOT SYS..U.

Nội dung của Boot Sector dự phòng

Page 27: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 27

Vùng FAT thực tế là hình ảnh của vùng Data thu nhỏ. Mỗi cluster trong vùng Data tương đương với một entry trong vùng FAT.

Vùng FAT bắt đầu ngay sau vùng Reserved. Thường gồm hai FAT Structure: FAT Structure chính và FAT Structure dự phòng. FAT Structure dự phòng – nếu có – sẽ bắt đầu ngay sau FAT Structure chính.

Số FAT Structure, kích thước của mỗi FAT Structure được chỉ định trong Boot Sector của ổ đĩa logic, tuy nhiên, thực tế có thể không sử dụng hết kích thước này.

FAT Structure được chia thành các entry, kích thước của mỗi entry tùy thuộc vào hệ thống FAT, ví dụ: FAT32 là bốn byte, FAT16 là hai byte,…v.v.

Các entry được đánh chỉ mục từ 0. Hai entry đầu tiên (FAT[0], FAT[1]) không sử dụng để chứa số hiệu cluster, FAT[[0] chứa mã loại đĩa (media type), FAT[1] chứa mã cho biết trạng thái sử dụng đĩa (ví dụ: cho biết máy đã bị tắt không đúng cách).

Một số giá trị của entry:

- 0: Nếu cluster chưa được cấp phát.

- Khác 0: Nếu cluster đã được cấp phát, giá trị này chính là vị trí của cluster kế tiếp thuộc về tập tin.

- Lớn hơn 0x0FFF FFF8: Nếu là cluster kết thúc của tập tin, đây là dấu hiệu kết thúc tập tin (EOF: End – Of – File).

- 0x0FFF FFF7: cluster tương ứng bị hư hoặc không thể cấp phát cho tập tin.

Khi biết được số hiệu cluster bắt đầu của một tập tin, tìm tới entry tương ứng trong FAT Structure, liên kết tới các entry kế tiếp cho tới khi gặp dấu hiệu kết thúc EOF. Tập hợp các entry này là các cluster chứa dữ liệu của tập tin trong vùng Data.

Ví dụ: TapTin1.txt nằm trên các cluster 3, 5, 8, 4 và TapTin2.doc nằm trên các cluster 6, 7, 9 được minh họa trong hình sau:

Page 28: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 28

Từ Boot Sector xác định được:

- Số sector của vùng Reserved: giá trị này chứa trong byte thứ 14 và 15 của Boot Sector.

- Vùng FAT bắt đầu tại: Số sector của vùng Reserved + 1.

- Số FAT Structure: giá trị này chứa trong byte thứ 16 của Boot Sector.

- Kích thước (tính bằng sector) của mỗi FAT Structure: giá trị này chứa trong byte thứ 36-39 của Boot Sector.

- Kích thước của vùng FAT (tính bằng sector) = Số FAT Structure * Kích thước của mỗi FAT Structure. Hình minh họa bên dưới.

0

1

2

5 3

EOF 4

8 5

7 6

9 7

4 8

EOF 9

10

11

TapTin1.txt 3

TapTin2.doc 6

4 byte

Không sử dụng để lưu số hiệu

cluster

Ví dụ về các entry thuộc về một tập tin

Page 29: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 29

Ví dụ, biết được vùng Reserved bắt đầu tại sector 63, từ bảng phân tích các trường của Boot Sector, biết được vùng Reserved có kích thước 38 sector, vậy vùng FAT sẽ bắt đầu tại sector: 63 + 38 = 101.

Số FAT Structure là 2. Kích thước của mỗi FAT Structure là 15941. Vậy kích thước của vùng FAT là: 2 * 15941 = 31882 (sector).

Một phần nội dung của vùng FAT được minh họa trong hình sau.

Reserved FAT Data

Root Directory

Hệ thống FAT32

Số sector vùng

Reserved

(Số FAT Structure) * (Kích thước

mỗi FAT Structure)

Page 30: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 30

----------------------------------

Vùng Root Directory (Thư mục gốc)

Như đã đề cập ở phần trên, Root Directory là một cấu trúc dữ liệu, nằm trong vùng Data. Root Directory là siêu dữ liệu của tập tin (file metadata). Root Directory chứa thông tin mô tả các

Reserved FAT Data

Root Directory

Hệ thống FAT32

Physical Sector: Absolute Sector 101

00000000: F8 FF FF 0F FF FF FF FF - F8 FF FF 0F 04 00 00 00 ................

00000010: 05 00 00 00 06 00 00 00 - 07 00 00 00 08 00 00 00 ................

00000020: 09 00 00 00 0A 00 00 00 - 0B 00 00 00 0C 00 00 00 ................

00000030: 0D 00 00 00 0E 00 00 00 - 0F 00 00 00 10 00 00 00 ................

00000040: 11 00 00 00 12 00 00 00 - 13 00 00 00 14 00 00 00 ................

00000050: 15 00 00 00 16 00 00 00 - 17 00 00 00 18 00 00 00 ................

00000060: 19 00 00 00 1A 00 00 00 - 1B 00 00 00 1C 00 00 00 ................

00000070: 1D 00 00 00 1E 00 00 00 - 1F 00 00 00 20 00 00 00 ........... ...

00000080: 21 00 00 00 22 00 00 00 - 23 00 00 00 24 00 00 00 !..."...#...$...

00000090: 25 00 00 00 26 00 00 00 - 27 00 00 00 28 00 00 00 %...&...'...(...

000000A0: 29 00 00 00 2A 00 00 00 - 2B 00 00 00 2C 00 00 00 )...*...+...,...

000000B0: 2D 00 00 00 2E 00 00 00 - 2F 00 00 00 30 00 00 00 -......./...0...

000000C0: 31 00 00 00 32 00 00 00 - 33 00 00 00 34 00 00 00 1...2...3...4...

000000D0: 35 00 00 00 36 00 00 00 - 37 00 00 00 38 00 00 00 5...6...7...8...

000000E0: 39 00 00 00 3A 00 00 00 - 3B 00 00 00 3C 00 00 00 9...:...;...<...

000000F0: 3D 00 00 00 3E 00 00 00 - 3F 00 00 00 40 00 00 00 =...>...?...@...

00000100: 41 00 00 00 42 00 00 00 - 43 00 00 00 44 00 00 00 A...B...C...D...

00000110: 45 00 00 00 46 00 00 00 - 47 00 00 00 48 00 00 00 E...F...G...H...

00000120: 49 00 00 00 4A 00 00 00 - 4B 00 00 00 4C 00 00 00 I...J...K...L...

00000130: 4D 00 00 00 4E 00 00 00 - 4F 00 00 00 50 00 00 00 M...N...O...P...

00000140: 51 00 00 00 52 00 00 00 - 53 00 00 00 54 00 00 00 Q...R...S...T...

00000150: 55 00 00 00 56 00 00 00 - 57 00 00 00 58 00 00 00 U...V...W...X...

00000160: 59 00 00 00 5A 00 00 00 - 5B 00 00 00 5C 00 00 00 Y...Z...[...\...

00000170: 5D 00 00 00 5E 00 00 00 - 5F 00 00 00 60 00 00 00 ]...^..._...`...

……

……

Một phần nội dung của vùng FAT

Page 31: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 31

tập tin (thư mục) trong thư mục gốc của ổ đĩa logic gồm: tên tập tin, kích thước, địa chỉ bắt đầu của vùng nội dung và một số thông tin khác.

Với FAT32, vị trí bắt đầu của Root Directory không cố định, nó có thể nằm ở vị trí bất kì trong vùng Data, kích thước của Root Directory cũng không cố định, nó có thể tăng lên tùy ý.

Địa chỉ bắt đầu của Root Directory được lưu trong Boot Sector, byte thứ 44-47 (cluster bắt đầu của Root Directory), kích thước của Root Directory được tính dựa vào FAT Structure.

Tính sector bắt đầu của vùng Root Directory:

Dựa vào byte thứ 44-47 trong Boot Sector, biết được Root Directory bắt đầu tại cluster số 2 trong vùng Data.

Vậy, để tính sector bắt đầu của vùng Root Directory, cần tính sector bắt đầu của cluster số 2 trong vùng Data.

Công thức để tính sector bắt đầu của cluster số 2 trong vùng Data:

FirstDataSector = ResvdSecCnt + (NumFATs * FATSz32)

- FirstDataSector: số hiệu sector đầu tiên của cluster số 2 trong vùng Data

- ResvdSecCnt: số sector của vùng Reserved

- NumFATs: số FAT Structure

- FATSz32: kích thước của một FAT Structure

Lưu ý: Số hiệu sector ở đây là số hiệu sector tương đối, nghĩa là tính từ đầu ổ đĩa logic chứa vùng FAT đang khảo sát.

Ví dụ:

Reserved FAT Data

Vị trí bắt đầu của Root Directory

Vị trí bắt đầu của Root Directory

Số sector vùng

Reserved

(Số FAT Structure) * (Kích thước

mỗi FAT Structure)

Page 32: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 32

FirstDataSector = 38 + (2 * 15941) = 31920

Vậy, sector vật lý của vùng Root Directory là: 63 + 31920 = 31983.

Đọc sector 31983. Một phần nội dung của Root Directory được thể hiện trong hình dưới đây.

Root Directory được chia thành các Directory Entry.

-------------------------------------------

Directory (thư mục)

Directory là cấu trúc dữ liệu tương tự như Root Directory, nó cũng chứa các Directory Entry.

Trong khi Root Directory thường nằm ở phần đầu của vùng Data, thì Directory có thể nằm ở vị trí bất kì trong vùng Data.

Directory thực tế là một tập tin, tập tin này chứa các cấu trúc dữ liệu (Directory Entry) mô tả thông tin về các tập tin hay thư mục con của Directory.

Trong một ổ đĩa logic chỉ có một Root Directory, nhưng có nhiều Directory.

Root Directory là đầu mối để hệ thống truy cập tới các tập tin, các Directory con nằm trong thư mục gốc của ổ đĩa. Các Directory lại là đầu mối để đi đến các tập tin hoặc Directory con trong nó.

Physical Sector: Absolute Sector 31,983

00000000: 50 41 47 45 46 49 4C 45 - 53 59 53 26 00 87 28 52 PAGEFILESYS&..(R

00000010: 5C 42 88 42 00 00 8D 74 - 88 42 03 00 00 00 00 18 \B.B...t.B......

00000020: 57 49 4E 44 4F 57 53 20 - 20 20 20 10 00 8E 28 52 WINDOWS ...(R

00000030: 5C 42 5C 42 00 00 29 52 - 5C 42 03 50 00 00 00 00 \B\B..)R\B.P....

00000040: 4E 54 4C 44 52 20 20 20 - 20 20 20 27 08 00 AA 88 NTLDR '....

00000050: 1C 2D 5C 42 04 00 AA 88 - 1C 2D 2E 04 A0 90 03 00 .-\B.....-......

00000060: 4E 54 44 45 54 45 43 54 - 43 4F 4D 27 00 00 1B 69 NTDETECTCOM'...i

00000070: 1C 2D 5C 42 04 00 1B 69 - 1C 2D 7E 0C DC B9 00 00 .-\B...i.-~.....

00000080: 42 4F 4F 54 20 20 20 20 - 49 4E 49 06 18 43 4E 52 BOOT INI..CNR

00000090: 5C 42 88 42 04 00 E0 52 - 5C 42 29 0E C2 00 00 00 \B.B...R\B).....

000000A0: 42 20 00 53 00 65 00 74 - 00 74 00 0F 00 4A 69 00 B .S.e.t.t...Ji.

000000B0: 6E 00 67 00 73 00 00 00 - FF FF 00 00 FF FF FF FF n.g.s...........

000000C0: 01 44 00 6F 00 63 00 75 - 00 6D 00 0F 00 4A 65 00 .D.o.c.u.m...Je.

000000D0: 6E 00 74 00 73 00 20 00 - 61 00 00 00 6E 00 64 00 n.t.s. .a...n.d.

000000E0: 44 4F 43 55 4D 45 7E 31 - 20 20 20 10 00 03 59 52 DOCUME~1 ...YR

000000F0: 5C 42 5C 42 04 00 5A 52 - 5C 42 C7 0F 00 00 00 00 \B\B..ZR\B......

00000100: 41 50 00 72 00 6F 00 67 - 00 72 00 0F 00 20 61 00 AP.r.o.g.r... a.

00000110: 6D 00 20 00 46 00 69 00 - 6C 00 00 00 65 00 73 00 m. .F.i.l...e.s.

00000120: 50 52 4F 47 52 41 7E 31 - 20 20 20 11 00 A7 70 52 PROGRA~1 ...pR

00000130: 5C 42 5C 42 05 00 7C 53 - 5C 42 D5 86 00 00 00 00 \B\B..|S\B......

00000140: 43 4F 4E 46 49 47 20 20 - 53 59 53 20 00 8B A3 53 CONFIG SYS ...S

…… ……

Nội dung bắt đầu vùng Root Directory

Page 33: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 33

Directory trong hệ thống FAT32 được tổ chức theo cấu trúc cây, trong đó, Root Directory là nút gốc.

Hình sau minh họa về cấu trúc của Directory.

Directory Entry

Directory Entry có kích thước 32 byte. Mỗi Directory Entry sẽ mô tả thông tin về một tập tin (thư mục), gồm: tên tập tin, kích thước, địa chỉ bắt đầu của vùng nội dung và một số thông tin khác.

Các trường của một Directory Entry được minh họa trong bảng dưới đây:

Byte

thứ

Mô tả

0-0 Kí tự đầu tiên của tên tập tin, hoặc trạng thái cấp phát (0xE5 hoặc 0x00: nếu chưa được cấp phát)

1-10 Kí tự thứ 2 đến 11 của tên tập tin 11-11 Byte thuộc tính (xem bảng về Byte thuộc tính) 12-12 Chưa sử dụng 13-13 Thời gian tạo tập tin (mili giây) 14-15 Thời gian tạo tập tin (giờ:phút:giây) 16-17 Ngày tạo tập tin 18-19 Thời gian truy cập mới nhất (gồm thao tác đọc/

ghi), nếu là ghi thì giá trị của trường này sẽ giống với trường WrtTime.

20-21 Phần byte cao (High word) của cluster bắt đầu. 22-23 Thời gian ghi tập tin mới nhất. Chú ý: tạo tập tin

cũng được coi là ghi tập tin (giờ:phút:giây). 24-25 Ngày ghi tập tin mới nhất. Chú ý: tạo tập tin cũng

được coi là ghi tập tin. Kí hiệu WrtTime. 26-27 Phần byte thấp (Low word) của cluster bắt đầu. 28-31 Kích thước của tập tin, đơn vị tính là byte. (nếu là

Reserved FAT Data

Cấu trúc của Directory

Root Directory

Các Directory

Page 34: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 34

thư mục, giá trị này là 0).

Chú ý: nếu tên của tập tin có kí tự đầu tiên là 0xE5, hệ thống sẽ thay thế giá trị này bằng 0x05. Nếu tên tập tin không sử dụng hết 8 byte, các byte không dùng sẽ được chèn bằng khoảng trắng (0x20).

Trường lưu kích thước của tập tin là bốn byte, do vậy kích thước tối đa của tập tin là 4GB. Với Entry là thư mục, trường này sẽ có giá trị là 0.

Các trường liên quan đến ngày tháng năm, gồm hai byte, được chia làm ba phần: năm bit thấp chứa Ngày (giá trị hợp lệ từ 1–31), bit 5–8 chứa Tháng (giá trị hợp lệ từ 1–12), bit 9-15 chứa Năm (giá trị hợp lệ 0-127), giá trị Năm này cộng với 1980 sẽ ra giá trị thật của Năm. Ví dụ về Ngày:Tháng:Năm được minh họa trong hình sau:

Ví dụ, biểu diễn ngày 10/4/2013.

Các trường liên quan đến thời gian, gồm 16 bit, được chia làm ba phần: năm bit thấp là Giây, hệ thống đếm từng hai giây một, nên giá trị hợp lệ là 0-29, và giá trị giây thực tế là 0-58. Sáu bit kế tiếp là Phút, giá trị hợp lệ là 0-59. Năm bit cuối cùng là Giờ, giá trị hợp lệ là 0-23.

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Năm (0-127)

Tháng (1-12)

Ngày (1-31)

Định dạng Ngày:Tháng:Năm

Ngày

10

4

2013

Hệ 16

0xA

0x04

0x21

Hệ 10

10

4

33

Hệ 2

0 1010

0100

010 0001

0100 001 0 100 0 1010

Kết quả: 0x428A

Biểu diễn ngày 10/4/2013

Page 35: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 35

Ví dụ về Giờ:Phút:Giây được minh họa trong hình sau:

Ví dụ biểu diễn thời gian: 7:23:45 AM.

Giá trị cụ thể các trường trong Byte thuộc tính được thể hiện trong bảng dưới đây.

Giá trị Mô tả 0000 0001 (0x01) READ_ONLY: chỉ đọc 0000 0010 (0x02) HIDDEN: ẩn 0000 0100 (0x04) SYSTEM: hệ thống 0000 1000 (0x08) VOLUME_ID: tên ổ đĩa 0001 0000 (0x10) DIRECTORY: thư mục 0010 0000 (0x20) ARCHIVE: lưu trữ 0000 1111 (0x0f) LONG_NAME: tên tập tin dài

Hai bit cao của Byte thuộc tính là 2 bit dự trữ, được thiết lập giá trị 0.

Các Entry có thiết lập thuộc tính LONG_NAME sẽ có cấu trúc dữ liệu khác để thể hiện tên tập tin dài.

Thời gian

45

23

7

Hệ 16

0x16

0x17

0x07

Hệ 10

22

23

7

Hệ 2

1 0110

01 0111

0 0111

0011 1 010 111 1 0110

Kết quả: 0x3AF6

Biểu diễn thời gian 7:23:45

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Giờ (0-23)

Phút (0-59)

Giây (0-29)

Định dạng Giờ:Phút:Giây

Page 36: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 36

Ví dụ về Directory Entry, xét Entry số hai trong Root Directory.

Nội dung của Entry số hai:

Byte

thứ

Mô tả

0-0 W 1-10 INDOWS 11-11 0x10 => thư mục 12-12 0 13-13 0x8E 14-15 0x5228 => giờ tạo: 10h:17:17 AM 16-17 0x425C => ngày tạo: 28/2/2013 18-19 0x425C 20-21 0x0000 => byte cao của cluster bắt đầu 22-23 0x5229 24-25 0x425C 26-27 0x5003 => byte thấp của cluster bắt đầu 28-31 0x00000000 => không thể hiện dung lượng

Mối quan hệ giữa Root Directory (hoặc Directory) – Directory Entry – FAT Structure và vùng Data

Mối quan hệ giữa Root Directory (hoặc Directory) – Directory Entry - FAT Structure và vùng Data được minh họa trong hình sau:

Physical Sector: Absolute Sector 31,983

00000000: 50 41 47 45 46 49 4C 45 - 53 59 53 26 00 87 28 52 PAGEFILESYS&..(R

00000010: 5C 42 88 42 00 00 8D 74 - 88 42 03 00 00 00 00 18 \B.B...t.B......

00000020: 57 49 4E 44 4F 57 53 20 - 20 20 20 10 00 8E 28 52 WINDOWS ...(R

00000030: 5C 42 5C 42 00 00 29 52 - 5C 42 03 50 00 00 00 00 \B\B..)R\B.P....

00000040: 4E 54 4C 44 52 20 20 20 - 20 20 20 27 08 00 AA 88 NTLDR '....

00000050: 1C 2D 5C 42 04 00 AA 88 - 1C 2D 2E 04 A0 90 03 00 .-\B.....-......

…… ……

Nội dung bắt đầu vùng Root Directory

Page 37: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 37

Trong đó, mỗi thư mục hoặc tập tin (gọi chung là tập tin) sẽ có một cấu trúc dữ liệu để mô tả nó, gọi là Directory Entry. Directory Entry chứa tên tập tin, kích thước, địa chỉ (cluster) bắt đầu của nội dung tập tin trong vùng Data và một số thông tin khác.

Các Directory Entry được lưu trong vùng Root Directory hoặc Directory.

Nội dung của tập tin được lưu trong các khối dữ liệu gọi là các cluster. Nếu tập tin được lưu trong nhiều hơn một cluster, thì các cluster còn lại của tập tin sẽ được tìm thấy trong FAT Structure.

Như trong hình vẽ, từ Root Directory hệ thống biết được tập tin TTin2.txt bắt đầu tại Cluster số 6 trong vùng Data, dò trong FAT Structure, xác định được tập tin TTin2.txt nằm trên ba cluster là cluster số 6, 7 và 9. Đọc ba cluster này sẽ được nội dung của tập tin TTin2.txt.

Directory Entry cho tập tin có tên dài

Directory Entry bình thường chỉ hỗ trợ tên tập tin dài nhất là tám kí tự, phần mở rộng là ba kí tự. Các tên tập tin dài hơn tám kí tự hoặc các tên tập tin có chứa các kí tự đặc biệt sẽ sử dụng một loại Directory Entry khác, được gọi là LFN Directory Entry. LFN là viết tắt của Long File Name.

Mỗi tập tin sẽ có một Directory Entry bình thường (Short Directory Entry), nếu có các LFN Directory Entry, thì các Entry này sẽ được đặt trước Directory Entry bình thường.

Các trường của một LFN Directory Entry được mô tả trong bảng sau:

TTin1.dat … Cluster 3

Các Directory Entry

FAT Structure

Mối quan hệ giữa Root Directory - Directory Entry - FAT Structure và

vùng Data

TTin2.txt … Cluster 6 DL3.doc … Cluster 34

ThuMuc … Cluster 47

Root Directory

Cluster 6

Cluster 7

Cluster 9

Data

2

3

4

5

7 6

9 7

8

EOF 9

10

Page 38: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 38

Byte

thứ

Mô tả

0-0 Chỉ số của Entry, hoặc trạng thái cấp phát (0xE5 nếu chưa được cấp phát)

1-10 Kí tự thứ 1-5 của tập tin (Unicode) 11-11 Byte thuộc tính (xem bảng về Byte thuộc tính) 12-12 Chưa sử dụng 13-13 Giá trị Checksum 14-25 Kí tự thứ 6-11 của tập tin (Unicode) 26-27 Chưa sử dụng 28-31 Kí tự thứ 12-13 của tập tin (Unicode)

Chỉ số của Entry được sử dụng để đếm số lượng các Entry cần thiết để lưu tên tập tin, Entry đầu tiên có chỉ số là 1. Chỉ số này được tăng lên một đơn vị khi có thêm một Entry cho tới Entry cuối cùng. Chỉ số trong Entry cuối cùng được OR với 0x40.

Các LFN Entry của một tập tin được đặt trước các Entry bình thường, theo thứ tự ngược. Vì vậy, LFN Entry đầu tiên tìm thấy trong Root Direcotry hoặc Directory sẽ là LFN Entry cuối cùng của tập tin và có chỉ số lớn nhất. Các vị trí để lưu các kí tự của tập tin nếu không sử dụng hết sẽ được chèn kí tự NULL, sau đó là các giá trị 0xFF.

“Byte thuộc tính” của LFN Entry có giá trị 0x0F.

Giá trị Checksum được tính dựa trên tên tập tin dạng ngắn, các LFN Entry của cùng một tập tin sẽ có giá trị Checksum giống nhau.

Ví dụ, hình dưới đây là trích một phần nội dung của Root Directory, tại sector 31 985 và sector 31 986.

Bảng dữ liệu gồm ba Entry, trong đó hai Entry đầu có Byte thuộc tính là 0x0F (tại offset 0x1EB và offset 0x0B), nên nó là LFN Entry. Entry thứ ba là một Entry bình thường.

Tại Entry đầu tiên, chỉ số của Entry mang giá trị 0x42, như vậy, giá trị của chỉ số Entry khi chưa OR với 0x40 là 2, có thể kết luận tập tin có hai LFN Entry. Trường Checksum mang giá trị 0xB8.

Năm kí tự đầu tiên của Entry này (offset 0x1E1 – 0x1EA) là “alat.” (dấu “.” có mã ASCII là 0x2E), vùng kí tự kế tiếp trong Entry này (offset 0x1EE – 0x1F3) là “txt”, sau đó là kí tự NULL và các giá trị 0xFFFF, vùng kí tự cuối cùng cũng bao gồm các giá trị 0xFFFF. Như vậy, phần cuối của tên tập tin đã được xác định là “alat.txt”.

...

000001E0: 42 61 00 6C 00 61 00 74 - 00 2E 00 0F 00 B8 74 00 Ba.l.a.t......t.

000001F0: 78 00 74 00 00 00 FF FF - FF FF 00 00 FF FF FF FF x.t.............

Physical Sector: Absolute Sector 31,986

00000000: 01 54 00 65 00 6E 00 54 - 00 61 00 0F 00 B8 70 00 .T.e.n.T.a....p.

00000010: 54 00 69 00 6E 00 44 00 - 61 00 00 00 69 00 44 00 T.i.n.D.a...i.D.

00000020: 54 45 4E 54 41 50 7E 31 - 54 58 54 20 00 35 72 9B TENTAP~1TXT .5r.

00000030: 91 42 91 42 00 00 73 9B - 91 42 00 00 00 00 00 00 .B.B..s..B.....

Page 39: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 39

Entry thứ hai, bắt đầu tại offset 0x00, sector 31 986, cũng được đánh dấu là LFN Entry. Chỉ số của Entry này mang giá trị 1. Giá trị Checksum cũng giống với Entry đầu tiên, 0xB8. Các trường kí tự tìm được trong Entry này là: “TenTa”, “pTinDa”, “iD”. Vì chỉ số của Entry là 1 nên đây là Entry cuối cùng tìm được. Vậy, tên tập tin đầy đủ là “TenTapTinDaiDalat.txt”.

Tên tập tin này ở dạng ngắn được lưu trong Entry thứ ba, nó là một Entry bình thường và có tên là “TENTAP~1.TXT”.

Tìm các cluster thuộc về một tập tin (trong FAT Structure)

Từ các Entry trong Root Directory hoặc trong Directory, xác định được cluster bắt đầu vùng dữ liệu của tập tin (hay thư mục). Giá trị cluster này cũng chính là chỉ số của Entry bắt đầu của tập tin trong FAT Structure, từ Entry bắt đầu này, theo liên kết của FAT Structure sẽ tìm được tất cả các cluster thuộc về tập tin.

Như vậy từ giá trị cluster bắt đầu, phải xác định được vị trí của Entry tương ứng trong FAT Structure.

Gọi giá trị cluster bắt đầu là N.

Khi đó địa chỉ Offset tương ứng của N trên FAT Structure (kí hiệu: FATOffset) được tính bằng công thức:

FATOffset = N *4

Đơn vị tính của FATOffset là byte. Mỗi Entry trong FAT32 có kích thước 4 byte.

Từ FATOffset, tính chỉ số sector tương ứng trong FATStructure (kí hiệu: ThisFATSecNum):

ThisFATSecNum = ResvdSecCnt + RoundUp(FATOffset /

BytsPerSec)

Trong đó:

- ResvdSecCnt: số sector vùng Reserved.

- BytsPerSec: kích thước của một sector (byte)

- RoundUp: “làm tròn lên” kết quả của phép chia.

Tính địa chỉ Offset trong sector (kí hiệu: ThisFATEntOffset)

ThisFATEntOffset = FATOffset % BytsPerSec

Trong đó: “%” là phép chia lấy phần dư.

Ví dụ, xét một Entry trong Root Directory sau:

00000020: 54 45 4E 54 41 50 7E 31 - 54 58 54 20 00 35 72 9B TENTAP~1TXT .5r.

00000030: 91 42 9A 42 04 00 43 2E - 9A 42 32 08 0F 00 00 00 .B.B..C..B2.....

Page 40: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 40

Byte thứ 20-21 chứa giá trị byte cao của cluster bắt đầu “04 00”, và byte thứ 26-27 chứa byte thấp của cluster bắt đầu “32 08”. Vậy, giá trị của cluster bắt đầu là 0x00040832, đổi sang hệ thập phân là 264242.

Tính địa chỉ Offset tương ứng của N trên FAT Structure

Ta có N = 264 242,

Vậy, FATOffset = 264 242 * 4 = 1 056 968 (byte)

Tính số sector tương ứng trong FAT Structure

ThisFATSecNum = 38 + (1 056 968 / 512) = 38 + 2065 = 2103

Tính số sector vật lý tương ứng trong FAT Structure

2103 + 63 = 2166

Tính địa chỉ Offset trong sector

ThisFATEntOffset = 1 056 968 % 512 = 200

Lưu ý

Do FAT Structure sử dụng từ Entry số 2 trở đi (Entry số 0 và số 1 không sử dụng), nên vị trí vật lý của các Entry sẽ phải tịnh tiến lên 8 byte.

Nội dung của sector vật lý 2166 được thể hiện trong hình sau.

Giá trị của Entry 264 242 trong FAT Structure là vùng tô màu đỏ ở hình trên, có giá trị 0x0FFFFFFF (giá trị của EOF).

Nghĩa là dữ liệu của tập tin TENTAP~1.TXT chứa trong một cluster, đó là cluster 264 242.

Physical Sector: Absolute Sector 2,166

00000000: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

00000010: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

00000020: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

00000030: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

00000040: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

00000050: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

00000060: 00 00 00 00 FF FF FF 0F - 9B 08 04 00 FF FF FF 0F ................

00000070: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

00000080: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

00000090: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

000000A0: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

000000B0: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

000000C0: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

000000D0: FF FF FF 0F 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

000000E0: 00 00 00 00 FF FF FF 0F - BB 08 04 00 BC 08 04 00 ................

Một phần sector 2 166

Page 41: He thong FAT32

FAT32 Lê Gia Công – Khoa CNTT – Đại học Đà Lạt

Trang 41

Đọc nội dung của tập tin trong vùng Data khi biết cluster bắt đầu

Để đọc nội dung của tập tin trong vùng Data khi biết cluster bắt đầu:

- Xác định chuỗi các cluster thuộc về tập tin (đọc FAT Structure).

- Tính sector bắt đầu khi biết giá trị cluster.

- Đọc từng cluster dựa trên sector bắt đầu.

Tính sector bắt đầu khi biết giá trị cluster

Nếu biết giá trị cluster (kí hiệu: N) bất kì, có thể tính được sector bắt đầu (sector tương đối) của cluster đó bằng công thức sau:

FirstSectorOfCluster = ((N – 2) * SecPerClus) + FirstDataSector

- FirstSectorOfCluster: sector bắt đầu của cluster

- SecPerClus: số sector/cluster

- FirstDataSector: sector đầu tiên của cluster số 2 trong vùng Data

Ví dụ, giá trị của cluster bắt đầu N = 0x00040832, đổi sang hệ thập phân là 264242.

Áp dụng công thức trên:

FirstSectorOfCluster = ((264 242 - 2) * 4) + 31 920 = 1 088 880.

Vậy sector vật lý là: 1 088 880 + 63 = 1 088 943.

Đọc sector vật lý 1 088 943 sẽ được phần nội dung đầu tiên của tập tin, như hình dưới đây.

-------------

27/4/2013

Tham khảo

[1] http://www.easeus.com

[2] http://thestarman.narod.ru

[3] FAT32_Hardware White Paper

[4] http://en.wikipedia.org

[5] Brian Carrie, File System Forensic Analysis, Addison Wesley Professional, 2005

Physical Sector: Absolute Sector 1,088,943

00000000: 58 69 6E 20 63 68 61 6F - 20 44 61 6C 61 74 21 00 Xin chao Dalat!.

00000010: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................

00000020: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................ 00000030: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................