Existe-t-il un moyen de réduire une entrée de répertoire?
La taille de mes répertoires maildir de dovecot est passée de la valeur par défaut 4096 à plusieurs mégaoctets, et il dérange les quotas de disque.
Le seul moyen que j'ai trouvé, est de supprimer et recréer le répertoire. J'espère qu'il y a une fonction magique quelque part - je suis ouvert à tout, sauf pour l'assembleur codé à la main.
Edit: Pour la postérité, pour trouver des dirents> 4096:
find / -type d -size +4k -printf "%s\t%p\t%i\n" | sort -nr
Réponses:
Voir aussi rm sur un répertoire contenant des millions de fichiers ; tangentiellement liés, mais nous en discutons ici.
Pour autant que je sache, au moins sur ext2 / 3, non, il n'y a aucun moyen (en ligne) de les réduire avant de supprimer + recréer. Démonté, plusieurs sources suggèrent que cela
e2fsck -D
pourrait fonctionner, bien que je ne puisse prétendre à aucune expérience personnelle avec cette option.Quelques références pour plus de lecture:
la source
J'ai récemment dû supprimer et recréer un répertoire NFS pour réduire sa taille après qu'il ait déjà gonflé. Dans le processus, j'ai trouvé un moyen assez efficace de le faire en utilisant rsync et des liens durs. Cette méthode évite de copier les fichiers réels, tout en atteignant l'objectif de recréer le répertoire avec le même contenu.
Étant donné que nous devions prendre des temps d'arrêt pour effectuer cette opération pendant notre fenêtre de maintenance, il était important pour nous de rendre le répertoire reconstruit disponible dès que possible. Si la simplicité est plus importante pour vous, changez la première commande de déplacement en «rm -rf» dans le répertoire source et ignorez l'autre commande «rm -rf».
J'ai extrait ces commandes d'un processus plus large et j'ai résumé les noms des répertoires, donc excuses si j'ai fait une erreur dans cette traduction.
Plus tard, nous supprimons le répertoire. Selon la taille, vous devrez peut-être utiliser une technique plus sophistiquée pour ce faire. Par exemple, l'utilisation de rsync avec l'indicateur --delete pour synchroniser un répertoire vide dans ce répertoire peut être plus efficace.
la source
Je le ferais comme ça.
cp -al
oldirnewdir
&& mv
olddirtempname
&& mv
newdirolddir
&& rm -r
tempnameoù olddir est le répertoire que vous souhaitez réduire newdir et tempname sont des noms de fichiers temporaires
cp -al
crée des liens vers le contenu de olddir dans newdir et les trois commandes suivantes les échangent avec newdir et nettoient.la source