Situazione classica: ho corso male rm
e mi sono reso conto subito dopo di aver rimosso i file sbagliati. (Niente di critico e ho avuto backup abbastanza recenti, ma comunque fastidiosi.)
Sapendo che un'ulteriore attività del disco era il mio nemico se volevo recuperare i file con extundelete
o tali strumenti, ho immediatamente spento la macchina fisicamente (cioè con il pulsante di accensione, non con halt
o qualsiasi comando simile). Era un laptop senza compiti importanti in esecuzione o con qualcosa di aperto, quindi era un'operazione accettabile. (A proposito, ho imparato da allora che la prima cosa da fare in una situazione del genere sarebbe stimare prima se i file mancanti potrebbero essere ancora aperti da un processo https://unix.stackexchange.com/a/101247 - se lo sono, è necessario ripristinarli in questo modo anziché spegnere la macchina.)
Tuttavia, una volta che la macchina è stata spenta, ho pensato per un po 'e ho deciso che i file non valevano il tempo impiegato per l'avvio di un sistema live per una corretta analisi forense. Quindi ho riacceso la macchina. E poi ho scoperto che i miei file erano ancora su disco: rm
non erano stati propagati su disco prima di averlo spento. Ho fatto una piccola danza e ho ringraziato il dio degli amministratori di sistema per il suo inatteso perdono.
La mia domanda ora è capire come ciò sia stato possibile e quale sia il ritardo tipico prima che un oggetto rm
venga propagato su disco. So che l'IO del disco non viene scaricato immediatamente ma che rimane in memoria per un po 'di tempo, ma ho pensato che il journal del disco si sarebbe assicurato rapidamente che le operazioni in sospeso non venissero completamente perse. https://unix.stackexchange.com/a/78766 sembra suggerire un meccanismo separato per svuotare le pagine sporche e svuotare le operazioni del giornale, ma non fornisce dettagli sufficienti su come il giornale sarebbe coinvolto per un rm
e il ritardo previsto prima le operazioni vengono scaricate.
Qualche dettaglio in più: i dati erano in una partizione ext4 all'interno di un volume LUKS, e all'avvio del backup della macchina ho visto quanto segue in 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)
ma non sono sicuro che sia legato al rm
.
Un'altra domanda sarebbe se c'è un modo per dire al kernel di non eseguire nessuna delle operazioni su disco in sospeso (ma piuttosto, diciamo, scaricarle da qualche parte), piuttosto che spegnere la macchina. (Certo, sembra pericoloso non eseguire le operazioni in sospeso, ma questo è ciò che accadrebbe quando si spegne comunque la macchina, e in alcuni casi potrebbe salvarti.) Sarebbe "più pulito", ovviamente, e anche interessante ad es. server remoti in cui il powerdown fisico non è un'opzione facile.
rm
venga scritto? In altre parole, le cose sono impegnate nel diario solo quando una scrittura sta per essere eseguita? O l'immagine è più complessa di così? Per quanto riguarda alt-sysrq-u, questa è un'idea abbastanza chiara. Hai un riferimento da dare per il reclamo "Sembra"? (Non sembra seguire i link che hai dato.) Grazie! :)