Digamos que tengo una terminal abierta, ya través de esa terminal he cd
entrado en algún directorio. A través de otra terminal, elimino ese directorio y lo restauro desde una copia de seguridad idéntica. Cuando intento vim
acceder a un archivo desde la primera terminal, en el mismo directorio, ¿por qué obtengo un error sobre un identificador de archivo obsoleto? Qué significa eso? (En una nota al margen, he descubierto que es posible evitar este problema cd $(pwd)
).
100
touch
en el host A puede hacer que sea normal.Respuestas:
Cuando se elimina el directorio, el inodo para ese directorio (y los inodos para su contenido) se reciclan. El puntero que tiene su shell al inodo de ese directorio (y los inodos de su contenido) ya no es válido. Cuando se restaura el directorio desde la copia de seguridad, los inodos antiguos no se reutilizan (necesariamente); el directorio y su contenido se almacenan en inodos aleatorios. Lo único que permanece igual es que el directorio principal reutiliza el mismo nombre para el directorio restaurado (porque usted se lo indicó).
Ahora, si intenta acceder al contenido del directorio al que todavía apunta su shell original, comunica esa solicitud al sistema de archivos como una solicitud para el inodo original, que desde entonces ha sido reciclado (e incluso puede estar en uso para algo completamente diferente ahora). Entonces obtienes un
stale file handle
mensaje porque pediste algunos datos inexistentes.Cuando realiza una
cd
operación, el shell reevalúa la ubicación del inodo de cualquier destino que le dé. Ahora que su shell conoce el nuevo inodo para el directorio (y los nuevos inodos para su contenido), las futuras solicitudes de su contenido serán válidas.fuente