'Xử lý tệp cũ' trong Linux có nghĩa là gì?


100

Giả sử tôi có một thiết bị đầu cuối đang mở và thông qua thiết bị đầu cuối đó, tôi đã cdchuyển đến một số thư mục. Thông qua một thiết bị đầu cuối khác, tôi xóa thư mục đó và khôi phục lại nó từ một bản sao lưu giống hệt. Khi tôi cố gắng truy cập vimtệp từ thiết bị đầu cuối đầu tiên, trong cùng một thư mục, tại sao tôi lại gặp lỗi về xử lý tệp cũ? Nó có nghĩa là gì? (Một lưu ý nhỏ là tôi nhận thấy rằng có thể bỏ qua vấn đề này cd $(pwd).)


Nếu bạn NFS gắn một thư mục (đặt tên là adir) từ máy chủ A sang máy chủ B, sau đó thực hiện thao tác xóa và khôi phục cho adir trên máy chủ A, bạn cũng có thể gặp lỗi "Stale file handle" khi bạn truy cập adir trên máy chủ. B. Sử dụng lệnh touchtrên máy chủ A có thể làm cho nó hoạt động bình thường.
gỉyhu

Câu trả lời:


83

Khi thư mục bị xóa, inode cho thư mục đó (và các inode cho nội dung của nó) sẽ được tái chế. Con trỏ mà trình bao của bạn có tới inode của thư mục đó (và inodes của nội dung của nó) giờ không còn hợp lệ nữa. Khi thư mục được khôi phục từ bản sao lưu, các inodes cũ không (nhất thiết) được sử dụng lại; thư mục và nội dung của nó được lưu trữ trên các inodes ngẫu nhiên. Điều duy nhất giữ nguyên là thư mục mẹ sử dụng lại cùng tên cho thư mục đã khôi phục (vì bạn đã yêu cầu).

Bây giờ nếu bạn cố gắng truy cập nội dung của thư mục mà trình bao ban đầu của bạn vẫn đang trỏ đến, nó sẽ truyền yêu cầu đó tới hệ thống tệp dưới dạng yêu cầu đối với inode ban đầu, từ đó đã được tái chế (và thậm chí có thể được sử dụng cho một thứ gì đó hoàn toàn khác bây giờ). Vì vậy, bạn nhận được mộtstale file handle thông báo vì bạn đã yêu cầu một số dữ liệu không tồn tại.

Khi bạn thực hiện một cdthao tác, trình bao sẽ đánh giá lại vị trí inode của bất kỳ điểm đến nào bạn cung cấp cho nó. Bây giờ trình bao của bạn biết inode mới cho thư mục (và inode mới cho nội dung của nó), các yêu cầu trong tương lai đối với nội dung của nó sẽ hợp lệ.


À, vậy đây chỉ là cách của hệ thống để xử lý các con trỏ inode không hợp lệ / null?
IDDQD

Đúng. Tôi không biết đủ chi tiết để biết điều gì sẽ xảy ra, chẳng hạn như bạn cố gắng tham chiếu một inode đã được tái chế để chỉ vào một thứ khác. Bạn sẽ vẫn nhận được một xử lý tệp cũ? Hoặc bạn sẽ nhận được dữ liệu bất ngờ?
dg99,

1
Tôi không nghĩ rằng hệ thống sẽ sử dụng lại nó vì ai đó thực sự đang sử dụng I-node đó bằng cách đặt nó làm thư mục hiện tại.
Samuel Åslund
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.