Sie müssen die Festplatte in zpool identifizieren ... wie?


14

Ich muss eine fehlerhafte Festplatte in einem Zpool auf FreeNAS ersetzen.

zpool status zeigt an

gptid/5fe33556-3ff2-11e2-9437-f46d049aaeca  UNAVAIL      0     0     0  cannot open

Wie finde ich die Seriennummer dieser Festplatte?


Mehr:

glabel status gibt:

                                      Name  Status  Components
                             ufs/FreeNASs3     N/A  da0s3
                             ufs/FreeNASs4     N/A  da0s4
                    ufsid/4fa405ab96518680     N/A  da0s1a
                            ufs/FreeNASs1a     N/A  da0s1a
                            ufs/FreeNASs2a     N/A  da0s2a
gptid/5f3c0517-3ff2-11e2-9437-f46d049aaeca     N/A  ada1p2
gptid/60570005-3ff2-11e2-9437-f46d049aaeca     N/A  ada3p2
gptid/60ebeaa5-3ff2-11e2-9437-f46d049aaeca     N/A  ada4p2
gptid/a767b8ef-1c95-11e2-af4c-f46d049aaeca     N/A  ada6p2
gptid/61925b86-3ff2-11e2-9437-f46d049aaeca     N/A  ada9p2
gptid/4599731b-8f15-11e1-a14c-f46d049aaeca     N/A  ada10p2

Ich sehe da nicht rein gptid/5fe33556.

Und camcontrol devlistgibt:

<Hitachi HDS723030BLE640 MX6OAAB0>  at scbus0 target 0 lun 0 (pass0,ada0)
<ST3000VX000-9YW166 CV13>          at scbus4 target 0 lun 0 (pass1,ada1)
<ST3000VX000-9YW166 CV13>          at scbus6 target 0 lun 0 (pass3,ada3)
<Hitachi HDS723030BLE640 MX6OAAB0>  at scbus7 target 0 lun 0 (pass4,ada4)
<ST3000DM001-9YN166 CC4C>          at scbus8 target 0 lun 0 (pass5,ada5)
<WDC WD30EZRX-00MMMB0 80.00A80>    at scbus8 target 1 lun 0 (pass6,ada6)
<WDC WD30EZRX-00MMMB0 80.00A80>    at scbus9 target 0 lun 0 (pass7,ada7)
<ST3000DM001-9YN166 CC4C>          at scbus9 target 1 lun 0 (pass8,ada8)
<Hitachi HDS723030BLE640 MX6OAAB0>  at scbus10 target 0 lun 0 (pass9,ada9)
<Hitachi HDS5C3030ALA630 MEAOA580>  at scbus11 target 0 lun 0 (pass10,ada10)
< USB Flash Memory 1.00>           at scbus12 target 0 lun 0 (pass11,da0)

Bedeutet das, dass ada2die Festplatte defekt ist?


AKTUALISIEREN:

OK, ich bin mir ziemlich sicher, dass dies ada2die fehlerhafte Festplatte ist. Und ich habe meine Notizen, damit ich weiß, welche Festplatte das ist.

Aber es sieht so aus, als hätte ich einen Ersatz da drin gelassen - ada0 - als ich das letzte Mal in der Box war. Kann ich ada2 durch ada0 aus der Ferne ersetzen ? Bis jemand ins Büro kommt?


Hier geht es also mehr darum, wie man erkennt, von welcher Festplatte diese Partition stammt? (als Diskettenserien können in dmesg gefunden werden)
Ouki

Mein schlechtes daran dmesg: Es gibt das Laufwerksmodell, aber nicht dessen Seriennummer. Es scheint, dass nur smartcl -iSie diese Art von Informationen geben können. Warum brauchen Sie es eigentlich, denn sobald Sie die Diskette aus dem Gehäuse genommen haben, ist sie auf dem Etikett der Diskette vermerkt ?!
Ouki

Ich brauche die Seriennummer, damit ich weiß, welche Festplatte ich herausziehen soll ... Ich weiß nicht, worauf sich diese lange gptid-Zeichenfolge bezieht ... Früher sagte sie "ada", aber nicht mehr.
Dan

