Disk Inode là gì? Cách xem và sử dụng Inode trên Linux
Trong bài này chúng ta sẽ tìm hiểu về Disk Inode trong Linux, đây là một cấu trúc lưu trữ dữ liệu trên hệ thống Linux và UNIX. Ngoài ra mình cũng chỉ bạn cách sử dụng Inode tối ưu.
Như bạn biết, mọi thứ trong Linux đều được xem là một file để bảo đảm tính nhất quán, nó bao gồm các thiết bị phần cứng, máy in, thư mục và bộ vi xử lý processes. Còn các dữ liệu như file hình ảnh, video, văn bản thì ta gọi là siêu dữ liệu (metadata).
Vậy những điều trên có liên quan gì đến Inode? Inode là cơ sở của cấu trúc hệ thống file, chúng quản lý các siêu dữ liệu metadata và là một phần quan trọng của các hoạt động bên trong Linux.
1. Tìm hiểu cấu trúc hệ thống file của Linux
Một hệ thống file trong Linux được chia làm hai phần, đó là phần khối dữ liệu (data block) và phần inode. Phần block thì được cố định và không thể thay đổi, còn phần inode thì bạn có thể thay đổi được.
Bài viết này được đăng tại [free tuts .net]
Tên, đường dẫn, vị trí, liên kết và các thuộc tính khác của file không tồn tại trong thư mục. Thư mục chỉ đơn giản là các bảng chứa tên của các file có số inode phù hợp.
Bạn có thể tạo ra nhiều liên kết cứng (hard link) trỏ đến một file trong hệ thống, lúc này Linux cũng tạo một tên mới trong table của inode nhưng không di chuyển file.
Nếu bạn di chuyển một file lớn thì sẽ mất rất nhiều thời gian, nên tốt nhất là bạn tạo một entry mới trong thư mục mới, sau đó xóa entry ở thư mục cũ đi.
Về cấu trúc file, phần trên cùng chính là hệ thống file (file system). Trong file system là các file name, file name liên kết đến các inodes, các inodes liên kết đến dữ liệu vật lý.
2. Vậy inode là gì?
Trong Linux, inode là cấu truc dữ liệu, nó định nghĩa một file hoặc một folder trong file system và được lưu trữ trong directory entry. Inode sẽ trỏ đến các khối tạo nên một file và chứa tất cả các dữ liệu cần thiết để đọc một file. Mọi thông tin của siêu dữ liệu (metadata) đều được lưu trữ trong inode.
Inodes thường lặp gần vị trí bắt đầu của một phân vùng, nó lưu trữ tất cả thông tin liên quan đến file (ngoại trừ tên file và dữ liệu). Tất cả các file trong Linux đều có tên file và số inodes, và người dùng có thể truy xuất đến các thông tin của metadata thông qua inode.
Mọi inodes trong Linux đều có một identified number duy nhất, nó còn được gọi là số chỉ mục (index number) và có những thuộc tính sau.
- Kích thước
- Người tạo
- Ngày tạo
- Phân quyền
- Vị trí file
- Loại file
- Số lượng links
- Thông tin bổ sung về tệp
Để xem danh sách các chỉ số trên của inodes thì bạn chạy lệnh sau.
ls -i
Kết quả bên dưới hiển thị số inode ở cột đầu tiên.
3. Inodes hoạt động thế nào?
Khi bạn tạo một file mới thì nó sẽ được gán cho một tên và một inode, cả hai đều được lưu trữ dưới dạng enty trong một thư mục directory.
Bạn chạy lệnh ls -li
để hiển thị danh sách các file và số inodes được lưu trữ trong một thư mục.
Sử dụng lệnh df -hi
để liệt kê thông tin inode cho từng hệ thống file.
df -hi
3. Xem số lượng inode đã dùng
Khi bạn sử dụng hết số lượng inodes tối đa thì dù dung lượng ổ cứng disk vẫn còn thì vẫn không thể tạo file mới, đây chính là nguyên nhân dẫn đến một số VPS bị lỗi.
Việc số lượng inodes bị hết khiến các ứng dụng không thể tự động tạo ra các file log cần thiết, điều này có thể dẫn đến vps / server chết đột ngột.
Và để xem danh sách số lượng inodes đã dùng thì ta sử dụng lệnh sau.
sudo df -ih
4. Cách tối ưu inodes trên Linux là có thực?
Như mình đã nói ở trên, bạn không thể tạo một file khi số inodes đã hết, cho dù là dung lượng ổ cứng vẫn còn.
Khi bạn tạo một file trên Linux thì bạn nên sử dụng tùy chọn -i để thiết lập số byte cho mỗi inode (bytes-per-inode). Tỉ lệ byte trên inode càng lớn thì càng có ít inode được tạo ra.
Ví dụ dưới đây là cách tạo một file system EXT4 với tỷ lệ byte trên mỗi inode nhỏ trên phân vùng 4GB.
$ sudo mkfs.ext4 -i 16400 /dev/sdc1
Khi file system được tạo ra thì bạn không thể thay đổi số bytes-per-inode, trừ khi bạn format nó. Và việc thay đổi kích thước của file system thì cũng đồng nghĩa với việc đổi số lượng inodes để duy trì tỉ lệ đã thiết lập ở trên.
Ví dụ dưới đây là ta đã tạo với tỉ lệ byte per node lớn hơn.
$ sudo mkfs.ext4 -i 196800 /dev/sdc1
Trên là những thông tin cơ bản về khái niệm inode là gì, cấu trúc và cách thức hoạt động của inodes trên Linux. Chúc bạn thành công.