it-swarm-vi.com

Superblock, Inode, Dentry và File là gì?

Từ bài viết Giải phẫu hệ thống tệp Linux của M. Tim Jones, tôi đọc được rằng Linux xem tất cả các hệ thống tệp theo quan điểm của một tập hợp các đối tượng chung và các đối tượng này là siêu khối, inode, nha file. Mặc dù phần còn lại của đoạn văn giải thích ở trên, tôi không thoải mái với lời giải thích đó.

Ai đó có thể giải thích cho tôi những điều khoản?

132
Sen

Đầu tiên và quan trọng nhất, và tôi nhận ra rằng đó không phải là một trong những thuật ngữ từ câu hỏi của bạn, bạn phải hiểu siêu dữ liệu . Một cách ngắn gọn và bị đánh cắp từ Wikipedia, siêu dữ liệu là dữ liệu về dữ liệu. Đó là để nói rằng siêu dữ liệu chứa thông tin về một phần dữ liệu. Ví dụ, nếu tôi sở hữu một chiếc xe hơi thì tôi có một bộ thông tin về chiếc xe nhưng đó không phải là một phần của chính chiếc xe. Thông tin như số đăng ký, nhãn hiệu, kiểu máy, năm sản xuất, thông tin bảo hiểm, v.v. Tất cả thông tin đó được gọi chung là siêu dữ liệu. Trong siêu dữ liệu hệ thống tệp Linux và UNIX tồn tại ở nhiều cấp độ tổ chức như bạn sẽ thấy.

superblock về cơ bản là siêu dữ liệu hệ thống tệp và xác định loại hệ thống tệp, kích thước, trạng thái và thông tin về các cấu trúc siêu dữ liệu khác (siêu dữ liệu của siêu dữ liệu). Superblock rất quan trọng đối với hệ thống tệp và do đó được lưu trữ trong nhiều bản sao dự phòng cho mỗi hệ thống tệp. Superblock là một cấu trúc siêu dữ liệu rất "cao cấp" cho hệ thống tệp. Ví dụ: nếu siêu khối của phân vùng,/var, bị hỏng thì hệ thống tệp được đề cập (/ var) không thể được gắn bởi hệ điều hành. Thông thường trong sự kiện này, bạn cần chạy fsck sẽ tự động chọn một bản sao dự phòng, siêu sao lưu và cố gắng khôi phục hệ thống tệp. Bản thân các bản sao lưu được lưu trữ trong các nhóm khối trải qua hệ thống tệp với lần đầu tiên được lưu trữ ở độ lệch 1 khối từ khi bắt đầu phân vùng. Điều này rất quan trọng trong trường hợp cần phục hồi thủ công. Bạn có thể xem thông tin về sao lưu siêu khối ext2/ext3/ext4 bằng lệnh dumpe2fs /dev/foo | grep -i superblock hữu ích trong trường hợp cố gắng khôi phục thủ công. Chúng ta hãy giả sử rằng lệnh dumpe2fs xuất ra dòng Backup superblock at 163840, Group descriptors at 163841-163841. Chúng tôi có thể sử dụng thông tin này và kiến ​​thức bổ sung về cấu trúc hệ thống tệp để cố gắng sử dụng bản sao lưu siêu khối này: /sbin/fsck.ext3 -b 163840 -B 1024 /dev/foo. Xin lưu ý rằng tôi đã giả sử kích thước khối là 1024 byte cho ví dụ này.

Một inode tồn tại trong hoặc trên một hệ thống tệp và biểu thị siêu dữ liệu về một tệp. Để rõ ràng, tất cả các đối tượng trong một hệ thống Linux hoặc UNIX là các tệp; tập tin thực tế, thư mục, thiết bị, vv Xin lưu ý rằng, trong số các siêu dữ liệu có trong một nút, không có tên tệp như con người nghĩ về nó, điều này sẽ quan trọng sau này. Một inode chứa thông tin cơ bản về quyền sở hữu (người dùng, nhóm), chế độ truy cập (đọc, viết, thực thi quyền) và loại tệp.

A dentry là chất keo giữ các nút và tệp cùng nhau bằng cách liên kết các số inode với tên tệp. Nha khoa cũng đóng một vai trò trong bộ nhớ đệm thư mục, lý tưởng nhất là giữ các tệp được sử dụng thường xuyên nhất để truy cập nhanh hơn. Truyền tải hệ thống tệp là một khía cạnh khác của nha khoa vì nó duy trì mối quan hệ giữa các thư mục và các tệp của chúng.

A file, ngoài việc là những gì con người thường nghĩ đến khi được trình bày với Word, thực sự chỉ là một khối dữ liệu tùy ý liên quan đến logic. So sánh rất buồn tẻ khi xem xét tất cả các công việc được thực hiện (ở trên) để theo dõi chúng.

Tôi hoàn toàn nhận ra rằng một vài câu không cung cấp giải thích đầy đủ về bất kỳ khái niệm nào trong số này, vì vậy xin vui lòng hỏi thêm chi tiết khi và khi cần thiết.

144
Tok

Tập tin

Một tập tin chỉ có nghĩa là một loạt các byte được sắp xếp theo một thứ tự nhất định. Đó là những gì người bình thường gọi là nội dung của một tập tin. Khi Linux mở một tệp, nó cũng tạo một đối tượng tệp, chứa dữ liệu về nơi tệp được lưu trữ và các quy trình đang sử dụng tệp đó. Đối tượng tệp (nhưng không phải dữ liệu tệp) bị vứt đi khi tệp được đóng.