2
Die gptidist GEOM eindeutige ID. Jetzt, da Ihre Festplatte heruntergefahren ist, können Sie die Seriennummer nicht mehr abrufen, aber Sie können immer noch herausfinden, welches "adaX" herausgezogen werden soll.
Ouki

Dies ist ein klassisches Beispiel dafür, warum in der bewährten Methode empfohlen wird, GPT-Etiketten zu verwenden und die Seriennummer (oder mindestens einige Ziffern niedriger Ordnung) in das GPT-Etikett aufzunehmen. Auf diese Weise wissen Sie, wenn ZFS Ihnen mitteilt, dass ein GPT-Label fehlgeschlagen ist, genau, dass es sich bei der Platten-SN handelt. Das GPT-Etikett muss auch physisch auf der Vorderseite des Laufwerksfachs angebracht sein, sodass eindeutig ist, an welchem ​​Laufwerk eine bestimmte Seriennummer zu finden ist. Siehe ZFS Mastery von Lucas & Jude.
Jim L.

Antworten:


14

Um eine Datenträgerserie zu erhalten, muss diese ausgeführt werden und verfügbar sein:

  • camcontrol identify <device> |grep ^serial (Dies könnte (S) ATA-spezifisch sein.)
  • smartcl -i <device> |grep ^Serial
  • Lesen Sie das Festplattenetikett, sobald es aus dem Gehäuse entfernt wurde

In deinem Fall denke ich, dass die 3. Lösung die einzig verfügbare ist. Angenommen, Sie möchten zunächst nur die Festplatte identifizieren:

Versuchen Sie zuerst a glabel status(da Ihr Laufwerk nicht als DOWNoder angezeigt wird REMOVED):

$ glabel status
gptid/c7868819-ddc1-11e2-8c3e-00138f3fd9c7     N/A  da0p1
gptid/c96da0bc-ddc1-11e2-8c3e-00138f3fd9c7     N/A  da2p1
  1. Sie können Ihre Partition mit sehen glabel status

    Dann können Sie den Plattengerätenamen leicht identifizieren (Beispiel: da0 für die gptid/c7868819-ddc1-11e2-8c3e-00138f3fd9c7Partition).

    Sie können sich das Startprotokoll Ihres Systems ansehen /var/log/messages(aka " dmesg"):

    $ dmesg | grep ^da0
    da0 at mps0 bus 0 scbus0 target 0 lun 0
    da0: <ATA ST3000DM001-1CH1 CC26> Fixed Direct Access SCSI-6 device
    da0: 600.000MB/s transfers
    da0: Command Queueing enabled
    da0: 2861588MB (5860533168 512 byte sectors: 255H 63S/T 364801C)
    
  2. Sie können Ihre Partition mit nicht sehen glabel status

    $ camcontrol devlist
    <ATA ST3000DM001-1CH1 CC26>        at scbus0 target 0 lun 0 (pass0,da0)
    <ATA ST3000DM001-1CH1 CC26>        at scbus0 target 4 lun 0 (pass2,da2)
    

    Von dort aus können Sie leicht erkennen, welches fehlt ( da1 in diesem Fall), und dann nachsehen dmesg, um diese Festplatte zu identifizieren.

Also hier keine echte Lösung. Ich hoffe nur, dass es Ihnen hilft, die Dinge etwas klarer zu sehen.

Um mehr zu wissen :


Bitte beachten Sie die zusätzlichen Hinweise oben ... Ist ada2 die fehlerhafte Festplatte?
Dan

Ja. Sieht so aus.
Ouki

1
#!/bin/sh
echo
echo $(basename $0) - Mounted Drives on $(hostname)
cat /etc/version
date
echo
diskinfo="$(glabel status | tail -n +2 | awk '{split($3,a,"p"); print a[1],$1}')"
echo    "+========+==========================+==================+============================================+"
echo "| Device |     DISK DESCRIPTION     |  SERIAL  NUMBER  |                   GPTID                    |"
echo "+========+==========================+==================+============================================+"

