Класична ситуація: я побіг погано 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, то це досить акуратна ідея. Чи маєте ви посилання на претензію "Здається"? (Схоже, це не випливає із посилань, які ви дали.) Дякую! :)