2009-07-24 12 views
6

Tengo un archivo que se eliminó, pero aún se mantiene abierto mi programa. Encontré el número de inodo usando lsof. ¿Cómo puedo crear un enlace rígido a ese inodo?Enlace a un inodo específico

Cualquier código ayuda, pero Perl sería útil.

Respuesta

10

Copiar de/proc/PID /fd/archivo descriptor

Uso lsof para encontrar el PID y el descriptor de archivo.

+1

Me acabo de encontrar mi propia pequeña prueba , y esto funciona, pero no entiendo por qué! Esos son enlaces simbólicos al archivo real, y un enlace simbólico accede al archivo a través de su nombre de archivo, ¿no es así? – Thomas

+1

No se puede enlazar con la entrada en/proc, porque los enlaces duros tienen que estar en el mismo sistema de archivos (es decir, su enlace debería estar en/proc). La copia debería estar bien. – mark4o

+1

marca: notado, gracias. Thomas: no son enlaces simbólicos reales, simplemente se parecen a ellos. Google para proc_register_dynamic para más información. – moonshadow

1

el sistema de ficheros EXT puede utilizar debugfs comando para recrear el enlace tal que:

debugfs -w /dev/mapper/vg0-root -R 'link <16> myfile' 

que creará un "archivo" denominado myfile y apuntando a inodos a 16.

+1

Esto responde la pregunta. ¡Gracias! Solo hay un problema El comando 'link' no aumenta el conteo de referencia del inodo. De hecho, el archivo podría perderse justo después de que el programa cierre el descriptor de archivo y el recuento de referencia del inodo disminuya a cero. Lamentablemente, no conozco una forma sencilla y confiable de cómo cambiar el recuento de referencias del inodo. --- También una respuesta completa debe mostrar cómo obtener el número de inodo: 'stat -L/proc/PID/fd/FILE_DESCRIPTOR' (o' ls -Li'). – pabouk

Cuestiones relacionadas