Tình huống kinh điển: Tôi đã chạy xấu rm
và nhận ra ngay sau đó rằng tôi đã xóa các tệp sai. (Không có gì quan trọng và tôi đã chấp nhận các bản sao lưu gần đây, nhưng vẫn gây phiền nhiễu.)
Biết rằng hoạt động đĩa tiếp theo là kẻ thù của tôi nếu tôi muốn khôi phục các tệp bằng extundelete
hoặc các công cụ như vậy, tôi ngay lập tức tắt máy xuống (ví dụ, bằng nút nguồn, không phải bằng halt
hoặc bất kỳ lệnh nào như vậy). Đây là một máy tính xách tay không có nhiệm vụ quan trọng đang chạy hoặc bất cứ điều gì mở, vì vậy nó là một hoạt động chấp nhận được. (Nhân tiện, tôi đã học được từ đó rằng điều đầu tiên cần làm trong tình huống như vậy sẽ là ước tính trước nếu các tệp bị thiếu vẫn có thể được mở bằng một quy trình https://unix.stackexchange.com/a/101247 - nếu có, bạn nên khôi phục chúng theo cách này thay vì tắt nguồn máy.)
Tuy nhiên, một khi máy bị tắt nguồn, tôi đã suy nghĩ một lúc và quyết định các tập tin không đáng để đầu tư thời gian để khởi động một hệ thống trực tiếp cho pháp y thích hợp. Vì vậy, tôi cung cấp cho máy sao lưu. Và sau đó tôi phát hiện ra rằng các tập tin của tôi vẫn còn nằm trên đĩa: chúng rm
không được truyền vào đĩa trước khi tôi tắt nguồn. Tôi đã làm một điệu nhảy nhỏ và cảm ơn thần sysadins vì sự tha thứ bất ngờ của anh ấy.
Câu hỏi của tôi bây giờ là hiểu làm thế nào điều này là có thể, và sự chậm trễ điển hình trước khi rm
thực sự được truyền vào đĩa. Tôi biết rằng đĩa IO không bị xóa ngay lập tức nhưng nó sẽ nằm trong bộ nhớ một thời gian, nhưng tôi nghĩ rằng nhật ký đĩa sẽ đảm bảo nhanh chóng rằng các hoạt động đang chờ xử lý không bị mất hoàn toàn. https://unix.stackexchange.com/a/78766 dường như gợi ý về một cơ chế riêng biệt để xóa các trang bẩn và xóa các hoạt động của tạp chí nhưng không cung cấp đủ chi tiết về cách tạp chí sẽ tham gia rm
và sự chậm trễ dự kiến trước đó hoạt động được tuôn ra.
Một số chi tiết khác: dữ liệu nằm trong một phân vùng ext4 bên trong một khối LUKS và khi khởi động lại máy, tôi đã thấy như sau syslog
:
Sep 24 10:24:58 gamma kernel: [ 11.457007] EXT4-fs (dm-0): 1 orphan inode deleted
Sep 24 10:24:58 gamma kernel: [ 11.458393] EXT4-fs (dm-0): recovery complete
Sep 24 10:24:58 gamma kernel: [ 11.482475] EXT4-fs (dm-0): mounted filesystem with ordered data mode. Opts: (null)
nhưng tôi không tự tin nó có liên quan đến rm
.
Một câu hỏi khác là liệu có cách nào để bảo kernel không thực hiện bất kỳ thao tác đĩa đang chờ xử lý nào không (nhưng nói đúng hơn là bỏ chúng ở đâu đó), thay vì tắt nguồn máy. (Tất nhiên, nghe có vẻ nguy hiểm khi không thực hiện các thao tác đang chờ xử lý, nhưng đây là điều sẽ xảy ra khi tắt nguồn máy, và một số trường hợp có thể cứu bạn.) Điều này sẽ "sạch" hơn, và cũng thú vị ví dụ như các máy chủ từ xa trong đó tắt nguồn vật lý không phải là một lựa chọn dễ dàng.
rm
được viết? Nói cách khác, mọi thứ chỉ được cam kết với tạp chí khi một bài viết sắp được thực hiện? Hay là bức tranh phức tạp hơn thế? Đối với alt-sysrq-u, đây là một ý tưởng khá gọn gàng. Bạn có tài liệu tham khảo để đưa ra yêu cầu "Nó xuất hiện" không? (Có vẻ như không theo dõi từ các liên kết mà bạn đã đưa ra.) Cảm ơn! :)