web-dev-qa-db-fra.com

Comment trouver des fichiers dont l'inode n'est référencé par aucun répertoire

Ok, il y a quelque temps, j'ai trouvé ce qui semble être un bug dans Nautilus.

/tmp$ mkdir test/
/tmp$ mkdir test2/
/tmp$ echo "very important stuff" > test/important-file.txt
/tmp$ ln -s /tmp/test/ test2/test

Si vous essayez de mv test2/test ., bash est assez malin pour répondre:

mv: «test2/test» and «./test» identify the same file

J'ai créé un lien symbolique à tester (un répertoire contenant un fichier) à un autre emplacement, puis j'ai déplacé le lien symbolique à l'endroit où se trouvait le répertoire.

Mais alors, Nautilus entre dans le jeu:

Moving symbolic link to the location where de directory is in nautilus

Nautilus comprend que le lien symbolique est un répertoire et me propose gentiment de les fusionner:

enter image description here

Maintenant, je les ai fusionnés (je pensais évidemment que c’était deux répertoires différents). Et comme résultat...

tmp$ ls -la
lrwxrwxrwx  1 cool-user  best-group-ever      9 août  26 23:51 test -> /tmp/test

D'accord. J'ai donc perdu mon répertoire (ce qui est normal, car je l'ai écrasé) et je me suis retrouvé avec un lien symbolique circulaire inutile, mais ... que s'est-il passé avec mon important-file.txt? Il y avait un inode, qui n'est plus référencé par aucun répertoire dans mon système.

De toute évidence, je n'ai pas écrit cet inode dans un post-it ... alors, où est-il? Est-il possible de trouver chaque fichier avec un inode qui n'est référencé par aucun répertoire?

Et en prime, est-ce le comportement attendu de Nautilus ou est-ce un bug?

Pourquoi et comment cela m'est arrivé est une longue histoire, mais j'avais dans mon répertoire des fichiers très importants (et confidentiels) que j'aimerais récupérer.

5
Luis Sieira

Pas sûr que ce soit possible. Après tout, tout votre espace libre est une liste d'inodes.

Voir cependant le fichier orphelin caractéristique de ext4.

3
Serban

Je posterai ma réponse, mais je ne l’accepte pas, car cela ne semble pas être un bon sens (du moins en termes d’efficacité ou d’exhaustivité).

Cela nécessiterait un programme (je l'écrirais en C) qui parcourt l'arborescence de répertoires dans son intégralité , enregistre chaque inode référencé dans une liste ordonnée (en évitant les doublons), puis en le comparant à l'inode réel. liste.

La différence sont les fichiers manquants

0
Luis Sieira