Mais t'es où ? pas là !

4 réponses
Avatar
David Marec
Je suis face à un problème curieux sous FreeBSD 11-Stable.

Après une mise à jour ou un make delete-old-libs, je ne sais pas trop,
je me suis tombé sur un curieux problème avec certain fichiers.
Impossible de les installer ( install -C ) !

en effet:

david:~>cp ~david/libjail.so.1 /lib
cp: /lib/libjail.so.1: File exists

pourtant:

david:~>ls /lib/libjail.so.1
ls: /lib/libjail.so.1: No such file or directory

david:~>find /lib -name "libjail.so.1" -print
/lib/libjail.so.1
david:~>find /lib -name "libjail.so.1" -ls
find: /lib/libjail.so.1: No such file or directory


en creusant, il y a bien un inode dessus:

root@dmarec:~ # ls -di /lib
13 /lib
root@dmarec:~ # zdb -dddd zroot/ 13 | grep libjail.so.1
libjail.so.1 = 10552574 (type: Regular File)

mais, pas de fichier, en fait:

root@dmarec:~ # zdb -dddd zroot/ 10552574
Dataset zroot [ZPL], ID 21, cr_txg 1, 114G, 2570002 objects, rootbp
DVA[0]=<0:b97d6ea00:200> DVA[1]=<0:1c212b0400:200> [L0 DMU objset]
fletcher4 lz4 LE contiguous unique double size=800L/200P
birth=3852240L/3852240P fill=2570002
cksum=17b78fb7e4:7c87a526a07:16251edfaae60:2ce0c5734ccf2f

Object lvl iblk dblk dsize lsize %full type
zdb: dmu_bonus_hold(10552574) failed, errno 2


Etonnant, non ?

Bon j'ai rusé en le collant dans /usr/lib, mais j'aimerai bien avoir une
explication là dessus.

Ça semble bien venir de ZFS, puisqu'une copie par send/recv reproduit
l'erreur dans un autre pool.
J'ai bien tenté un scrub, mais sans résultat.

Quelqu'un aurait une piste ?


--
David Marec
https://lapinbilly.eu

4 réponses

Avatar
Doug713705
Le 14-12-2016, David Marec nous expliquait dans
fr.comp.os.bsd
() :
Je suis face à un problème curieux sous FreeBSD 11-Stable.
Après une mise à jour ou un make delete-old-libs, je ne sais pas trop,
je me suis tombé sur un curieux problème avec certain fichiers.
Impossible de les installer ( install -C ) !
en effet:
david:~>cp ~david/libjail.so.1 /lib
cp: /lib/libjail.so.1: File exists
pourtant:
david:~>ls /lib/libjail.so.1
ls: /lib/libjail.so.1: No such file or directory
david:~>find /lib -name "libjail.so.1" -print
/lib/libjail.so.1
david:~>find /lib -name "libjail.so.1" -ls
find: /lib/libjail.so.1: No such file or directory
en creusant, il y a bien un inode dessus:
:~ # ls -di /lib
13 /lib
:~ # zdb -dddd zroot/ 13 | grep libjail.so.1
libjail.so.1 = 10552574 (type: Regular File)
mais, pas de fichier, en fait:
:~ # zdb -dddd zroot/ 10552574
Dataset zroot [ZPL], ID 21, cr_txg 1, 114G, 2570002 objects, rootbp
DVA[0]=<0:b97d6ea00:200> DVA[1]=<0:1c212b0400:200> [L0 DMU objset]
fletcher4 lz4 LE contiguous unique double size€0L/200P
birth852240L/3852240P fill%70002
cksumb78fb7e4:7c87a526a07:16251edfaae60:2ce0c5734ccf2f
Object lvl iblk dblk dsize lsize %full type
zdb: dmu_bonus_hold(10552574) failed, errno 2
Etonnant, non ?

Je ne connais pas vraiment freeBSD mais j'ai envie de dire qu'un
processus a gardé un pointeur sur le fichier ce qui fait qu'il n'est
pas vraiment supprimé.
Si c'est le cas un lsof | grep <fichier> devrait aider à trouver le
coupable et le killer devrait remettre les choses en ordre...
--
Je ne connaîtrai rien de tes habitudes
Il se peut même que tu sois décédée
Mais j'demanderai ta main pour la couper
-- H.F. Thiéfaine, L'ascenceur de 22H43
Avatar
David Marec
Le 16-12-2016, Doug713705 a écrit :
Je ne connais pas vraiment freeBSD mais j'ai envie de dire qu'un
processus a gardé un pointeur sur le fichier ce qui fait qu'il n'est
pas vraiment supprimé.

Je dois préciser que le problème reste présent après un reboot et en
mode /single user/ et se propage même dans un backup ZFS ( i.e.
send/recv ).
Je crois plutôt qu'il y a une merdouille en ZFS que même le /scrub/ ne
détecte pas.
--
David Marec
https://lapinbilly.eu
Avatar
Christian Weisgerber
On 2016-12-16, Doug713705 wrote:
david:~>find /lib -name "libjail.so.1" -print
/lib/libjail.so.1


Donc il y a une entrée dans le répertoire...
david:~>find /lib -name "libjail.so.1" -ls
find: /lib/libjail.so.1: No such file or directory


... mais stat(2) échoue. Situation tout bizarre.
Je ne connais pas vraiment freeBSD mais j'ai envie de dire qu'un
processus a gardé un pointeur sur le fichier ce qui fait qu'il n'est
pas vraiment supprimé.

Non, en ce cas il n'y aurait pas d'entrée dans le répertoire.
--
Christian "naddy" Weisgerber
Avatar
David Marec
Le 16-12-2016, Christian Weisgerber a écrit :
david:~>find /lib -name "libjail.so.1" -ls
find: /lib/libjail.so.1: No such file or directory


... mais stat(2) échoue. Situation tout bizarre.

Oui, je l'avais vu à l'aide `truss(1)`, `stat(2)` renvoie ENOENT:
david:~>truss stat -L /lib/libjail.so.1
stat("/lib/libjail.so.1",0x7fffffffe7e8) ERR#2 'No such file or
directory'
Par contre, je ne sais ce qu'est le «dmu_bonus_hold» de `zdb`.
--
David Marec
https://lapinbilly.ey