Juin 152011
 

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.

Download : files_under_fs.sh

#!/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.

 Publié par à 13 h 03 min  Taggué avec : ,

 Laisser un commentaire

Vous pouvez utiliser ces tags et attributs HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(requis)

(requis)

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.