Trương Văn Huy Hoàng
Thành viên
Inode là gì?
Inode (viết tắt của "index node" hoặc "information node") là một cấu trúc dữ liệu quan trọng trong các hệ thống tập tin kiểu Unix-like (như Linux, macOS, BSD). Nó chứa tất cả các thông tin về một tập tin hoặc thư mục, ngoại trừ tên tập tin và nội dung thực tế của tập tin.
Hãy tưởng tượng một thư viện khổng lồ. Tên sách và nơi bạn tìm thấy nó trên kệ sách được lưu trong mục lục (directory). Nhưng tất cả các thông tin khác về cuốn sách như tác giả, ngày xuất bản, số trang, loại bìa, và tình trạng (đang cho mượn hay không) được lưu trong một thẻ riêng biệt, được gọi là "thẻ thông tin sách". Inode chính là cái "thẻ thông tin sách" đó.
Cấu trúc và thông tin lưu trữ trong Inode
Mỗi Inode được gán một số hiệu duy nhất (Inode number) trong hệ thống tập tin. Số hiệu này là cách duy nhất để hệ điều hành nhận diện một tập tin hoặc thư mục.
Một Inode thường chứa các thông tin sau:
Inode đóng vai trò trung tâm trong cách các hệ thống tập tin kiểu Unix quản lý dữ liệu:
Inode (viết tắt của "index node" hoặc "information node") là một cấu trúc dữ liệu quan trọng trong các hệ thống tập tin kiểu Unix-like (như Linux, macOS, BSD). Nó chứa tất cả các thông tin về một tập tin hoặc thư mục, ngoại trừ tên tập tin và nội dung thực tế của tập tin.
Hãy tưởng tượng một thư viện khổng lồ. Tên sách và nơi bạn tìm thấy nó trên kệ sách được lưu trong mục lục (directory). Nhưng tất cả các thông tin khác về cuốn sách như tác giả, ngày xuất bản, số trang, loại bìa, và tình trạng (đang cho mượn hay không) được lưu trong một thẻ riêng biệt, được gọi là "thẻ thông tin sách". Inode chính là cái "thẻ thông tin sách" đó.
Cấu trúc và thông tin lưu trữ trong Inode
Mỗi Inode được gán một số hiệu duy nhất (Inode number) trong hệ thống tập tin. Số hiệu này là cách duy nhất để hệ điều hành nhận diện một tập tin hoặc thư mục.
Một Inode thường chứa các thông tin sau:
- Loại tập tin: Là tập tin thông thường, thư mục, liên kết cứng (hard link), liên kết mềm (symbolic link), thiết bị khối (block device), thiết bị ký tự (character device), hoặc socket.
- Quyền truy cập (Permissions): Ai có thể đọc, ghi, hoặc thực thi tập tin/thư mục này (chủ sở hữu, nhóm, người khác).
- ID của chủ sở hữu (User ID - UID): ID của người dùng sở hữu tập tin.
- ID của nhóm sở hữu (Group ID - GID): ID của nhóm sở hữu tập tin.
- Số lượng liên kết cứng (Number of hard links): Số lượng tên thư mục khác nhau trỏ đến cùng một Inode (tức là cùng một tập tin).
- Kích thước tập tin (File size): Kích thước của tập tin tính bằng byte.
- Thời gian (Timestamps):
- Thời gian truy cập cuối cùng (atime - access time): Lần cuối cùng tập tin được đọc.
- Thời gian sửa đổi cuối cùng (mtime - modification time): Lần cuối cùng nội dung tập tin được thay đổi.
- Thời gian thay đổi Inode cuối cùng (ctime - change time): Lần cuối cùng các thuộc tính của Inode (như quyền, chủ sở hữu) hoặc nội dung tập tin được thay đổi.
- Con trỏ đến các khối dữ liệu (Pointers to data blocks): Đây là phần quan trọng nhất. Inode không chứa trực tiếp nội dung của tập tin, mà nó chứa các địa chỉ của các khối dữ liệu (data blocks) trên ổ đĩa nơi nội dung tập tin thực sự được lưu trữ.
Inode đóng vai trò trung tâm trong cách các hệ thống tập tin kiểu Unix quản lý dữ liệu:
- Tách biệt siêu dữ liệu và dữ liệu: Inode tách biệt thông tin mô tả tập tin (siêu dữ liệu) khỏi nội dung thực tế của tập tin. Điều này giúp hệ thống quản lý tập tin hiệu quả hơn. Khi bạn liệt kê các tập tin trong một thư mục (ls -l), hệ thống đọc thông tin từ Inode mà không cần phải đọc toàn bộ nội dung của tập tin.
- Quản lý không gian đĩa: Inode biết các khối dữ liệu nào trên đĩa thuộc về một tập tin cụ thể. Khi một tập tin được tạo, hệ thống cấp phát một Inode và một hoặc nhiều khối dữ liệu. Khi tập tin bị xóa, Inode và các khối dữ liệu tương ứng được giải phóng.
- Hỗ trợ liên kết cứng (Hard Links): Liên kết cứng là các tên tập tin khác nhau trỏ đến cùng một Inode. Điều này có nghĩa là nhiều tên có thể tham chiếu đến cùng một dữ liệu vật lý trên đĩa. Khi một liên kết cứng được tạo, số lượng liên kết trong Inode tăng lên. Tập tin thực sự chỉ bị xóa khi số lượng liên kết cứng về nó bằng 0.
- Hiệu suất truy cập: Khi hệ điều hành cần truy cập một tập tin, nó sẽ tìm số Inode tương ứng trong thư mục. Sau đó, nó sử dụng số Inode này để truy xuất thông tin từ bảng Inode, và từ đó tìm đến các khối dữ liệu chứa nội dung tập tin. Quá trình này nhanh hơn nhiều so với việc phải tìm kiếm dữ liệu trên đĩa dựa vào tên tập tin.
- Giới hạn số lượng tập tin: Mỗi hệ thống tập tin có một số lượng Inode cố định (hoặc tối đa) được cấp phát khi nó được định dạng. Nếu tất cả các Inode được sử dụng hết, bạn sẽ không thể tạo thêm tập tin mới, ngay cả khi còn dung lượng trống trên đĩa. Đây là lý do tại sao đôi khi bạn thấy thông báo "No space left on device" mặc dù df -h cho thấy còn dung lượng trống.