2009-07-24 18 views
6

Ho un file che è stato cancellato, ma è ancora aperto il mio programma. Ho trovato il numero di inode usando lsof. Come posso creare un hard link su quell'inode?Collegamento a un inode specifico

Qualsiasi codice aiuta, ma Perl sarebbe utile.

risposta

10

Copia da/proc/pid/fd/descrittore di file

Usare lsof per trovare il pid e il descrittore di file.

+1

Ho appena eseguito il mio piccolo test e questo funziona, ma non capisco perché! Quelli sono collegamenti simbolici al file reale e un collegamento simbolico accede al file tramite il suo nome file, vero? – Thomas

+1

Non è possibile eseguire il collegamento diretto alla voce in/proc, poiché i collegamenti rigidi devono trovarsi sullo stesso file system (ad esempio, il proprio collegamento deve trovarsi in/proc). La copia dovrebbe andare bene. – mark4o

+1

marchio: notato, grazie. Thomas: non sono dei veri e propri symlink, sembrano solo loro. Google per proc_register_dynamic per maggiori informazioni. – moonshadow

1

sul filesystem EXT è possibile utilizzare debugfs comando per ricreare il link come:

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

Che creerà un "file" di nome myfile e indicando inode 16.

+1

Questo risponde alla domanda. Grazie! C'è solo un problema. Il comando 'link' non aumenta il conteggio dei riferimenti inode. Di conseguenza, il file potrebbe essere perso subito dopo che il programma ha chiuso il descrittore del file e il conteggio dei riferimenti dell'inode si riduce a zero. Sfortunatamente non conosco un modo semplice e affidabile su come modificare il conteggio dei riferimenti degli inode. --- Anche una risposta completa dovrebbe mostrare come ottenere il numero di inode: 'stat -L/proc/PID/fd/FILE_DESCRIPTOR' (o' ls -Li'). – pabouk