Nút

Một nút (viết tắt của "nút chỉ mục") là một loạt các thuộc tính về một tệp mà Linux lưu trữ. Có một nút cho mỗi tệp (mặc dù với một số hệ thống tệp, Linux phải tạo các nút riêng vì thông tin được lan truyền xung quanh hệ thống tệp). Inode lưu trữ thông tin như ai sở hữu tệp, độ lớn của tệp và ai được phép mở tệp. Mỗi inode cũng chứa một số duy nhất cho phân vùng hệ thống tập tin; nó giống như một số sê-ri cho tệp được mô tả bởi nút đó.

Nha

Một vết lõm (viết tắt của "mục nhập thư mục") là những gì mà nhân Linux sử dụng để theo dõi thứ bậc của các tệp trong các thư mục. Mỗi nha khoa ánh xạ một số inode đến một tên tệp và một thư mục cha.

Siêu khối

Superblock là một cấu trúc dữ liệu duy nhất trong một hệ thống tệp (mặc dù có nhiều bản sao tồn tại để bảo vệ chống tham nhũng). Superblock chứa siêu dữ liệu về hệ thống tệp, giống như inode là thư mục cấp cao nhất và loại hệ thống tệp được sử dụng.

50
pingswept

superblock , nút chỉ mục (hoặc inode ), mục nhập thư mục ( hoặc dentry ) và cuối cùng, đối tượng là một phần của hệ thống tệp ảo (VFS) hoặc chuyển đổi hệ thống tệp ảo . Mục đích của VFS là cho phép các ứng dụng khách truy cập các loại hệ thống tệp cụ thể khác nhau một cách thống nhất.

Mối quan hệ của các đối tượng chính trong VFS

enter image description here


Một Inode là cấu trúc dữ liệu trên hệ thống tệp Unix/Linux. Một inode lưu trữ dữ liệu meta về một tệp thông thường, thư mục hoặc đối tượng hệ thống tệp khác. Inode hoạt động như một giao diện giữa các tập tin và dữ liệu. Một inode có thể tham chiếu đến một tập tin hoặc một thư mục hoặc một liên kết tượng trưng đến một đối tượng khác. Nó chứa một số duy nhất (số i), thuộc tính của tệp, bao gồm tên, ngày, kích thước và quyền đọc/ghi và một con trỏ đến vị trí của tệp. Nó là bản sao của bảng FAT trong thế giới DOS/Windows.

Các chương trình, dịch vụ, văn bản, hình ảnh, v.v., đều là các tệp . Thiết bị đầu vào và đầu ra, và nói chung tất cả các thiết bị, được coi là tệp , theo hệ thống.

Siêu khối là bộ chứa siêu dữ liệu cấp cao về một hệ thống tệp. Superblock là một cấu trúc tồn tại trên đĩa (thực tế, nhiều vị trí trên đĩa để dự phòng) và cả trong bộ nhớ. Nó cung cấp cơ sở để xử lý hệ thống tệp trên đĩa, vì nó xác định các tham số quản lý của hệ thống tệp (ví dụ: tổng số khối, khối miễn phí, nút chỉ mục gốc).

Dentry là giao diện giữa các tập tin và Inodes. Nha khoa cũng đóng một vai trò trong bộ nhớ đệm thư mục, lý tưởng nhất là giữ các tệp được sử dụng thường xuyên nhất để truy cập nhanh hơn.

Nguồn

14
Premraj

Trong đơn giản, răng và inode là cùng một thứ, một sự trừu tượng của tập tin hoặc thư mục. Sự khác biệt giữa nha và inode là nha khoa được sử dụng để tạo điều kiện thuận lợi cho các hoạt động cụ thể của thư mục, inode chỉ là một tập hợp siêu dữ liệu về tệp hoặc thư mục. Superblock là sự trừu tượng của hệ thống tập tin.

struct file, trong kernel linux, được đặt tên sai là nhiều người khác (ví dụ: struct address_space) và không phải là một bản tóm tắt của một "tệp" thực sự (ví dụ:/etc/passwd). Nó là viết tắt của một "tập tin" hoặc thư mục mở. struct file được tạo bởi sys_open trong kernel, vì vậy một tiến trình có thể có rất nhiều struct files cho cùng một tệp.

Tại sao chúng ta cần nha khoa? Nó được sử dụng để tăng tốc độ dịch từ tên đường dẫn (ví dụ:/etc/passwd) sang inode. Nhân Linux sử dụng inode để thao tác "tập tin" hoặc thư mục, không phải tên của họ.

5
firo

Lưu ý rằng các điều khoản này không phải là Linux cụ thể mà là hệ thống tệp cụ thể. Hầu hết các hệ thống tệp được sử dụng bởi các hệ thống Unix và Unix hiện tại đều có nguồn gốc hoặc được lấy cảm hứng từ hệ thống tệp Unix gốc đã định nghĩa các thành ngữ siêu khối và inode. Linux cũng có thể gắn kết một số hệ thống tập tin mà không có khái niệm về siêu khối và/hoặc inode, phổ biến nhất là FAT. Một số khác, ZFS, không sử dụng superblocks nhưng überblocks.

4
jlliagre