Linux et le raid

Publié le par Lanfeust

Voici un petit script bien utile qui permet de diagnostiquer un système raid.

Il fonctionne sous Redhat.

Ce script permet, dans un système raid de savoir si tous les raid sont ok.
Si ce n'est pas le cas, le script donne une succession de commandes à envoyer pour

1/ supprimer le disque déféctueux du raid
2/ re-insérer le nouveau disque dans le raid.

Tous les mdx en service sont scannés.
Seul truc non géré : la reconstruction de la table de partition une fois un nouveau disque inséré.

Attention : ce script est donné à titre indicatif, il faut vérifier les deux scripts générés dans /tmp

/tmp/diag_remove
/tmp/diag_add

avant de les exécuter.

De plus, il faut reformater le disque avant de lancer /tmp/diag_add.

Une autre solution est de lancer les commandes à la main.


if [ "$1" == "" ]; then
    echo "" >/tmp/diag_remove
    echo "" >/tmp/diag_add
    cat /proc/mdstat | grep "(F)" >/tmp/mdstat.diag
    wc=`wc /tmp/mdstat.diag | awk '{print $1}'`
    if [ "$wc" == "0" ]; then
       echo "Raid status ok"
    else
       echo "Raid status : defect !"
       ./raid_diagnostic `cat /tmp/mdstat.diag`
    fi
else
    diag_md=/dev/$1
    if [ "$1" == "enum" ]; then
        diag_md=$2
        diag_disk=$3
        cat /proc/mdstat | grep "^md" | awk '{print $1}' | xargs -l -i ./raid_diagnostic enum_1 $diag_disk {}
    else
        if [ "$1" == "enum_1" ]; then
            raid_line=`cat /proc/mdstat | grep "^$3"`
            for item in $raid_line; do
                if (echo "$item" | grep "$2" >/dev/null) ; then
                    v=`echo $item | sed "s/[/ /g" | awk '{print $1}'`
                    echo "    raidhotremove /dev/$3 /dev/$v" >> /tmp/diag_remove
                    echo "    raidhotadd /dev/$3 /dev/$v" >> /tmp/diag_add
                    a=1
                fi
            done
        else
   
            echo $diag_md is in bad state.1
       
            while [ "$1" != "" ]; do
                if (echo "$1" | grep "(F)"); then
                    echo "Faulty : $1"
                    diag_disk=`echo "$1" | sed "s/[/ /g" | awk '{print $1}'`
                    diag_disk=`echo $diag_disk | sed "s/[01234]/ /g"`
                    echo "  Suggested commands for removing the disk:"
                    ./raid_diagnostic enum $diag_md $diag_disk
                    # echo "    either ./raid_remove $diag_disk"
                    cat /tmp/diag_remove | sort
                    chmod +x /tmp/diag_remove
                    echo
                    echo "  Suggested commands for re-adding the disk:"
                    cat /tmp/diag_add | sort
                    chmod +x /tmp/diag_add
                fi
                shift
                done
        fi
    fi
fi
Publicité

Publié dans Linux

Pour être informé des derniers articles, inscrivez vous :
Commenter cet article