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.
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.
Copia da/proc/pid/fd/descrittore di file
Usare lsof per trovare il pid e il descrittore di file.
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.
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
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
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
marchio: notato, grazie. Thomas: non sono dei veri e propri symlink, sembrano solo loro. Google per proc_register_dynamic per maggiori informazioni. – moonshadow