Lời đầu
Có lẽ ai trong chúng ta cũng đã quá quen thuộc với khái niệm "File",
Nhưng bạn đã bao giờ tự hỏi, các hệ điều hành UNIX/Linux lưu trữ và quản lý các file trong ổ đĩa kiểu gì? Các "file" có thực chất gắn liền với dữ liệu tương ứng của nó? Và nếu ta xóa một "file", dữ liệu của nó có thực sự mất đi?
Để trả lời cho câu hỏi trên, chúng ta sẽ cần biết đến khái niệm "Inode".
Inode là gì?
Trước tiên, chúng ta cần bàn chút về ổ cứng. Trên hệ điều hành, ổ cứng được coi như một mảng các "logical block" để lưu trữ dữ liệu. Và mỗi một file dữ liệu tương ứng với nhiều logical block phân tán trên khắp các phân vùng của ổ cứng.
Vậy làm cách nào hệ điều hành biết được một file bao gồm các block nào? Hay nói cách khác, làm sao nó lưu trữ và quản lý các block dữ liệu trong hệ thống của mình?
Câu trả lời là: Inode
Inode là một cấu trúc dữ liệu (Data structure) được sử dụng bởi các hệ điều hành UNIX, Linux để lưu trữ các thông tin quan trọng của file trong file system. Các thông tin đó bao gồm: Owner, group, Access permission, Size, Number of block, và quan trọng nhất là pointer to data blocks (con trỏ tới các block dữ liệu của file).
Để xem các thông tin của một file được lưu trữ bởi inode, ta có thể sử dụng lệnh
$ stat <file location>
Kết quả sẽ hiện thị tương tự như hình:
Số lượng inode có giới hạn?
Mỗi file/folder tương ứng với một inode, vậy số lượng inode có hữu hạn không?
Câu trả lời là có. Khi file system được khởi tạo, một thuật toán sẽ được áp dụng để tính ra số lượng inode dựa trên dung lượng của ổ đĩa tương ứng. Ví dụ, một số hệ thống sử dụng tỉ lệ 1:16 KB, tức là trung bình với mỗi 16KB storage thì sẽ có một inode.
Đây cũng chính là số lượng file/folder tối đa bạn có thể tạo và lưu trữ trên hệ thống file của mình.
Bạn có thể kiểm tra tình trạng sử dụng inode hiện tại của file system với câu lệnh:
$ df -i \<file system mount path>
# ví dụ
$ df -i /
Kết quả hiển thị sẽ bao gồm:
- Tổng số inode
- Số inode đã sử dụng, % inode đã sử dụng
- Số inode chưa sử dụng
Nếu đã sử dụng hết Inode của hệ thống, ngay cả khi dung lượng ổ đĩa vẫn còn, bạn sẽ không thể tạo được file/folder mới và nhận được thông báo "No space left on device".
Trường hợp phổ biến nhất gây nên hiện tượng này là khởi tạo quá nhiều thư mục và file có kích thước nhỏ. Do đó, chúng ta nên giữ số lượng inode ở mức thấp bằng các biện pháp như: xóa bớt files/thư mục ko dùng đến hay xóa cache files, old mail files, ...
Quay lại với câu hỏi ban đầu?
Liệu khi xóa một file thì dữ liệu tương ứng có mất đi?
Khi ta xóa file, thực chất là xóa liên kết từ file đến inode. Một inode có thể được liên kết với nhiều file, liên kết này được gọi là hard link.
Khi có nhu cầu chia sẻ một file dữ liệu cho nhiều người dùng, nhiều dịch vụ, thay vì copy dữ liệu, ta có thể tạo ra các hard link cùng trỏ tới một inode để tiết kiệm dung lượng.
Và dữ liệu cũng như inode tương ứng sẽ chỉ mất đi khi ta xóa tất cả các hard link tới inode, hay xóa tất cả các "hard linked" file.
That's it!!
Kết luận
Trong bài viết lần này mình đã chia sẻ chút hiểu biết của mình về Inode.
Nếu mọi người thấy kiến thức này bổ ích, đừng ngại upvote để tác giả có thêm động lực cho các bài viết tiếp theo nhé 😁😁!