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
next prev 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.