J'ai un fichier qui a été supprimé, mais mon programme est toujours ouvert. J'ai trouvé le numéro d'inode en utilisant lsof. Comment puis-je créer un lien dur vers cet inode?Lien vers un inode spécifique
Tout code aide, mais Perl serait pratique.
J'ai un fichier qui a été supprimé, mais mon programme est toujours ouvert. J'ai trouvé le numéro d'inode en utilisant lsof. Comment puis-je créer un lien dur vers cet inode?Lien vers un inode spécifique
Tout code aide, mais Perl serait pratique.
Copier de/proc/pid /fd/descripteur de fichier
Utilisez lsof pour trouver le pid et le descripteur de fichier. commandent
sur le système de fichiers EXT vous pouvez utiliser debugfs pour recréer le lien comme:
debugfs -w /dev/mapper/vg0-root -R 'link <16> myfile'
qui va créer un « fichier » monfichier et pointant vers inode 16.
Cela répond à la question. Je vous remercie! Il y a juste un problème. La commande 'link' n'augmente pas le nombre de références de l'inode. Donc en fait le fichier pourrait être perdu juste après que le programme ait fermé le descripteur de fichier et que le compte de référence de l'inode diminue à zéro. Malheureusement, je ne connais pas de manière fiable comment changer le nombre de références de l'inode. --- Une réponse complète devrait également montrer comment obtenir le numéro d'inode: 'stat -L/proc/PID/fd/FILE_DESCRIPTOR' (ou' ls -Li'). – pabouk
Je viens de rencontrer mon petit test , et ça marche, mais je ne comprends pas pourquoi! Ce sont des liens symboliques vers le fichier réel, et un lien symbolique accède au fichier par son nom de fichier, n'est-ce pas? – Thomas
Vous ne pouvez pas créer de lien vers l'entrée dans/proc, car les liens durs doivent se trouver sur le même système de fichiers (c'est-à-dire que votre lien doit se trouver dans/proc). La copie devrait être bien. – mark4o
mark: noté, merci. Thomas: ce ne sont pas de vrais liens symboliques, ils leur ressemblent juste. Google pour proc_register_dynamic pour plus d'informations. – moonshadow