Hệ thống tập tin

Trong điện toán, khái niệm hệ thống tập tin hoặc hệ thống tệp () được dùng để chỉ các phương pháp và cấu trúc dữ liệu mà một hệ điều hành sử dụng để theo dõi các tập tin trên ổ đĩa hoặc các phân vùng. Hệ thống tập tin cũng kiểm soát cách lưu trữ và truy xuất dữ liệu. Không có hệ thống tập tin, thông tin được lưu trong các phương tiện lưu trữ sẽ là một khối dữ liệu lớn mà không có cách nào để biết nơi một phần thông tin dừng lại và phần tiếp theo bắt đầu. Bằng cách tách dữ liệu thành từng mảnh và đặt tên cho mỗi mảnh, thông tin dễ dàng được phân tách và xác định. Lấy tên từ cách đặt tên cho các hệ thống quản lý thông tin dùng giấy, mỗi nhóm dữ liệu được gọi là "tập tin". Cấu trúc và quy tắc logic được sử dụng để quản lý các nhóm thông tin và tên của chúng được gọi là "hệ thống tập tin".

Có nhiều loại hệ thống tập tin khác nhau. Mỗi loại có cấu trúc và logic khác nhau, thuộc tính của tốc độ, tính linh hoạt, bảo mật, kích thước và nhiều hơn nữa. Một số hệ thống tập tin đã được thiết kế để sử dụng cho các ứng dụng cụ thể. Ví dụ, hệ thống tập tin ISO 9660 được thiết kế dành riêng cho đĩa quang.

Hệ thống tập tin có thể được sử dụng trên nhiều loại thiết bị lưu trữ khác nhau sử dụng các loại phương tiện khác nhau. Kể từ năm 2019, các ổ đĩa cứng đã là thiết bị lưu trữ chính và được dự kiến sẽ duy trì trong tương lai gần. Các loại phương tiện khác được sử dụng bao gồm SSD, băng từ và đĩa quang. Trong một số trường hợp, chẳng hạn như với tmpfs (temporary file, tập tin tạm), bộ nhớ chính của máy tính (bộ nhớ truy cập ngẫu nhiên, RAM) được sử dụng để tạo một hệ thống tập tin tạm thời để sử dụng ngắn hạn.

Một số hệ thống tập tin được sử dụng trên các thiết bị lưu trữ dữ liệu cục bộ; những loại khác cung cấp quyền truy cập tệp qua giao thức mạng (ví dụ: máy khách NFS, SMB hoặc 9P). Một số hệ thống tệp là "ảo", có nghĩa là "tập tin" được cung cấp (được gọi là tập tin ảo) được tính theo yêu cầu (chẳng hạn như procfs và sysfs) hoặc chỉ đơn thuần là ánh xạ vào hệ thống tập tin khác được sử dụng làm kho lưu trữ. Hệ thống tập tin quản lý quyền truy cập vào cả nội dung của tập tin và siêu dữ liệu về các tập tin đó. Nó có trách nhiệm sắp xếp không gian lưu trữ; độ tin cậy, hiệu quả và điều chỉnh liên quan đến phương tiện lưu trữ vật lý là yếu tố quan trọng cần xem xét khi thiết kế.

== Nguồn gốc của thuật ngữ ==
Trước khi sự ra đời của máy tính, khái niệm "file system" (hệ thống tập tin) đã được sử dụng để mô tả một phương pháp lưu trữ và trích xuất tài liệu giấy. Đến năm 1961, thuật ngữ này được mở rộng cho việc quản lý tập tin trên máy tính. Đến năm 1964, thuật ngữ mới được sử dụng rộng rãi.

== Kiến trúc ==
Một hệ thống tập tin bao gồm hai hoặc ba lớp. Đôi khi các lớp được phân tách rõ ràng và đôi khi các chức năng được kết hợp.

Lớp "hệ thống tập tin logic" ("logical file system") chịu trách nhiệm tương tác với ứng dụng người dùng. Nó cung cấp giao diện chương trình ứng dụng (API) cho các thao tác với tập tin như codice_1, codice_2, codice_3... và chuyển thao tác được yêu cầu đến lớp bên dưới để xử lý. Hệ thống tập tin logic quản lý việc mở các mục trong bảng tập tin (file table) và các file descriptor của từng tiến trình (process)." Lớp này cung cấp "quyền truy cập tập tin, hoạt động thư mục, [và] bảo mật và bảo vệ."

