Filesystem (hệ thống tập tin) đóng vai trò quan trọng trong việc quản lý và tổ chức dữ liệu trên các thiết bị lưu trữ. Bài viết này sẽ cung cấp cho bạn những kiến thức cơ bản về filesystem, các loại filesystem phổ biến hiện nay, cách tạo filesystem và những thông tin hữu ích khác.
Mục Lục
1. Filesystem Là Gì?
Filesystem (hệ thống tập tin) là phương pháp và cấu trúc dữ liệu mà hệ điều hành sử dụng để theo dõi các tập tin trên ổ đĩa hoặc phân vùng. Nó định nghĩa cách các tập tin được tổ chức, lưu trữ và truy xuất trên ổ đĩa.
Hiểu một cách đơn giản, filesystem giúp hệ điều hành biết được vị trí của từng tập tin, thư mục và thông tin liên quan trên ổ đĩa. Thuật ngữ này thường được dùng để chỉ một phân vùng hoặc ổ đĩa được sử dụng để lưu trữ các tập tin, hoặc loại hệ thống tập tin.
Cấu trúc hệ thống tập tin
Sự khác biệt giữa ổ đĩa/phân vùng và filesystem rất quan trọng. Một số chương trình hoạt động trực tiếp trên các sector thô của ổ đĩa, phá hủy hoặc làm hỏng filesystem nếu có. Hầu hết các chương trình hoạt động trên filesystem, do đó, không thể hoạt động trên phân vùng không chứa filesystem hợp lệ.
Để sử dụng một phân vùng hoặc ổ đĩa như một filesystem, nó cần được khởi tạo và ghi các cấu trúc dữ liệu của kiểu filesystem đó vào ổ đĩa. Quá trình này gọi là tạo filesystem.
Cấu trúc chung của các filesystem UNIX tương tự nhau, bao gồm:
- Superblock: Chứa thông tin tổng quan về filesystem (kích thước…).
- Inode: Chứa thông tin về một tập tin (trừ tên).
- Data block: Lưu trữ dữ liệu của tập tin.
- Directory block: Lưu trữ tên tập tin và số inode tương ứng.
- Indirection block: Chứa con trỏ đến các khối dữ liệu, sử dụng khi cần thêm không gian lưu trữ.
Filesystem UNIX cho phép tạo “lỗ hổng” trong tập tin, nghĩa là hệ thống “đánh lừa” rằng có 0 byte tại một vị trí cụ thể trong tập tin, nhưng không có sector đĩa thực tế nào được sử dụng. Điều này giúp tiết kiệm không gian ổ đĩa, thường thấy ở các tệp nhị phân nhỏ, thư viện chia sẻ Linux, cơ sở dữ liệu…
2. Các Loại Filesystem Phổ Biến
Linux hỗ trợ nhiều loại filesystem khác nhau, mỗi loại có ưu và nhược điểm riêng. Dưới đây là một số loại quan trọng nhất:
-
Minix: Filesystem lâu đời, đáng tin cậy nhưng hạn chế về tính năng (thiếu timestamp, tên tập tin tối đa 30 ký tự) và khả năng (tối đa 64MB).
-
Xia: Phiên bản sửa đổi của Minix, cải thiện giới hạn về tên tập tin và kích thước, nhưng không có tính năng mới.
-
Ext3: Có tất cả tính năng của Ext2, cộng thêm journaling (ghi nhật ký), giúp cải thiện hiệu suất và thời gian phục hồi khi hệ thống gặp sự cố.
-
Ext2: Hệ thống nhiều tính năng của các filesystem Linux đời đầu, dễ dàng tương thích với các phiên bản mới.
-
Ext: Phiên bản cũ hơn của Ext2, không tương thích với các phiên bản mới, hầu như không còn được sử dụng.
-
ReiserFS: Filesystem mạnh mẽ hơn, sử dụng journaling để giảm thiểu mất dữ liệu.
-
JFS: Filesystem journaling được IBM thiết kế cho môi trường hiệu suất cao.
-
XFS: Filesystem journaling 64-bit, được Silicon Graphics thiết kế để duy trì hiệu năng cao với các file lớn và hệ thống tập tin lớn.
Ngoài ra, Linux còn hỗ trợ các filesystem bên ngoài để trao đổi file với các hệ điều hành khác:
-
MSDOS: Tương thích với hệ thống FAT của MS-DOS (OS/2 và Windows NT).
-
UMSDOS: Mở rộng driver hệ thống MSDOS trong Linux để hỗ trợ tên file dài, quyền sở hữu, liên kết… cho phép sử dụng phân vùng MSDOS như một phân vùng Linux.
-
VFAT: Mở rộng của FAT, còn gọi là FAT32, hỗ trợ kích thước ổ đĩa lớn hơn. Hầu hết các đĩa Windows đều là VFAT.
-
ISO9660: Filesystem CD-ROM tiêu chuẩn, Rock Ridge extension cho phép hỗ trợ tên file dài hơn.
-
NFS: Filesystem mạng cho phép chia sẻ filesystem giữa nhiều máy tính.
-
SMBFS: Filesystem mạng cho phép chia sẻ filesystem với máy tính Windows.
-
HPFS: Filesystem OS/2.
-
Sysv: Filesystem SystemV/386, Coherent và Xenix.
-
NTFS: Filesystem tiên tiến của Microsoft, cung cấp khả năng truy cập và ổn định file nhanh hơn.
Cấu trúc hệ thống tập tin
Lựa chọn filesystem nào phụ thuộc vào tình huống cụ thể. Nếu cần tương thích với hệ điều hành khác, bạn phải sử dụng filesystem tương ứng. Nếu có thể lựa chọn tự do, Ext3 (hoặc các phiên bản mới hơn như Ext4) là lựa chọn thông minh vì có đầy đủ tính năng và hỗ trợ journaling.
Ngoài ra, /proc có thể được coi là một filesystem đặc biệt, mặc dù thực tế không phải. Nó cho phép truy cập dễ dàng vào các cấu trúc dữ liệu kernel, ví dụ như danh sách tiến trình.
Ví dụ, để xem danh sách các tiến trình, bạn có thể sử dụng lệnh:
ls -l /proc
Lưu ý rằng /proc không làm việc trực tiếp trên ổ đĩa mà chỉ tồn tại trong hệ thống ảo của kernel.
3. Nên Sử Dụng Filesystem Nào?
Hiện nay, Ext4 là filesystem phổ biến nhất trên Linux vì nó là hệ thống journaling (khả năng ghi lại các hoạt động của hệ thống khi thao tác trên dữ liệu, giúp phát hiện file bị lỗi nhanh chóng và khôi phục dữ liệu). ReiserFS cũng là một lựa chọn tốt vì có journaling.
Tùy thuộc vào các yếu tố như chi phí, tốc độ, độ tin cậy, khả năng tương thích, người dùng nên cân nhắc để lựa chọn filesystem phù hợp nhất.
Filesystem journaling giúp giảm thiểu mất dữ liệu trong trường hợp hệ thống gặp sự cố. Tuy nhiên, bạn vẫn nên sao lưu dữ liệu thường xuyên để phòng ngừa các tình huống xấu nhất.
4. Tạo Filesystem
Filesystem được tạo (khởi tạo) bằng lệnh mkfs. Thực chất, có một chương trình riêng biệt cho mỗi loại filesystem. mkfs chỉ là giao diện người dùng chạy chương trình thích hợp dựa trên loại filesystem được chỉ định bằng tùy chọn -t fstype.
Các chương trình được gọi bởi mkfs có giao diện dòng lệnh hơi khác nhau. Các tùy chọn phổ biến:
-t fstype: Chọn loại filesystem.-c: Tìm kiếm và đánh dấu các khối xấu.-l filename: Đọc danh sách các khối xấu từ file.
Ví dụ, để tạo filesystem Ext2 trên đĩa mềm:
fdformat -n /dev/fd0H1440
badblocks /dev/fd0H1440 > bad-blocks
mkfs.ext2 -l bad-blocks /dev/fd0H1440
Đầu tiên, đĩa mềm được định dạng. Sau đó, các khối xấu được tìm kiếm bằng badblocks và lưu vào file bad-blocks. Cuối cùng, filesystem được tạo với danh sách các khối xấu.
Hoặc, bạn có thể sử dụng tùy chọn -c của mkfs để thay thế cho badblocks:
mkfs.ext2 -c /dev/fd0H1440
Quá trình chuẩn bị filesystem trên đĩa cứng hoặc phân vùng tương tự như trên đĩa mềm, ngoại trừ việc không cần định dạng.
5. Kích Thước Khối Filesystem
Kích thước khối (block size) xác định kích thước mà filesystem sử dụng để đọc và ghi dữ liệu. Kích thước khối lớn hơn cải thiện hiệu suất I/O khi sử dụng các file lớn.
Tuy nhiên, nếu filesystem chứa nhiều file nhỏ, kích thước khối lớn có thể gây lãng phí không gian ổ đĩa. Ví dụ, file 256 byte sẽ chiếm 4KB nếu kích thước khối là 4KB.
Kích thước khối cũng có thể ảnh hưởng đến kích thước file tối đa được hỗ trợ trên một số filesystem.
Kết luận
Filesystem là một phần không thể thiếu của hệ điều hành, giúp quản lý và tổ chức dữ liệu hiệu quả. Việc lựa chọn filesystem phù hợp và hiểu rõ về các thông số cấu hình sẽ giúp bạn tối ưu hóa hiệu suất và bảo vệ dữ liệu một cách tốt nhất.