for d in $(echo "$diskinfo" | cut -d" " -f 1)
do
   diskinf=$(diskinfo -v $d | grep '# Disk ')
   diskdescription=$(echo "$diskinf" | grep '# Disk desc' | cut -d# -f 1 | xargs)
   diskserialno=$(echo "$diskinf" | grep '# Disk ident' | cut -d# -f 1 | xargs)
   diskgptid=$(echo "$diskinfo" | grep "^$d" | cut -d" " -f 2)
   printf "| %-6s | %-24s | %-16s | %-42s |\n" "$d" "$diskdescription"     "$diskserialno" "$diskgptid"
   echo "+--------+--------------------------+------------------+--------------------------------------------+"
done

Quelle


0

Sie könnten so etwas versuchen. Es hat bei mir funktioniert:

devlist=$(sudo camcontrol devlist | awk ' { print $NF } ' | cut -f 2 -d , | sed 's/)//'g)

for device in $devlist; do sudo camcontrol identify $device | grep serial; done

das sollte die gesamte Liste der Seriennummern ausgeben.


0

Ich habe ein Skript erstellt, das die gesamte GPTID sowie die zugehörige Seriennummer und den Gerätenamen der Festplatte auflistet.

#!/bin/bash

#Use smartctl to get Serial Number - else dmesg is used
USESMART=0
#save glabel status to temporary file
CACHEGLABEL=1

if  [ $CACHEGLABEL -eq 0 ]
then
GLCMD="glabel status"
else
GLTMP=/var/tmp/$0.glabel
glabel status > $GLTMP
GLCMD="cat $GLTMP"
fi

ADALOW=`ls /dev/ada[0-9] 2>/dev/null`
ADAHIGH=`ls /dev/ada[0-9][0-9] 2>/dev/null`
DALOW=`ls /dev/da[0-9] 2>/dev/null`
DAHIGH=`ls /dev/da[0-9][0-9] 2>/dev/null`
#check if all device nodes exist or skip
if  [[ $ADALOW == *ls* ]]
then
$DALOW=
fi
if  [[ $ADAHIGH == *ls* ]]
then
$ADAHIGH=
fi
if  [[ $DALOW == *ls* ]]
then
$DALOW=
fi
if  [[ $DAHIGH == *ls* ]]
then
$DAHIGH=
fi
for FILE in $ADALOW $ADAHIGH $DALOW $DAHIGH
do
DEV=${FILE##'/dev/'}
#echo -n "${DEV}: "
if  [ $USESMART -eq 0 ]
then
SERIAL=`grep $DEV: /var/log/dmesg.today |grep -i Serial | awk '{print $(NF)}'`
else
SERIAL=`smartctl -a $FILE | grep -i 'Serial Number'| awk '{print $(NF)}'`
fi
#this skips all ufs drives
GPTID=`$GLCMD |grep 2$ |grep ${DEV}p|cut -d' ' -f1`
if [ "${GPTID}x" == 'x' ]
then
GPTID="No GPTID"
fi
if [ "${SERIAL}x" == 'x' ]
then
$SERIAL="Not found"
fi
echo  ${DEV}: Serial $SERIAL \; GPTID=$GPTID
done

if  [ $CACHEGLABEL -eq 1 ]
then
rm $GLTMP
fi

-3

Angenommen, Sie benötigen die UUID der jeweiligen Festplatte auf einem Linux-basierten System, mit der Sie Folgendes erhalten können:

ls -la /dev/disk/by-uuid/

oder per fs label:

 ls -la /dev/disk/by-label/ 

oder durch Hardware-Konnektivität:

ls-la /dev/disk/by-path/

4
Dies ist NICHT Linux. udevist Linux-spezifisch, ebenso viele ausgefallene /procSachen ... leider hier.
Ouki

Übrigens bin ich mir nicht sicher, ob Linux eine Diskette in seiner udevohnehin halten würde.
Ouki
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.