Mit smartctl hinter verschiedenen Controllern auslesen.

M

mrtank

Grünschnabel
(Wieso habe ich hier eigentlich nicht "Hallo" gesagt?!?... sorry.. nachtrag folgt unten)

Hallo miteinander..

Ich möchte Daten, wie beispielsweise die Seriennummer einzelner HDDs mit "smartctl" auslesen und loggen.
Die HDDs befinden sich aber hinter verschiedenen Controllern wie beispielsweise Megaraid bei einen IBMserver.

Was ich bis jetzt gemacht habe funktioniert nur halbwegs:

Die angeschlossenen HDDs habe ich mit
Code:
cat /proc/partitions | awk '{print $4}' | grep "sd"
geholt und mit
Code:
> /tmp/logger
gespeichert damit ich das bekomme:

Code:
"sda"
"sdb"
"sdc"
"sde"

weil ich es nich besser weiss habe ich nun die datei "/tmp/logger" mit sed bearbeitet.

(für ibm server)
Code:
sed -i "s/^/smartctl -i -d megaraid,0 \/dev\//" /tmp/logger
(für hp server)
Code:
sed -i "s/^/smartctl -i -d cciss,0 \/dev\//" /tmp/logger

wenn ich jetzt die datei /tmp/logger ausführe, bekomme ich eine wunderbare auflistung der HDDs,
was ich super finde, nur haben alle die Seriennummer der ersten HDD weil ich was nicht hinbekomme.

Ich kann mir keinen reim darauf machen wie ich die zahl hinter "megaraid," oder "cciss," anpasse, da sich die ja auch ändert.

Ist bestimmt totaler Kiki was ich da an Zeichen zusammengewürfelt habe, weiss es aber "NOCH" nicht besser :)

Hat da einer eine Idee für mich?
 
Zuletzt bearbeitet:
Hej,

mir ist nicht 100% klar was du genau erreichen willst, aber fangen wir mal vorne an:
Deinen ersten Befehl solltest du durch
Code:
awk '/sd/{print $4}' /proc/partitions
ersetzen koennen, das duerfte ein wenig effektiver sein.

wenn ich jetzt die datei /tmp/logger ausführe [...]
Was steht denn dort jetzt genau drin, und was haettest du dort gerne stehen? Wenn ich das richtig sehe steht dort jetzt:

Code:
smartctl -i -d megaraid,0 /dev/sda
smartctl -i -d megaraid,0 /dev/sdb
...
Und wenn ich dich richtig verstehe moechtest du die 0 durch die Zeilennummer - 1 ersetzen?

Da gibt's wieder tausend Moeglichkeiten, wie waere es hiermit?
Code:
awk '{print "smartctl -i -d megaraid," NR-1 " /dev/" $1}' /tmp/logger


MfG,
bytepool
 
Erst mal danke und entschuldigung... erst komme ich hier mit meinem "Problem" und antworte dann nicht. Töchterlein hatte aber ne ganz dolle Papa-phase und hat mich nicht an den Rechner gelassen.

So nu zum Thema:

Deine Umsetzung werde ich nacher gleich mal ausprobieren, sieht jedenfalls professionell aus.

Was ich eigendlich erreichen will ist, dass ich daten über alle HDDs auslesen kann und diese sollen nacher entweder direkt mit "| tee" oder einfach ">" in einer textdatei landen.
Mein Problem ich dass ich den "megaraid" bei smartctl irgendwie nicht verstehe. Ich gebe ja nun mal am ende die "sda/sdb/was auch immer" an, muss dem megaraid aber noch eine zahl anhängen, welche so wie es scheint tatsächlich vortlaufend ist, je zeilennummer. Während megaraid anscheinend bei "1" anfängt habe ich bei cciss schon bei "0" eine gültige Seriennummer. Und dummerweise ist die Seriennummer das wichtigste an der Angelegenheit.

Edit: Schlussendlich möchte ich damit kontrolle darüber erlangen ob die Server die ich verwalten darf andere Hardware bekommen.
Auf den HDDs sind Daten die nicht für jederman zugänglich sein dürfen. So ein LOG soll mehrfach täglich abgelegt, und automatisch verglichen werden. Bei wechsel der HDDs bekomme ich somit einen "Alarm" und kann das dann mit den Antragsformularen vergleichen ob die HDD wirklich offiziell getauscht wird.
Leider ist es dazu gekommen dass jemand meinte: HDD angeblich defekt, HDD raus, neue rein... daten behalten... dummes damit angestellt..

smartctl soll also "nur" sämtliche relevanten daten (Hersteller, Serial und Grösse... was zu viel ist dachte ich, entferne ich mit "sed") aller HDDs auslesen und loggen.

wenn ich nacher an die 3 Bastelrechner komme, probiere ich jedenfalls schon mal weiter.

Edit: controller die verwendet werden arbeiten so:
cciss (HP) die dann so dargestellt sind: cciss,X /dev/cciss/cXdX
scsi (ibm - alt) so: scsi /dev/sgX
megaraid (ibm - neuer) so: megaraid,X /dev/sda - sdb - sdc etc

"X" ist dann immer eine zahl

Jetzt brennt mir erst mal der Kopf, nachdem ich gemerkt habe dass noch ein controller mehr dazu kommt.
Nun habe ich auf dem weg von der Idee zur Umsetzug total den Faden verloren..

Aller herzlichsten Dank jedenfalls nochmal..

<<Edith>> gibts denn hier keinen Bedank-Button?!?
 
Zuletzt bearbeitet:
Hallo

Kannst du auf dem rechner (oder den rechnern) lshw installieren, dann kannst du mit lshw -class disk die Daten von HDD und DVD ausgeben lassen ud mit
lshw -class disk | grep serial die Serienumer der Festplatte(e)

mfg
schwedenmann
 
Hallo

Kannst du auf dem rechner (oder den rechnern) lshw installieren, dann kannst du mit lshw -class disk die Daten von HDD und DVD ausgeben lassen ud mit
lshw -class disk | grep serial die Serienumer der Festplatte(e)

mfg
schwedenmann

Danke für deinen Tip.
Leider funktioniert das, genau wie "dmidecode" irgendwie nicht hinter einem controller.

siehe:
Code:
              *-disk:0
                   description: SCSI Disk
                   physical id: 0.0.0
                   bus info: scsi@2:0.0.0
                   logical name: /dev/sda
                   size: 68GiB (73GB)
                   configuration: sectorsize=512

was jetzt aber interessant ist ist das hier:
Code:
physical id: 0.0.0
physical id: 0.1.0
physical id: 0.2.0
etc...

wenn das mit dem controller übereinstimmt, dann könnte ich ja auslesen und hinter dieses "megaraid," oder "cciss," klemmen...

PS: Ich haben 2 Monate zeit bekommen für mein "Projekt". Erst auf 3 Bastelrechnern und nacher darf dass dann auf die eigendlichen Kisten.

Grüsse
 

Ähnliche Themen

Bash Skript: [[: not found Fehler

sed im script per crontab

[Debian] Mount HDs on Boot-Up

Zurück
Oben