Linux, sort, ou comment saturer /tmp
Allez, un petit article dans le ton de feu opl32.com ( 2000/2001/2002, ça ne nous rajeunit pas) , mais dans le domaine linux.
Le problème
Besoin de trier un gros fichier sous Linux ? Pas de problème, la commande sort est là pour ça, et propose même une option -u pour supprimer les doublons.
Allez Go :
sort -u < big_mega_fichier > resultat
No space left on device !??
Explication sommaire (mais suffisante)
La commande « sort » par défaut utilise la mémoire puis, si le volume à trier devient trop important, crée des fichiers temporaires dans le répertoire /tmp.
Que /tmp soit le montage d’un filesystem séparé (conseillé sur une machine de production ou un serveur), ou un simple répertoire du disque racine (monté sur /), la place disponible est limitée. On peut se retrouver avec une message du type « No space left on device » , voire parfois même empêcher certains traitements (batch, système, ou autres) de s’exécuter.
C’est très rare, mais si ça arrive sur une machine de production …
Une solution
La commande sort accepte deux options qui peuvent nous faciliter la vie
- -T spécifie de stocker les fichiers temporaires dans le répertoire mon_repertoire_tmp
- –compress-program spécifie de compresser les fichiers temporaires. Cette option ralentit la commande sort, mais permet de s’accommoder de filesystems plus petits ou de volumes à trier plus grands.
Exemple
sort -T ~/tmp –compress-program=gzip -u < big_mega_fichier > resultat
Conclusions
- Ne jamais présumer que tout se passe en mémoire
- Les commandes info et man sont nos amis
- On peut bloquer – même quelques secondes – une machine de production sans avoir l’air d’y toucher
Commentaires récents