j’ai eu un filesystème à 90% ce Week-End.
j’ai eu beau chercher partout avec « find » et « du », rien a faire, je ne trouvais pas ce qui clochait.
la seule explication que j’ai pu trouver était : les fichiers sont sous un point de montage,on ne peut pas les voir.
seulement voila, on ne démonte pas un filesystem sur un serveur en production pour voir s’il y a des fichiers en dessous !
heureusement, il y a toujours une solution xD
voici un script qui remonte les fichiers présent sous des points de montage.
libre à vous d’utiliser ff pour identifier les fichiers présents et supprimer les inodes directement si besoin.
#!/bin/ksh type ff >/dev/null 2>&1 [ "$?" = "0" ] || { echo "ERREUR: utilitaire ff non trouve" exit 1 } [ -d "$1" ] || { echo "ERREUR: l'argument donne [$1] n'est pas un repertoire" exit 1 } case $(uname -s) in HP-UX) DF=bdf AWK=awk MNTTAB="$($AWK '{print $1 " " $2}' /etc/mnttab)" ;; AIX) DF="df -k" AWK=awk MNTTAB="$(mount -p |$AWK '{print $1 " " $2}')" ;; SunOS) DF="df -k" AWK=nawk MNTTAB="$($AWK '{print $1 " " $2}' /etc/mnttab)" ;; *) echo "$(uname -s) non supporte" exit 1 ;; esac SUFFIXES="BKMGTPEZY" MAX_SUFF=${#SUFFIXES} calc_number () { NUMBER=$1 ITERATION=1 while [ "$NUMBER" -gt "1023" ] do [ "$ITERATION" -ge "$MAX_SUFF" ] && break ITERATION=$(($ITERATION + 1)) NUMBER=$(echo "scale=2; $NUMBER / 1024" |bc) done NUMBER=$(printf "%.2f" $NUMBER) [ -n "$(echo "$NUMBER" |fgrep ".00")" ] && { NUMBER=$(printf "%.0f" $NUMBER) } echo "${NUMBER}$(echo $SUFFIXES |cut -c${ITERATION})" } FS2A="$(cd $1 ; $DF . |tail -1 |$AWK '{print $NF}')" [ "$?" = "0" ] || exit 1 echo "analyse du filesystem : $FS2A" LVOL="$(echo "$MNTTAB" |$AWK -v S=$FS2A '{if($2 ~ "^" S "$"){print $1}}')" echo "volume a analyser : $LVOL" TMPFILE="/tmp/${0##*/}.$RANDOM.$$" echo "Debut du traitement" ff -s -I $LVOL >$TMPFILE 2>&1 [ "$?" = "0" ] || { echo "ERREUR: probleme au lancement du binaire ff" exit 1 } FS2EXCL="$(echo "$MNTTAB" |cut -d" " -f 2 |grep "^$FS2A" |grep -v "^$FS2A$")" WARN=0 for MNTFS in $FS2EXCL do [ "$FS2A" = "/" ] || MNTFS="$(echo $MNTFS|sed "s@$FS2A@@")" SIZE="$(grep "^\.$MNTFS/" $TMPFILE |awk 'BEGIN{SIZE=0}{SIZE=(SIZE+$NF)}END{printf("%i\n", SIZE)}')" [ "$SIZE" -eq "0" ] || { QTY="$(grep "^\.$MNTFS/" $TMPFILE |wc -l)" echo "WARNING: le repertoire $(echo ${FS2A}${MNTFS} |sed 's@//@/@') contient $QTY fichier(s) cache sous le point de montage [ $1 ] ($SIZE Bytes - $(calc_number $SIZE))" WARN="$(($WARN+1))" } done rm $TMPFILE if [ "$WARN" -gt "0" ] then [ "$WARN" -gt "1" ] && s=sont t=s || s=est u= echo "WARNING: $WARN filesystem$t $s monte$t sur des fichiers" else echo "INFO: aucun fichiers sous des points de montage" fi exit 0
voici un output sous Solaris:
[SOLARIS]$ files_under_fs.ksh / analyse du filesystem : / volume a analyser : /dev/md/dsk/d0 Debut du traitement INFO: aucun fichiers sous des points de montage
voici un output sous HP-UX:
[HP-UX]$ files_under_fs.ksh / analyse du filesystem : / volume a analyser : /dev/vg00/lvol3 Debut du traitement WARNING: le repertoire /tmp contient 96 fichier(s) cache sous le point de montage [ / ] (30216 Bytes - 29.50K) WARNING: le repertoire /soft/webunx contient 11542 fichier(s) cache sous le point de montage [ / ] (305397167 Bytes - 291.24M) WARNING: le repertoire /tools/list/sybase contient 10 fichier(s) cache sous le point de montage [ / ] (86505 Bytes - 84.47K) WARNING: 3 filesystems sont montes sur des fichiers
et un dernier sous AIX
[AIX]$ files_under_fs.ksh / analyse du filesystem : / volume a analyser : /dev/hd4 Debut du traitement WARNING: le repertoire /usr contient 1 fichier(s) cache sous le point de montage [ / ] (11 Bytes - 11B) WARNING: 1 filesystem est monte sur des fichiers
EDIT:
ce script me sert toujours, après avoir cherché partout d’où l’espace était utilisé, voici ce que j’ai trouvé:
root@server:~# files_under_fs.ksh / analyse du filesystem : / volume a analyser : /dev/vg00/lvol3 Debut du traitement WARNING: le repertoire /applis/list/sybase/DS_CAST_INT/master contient 4 fichier(s) cache sous le point de montage [ / ] (419430496 Bytes - 400M) WARNING: le repertoire /applis/list/sybase/DS_CAST_INT/data contient 5 fichier(s) cache sous le point de montage [ / ] (1330184288 Bytes - 1.23G) WARNING: le repertoire /applis/list/sybase/DS_CAST_INT/log contient 2 fichier(s) cache sous le point de montage [ / ] (278624 Bytes - 272.09K) WARNING: le repertoire /applis/list/sybase/DS_CAST_INT/tempdb contient 2 fichier(s) cache sous le point de montage [ / ] (96 Bytes - 96B) WARNING: le repertoire /applis/list/sybase/DS_CAST_INT/dumps contient 2 fichier(s) cache sous le point de montage [ / ] (96 Bytes - 96B) WARNING: 5 filesystems sont montes sur des fichiers
si seulement les DBA vérifiaient que le FS soit effectivement monté avant de dupliquer les fichers…
reste plus qu’a arrêter la base, démonter les FS en cause et purger.