On Tue, Dec 24, 2024 at 15:45:31 +0100, Roger Price wrote:
> File /proc/mdstat indicates a dying RAID device with an output section such
> as
> 
>  md3 : active raid1 sdg6[0]
>        871885632 blocks super 1.0 [2/1] [U_]
>        bitmap: 4/7 pages [16KB], 65536KB chunk
> 
> Note the [U-].

There isn't any [U-] in that output.  There is [U_].

> The "-" says /dev/sdh is dead. I would like to scan
> /proc/mdstat and set a flag if [U-], [-U] or [--] occur.

Start by figuring out whether you're looking for _ or - in the output.

>  while  read L;
>  do if [[ $L == *"[U-]"* ]]; then B=1; fi;
>     if [[ $L == *"[-U]"* ]]; then B=1; fi;
>     if [[ $L == *"[--]"* ]]; then B=1; fi;
>  done < /proc/mdstat;

You don't really need to read a line at a time.  You can slurp the
entire file all at once and just do your matching on the whole thing.

    stat=$(< /proc/mdstat)
    if [[ $stat = *\[@(U_|_U|__)\]* ]]; then
        echo "bad thing found"
    fi

But, again, if you're looking for the wrong character, it won't work
very well.  I showed code using _ to match your actual input.

Reply via email to