Que signifie «gestionnaire de fichiers périmés» sous Linux?

100

Disons que j'ai un terminal ouvert, et à travers ce terminal, je suis cdallé dans un répertoire. Via un autre terminal, je supprime ce répertoire et le restaure à partir d'une sauvegarde identique. Lorsque j'essaie d' vimaccéder à un fichier depuis le premier terminal, dans le même répertoire, pourquoi est-ce que j'obtiens une erreur concernant un descripteur de fichier périmé? Qu'est-ce que ça veut dire? (Sur une note latérale, j'ai trouvé qu'il est possible de contourner ce problème cd $(pwd).)

IDDQD
la source
Si vous montez un répertoire NFS (nommez-le adir) de l'hôte A vers l'hôte B, puis effectuez la suppression et la restauration pour adir sur l'hôte A, vous pouvez également obtenir l'erreur «Stale file handle» lorsque vous accédez à adir sur l'hôte B. Utiliser la commande touchsur l'hôte A peut le rendre normal.
rustyhu

Réponses:

83

Lorsque le répertoire est supprimé, l' inode de ce répertoire (et les inodes de son contenu) sont recyclés. Le pointeur de votre shell sur l'inode de ce répertoire (et les inodes de son contenu) n'est plus valide. Lorsque le répertoire est restauré à partir d'une sauvegarde, les anciens inodes ne sont pas (nécessairement) réutilisés; le répertoire et son contenu sont stockés sur des inodes aléatoires. La seule chose qui reste la même est que le répertoire parent réutilise le même nom pour le répertoire restauré (car vous le lui avez dit).

Maintenant, si vous essayez d'accéder au contenu du répertoire sur lequel votre shell d'origine pointe toujours, il communique cette demande au système de fichiers en tant que demande de l'inode d'origine, qui a depuis été recyclé (et peut même être utilisé pour quelque chose entièrement différent maintenant). Vous recevez donc un stale file handlemessage car vous avez demandé des données inexistantes.

Lorsque vous effectuez une cdopération, le shell réévalue l'emplacement d'inœud de la destination que vous lui donnez. Maintenant que votre shell connaît le nouvel inode pour le répertoire (et les nouveaux inodes pour son contenu), les futures requêtes pour son contenu seront valides.

dg99
la source
Ah, c'est donc juste la façon dont le système traite les pointeurs d'inode invalides / nuls?
IDDQD
Oui. Je ne connais pas assez les détails pour savoir ce qui se passerait si, par exemple, vous essayiez de référencer un inode qui avait déjà été recyclé pour pointer vers autre chose. Auriez-vous toujours un descripteur de fichier périmé? Ou obtiendriez-vous des données inattendues?
dg99
1
Je ne pense pas que le système le réutiliserait puisque quelqu'un utilise en fait ce nœud I en l'ayant comme répertoire courant.
Samuel Åslund