OVH Cloud OVH Cloud

recréer un inode ?

8 réponses
Avatar
Al 1
bonjour

je voudrais recr=E9er un inode sous Linux. Je m'explique :

je lance un programme A. Celui-ci redirige stdout vers un fichier=20
/root/redirect , et lance un programme B (fork).

si l'utilisateur efface le fichier /root/redirect, celui-ci continue =E0 =

r=E9sider sur le disque tant que A et B n'ont pas fini de tourner (et=20
th=E9oriquement ils ne s'arr=EAtent jamais puisque B est un serveur).

la solution pour regagner de la place disque =E9tant de faire par exemple=

> /root/redirect

si le fichier a =E9t=E9 effac=E9, il n'y a plus moyen !

est-il donc possible de recr=E9er un inode =E0 partir de A ?

Merci de vos r=E9ponses

8 réponses

Avatar
rene-marc
Al 1 :

si l'utilisateur efface le fichier /root/redirect, celui-ci continue à
résider sur le disque tant que A et B n'ont pas fini de tourner (et
théoriquement ils ne s'arrêtent jamais puisque B est un serveur).


Si les process ferment le fichier de temps en temps, y'a pas de raison
que la place ne soit pas libéré.

Avatar
[Sauron De Mordor]
Al 1 wrote:

bonjour

je voudrais recréer un inode sous Linux. Je m'explique :

je lance un programme A. Celui-ci redirige stdout vers un fichier
/root/redirect , et lance un programme B (fork).

si l'utilisateur efface le fichier /root/redirect, celui-ci continue à
résider sur le disque tant que A et B n'ont pas fini de tourner (et
théoriquement ils ne s'arrêtent jamais puisque B est un serveur).

la solution pour regagner de la place disque étant de faire par exemp le
/root/redirect


si le fichier a été effacé, il n'y a plus moyen !



kill -1 le process

est-il donc possible de recréer un inode à partir de A ?



non

Merci de vos réponses




Avatar
Manu
Al 1 wrote:

est-il donc possible de recréer un inode à partir de A ?


A priori non.

Mais tu peux t'assurer qu'il ne soit pas effacé, ou essayer de rendre
son effacement plus difficile.
Tu peux peut-être supprimer tout les droits du fichier avec un fchmod,
ou bien jouer avec chattr (voir les ioctl pour ça). Changer les droits
du répertoire pour interdire la suppression du fichier.
Autre solution tu créé un lien (non symbolique) dans un lieu "protégé"
et à la sortie du programme ou de temps à autre tu vérifies que ton
fichier existe. S'il n'existe plus tu récréé un lien.

Avatar
Al 1
rene-marc a écrit:

Si les process ferment le fichier de temps en temps, y'a pas de raison
que la place ne soit pas libéré.


le process 'B' n'a aucune raison de fermer ce fichier qui est sa sortie
standard

Avatar
Al 1
Manu a écrit:
A priori non.


Argh, c'est ce que je craignais

L'utilisateur qui efface ce fichier est 'root', il a priori tous les
droits, et le 'chattr -u' ne sert à rien d'après le man ...

Merci quand même :-)

Avatar
rene-marc
Al 1 :

le process 'B' n'a aucune raison de fermer ce fichier qui est sa sortie
standard


Si, pour permettre de libérer le fichier :)

Avatar
Manu
Al 1 wrote:

L'utilisateur qui efface ce fichier est 'root', il a priori tous les
droits, et le 'chattr -u' ne sert à rien d'après le man ...


En mettant le flag append il est alors interdit d'effacer le fichier.
Mais cette astuce ne fonctionne que sur ext2...

Avatar
echant
Al 1 écrit:
bonjour

je voudrais recréer un inode sous Linux. Je m'explique :
...

est-il donc possible de recréer un inode à partir de A ?


Si j'ai bien compris, tu te trompes. En remettant le fichier à 0
on ne change pas l'endroit où écrit le serveur. Démonstration:

(while true; do echo coucou; sleep 1; done) >redirect &
sleep 5;
redirect;
sleep 2;

hexdump redirect;
kill %%
rm redirect

hexdump redirect donne:
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
0000020 0000 6300 756f 6f63 0a75 6f63 6375 756f
0000030 000a
0000031

Les 0 avant, c'est le vide créé par ">redirect". En fait c'est vrai que ce
vide ne prend pas de place sur le file-système mais c'est pas beau quand
même.

Le pb que tu soulèves est celui de la rotation des logs, je ne pense pas
qu'il y ait de manière propre sans que le serveur soit impliqué. Ou alors
si tu peux faire que redirect soit un tube nomé, tu lances un autre
processus pour lire ce tube et là tu as le contrôle de la situation.


cordialement


--
Emmanuel Chantréau
100% des gens sont dans une minorité de moins de 5% des gens.