linux-raid.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Phil Turmel <philip@turmel.org>
To: Nat Makarevitch <Shelso@makarevitch.org>
Cc: linux-raid@vger.kernel.org
Subject: Re: Determining which spindle is out of order
Date: Wed, 03 Nov 2010 21:54:54 +0000	[thread overview]
Message-ID: <4CD1DA2E.5060205@turmel.org> (raw)
In-Reply-To: <loom.20101103T115828-494@post.gmane.org>

On 11/3/2010 2:13 PM, Nat Makarevitch wrote:
> Hi,
> 
> After a spindle (physical hard disk, a "drive") failure in a "md" RAID array,
> how can we know which spindle must be replaced?
> 
> We want to avoid extracting a working spindle by mistakenly thinking it is the
> faulty one...

I wrote a little script that would tell me device name and serial number for each host port on my motherboard, along with anything else that lists a scsi host in sysfs.  Output like so:

Controller device @ pci0000:00/0000:00:1c.1/0000:06:00.0 [ahci]
  RAID bus controller: Marvell Technology Group Ltd. 88SE6145 SATA II PCI-E controller (rev a1)
    host4: [Empty]
    host5: /dev/sdd ATA WDC WD5000AAKS-7 {SN: WD-WMAWF1370668}
    host6: [Empty]
    host7: [Empty]
    host8: [Empty]
Controller device @ pci0000:00/0000:00:1f.1 [ata_piix]
  IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 01)
    host9: [Empty]
    host10: [Empty]
Controller device @ pci0000:00/0000:00:1f.2 [ahci]
  SATA controller: Intel Corporation 82801GR/GH (ICH7 Family) SATA AHCI Controller (rev 01)
    host0: /dev/sda ATA ST31000333AS {SN: 9TE1LTW0}
    host1: /dev/sdb ATA ST31000333AS {SN: 9TE1MAJT}
    host2: /dev/sdc ATA ST31000333AS {SN: 9TE1MV1R}
    host3: /dev/sr0 HL-DT-ST BD-RE GBW-H20L

Shows me my empty ports, too.  As long as I keep my cables straight to my hot-swap bays, getting the right drive is a snap.

HTH,

Phil

I hereby release the following script into the public domain:

#! /bin/bash
#
# Examine specific system host devices to identify the drives attached
#

function describe_controller () {
        unset SUBSYSTEM PCI_ID DEVICE PCI_SLOT_NAME Manufacturer Product Serial
        eval `udevadm info --query=all --path="$1" |grep '^E: ' |cut -c 4-`
        echo "Controller device @ ${1##/sys/devices/} [$DRIVER]"
        if [[ -n "$PCI_SLOT_NAME" ]] ; then
                echo -e "  `lspci -s $PCI_SLOT_NAME |cut -d\  -f2-`"
        fi
        if [[ "${MODALIAS:0:4}" == "usb:" ]] ; then
                eval `lsusb -D ${DEVICE/proc/dev/} |sed -r -n -e 's% *i(Manufacturer|Product|Serial) +[0-9]+ +(.+) *$%\1="\2"%;tFND;b;:FND;p'`
                echo -e "  [$Manufacturer] $Product {SN: $Serial}"
        fi
}

function describe_device () {
        targ=${1%/block/*}
        vnd="`cat $targ/vendor`"
        mdl=`cat $targ/model`
        rdev=`readlink -f "$1"`
        if [[ -d $rdev ]] ; then
                bdev="`basename $rdev`"
                sn="`sginfo -s /dev/$bdev |sed -r -n -e \"/Serial Number/{s%^.+' *(.+) *'.*\\\$%\\\\1%;p;q}\"`" &>/dev/null
                if [[ -n "$sn" ]] ; then
                        echo -e "    $bhost: `echo /dev/$bdev $vnd $mdl {SN: $sn}`"
                else
                        echo -e "    $bhost: `echo /dev/$bdev $vnd $mdl`"
                fi
        else
                echo -e "    $bhost: Unknown $rdev"
        fi
}

function check_host () {
        local found=0
        local pController=
        while read shost ; do
                host=`dirname "$shost"`
                controller=`dirname "$host"`
                bhost=`basename "$host"`
                if [[ "$controller" != "$pController" ]] ; then
                        pController="$controller"
                        describe_controller "$controller"
                fi
                for dev in $host/target*/*/block/* ; do
                        if [[ "${dev: -1}" == '*' ]] ; then
                                echo -e "    $bhost: [Empty]"
                        else
                                describe_device "$dev"
                        fi
                done
        done
}

find /sys/devices/ -name scsi_host |check_host


  parent reply	other threads:[~2010-11-03 21:54 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-03 14:13 Determining which spindle is out of order Nat Makarevitch
2010-11-03 14:38 ` Roman Mamedov
2010-11-03 15:17   ` Graham Mitchell
2010-11-03 16:05     ` Roman Mamedov
2010-11-03 19:00       ` Jon Hardcastle
2010-11-03 14:43 ` John Robinson
2010-11-03 14:45 ` Tim Small
2010-11-03 15:59   ` Jon Hardcastle
2010-11-03 17:17     ` Bill Davidsen
2010-11-03 20:03       ` Tim Small
2010-11-03 15:29 ` Mikael Abrahamsson
2010-11-03 21:54 ` Phil Turmel [this message]
2010-11-03 22:26   ` Roman Mamedov
2010-11-04  9:29   ` Tom Carlson
2010-11-06 10:22   ` Leslie Rhorer
2010-11-06 15:12     ` Phil Turmel
     [not found]       ` <4CD57867.4010207@anonymous.org.uk>
2010-11-06 16:02         ` Phil Turmel
2010-11-06 16:11           ` Mathias Burén
2010-11-06 16:45           ` Jan Ceuleers
2010-11-06 19:39             ` Phil Turmel
2010-11-06 20:16               ` Leslie Rhorer
2010-11-06 20:23               ` Mr. James W. Laferriere
2010-11-07  7:51               ` Jan Ceuleers
2010-11-07 12:53           ` John Robinson
2010-11-07 13:21             ` Phil Turmel
2010-11-07 13:43               ` John Robinson
2010-11-07 14:43                 ` Phil Turmel
2010-11-07 15:04                   ` Mathias Burén
2010-11-07 15:19                   ` John Robinson
2010-11-07 18:39                     ` Phil Turmel
2010-11-07 20:46                       ` Leslie Rhorer
2010-11-07 21:22                         ` John Robinson
2010-11-08 18:59                           ` John Robinson
2010-11-07 21:24                       ` Andreas Dröscher
2010-11-08 21:05                   ` Mr. James W. Laferriere
2010-11-07 20:52                 ` Roman Mamedov
2010-11-09 14:40                   ` Phil Turmel
2010-11-06 19:58       ` Leslie Rhorer
2010-11-06 21:17       ` John Robinson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4CD1DA2E.5060205@turmel.org \
    --to=philip@turmel.org \
    --cc=Shelso@makarevitch.org \
    --cc=linux-raid@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).