Tại sao bảng inode thường không thể thay đổi kích thước?


19

Các hệ thống tệp Unix thường có bảng inode và số lượng mục trong bảng này thường được cố định tại thời điểm hệ thống tệp được tạo. Điều này đôi khi dẫn đến những người có nhiều không gian đĩa nhận được thông báo lỗi khó hiểu về không có dung lượng trống, và ngay cả sau khi họ tìm ra vấn đề là gì, không có giải pháp dễ dàng để làm gì về vấn đề đó.

Nhưng có vẻ như (với tôi) rằng sẽ rất mong muốn tránh được toàn bộ sự lộn xộn này bằng cách phân bổ các nút theo yêu cầu, hoàn toàn minh bạch cho người dùng và quản trị viên hệ thống. Nếu bạn vào các bản hack dễ thương, bạn thậm chí có thể biến bảng inode thành một tệp và do đó sử dụng lại mã mà bạn đã có để tìm không gian trống trên đĩa. Nếu bạn may mắn, bạn thậm chí có thể kết thúc với các nút gần các tệp mà không cần cố gắng để đạt được kết quả này.

Nhưng không ai (mà tôi biết) thực sự làm điều này, vì vậy có lẽ có một nhược điểm mà tôi đang thiếu. Bất cứ ý tưởng nó có thể là gì?


4
Bạn vừa phát minh lại Thư mục tệp chính và Chỉ mục tệp-11 trong VMS, tiền thân của Bảng tệp chính trong NTFS.
JdeBP

Tôi đã phát minh lại tiền thân của MFT? Mát mẻ!
Đánh dấu VY

Câu trả lời:


26

Giả sử bạn đã biến bảng inode thành một tệp; Vậy thì câu hỏi tiếp theo là ... bạn lưu trữ thông tin về tập tin đó ở đâu? Do đó, bạn cần các nút "thực" và các nút "mở rộng", như bảng phân vùng MS-DOS. Cho, bạn chỉ cần một (hoặc có thể một vài - ví dụ, để có tạp chí của bạn là một tập tin). Nhưng bạn thực sự có trường hợp đặc biệt, mã khác nhau. Bất kỳ tham nhũng cho tập tin đó cũng sẽ là thảm họa. Và hãy xem xét rằng, trước khi viết nhật ký, thông thường các tệp được viết chẳng hạn, khi mất điện sẽ bị hư hỏng nặng. Hoạt động tập tin của bạn sẽ cần phải là một rất nhiều mạnh mẽ hơn so với mất điện / tai nạn / etc. hơn họ đã ở trên, ví dụ, ext2.

Các hệ thống tập tin Unix truyền thống đã tìm thấy một giải pháp đơn giản hơn (và mạnh mẽ hơn): đặt một khối inode (hoặc nhóm các khối) cho mỗi khối X. Sau đó, bạn tìm thấy chúng bằng số học đơn giản. Tất nhiên, sau đó không thể thêm nhiều hơn (mà không cấu trúc lại toàn bộ hệ thống tập tin). Và ngay cả khi bạn mất / hỏng khối inode mà bạn đã viết khi mất điện, điều đó chỉ mất một vài nút - tốt hơn nhiều so với một phần đáng kể của hệ thống tệp.

Thiết kế hiện đại hơn sử dụng những thứ như biến thể B-cây . Các hệ thống tệp hiện đại như btrfs, XFS và ZFS không bị giới hạn inode.


2
Khi bạn nói "không bị giới hạn inode", điều đó có nghĩa là các nút mới được phân bổ hoàn toàn phía sau hậu trường, hoặc ai đó cần phải chạy một lệnh như "mở rộng bảng bây giờ"?
Đánh dấu VY

3
@MarkVY hoàn toàn đằng sau hậu trường (nếu inodes thực sự được sử dụng).
derobert

Được rồi, vì vậy kiến ​​thức của tôi chỉ là cách phía sau thời gian rõ ràng. Cảm ơn bạn đã trả lời chi tiết. Tôi chưa bao giờ nghĩ về những gì sẽ xảy ra trong trường hợp mất điện hoặc tương tự. Vì vậy, hack dễ thương của tôi là khá nguy hiểm trừ khi "chắp thêm vào tập tin" đã là một hoạt động nguyên tử trong hệ thống tập tin. Mà bạn tuyên bố là khá hiếm trở lại trong thời xa xưa.
Đánh dấu VY

Tôi nhớ XFS và btrfs rất thỉnh thoảng bị tham nhũng hệ thống tập tin nhẹ - zfs quá? Nó không phải là rủi ro đối với một số người, nhưng nó có thể là rủi ro cho dữ liệu quan trọng và chi phí phân bổ động. Đối với XFS tại cửa hàng này, vấn đề vi phạm thỏa thuận của nó là hoàn toàn không có khả năng thu nhỏ hệ thống tập tin thông qua bất kỳ phương tiện nào.
dùng2066657

Btrfs có thể không bị giới hạn inode, nhưng nó bị một lỗi hoàn toàn khác gây ra các triệu chứng khó hiểu tương tự (về cơ bản, nó hết dung lượng siêu dữ liệu trong khi vẫn còn nhiều không gian dữ liệu, do sử dụng không hiệu quả các nhóm khối). Điều này không chỉ khiến nó báo cáo lỗi đầy đĩa khi dfbáo cáo còn nhiều dung lượng, nó không thể được sửa bằng cách xóa tệp vì xóa tệp yêu cầu phân bổ không gian siêu dữ liệu.
Đánh dấu

17

Nhiều hệ thống tập tin có bảng inode phân bổ động (hoặc tương đương đạo đức của nó) (XFS, BTRFS, ZFS, VxFS ...)

Unix UFS ban đầu mặc dù có các nút được cố định tại thời điểm tạo hệ thống tệp và các hệ thống tệp có nguồn gốc từ nó (Linux EXT, Solaris UFS) thường tiếp tục sơ đồ. Đó là mạnh mẽ và đơn giản để thực hiện. Vì vậy, nhiều trường hợp sử dụng rất phù hợp, rằng thiết kế một hệ thống tệp mới chỉ để tránh một vấn đề không dễ biện minh.


Mặc dù vậy, rất nhiều tiến bộ trong điện toán đã được thực hiện bởi những người giải quyết các vấn đề không dễ giải quyết, mặc dù.
dùng253751

2
Nhưng cũng có nhiều tiến bộ trong các giải pháp không dễ giải quyết :) Các hệ thống tệp "phức tạp" ban đầu - NTFS thời đại NT, reiserfs - đã có một cách thất bại thảm hại KHI chúng thất bại ....
rackandboneman

6

Có các hệ thống tệp phân bổ các nút một cách linh hoạt: ngoài đỉnh đầu của tôi, ít nhất là Veritas VxFS (= hệ thống tệp mặc định của HP-UX và một trong các lựa chọn có sẵn trên Solaris) và XFS (loại hệ thống tệp tiêu chuẩn trên RHEL 7) hoạt động theo cách đó Btrfs và JFS của IBM cũng vậy.

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.