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


125

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 từ góc độ của một tập hợp các đối tượng phổ biến và các đối tượng này là siêu khối , inode , nha khoatệp . 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?

Câu trả lời:


136

Đầ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.

Các superblock về cơ bản là hệ thống tập tin siêu dữ liệu và xác định loại tập tin hệ thống, kích thước, trạng thái và thông tin về cấu trúc dữ liệu khác (siêu dữ liệu 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 gặp trong sự kiện này, bạn cần chạyfscksẽ tự động chọn một bản sao dự phòng của siêu khối 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ề các bản sao lưu siêu khối bằng lệnh dumpe2fs /dev/foo | grep -i superblockhữu ích trong trường hợp có nỗ lực 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.

Một nha khoa là chất keo giữ các nút và các tệp với 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.

Một tập tin , ngoài việc là những gì con người thường nghĩ đến khi được trình bày với từ này, 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.


@Tok: Nó sẽ kết xuất như thế này (như trong câu trả lời): Siêu sao lưu dự phòng ở 163840, mô tả nhóm ở 163841-163841 hoặc theo cách này: Siêu sao lưu dự phòng ở 163840, mô tả nhóm ở 163841-163842? Đó có phải là một lỗi đánh máy? :-)
Sen

@TOK: Siêu sao lưu dự phòng ở 163840, Mô tả nhóm ở 163841-163842, Mô tả nhóm truyền đạt thông tin gì?
Sen

@Sen - về mặt lý thuyết, các mô tả nhóm có thể trải rộng trên nhiều khối, nhưng đối với hầu hết các hệ thống máy tính để bàn, bạn sẽ thấy chúng chỉ mất một khối duy nhất và được tham chiếu là $ ((BackupBlock + 1)) - $ ((BackupBlock + 1))
Tok

@TOK: ok trong hệ thống của tôi, tôi thấy nó giống như $ ((BackupBlock + 1)) - $ ((BackupBlock + 2))
Sen

@Sen - Bộ mô tả nhóm mô tả một nhóm khối. Điều đó nghĩa là gì? Thêm siêu dữ liệu. Về cơ bản, một bộ mô tả nhóm chứa một bitmap khối (số khối của bitmap phân bổ khối), một bitmap inode (tương tự nhưng đối với các nút), một bảng inode (số khối của khối bắt đầu cho bảng inode), khối miễn phí và số lượng inode, và số lượng thư mục được sử dụng. Đây là tất cả dựa trên một hệ thống tập tin ext2. Các mô tả nhóm rất quan trọng đối với hoạt động của hệ thống tệp thích hợp và được sao chép cùng với siêu khối.
Tok

49

Tập tin

Một tệp chỉ có nghĩa là một bó 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 ra một đối tượng tệp, chứa dữ liệu về nơi tệp được lưu trữ và quá trình nào đ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.

Inode

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 khoa

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.


11

superblock , nút chỉ mục (hoặc inode ), mục nhập thư mục (hoặc nha khoa ) và cuối cùng, đối tượng tệp 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

nhập mô tả hình ảnh ở đây


Một inode là một cấu trúc dữ liệu trên một hệ thống tập tin 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 . Các thiết bị đầu vào và đầu ra, và nói chung tất cả các thiết bị, được coi là các tệp , theo hệ thống.

Các superblock là container cho cấp cao siêu dữ liệu về một hệ thống tập tin. 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


5

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 răng và inode là răng đượ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 tin" 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_opentrong 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 (vd / 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ọ.


4

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 đã xác định 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.


Hy vọng bạn sẽ đọc được bình luận này sau một thời gian dài. Tôi đọc được rằng VFS có inodes và superblocks không liên quan đến inodes và superblocks của EXT2. Vì vậy, chỉ cần không hiểu sai những gì bạn nói, bởi vì mọi Linux đều có VFS, tất cả chúng nên được sử dụng inodes và superblock, phải không?
CuriousKimchi

1
@CantlyKimchi Mặc dù thực tế chúng có cùng tên ở đây, bạn không nên nhầm lẫn thông tin được lưu trữ trên đĩa (superblock / inodes) và các cấu trúc được sử dụng bởi kernel để truy cập hệ thống tệp và tệp của nó. Mỗi hệ thống tệp có một số siêu dữ liệu trên đĩa mô tả các đặc điểm của hệ thống tệp, siêu dữ liệu này được sử dụng để đưa vào cấu trúc siêu khối Linux VFS. Tương tự, các tệp có cấu trúc inode kernel trong VFS. Khi các hệ thống tệp cơ bản thiếu khái niệm về inode, cấu trúc này chứa một số inode giả được tạo bởi hệ điều hành.
jlliagre
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.