Класична ситуація: я побіг погано rmі відразу після цього зрозумів, що видалив неправильні файли. (Нічого критичного, і у мене були терпимі останні резервні копії, але все ще дратує.)
Знаючи, що подальша активність диска була моїм ворогом, якщо я хотів відновити файли за допомогою extundeleteтаких інструментів, я негайно вимкнув машину фізично (тобто за допомогою кнопки живлення, а не з haltбудь-якою командою). Цей ноутбук не мав жодних важливих завдань і нічого відкритого, тому це було прийнятною операцією. (До речі, з того часу я дізнався, що перше, що потрібно зробити в такій ситуації, - це спочатку оцінити, чи відсутні файли все-таки можуть бути відкриті процесом https://unix.stackexchange.com/a/101247 - якщо вони є, вам слід відновити їх таким чином, а не вимикати живлення машини.)
І все-таки, коли машина вимкнулася, я деякий час подумав і вирішив, що файли не варті того часу, щоб вкласти кошти живої системи для належної криміналістики. Тому я підключив машину назад. І тоді я виявив, що мої файли все ще сидять на диску: rmвони не були передані на диск до того, як я вимкнувся. Я трохи потанцював і подякував богу сисадмінів за його несподіване прощення.
Моє запитання тепер полягає в тому, щоб зрозуміти, як це стало можливим, і яка типова затримка перед тим, як rmнасправді передається на диск. Я знаю, що IO диска не змивається відразу, але він деякий час залишається в пам'яті, але я подумав, що журнал дисків швидко переконається, що очікувані операції не втратяться повністю. https://unix.stackexchange.com/a/78766, схоже, натякає на окремий механізм для промивання брудних сторінок та для очищення журнальних операцій, але не дає достатньо детальних відомостей про те, як журнал буде задіяний для rm, та очікувану затримку до операції промиті.
Ще деякі деталі: дані знаходилися в розділі ext4 всередині LUKS-тому, і під час завантаження машини резервного копіювання я побачив наступне в 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)
але я не впевнений, що це пов'язано з rm.
Інше питання полягає в тому, чи є спосіб сказати ядру не виконувати жодних операцій, що очікують на диску (а, скажімо, скинути їх кудись), а не живити машину. (Звичайно, це не небезпечно виконувати очікувані операції, але це буде те, що все одно відбудеться при вимкненні машини, і це може врятувати вас у деяких випадках.) Звичайно, це було б "чистіше", а також цікаво наприклад, віддалені сервери, де фізичне вимкнення живлення не є простим варіантом.
rmпочинає писатися? Інакше кажучи, речі вносяться до журналу лише тоді, коли написання збирається виконати? Або картина складніша за це? Що стосується alt-sysrq-u, то це досить акуратна ідея. Чи маєте ви посилання на претензію "Здається"? (Схоже, це не випливає із посилань, які ви дали.) Дякую! :)