Lớp tùy chọn thứ hai là "hệ thống tập tin ảo" ("virtual file system)." Giao diện này hỗ trợ nhiều đối tượng (instance) đồng thời của các hệ thống tập tin vật lý, mỗi phiên đối tượng khi đó gọi là hệ thống tập tin thực thi (file system implementation).

Lớp thứ ba là "hệ thống tập tin vật lý (physical file system)". Lớp này liên quan đến hoạt động vật lý của thiết bị lưu trữ (ví dụ: đĩa). Nó xử lý các khối vật lý đang được đọc hoặc ghi. Nó xử lý bộ đệm và quản lý bộ nhớ và chịu trách nhiệm cho việc đặt các khối vật lý vào các vị trí cụ thể trên phương tiện lưu trữ. Hệ thống tệp vật lý tương tác với trình điều khiển thiết bị hoặc với kênh để điều khiển thiết bị lưu trữ.

== Hệ thống tập tin và hệ điều hành ==
Nhiều hệ điều hành bao gồm hỗ trợ cho nhiều hơn một hệ thống tập tin. Đôi khi hệ điều hành và hệ thống tập tin được đan xen chặt chẽ đến mức khó có thể tách rời các chức năng của hệ thống tập tin.

Cần phải có một giao diện được cung cấp bởi phần mềm hệ điều hành giữa người dùng và hệ thống tập tin. Giao diện này có thể là văn bản (như được cung cấp bởi giao diện dòng lệnh, chẳng hạn như shell Unix hoặc OpenVMS DCL) hoặc đồ họa (như được cung cấp bởi giao diện người dùng đồ họa, như trình duyệt tập tin). Nếu đồ họa, phép ẩn dụ của "thư mục", chứa tài liệu, tệp khác và thư mục lồng nhau thường được sử dụng.

=== Hệ điều hành Unix và tương tự Unix ===
Các hệ điều hành tương tự Unix tạo ra một hệ thống tệp ảo, làm cho tất cả các tập tin trên tất cả các thiết bị dường như tồn tại trong một hệ thống phân cấp duy nhất. Điều này có nghĩa, trong các hệ thống đó, có một thư mục gốc và mọi tập tin hiện có trên hệ thống được đặt bên dưới nó ở đâu đó. Các hệ thống tương tự Unix có thể sử dụng đĩa RAM hoặc tài nguyên chia sẻ mạng làm thư mục gốc.

Các hệ thống tương tự Unix gán tên thiết bị cho từng thiết bị, nhưng đây không phải là cách các tập tin trên thiết bị đó được truy cập. Thay vào đó, để có quyền truy cập vào các tập tin trên thiết bị khác, trước tiên, hệ điều hành phải được thông báo những tập tin nào sẽ xuất hiện trong cây thư mục. Quá trình này được gọi là "mount" (gắn kết) một hệ thống tập tin. Ví dụ, để truy cập các tập tin trên CD-ROM, người ta phải báo với hệ điều hành "Lấy hệ thống tập tin từ CD-ROM này và làm cho nó xuất hiện trong thư mục tương tự". Thư mục được cung cấp cho hệ điều hành được gọi là "điểm gắn kết"  - nó có thể, ví dụ, là /media. Thư mục /media tồn tại trên nhiều hệ thống Unix (như được chỉ định trong Tiêu chuẩn phân cấp hệ thống tập tin) và được dành riêng để sử dụng làm điểm gắn kết cho phương tiện lưu động như CD, DVD, ổ USB hoặc đĩa mềm. Nó có thể trống hoặc có thể chứa các thư mục con để gắn các thiết bị riêng lẻ. Nói chung, chỉ quản trị viên (tức là người dùng root) mới có thể cho phép gắn hệ thống tệp.

Các hệ điều hành tương tự Unix thường bao gồm phần mềm và công cụ hỗ trợ trong quá trình gắn kết và cung cấp cho nó chức năng mới. Một số trong những chiến lược này đã được đặt ra "auto-mount" như một sự phản ánh mục đích của chúng.

- Trong nhiều tình huống, các hệ thống tập tin khác với root cần phải có sẵn ngay khi hệ điều hành đã khởi động. Do đó, tất cả các hệ thống tương tự Unix đều cung cấp phương tiện để gắn hệ thống tập tin khi khởi động. Quản trị viên hệ thống xác định các hệ thống tập tin này trong tập tin cấu hình fstab ("vfstab" trong Solaris), cũng chỉ ra các tùy chọn và điểm gắn kết.
- Trong một số trường hợp, không cần phải gắn một số hệ thống tệp nhất định khi khởi động, mặc dù việc sử dụng chúng có thể được mong muốn sau đó. Có một số tiện ích cho các hệ thống tương tự Unix cho phép gắn các hệ thống tệp được xác định trước theo yêu cầu.
- Phương tiện di động đã trở nên rất phổ biến với các nền tảng máy vi tính. Chúng cho phép các chương trình và dữ liệu được truyền giữa các máy mà không có kết nối vật lý. Ví dụ phổ biến bao gồm ổ đĩa flash USB, CD-ROM và DVD. Do đó, các tiện ích đã được phát triển để phát hiện sự hiện diện và tính sẵn có của một phương tiện và sau đó gắn phương tiện đó mà không có sự can thiệp của người dùng.
- Các hệ thống tương tự Unix tiến bộ cũng đã giới thiệu một khái niệm gọi là siêu dữ liệu; ví dụ, dự án Linux supermount-ng. Ví dụ, một đĩa mềm đã có siêu dữ liệu có thể được gỡ bỏ khỏi hệ thống. Trong trường hợp bình thường, đĩa đã có thể được đồng bộ hóa và sau đó ngắt kết nối trước khi gỡ bỏ. Đã cung cấp đồng bộ hóa, một đĩa khác có thể được đưa vào ổ đĩa. Hệ thống tự động thông báo rằng đĩa đã thay đổi và cập nhật nội dung điểm gắn kết để phản ánh phương tiện mới.
- Một automounter (trình gắn kết tự động) sẽ tự động gắn kết một hệ thống tập tin khi một tài liệu tham khảo được thực hiện cho các thư mục trên đỉnh mà nó phải được gắn kết. Điều này thường được sử dụng cho các hệ thống tập tin trên các máy chủ mạng, thay vì dựa vào các sự kiện như chèn phương tiện, như sẽ phù hợp với phương tiện lưu động.

==== Linux ====
Linux hỗ trợ nhiều hệ thống tập tin, nhưng các lựa chọn phổ biến cho đĩa hệ thống trên thiết bị cục bộ bao gồm họ ext * (ext2, ext3 và ext4), XFS, JFS và btrfs. Đối với flash thô không có "flash translation layer" (FTL) hoặc "Memory Technology Device" (MTD), có UBIFS, JFFS2 và YAFFS, trong số những thứ khác. SquashFS là một hệ thống tập tin chỉ đọc nén phổ biến.

==== Solaris ====
Solaris trong các bản phát hành trước đó được mặc định là UFS (không ghi nhật ký hoặc không đăng nhập) cho các hệ thống tập tin bổ sung và có thể khởi động. Solaris mặc định, hỗ trợ và mở rộng UFS.

Hỗ trợ cho các hệ thống tập tin khác và các cải tiến quan trọng đã được thêm vào theo thời gian, bao gồm VxFS của Veritas, Sun Microsystems (phân cụm) QFS, Sun Microsystems (ghi nhật ký) UFS, và Sun Microsystems (mã nguồn mở, poolable, nén 128 bit và sửa lỗi) ZFS.

Các phần mở rộng kernel đã được thêm vào Solaris để cho phép hoạt động Veritas VxFS có thể khởi động. Logging hay ghi nhật ký đã được thêm vào UFS trong của Sun Solaris 7. Các phiên bản của Solaris 10, Solaris Express, OpenSolaris và các biến thể nguồn mở khác của hệ điều hành Solaris sau đó đã hỗ trợ ZFS có khả năng khởi động.

Logical Volume Management cho phép mở rộng một hệ thống tập tin trên nhiều thiết bị nhằm mục đích thêm dự phòng, dung lượng và/hoặc thông lượng. Các môi trường kế thừa trong Solaris có thể sử dụng Solaris Volume Manager (trước đây gọi là Solstice DiskSuite). Nhiều hệ điều hành (bao gồm Solaris) có thể sử dụng Veritas Volume Manager. Các hệ điều hành hiện đại dựa trên Solaris làm lu mờ nhu cầu quản lý khối lượng thông qua việc tận dụng các kho lưu trữ ảo trong ZFS.

==== macOS ====
macOS (trước đây là Mac OS X) sử dụng  Apple File System (APFS), gần đây đã thay thế một hệ thống tập tin được kế thừa từ hệ điều hành Mac cổ điển có tên HFS Plus (HFS+). Apple cũng sử dụng thuật ngữ "Mac OS Extended" cho HFS+. HFS Plus là một siêu dữ liệu và trường hợp bảo quản nhưng (thường) case-insensitive hệ thống tập tin. Do nguồn gốc Unix của macOS, phân quyền Unix đã được thêm vào HFS Plus. Các phiên bản sau của HFS Plus đã thêm nhật ký để ngăn ngừa tham nhũng cấu trúc hệ thống tập tin và đưa ra một số tối ưu hóa cho các thuật toán phân bổ nhằm cố gắng tự động chống phân mảnh các tập tin mà không yêu cầu trình chống phân mảnh bên ngoài.

Tên tập tin có thể lên tới 255 ký tự. HFS Plus sử dụng Unicode để lưu trữ tên tập tin. Trên macOS, kiểu tập tin có thể đến từ mã loại, được lưu trữ trong siêu dữ liệu của tập tin hoặc phần mở rộng tập tin.

HFS Plus có ba loại liên kết: liên kết cứng kiểu Unix, liên kết tượng trưng kiểu Unix và bí danh. Các bí danh được thiết kế để duy trì một liên kết đến tập tin gốc của chúng ngay cả khi chúng được di chuyển hoặc đổi tên; chúng không được giải thích bởi chính hệ thống tập tin mà bởi mã File Manager trong vùng người dùng.

macOS 10.13 High Sierra, được công bố vào ngày 5 tháng 6 năm 2017 tại sự kiện WWDC của Apple, sử dụng Apple File System trên các ổ đĩa SSD.

macOS cũng hỗ trợ hệ thống tệp UFS, xuất phát từ Unix Fast File System BSD thông qua NeXTSTEP. Tuy nhiên, kể từ Mac OS X Leopard, macOS không còn có thể được cài đặt trên ổ UFS, hệ thống trước Leopard cũng không thể cài đặt trên ổ UFS được nâng cấp lên Leopard. Kể từ khi Mac OS X Lion các hỗ trợ UFS đã bị loại bỏ hoàn toàn.

Các phiên bản mới hơn của macOS có khả năng đọc và ghi vào các hệ thống tập tin FAT cũ (16 và 32) phổ biến trên Windows. Chúng cũng có khả năng "đọc" các hệ thống tập tin NTFS mới hơn của Windows. Để "ghi" vào hệ thống tập tin NTFS trên các phiên bản macOS trước phần mềm bên thứ ba của Mac OS X Snow Leopard là cần thiết. Mac OS X 10.6 (Snow Leopard) và sau đó cho phép ghi vào hệ thống tập tin NTFS, nhưng chỉ sau khi thay đổi cài đặt hệ thống không tầm thường (phần mềm bên thứ ba tồn tại tự động hóa việc này).

Cuối cùng, macOS hỗ trợ đọc và ghi hệ thống tập tin exFAT kể từ Mac OS X Snow Leopard, bắt đầu từ phiên bản 10.6.5.

=== Microsoft Windows ===
Windows sử dụng các hệ thống tập tin FAT, NTFS, exFAT, Live File System và ReFS (những thứ cuối cùng chỉ được hỗ trợ và sử dụng được trong Windows Server 2012, Windows Server 2016, Windows 8, Windows 8.1 và Windows 10; Windows không thể khởi động từ nó).

Windows sử dụng một "ký tự ổ đĩa" trừu tượng ở cấp độ người dùng để phân biệt một đĩa hoặc phân vùng khác. Ví dụ: đường dẫn C:\WINDOWS đại diện cho một thư mục WINDOWS trên phân vùng được đại diện bởi chữ C. Ổ C: thường được sử dụng nhiều nhất cho phân vùng ổ đĩa cứng chính, trên đó Windows thường được cài đặt và từ đó khởi động. "Truyền thống" này đã trở nên ăn sâu đến mức các lỗi tồn tại trong nhiều ứng dụng đưa ra giả định rằng ổ đĩa mà hệ điều hành được cài đặt là C. Việc sử dụng các ký tự ổ đĩa và truyền thống sử dụng "C" làm ký tự ổ đĩa cho phân vùng ổ đĩa cứng chính, có thể bắt nguồn từ MS-DOS, trong đó các chữ cái A và B được dành riêng cho tối đa hai ổ đĩa mềm. Điều này đến lượt nó bắt nguồn từ CP/M trong những năm 1970 và cuối cùng là từ CP / CMS của IBM năm 1967.

==== FAT ====
Họ hệ thống tập tin FAT được hỗ trợ bởi hầu hết các hệ điều hành cho máy tính cá nhân, bao gồm tất cả các phiên bản Windows và MS-DOS/PC DOS, OS/2 và DR-DOS. PC-DOS là phiên bản OEM của MS-DOS, MS-DOS ban đầu được dựa trên 86-DOS của SCP. DR-DOS dựa trên Concurrent DOS của Digital Research, phiên bản kế thừa của CP/M-86. Do đó, các hệ thống tập tin FAT rất phù hợp dưới dạng định dạng trao đổi chung giữa các máy tính và thiết bị thuộc hầu hết mọi loại và độ tuổi.

hệ thống tập tin FAT theo dõi nguồn gốc của nó trở lại tiền thân FAT 8 bit (không tương thích) trong Standalone Disk BASIC và dự án MDOS/MIDAS tồn tại trong thời gian ngắn. 

Trong những năm qua, hệ thống tập tin đã được mở rộng từ FAT12 sang FAT16 và FAT32. Các tính năng khác nhau đã được thêm vào hệ thống tệp bao gồm thư mục con, hỗ trợ bảng mã, thuộc tính mở rộng và tên tập tin dài. Các bên thứ ba như Digital Research đã kết hợp hỗ trợ tùy chọn để xóa tracking và các lược đồ bảo mật đa người dùng dựa trên ổ đĩa/thư mục/tập tin để hỗ trợ mật khẩu và quyền truy cập tập tin và thư mục như quyền đọc/ghi/thực thi/xóa. Hầu hết các tiện ích mở rộng này không được Windows hỗ trợ.

Các hệ thống tập tin FAT12 và FAT16 có giới hạn về số lượng mục trong thư mục gốc của hệ thống tập tin và có các hạn chế về kích thước tối đa của các ổ đĩa hoặc phân vùng có định dạng FAT.

FAT32 giải quyết các giới hạn trong FAT12 và FAT16, ngoại trừ giới hạn kích thước tập tin gần bằng 4GB, nhưng vẫn còn hạn chế so với NTFS.

FAT12, FAT16 và FAT32 cũng có giới hạn tám ký tự cho tên tập tin và ba ký tự cho phần mở rộng (chẳng hạn như.exe). Điều này thường được gọi là giới hạn tên tệp 8.3. VFAT, một phần mở rộng tùy chọn cho FAT12, FAT16 và FAT32, được giới thiệu trong Windows 95 và Windows NT 3.5, cho phép các tên tập tin dài (LFN) được lưu trữ trong hệ thống tập tin FAT theo kiểu tương thích ngược.

==== NTFS ====
NTFS, được giới thiệu với hệ điều hành Windows NT vào năm 1993, cho phép kiểm soát quyền dựa trên ACL. Các tính năng khác cũng được NTFS hỗ trợ bao gồm liên kết cứng, nhiều luồng tập tin, lập chỉ mục thuộc tính, theo dõi hạn ngạch, tập tin thưa thớt, mã hóa, nén và các điểm lặp lại (thư mục hoạt động như điểm gắn kết cho các hệ thống tập tin khác, liên kết tượng trưng, liên kết, liên kết lưu trữ từ xa).

==== exFAT ====
exFAT là một hệ thống tập tin độc quyền và bằng sáng chế được bảo vệ bằng với lợi thế nhất định so với NTFS đối với hệ thống tập tin cấp cao.

exFAT không tương thích ngược với các hệ thống tập tin FAT như FAT12, FAT16 hoặc FAT32. hệ thống tập tin được hỗ trợ với các hệ thống Windows mới hơn, như Windows Server 2003, Windows Vista, Windows 2008, Windows 7, Windows 8 và gần đây, hỗ trợ đã được thêm cho Windows XP.

exFAT được hỗ trợ trong macOS bắt đầu với phiên bản 10.6.5 (Snow Leopard). Hỗ trợ trong các hệ điều hành khác rất ít do Microsoft chưa công bố các thông số kỹ thuật của hệ thống tập tin và việc triển khai hỗ trợ cho exFAT cần phải có giấy phép. exFAT là hệ thống tập tin duy nhất được hỗ trợ đầy đủ trên cả macOS và Windows có thể lưu các tệp lớn hơn 4GB. 

== Hạn chế ==
=== Chuyển đổi loại hệ thống loại ===
Có thể có lợi hoặc cần thiết để có các tập tin trong một hệ thống tập tin khác với hệ thống hiện tại. Lý do bao gồm nhu cầu tăng yêu cầu không gian vượt quá giới hạn của hệ thống tập tin hiện tại. Độ sâu của đường dẫn có thể cần phải tăng lên ngoài giới hạn của hệ thống tập tin. Có thể có những cân nhắc về hiệu suất hoặc độ tin cậy. Cung cấp quyền truy cập vào hệ điều hành khác không hỗ trợ hệ thống tập tin hiện có là một lý do khác.

==== Chuyển đổi tại chỗ ====
Trong một số trường hợp, việc chuyển đổi có thể thực hiện tại chỗ, mặc dù việc di chuyển hệ thống tập tin có phần bảo thủ hơn, vì nó liên quan đến việc tạo một bản sao của dữ liệu và được khuyến nghị. Trên Windows, hệ thống tập tin FAT và FAT32 có thể được chuyển đổi sang NTFS thông qua tiện ích convert.exe, nhưng không thể ngược lại. Trên Linux, ext2 có thể được chuyển đổi thành ext3 (và được chuyển đổi trở lại) và ext3 có thể được chuyển đổi thành ext4 (nhưng không thể quay lại), và cả ext3 và ext4 có thể được chuyển đổi thành btrfs và chuyển đổi lại cho đến khi thông tin hoàn tác đã xóa. Các chuyển đổi này có thể do sử dụng cùng định dạng cho chính dữ liệu tập tin và di chuyển siêu dữ liệu vào không gian trống, trong một số trường hợp sử dụng hỗ trợ tập tin thưa thớt.

==== Di chuyển sang một hệ thống tệp khác ====
Di chuyển có nhược điểm là cần thêm không gian mặc dù có thể nhanh hơn. Trường hợp tốt nhất là nếu có không gian chưa sử dụng trên phương tiện sẽ chứa hệ thống tập tin cuối cùng.

Ví dụ: để di chuyển hệ thống tập tin FAT32 sang hệ thống tập tin ext2. Đầu tiên tạo một hệ thống tập tin ext2 mới, sau đó sao chép dữ liệu vào hệ thống tập tin, sau đó xóa hệ thống tập tin FAT32.

Một cách khác, khi không có đủ không gian để giữ lại hệ thống tập tin gốc cho đến khi hệ thống tập tin mới được tạo, là sử dụng vùng làm việc (chẳng hạn như bộ nhớ lưu động). Điều này mất nhiều thời gian hơn nhưng một bản sao lưu dữ liệu là một tác dụng phụ tốt đẹp.

=== Đường dẫn tập tin dài và tên tập tin dài ===
Trong các hệ thống tập tin phân cấp, các tập tin được truy cập bằng một "đường dẫn" là danh sách phân nhánh của các thư mục chứa tập tin. Các hệ thống tập tin khác nhau có các giới hạn khác nhau về độ sâu của đường dẫn. hệ thống tập tin cũng có giới hạn về độ dài của một tên tập tin riêng lẻ.

Sao chép các tập tin có tên dài hoặc nằm trong các đường dẫn có độ sâu đáng kể từ hệ thống tập tin này sang hệ thống tập tin khác có thể gây ra kết quả không mong muốn. Điều này phụ thuộc vào cách tiện ích thực hiện sao chép xử lý sự khác biệt.

== Liên kết ngoại ==
- Thông số kỹ thuật hệ thống tập tin - Liên kết & Whitepapers
- Dự án hệ thống tập tin thú vị