[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [HS] Vider un fichier pendant qu'un prog ecrit dedans



Le 13958ième jour après Epoch,
GiGGz écrivait:

> Bonjour,
>
> Désolé c'est hors sujet.
> J'ai un programme qui calcul plein de truc et que j'ai lancé depuis 1
> semaine, je ne veux donc pas l'arreter, ni le faire planter. Ce
> programme écrit un fichier fort.68 (oui c'est codé en fortran). Ce
> fichier fait à ce jour 1,2 GO et mon home se réduit à vue d'oeil (d'où
> ma panique).
>
> Comment faire pour vider ce fichier sans le détruire ? En effet j'ai
> essayé de faire une lien dont le nom était le nom du fichier et dont
> la cible était sur une autre partition, mais problème : la création du
> lien ne fut pas assez rapide, donc plantage du calcul (j'ai plusieurs
> calculs qui tournent). Après ce cuisant échec et la semaine de boulot
> perdu qui va avec, j'ai un peu peur de faire des bêtises, d'où ma
> démarche de venir ici vous demander...

(alternative en fin de message, tu peux zapper tout le début si tu
veux)

Si mes souvenirs sont bons:

Tant que le fichier reste ouvert, tu vas avoir du mal... Petit
pré-requis: Une fois un fichier ouvert (en écriture ou en lecture),
seul son inode a une existance pour le programme. Ni son nom, ni le
répertoire dans lequel il se trouve n'a d'importance.

- Si tu fais un "rm": Le fichier deviens invisible pour tout le monde,
  sauf pour ton programme qui écrit dedans, et pour ta partition. En
  gros, il bouffe de la place mais tu ne peux rien y faire.

- Si tu fais un "mv": Deux options:
  - C'est sur la même partition: Pas de soucis, le n° d'inode reste le
    même, ton fichier (et la partition associée) continue(nt) de
    grossir
  - C'est sur une autre partition: Ça fait comme un "cp" puis un "rm",
    retour à la case départ.

- Si tu fais un ">": Là, c'est un peu plus compliqué. Si ton programme
  écrit en "append", il se peut (a vérifier selon le fs et autres
  paramètres que je ne maîtrise plus depuis trop longtemps) que ton
  programme se remette à écrire depuis 0, donc tu as gagné (tout en
  ayant perdu le contenu). Si il n'écris pas en append, mais qu'il est
  en "w" seulement... je sais pas.

En gros, il serait préférable que tu modifie ton code fortran pour
qu'il referme de temps en temps le fichier, et si c'est pas possible
alors lance ton prog avec un "pipe" ou un "named pipe", de façon à ce
que le second process (celui qui va effectivement écrire sur le
disque) accepte de faire un close/open de son fichier de sortie.

*ALTERNATIVE*

Pourquoi ne pas déplacer "tout le reste" et laisser le fichier
grossir? Tu crées des liens symboliques pour toutes les choses de ton
/home qui peuvent être déplacées, pour laisser grossir tranquillement
ton fichier.

En espérant n'avoir pas dit trop de conneries, et que ça puisse aider.


Reply to: