Ho un file che è stato eliminato, ma è ancora tenuto aperto da un programma. Ho trovato il numero dell'inode usando lsof. Come posso creare un collegamento reale a quell'inode?
Ho un file che è stato eliminato, ma è ancora tenuto aperto da un programma. Ho trovato il numero dell'inode usando lsof. Come posso creare un collegamento reale a quell'inode?
Risposte:
Non è possibile creare un collegamento ad esso, ma è possibile recuperarlo. Facciamo un esperimento:
$ echo blurfl >myfile.txt
$ tail -f myfile.txt &
$ rm myfile.txt
myfile.txt ora non c'è più, ma l'inode è mantenuto in vita dal comando tail. Per recuperare il file, trova prima il PID del processo mantenendo l'inode:
$ ps auxw | grep tail
sunny 409 0.0 0.0 8532 824 pts/5 S 18:07 0:00 tail -f myfile.txt
Il PID è 409. chdir in / proc / 409 / fd / ed elenca i contenuti:
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)
Le directory / proc / [PID] / fd / contengono collegamenti simbolici ai descrittori di file di tutti i file utilizzati dal processo. In questo caso il collegamento simbolico "3" punta al file eliminato. Quindi, per ripristinare il file, copia il contenuto in un nuovo file:
$ cat 3 >/home/mydir/saved_file.txt
per ottenere l'intero file se è ancora scritto per provare tail -c +1 -f
da: /unix/25527/how-to-follow-a-la-tail-fa-binary-file-from-the-beginning
(btw: ln da fd on / proc non funziona, ho appena provato)
Non esiste un modo portatile per farlo sotto Linux. Il modo migliore sarebbe probabilmente far cessare tutte le attività sul file system, terminare il programma che tiene aperto il file, smontare il file system e utilizzare un debugger del file system per ricollegarlo a una directory. Se il file system viene esportato tramite NFS, almeno alcune versioni di NFS potrebbero consentire di leggere i dati del file su NFS.