Forum Linux.débutant Supprimer une grande quantité de fichiers impossible

Posté par .
0
24
déc.
2008
Bonjour,

Mon serveur mail utilise qmail et je viens de m'apercevoir que le disque était plein !

J'ai commencé par faire un peu de ménage dans certaines boîtes mails mais en fait le problème viens de la boîte mail root/admin qui reçoit tous les mailer-daemon & co.

J'ai voulu vider le répertoire new de son Maildir avec un rm -f *, mais le nombre de mails stockés dans le répertoire semble trop important (+ de 2 Go de mails) :

> Soit j'obtiens le message "Argument list too long"
> Soit ma session se coupe toute seule et je dois me reconnecter

Quelqu'un aurait une idée ?

Merci
(15 commentaires).
  • # screen et xargs

    Posté par (page perso) . Évalué à 4.

    Salut,

    1. Toujours faire ce genre d'opération dans un screen : si tu es déconnecté, tu te reconnectes et tu fais un screen -d -r pour récupérer ton screen
    2. xargs est ton ami : ls | xargs rm -f
    (à faire dans le bon répertoire, évidemment)
    Le problème avec ta méthode est que bash récupère la liste de tous les fichiers en développant le * puis qu'il essaie de passer la liste directement en argument de rm.

    --
    Guillaume
  • # find

    Posté par (page perso) . Évalué à 5.

    C'est une limitation du shell, ton "*" est remplacé par un trop grand nombre de paramètres. Find est un de tes amis dans ces cas là.

    find /var/qmail/mails/root/ -print | xargs /bin/rm

    /var/qmail/mails/root/ est bien sûr à remplacer par ton répertoire à traiter.

    Avec les paramètres de find, tu peux aussi n'effectuer l'action que sur les fichiers vieux de plus de N jours (ou minutes sur certaines versions de find).
    • [^] # Re: find

      Posté par (page perso) . Évalué à 3.

      On peut éviter le pipe vers xargs, et les problèmes de noms de
      fichiers vicieux (qui ne doivent pas se poser ici) --- voir les options
      -print0 de find et -0 de xargs.

      find /var/qmail/mails/root -type f -exec rm -f {} +

      Sans l'option -type f, il faut peut-être reconstituer les trois
      sous-répertoires cur, new et tmp et vérifier leurs permissions.

      La remarque sur l'ancienneté est judicieuse, il serait bon de lire
      quelques messages récents avant de tout nettoyer ;).
  • # Ok ça marche

    Posté par . Évalué à 2.

    Super Merci, j'ai lancé la commande

    ls | xargs rm -f

    Pendant 20 minutes, mon espace disque utilisé a eu tendance à augmenter (probablement dû à un fichier de calcul temporaire), puis là depuis 10minutes, l'espace disque utilisé diminue tout doucement, donc la suppression fonctionne.

    A ce rythme, la suppression devrait se terminer dans une petite heure.

    Merci
    • [^] # Re: Ok ça marche

      Posté par . Évalué à 2.

      J'oublie l'essentiel :

      Bonnes fêtes de fin d'année à tous !
    • [^] # Re: Ok ça marche

      Posté par (page perso) . Évalué à 5.

      bon sinon y avait bcp plus simple: rm -rf /le/rep/parent/ (sans *)
      suivi d'un mkdir
      • [^] # Re: Ok ça marche

        Posté par (jabber id) . Évalué à 3.

        Heu .... même un rm -rf . tout seul dans le répertoire aurait marché, sans mkdir (comme le shell se trouve encore sur le répertoire courant, il refusera de le supprimer à la fin ...).
        • [^] # Re: Ok ça marche

          Posté par . Évalué à 2.

          L'idée est bonne mais :

          [0]~/temp/temp$ ls
          tata toto #toto# toto~
          [0]~/temp/temp$ rm -rf .
          rm: ne peut enlever « . » or « .. »
          [1]~/temp/temp$ ls
          tata toto #toto# toto~
          [0]~/temp/temp$
        • [^] # Re: Ok ça marche

          Posté par (page perso) . Évalué à 2.

          Ah, toi tu n'a jamais fait l'expérience suivante:

          $ mkdir /tmp/toto
          $ cd /tmp/toto
          $ rm -rf /tmp/toto
          $ ls
          $ ls /tmp
          $ ls /tmp/toto

          le dossier est supprimé, mais, de la même façon que supprimer un
          fichier de log apache sans le redémarrer, l'inode n'est pas entièrement
          détruit tant qu'il existe une référence ouverte.

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.