Tengo un archivo que se eliminó, pero un programa todavía lo mantiene abierto. Encontré el número de inodo usando lsof. ¿Cómo puedo crear un enlace duro de vuelta a ese inodo?
14
No puede crear un enlace a él, pero puede recuperarlo. Hagamos un experimento:
$ echo blurfl >myfile.txt
$ tail -f myfile.txt &
$ rm myfile.txt
myfile.txt ya no está, pero el comando de cola mantiene vivo el inodo. Para recuperar su archivo, primero encuentre el PID del proceso manteniendo el inodo:
$ ps auxw | grep tail
sunny 409 0.0 0.0 8532 824 pts/5 S 18:07 0:00 tail -f myfile.txt
El PID es 409. chdir a / proc / 409 / fd / y enumere los contenidos:
dr-x------ 2 sunny sunny 0 2009-07-24 18:07:18 .
dr-xr-xr-x 7 sunny sunny 0 2009-07-24 18:07:17 ..
lrwx------ 1 sunny sunny 64 2009-07-24 18:07:33 0 -> /dev/pts/5
lrwx------ 1 sunny sunny 64 2009-07-24 18:07:33 1 -> /dev/pts/5
lrwx------ 1 sunny sunny 64 2009-07-24 18:07:18 2 -> /dev/pts/5
lr-x------ 1 sunny sunny 64 2009-07-24 18:07:33 3 -> /home/sunny/tmp/myfile.txt (deleted)
Los directorios / proc / [PID] / fd / contienen enlaces simbólicos a los descriptores de todos los archivos que utiliza el proceso. En este caso, el enlace simbólico "3" apunta al archivo eliminado. Entonces, para restaurar el archivo, copie el contenido a un nuevo archivo:
$ cat 3 >/home/mydir/saved_file.txt
para obtener el archivo completo si aún está escrito para probar
tail -c +1 -f
de: /unix/25527/how-to-follow-a-la-tail-fa-binary-file-from-the-beginning
(por cierto: ln desde fd on / proc no funciona, solo lo intenté)
fuente
No hay una forma portátil de hacer esto en Linux. Probablemente, la mejor manera sería hacer que cese toda actividad en el sistema de archivos, eliminar el programa que mantiene abierto el archivo, desmontar el sistema de archivos y usar un depurador del sistema de archivos para volver a adjuntarlo a un directorio. Si tiene el sistema de archivos exportado a través de NFS, al menos algunas versiones de NFS pueden permitirle leer los datos del archivo a través de NFS.
fuente