Cosa significa "gestione file obsoleto" in Linux?


100

Diciamo che ho un terminale aperto e tramite quel terminale sono passato cda qualche directory. Tramite un altro terminale, elimino quella directory e la ripristino da un backup identico. Quando provo a vimun file dal primo terminale, nella stessa directory, perché ottengo un errore su un handle di file non aggiornato? Cosa significa? (In una nota a margine, ho scoperto che è possibile aggirare questo problema cd $(pwd).)


Se monti NFS una directory (chiamala adir) dall'host A all'host B, quindi esegui l'operazione di eliminazione e ripristino per adir sull'host A, puoi anche ricevere l'errore "Stale file handle" quando accedi adir sull'host B. Utilizzare il comando touchsull'host A può renderlo normale.
rustyhu

Risposte:


83

Quando la directory viene cancellata, l' inode per quella directory (e gli inode per il suo contenuto) vengono riciclati. Il puntatore che la tua shell ha all'inode di quella directory (e gli inode del suo contenuto) ora non sono più validi. Quando la directory viene ripristinata dal backup, i vecchi inode non vengono (necessariamente) riutilizzati; la directory e il suo contenuto sono memorizzati su inode casuali. L'unica cosa che rimane la stessa è che la directory padre riutilizza lo stesso nome per la directory ripristinata (perché glielo hai detto tu).

Ora, se provi ad accedere al contenuto della directory a cui punta ancora la tua shell originale, comunica quella richiesta al file system come richiesta per l'inode originale, che da allora è stato riciclato (e potrebbe anche essere in uso per qualcosa completamente diverso ora). Quindi ricevi un stale file handlemessaggio perché hai chiesto alcuni dati inesistenti.

Quando si esegue cdun'operazione, la shell rivaluta la posizione dell'inode di qualunque destinazione gli si dia. Ora che la tua shell conosce il nuovo inode per la directory (e i nuovi inode per i suoi contenuti), le future richieste per i suoi contenuti saranno valide.


Ah, quindi questo è solo il modo in cui il sistema tratta i puntatori inode non validi / nulli?
IDDQD

Sì. Non so abbastanza sui dettagli per sapere cosa succederebbe se, ad esempio, provassi a fare riferimento a un inode che era già stato riciclato per indicare qualcos'altro. Avresti ancora un handle di file obsoleto? O riceveresti dati imprevisti?
dg99

1
Non penso che il sistema lo riutilizzerebbe poiché qualcuno sta effettivamente usando quell'I-node facendolo diventare la directory corrente.
Samuel Åslund
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.