Các loại Filesystem và cơ hội khôi phục dữ liệu – Phần 1: Windows
Trong nhiều tình huống, các công cụ khôi phục dữ liệu có thể là một vị cứu tinh thực sự giúp lấy lại các tệp tin bị mất một cách thần kỳ. Dưới góc nhìn của người dùng thông thường, quá trình này trông có thể rất kỳ diệu. Tuy nhiên, chúng ta cần nhớ rằng, mọi thứ dựa trên các kỹ thuật khoa học đều sẽ tồn tại những hạn chế nhất định. Đôi khi, một tệp có thể được khôi phục mà không còn tên ban đầu hoặc những thư mục nhỏ nằm trong đó. Cũng có những trường hợp không thể truy xuất dữ liệu cho dù kỹ thuật viên sử dụng những công cụ hiện đại đến đâu. Điều này hoàn toàn không phải ngẫu nhiên mà chúng bị ảnh hưởng bởi một hoặc nhiều yếu tố khác nhau.
Trong phạm vi bài viết này, chúng tôi sẽ chỉ tập trung vào một chi tiết quan trọng có thể quyết định khả năng khôi phục dữ liệu – filesystem (được hiểu là cách thức tổ chức dữ liệu trên bộ lưu trữ). Khi hiểu được sự khác biệt giữa các loại filesystem, bạn sẽ dễ dàng đánh giá tình huống của mình và có những kỳ vọng thực tế từ việc sử dụng các phần mềm khôi phục dữ liệu.
Filesystem có ảnh hưởng đến khả năng khôi phục dữ liệu như thế nào?
Bất kỳ thiết bị lưu trữ dữ liệu nào, từ thẻ nhớ nhỏ đến ổ đĩa cứng trong cồng kềnh, đều chứa một hoặc một số phân vùng. Đây là những vùng trên cùng một phương tiện vật lý được tạo bởi hệ điều hành và được coi là các đĩa logic riêng biệt. Thông tin về chúng thường được lưu trữ ở phần đầu của ổ đĩa trong một phần đặc biệt có tên là bảng phân vùng. Mỗi phân vùng độc lập với các phân vùng khác và có filesystem riêng (FS). Đây là cơ chế chính chịu trách nhiệm sắp xếp dữ liệu trong ranh giới của một phân vùng. Nhờ vậy, dữ liệu được sắp xếp hợp lý và có thể dễ dàng truy cập bất cứ khi nào cần.
Tuy nhiên, không phải filesystem nào cũng giống nhau, chúng có thể có các nguyên tắc tổ chức không gian lưu trữ khác nhau. Những trường hợp riêng biệt hầu hết được gọi là các loại (type), hoặc ít gặp hơn là các định dạng (format). Loại filesystem có thể được hệ điều hành chọn tự động hoặc do người dùng chọn từ các tùy chọn được đề xuất.
Mỗi loại FS tách dữ liệu chứa trong tệp khỏi thông tin mô tả nội dung này, được gọi là metadata. Phần sau bao gồm tên, kích thước, vị trí, vị trí trong cấu trúc thư mục và các thuộc tính khác giúp xác định tệp. Các quy tắc mà mỗi loại FS áp dụng để lưu trữ các thông tin kỹ thuật có thể có sự khác biệt đáng kể.
Bên cạnh việc điều chỉnh cách phân bổ thông tin, filesystem cũng quyết định phương pháp xử lý dữ liệu trong quá trình xóa hoặc định dạng lưu trữ. Theo nguyên tắc, nội dung của các tệp không bị hủy ngay lập tức nhưng metadata sẽ bị xóa hoặc sửa đổi để nhắc nhở về việc loại bỏ chúng. Do đó, trong trường hợp xảy ra rủi ro và cần phải khôi phục dữ liệu, cơ hội thành công sẽ phụ thuộc rất nhiều vào nguyên tắc đang được FS áp dụng.
Nếu bạn đã xóa một số dữ liệu hoặc toàn bộ ổ đĩa bị format nhầm, bạn có thể ước tính khả năng khôi phục lại chúng nếu bạn biết loại filesystem nào thực sự đã thực hiện thao tác này. Hãy cùng nhau tìm hiểu kỹ hơn về các định dạng khác nhau của Windows (NTFS, FAT/FAT32, exFAT, ReFS), macOS (HFS+, APFS), Linux (Ext2, Ext3, Ext4, ReiserFS, XFS, JFS) và BSD/Solaris/ Unix (UFS, ZFS), cấu trúc chung của chúng cũng như các thao tác xóa và định dạng.
Các loại filesystem của Windows
Microsoft Windows hiện cung cấp hai định dạng cho ổ đĩa trong: NTFS và ReFS cấp độ máy chủ. Các thiết bị lưu trữ bên ngoài như USB và thẻ nhớ thường sử dụng FAT/FAT32 hoặc exFAT.
1. NTFS
Phần đầu của phân vùng NTFS bị chiếm dụng bởi Volume Boot Record (VBR). Tệp này chứa thông tin liên quan đến kích thước và cấu trúc của hệ thống tệp cũng như mã khởi động. NTFS điều khiển dữ liệu bằng Master File Table (MFT). Về cơ bản, nó là một cơ sở dữ liệu bao gồm các bản ghi cho mọi tệp và thư mục có trong FS. Mỗi bản ghi MFT chứa nhiều thuộc tính khác nhau như vị trí, tên, kích thước, ngày/thời gian tạo và sửa đổi lần cuối. Bản thân MFT có thuộc tính Bitmap cho biết bản ghi nào hiện đang được sử dụng.
Các tệp rất nhỏ được lưu trữ dưới dạng thuộc tính ngay trong ô MFT. Nếu nội dung lớn, nó sẽ được lưu bên ngoài MFT, trong khi bản ghi sẽ trỏ đến vị trí của nó. Tương tự như vậy, khi các thuộc tính không thể vừa với một bản ghi MFT, chúng sẽ được chuyển ra khỏi bảng và chỉ có địa chỉ của chúng được giữ ở đó.
Các thư mục trong NTFS được đại diện bởi các đường dẫn thư mục (directory entries). Trên thực tế, đây là những tệp chứa danh sách các tệp khác có tham chiếu đến chúng. Một tệp quan trọng khác đối với NTFS là Bitmap. Nó theo dõi tất cả các vị trí đã được sử dụng và còn trống trong hệ thống tệp. Trong hình bên dưới, bạn có thể thấy mối quan hệ giữa các thành phần chính của cấu trúc NTFS – Volume Boot Record ($Boot), Master File Table ($MFT) và vùng nội dung dữ liệu:
Đối với lệnh xóa
Nguyên lý: NTFS giữ bản ghi MFT cho tệp nhưng gắn nhãn nó là không được sử dụng và đánh dấu vị trí đang chiếm giữ bằng nội dung của nó giống như đã được phá hành trong Bitmap. Tệp cũng bị xóa khỏi đường dẫn thư mục.
Cách phục hồi: Tên, kích thước và vị trí của tệp phải được để lại trong bản ghi MFT. Nếu không thay đổi và nội dung dữ liệu không bị ghi đè thì khả năng khôi phục là 100%. Nếu bản ghi này bị thiếu, vẫn có thể tìm thấy tệp bỏ qua cấu trúc FS với sự hỗ trợ của phương pháp khôi phục RAW. Trong trường hợp này, dữ liệu thô trên ổ đĩa được phân tích để tìm sự dấu vết của các mẫu được xác định trước đặc trưng cho các tệp thuộc loại nhất định. Tuy nhiên, nhược điểm chính của phương pháp này là thiếu tên gốc và cấu trúc thư mục trong kết quả.
Đối với lệnh định dạng
Nguyên lý: Một MFT mới được tạo, xóa sạch phần đầu của MFT hiện có. Tuy nhiên, phần còn lại của nó vẫn còn nguyên vẹn.
Cách phục hồi: 256 tệp đầu tiên không còn được thể hiện trong MFT, do đó, việc truy xuất chúng chỉ có thể thực hiện được bằng phương pháp khôi phục RAW. Khả năng phục hồi của các tệp theo 256 này lên tới 100%.
2. FAT/FAT32
Những thông tin cơ bản về cách tổ chức FS có sẵn trong Boot Sector ở ngay đầu phân vùng. FAT/FAT32 chia không gian lưu trữ thành các phần có kích thước giống hệt nhau được gọi là cluster. Nội dung của một tệp có thể chiếm một hoặc nhiều cluster và không nhất thiết phải gần nhau. Các tệp có nội dung được lưu trữ không theo trình tự được gọi là bị phân mảnh.
Bảng phân bổ tệp (FAT) theo dõi cluster nào được sử dụng bởi tệp nào. Hai bản sao của bảng thường được lưu trữ cho mục đích sao lưu. Mỗi cluster có entry riêng trong FAT cho biết liệu nó có bị chiếm dụng hay không. Nếu vậy, cũng sẽ có một liên kết đến cluster tiếp theo thuộc cùng một tệp hoặc đánh dấu rằng đây là cluster cuối cùng trong chuỗi.
The Root Directory là một chuỗi các mục mô tả tất cả các tệp và thư mục. Mỗi đường dẫn thư mục bao gồm cluster bắt đầu, tên, kích thước và các thuộc tính khác của tệp. Số của cluster này cũng trỏ đến một entry trong bảng FAT.
Trong hình bên dưới, bạn có thể thấy mối quan hệ giữa các thành phần chính của cấu trúc FAT/FAT32 – Boot Sector, 2 bảng FAT, Root Directory và vùng dữ liệu:
Đối với lệnh xóa
Nguyên lý: FAT/FAT32 đánh dấu đường dẫn thư mục của tệp là đã bị xóa và xóa tất cả thông tin có trong các entry bảng FAT tương ứng, do đó phá hủy các liên kết đến cluster trung gian và cluster cuối của nó. Ký tự đầu tiên của tên tệp được thay thế bằng một giá trị biểu thị trạng thái đã xóa của nó. FAT32 cũng xóa một phần thông tin về cluster bắt đầu.
Cách phục hồi: Cluster đầu tiên và kích thước có thể được tìm thấy trong đường dẫn thư mục, nhưng vị trí của cluster trung gian và cluster cuối phải được giả định. Vì lý do này, kết quả phục hồi dữ liệu có thể không đầy đủ. Bên cạnh đó, FAT/FAT32 không thực hiện chống phân mảnh, gây khó khăn cho việc khôi phục tệp bằng phương pháp khôi phục RAW. Một vấn đề khác là tên tệp bị giới hạn về độ dài và thậm chí có thể được lưu trữ tách rời trên bộ lưu trữ. Vì vậy, việc khôi phục dữ liệu đối với các tệp có tên dài có thể không có có nhiều cơ hội thành công.
Đối với lệnh định dạng
Nguyên lý: Cả hai bản sao của bảng FAT cùng Root Directory đều bị xóa. Tuy nhiên, nội dung dữ liệu vẫn còn ở đó.
Cách phục hồi: Giống như trong các trường hợp trước, các tệp liền nhau có thể được truy xuất bằng phương pháp khôi phục RAW. Tuy nhiên, do vấn đề phân mảnh, một phần lớn dữ liệu có thể bị hỏng.
3. exFAT
exFAT được phát triển như một sự kế thừa của FAT/FAT32, do đó, nó gần giống với các filesystems của dòng này. Cấu trúc của ổ đĩa exFAT cũng được mô tả tương tự như vậy trong Boot Sector. Một bản sao khác của Boot Sector được lưu trữ cho mục đích bảo mật.
exFAT cũng áp dụng Bảng phân bổ tệp (FAT), tuy nhiên, chỉ có một bản sao của nó và nó chỉ chứa các liên kết cho các tệp bị phân mảnh. Ngoài ra, trạng thái của các cluster không được thể hiện trực tiếp trong entry, nó được quản lý với sự trợ giúp của Bitmap phân bổ chuyên dụng. Bitmap này được lưu trữ trong vùng dữ liệu và cho biết cluster đang được sử dụng hay sẵn sàng để ghi vào. Cách tiếp cận như vậy giúp exFAT dễ dàng tìm thấy các cluster liền kề để ghi nội dung của tệp và do đó, loại bỏ sự phân mảnh.
Các đường dẫn thư mục được xử lý giống như trong FAT/FAT32, nhưng cũng có một entry đặc biệt trong Root Directory giữ thông tin về Allocation Bitmap. Trong hình bên dưới, bạn có thể thấy mối quan hệ giữa các thành phần chính của cấu trúc exFAT – Boot Sector, FAT table, Root Directory và vùng dữ liệu:
Đối với lệnh xóa/định dạng
Nguyên lý: exFAT thay đổi trạng thái của các cluster được liên kết trong tệp Allocation Bitmap. Các entry FAT không được cập nhật ngay lập tức để tránh việc ghi không cần thiết. Vùng dữ liệu cũng không bị xóa sạch.
Cách phục hồi: Nếu tệp bị phân mảnh, chuỗi các cluster của nó có thể được xây dựng lại bằng cách sử dụng các entry FAT còn lại. Trong trường hợp các liên kết này bị mất, việc khôi phục dữ liệu có thể không đầy đủ. Tuy nhiên, phương pháp khôi phục RAW có thể mang lại kết quả khả quan cho exFAT nhờ khả năng phân mảnh thấp hơn so với FAT/FAT32.
4. ReFS
Bố cục của ReFS có sự khác biệt khá lớn so với phần còn lại của các định dạng Microsoft Windows. Thông tin bên trong nó thường được tổ chức dưới dạng B+trees hoạt động tương tự như cơ sở dữ liệu. B+trees được sử dụng cho hầu hết tất cả các thành phần trong filesystem, bao gồm nội dung của tệp và metadata. Sơ đồ dạng cây như vậy bao gồm gốc, các giao điểm nhánh (node) và lá. Mỗi giao điểm có một danh sách các khóa và con trỏ được sắp xếp theo thứ tự tới các giao điểm ở cấp độ thấp hơn hoặc các lá.
Directory là thành phần chính của FS. Nó cũng được thể hiện bởi một B+trees. Khóa trong đó tương ứng với số lượng đối tượng thư mục. Một tệp không được coi là một phần tử riêng biệt của Thư mục và tồn tại ở dạng bản ghi. Một tính năng đáng chú ý khác của ReFS là việc sử dụng Copy-on-Write (CoW) – các entry FS ban đầu sẽ không bao giờ được sửa đổi ngay lập tức, chúng chỉ được sao chép và ghi vào một vị trí mới với những thay đổi cần thiết.
Đối với lệnh xóa
Nguyên lý: Cấu trúc metadata phải được xây lại để phản hồi lại việc xóa tệp. Tuy nhiên, ReFS không thực hiện chỉnh sửa ngay tại chỗ. Thay vào đó, nó tạo ra bản sao, thực hiện các thay đổi cần thiết và chỉ liên kết dữ liệu với cấu trúc được cập nhật sau khi được ghi thành công vào bộ lưu trữ.
Cách phục hồi: Nhờ phương pháp Copy-on-Write, phiên bản trước của metadata vẫn còn trên bộ lưu trữ, giúp khả năng khôi phục các tệp đã xóa lên tới 100% cho đến khi chúng bị ghi đè bằng dữ liệu mới.
Phần 2: Các loại Filesystem và cơ hội khôi phục dữ liệu: macOS