Besoin d'identifier le disque dans zpool… comment?

14

J'ai besoin de remplacer un mauvais disque dans un zpool sur FreeNAS.

zpool status spectacles

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

Comment trouver le numéro de série de ce disque?


Plus:

glabel status donne:

                                      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

Je ne vois pas gptid/5fe33556là-dedans.

Et camcontrol devlistdonne:

<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)

Est-ce à dire que ada2c'est le mauvais disque?


MISE À JOUR:

OK, je suis presque sûr que ada2c'est le mauvais disque. Et j'ai mes notes, donc je sais de quel disque il s'agit.

Mais il semble que j'aie laissé une pièce de rechange là- dedans - ada0 - la dernière fois que j'étais dans la boîte. Puis-je remplacer ada2 par ada0 à distance? Jusqu'à ce que quelqu'un arrive au bureau?

Dan
la source
Alors ici, la question est plus de savoir comment identifier de quel disque provient cette partition? (comme les publications en série sur disque peuvent être trouvées dans dmesg)
Ouki
Mon inconvénient dmesg: il y a le modèle de lecteur, mais pas sa série. Il semble que seul smartcl -ipeut vous donner ce genre d'informations. Pourquoi en avez-vous besoin, car une fois que vous avez retiré le disque de son boîtier, il est écrit sur l'étiquette du disque?!
Ouki
J'ai besoin du numéro de série, donc je sais à quel disque retirer ... Je ne sais pas à quoi fait référence cette longue chaîne gptid ... elle disait quelque chose "ada", mais pas plus.
Dan
2
C'est l' gptididentifiant unique de GEOM. Maintenant que votre disque est en panne, vous ne pouvez pas obtenir la série, mais vous pouvez toujours déterminer quel "adaX" à retirer.
Ouki
Il s'agit d'un exemple classique de la raison pour laquelle les meilleures pratiques recommandent d'utiliser des étiquettes GPT et d'inclure le numéro de série (ou au moins plusieurs chiffres de poids faible) dans l'étiquette GPT. De cette façon, lorsque ZFS vous indiquera qu'une étiquette GPT a échoué, vous saurez exactement que le disque SN est. L'étiquette GPT doit également être physiquement étiquetée à l'avant du plateau de disque, il est donc clair quel lecteur doit être retiré pour localiser un numéro de série donné. Voir Maîtrise ZFS par Lucas & Jude.
Jim L.

Réponses:

14

Pour obtenir une série de disques, il doit être en cours d'exécution et disponible:

  • camcontrol identify <device> |grep ^serial (cela peut être spécifique à (S) ATA)
  • smartcl -i <device> |grep ^Serial
  • lecture de l'étiquette du disque une fois retirée du boîtier

Dans votre cas, je pense que la 3ème solution est la seule disponible. Donc, en supposant que vous vouliez d'abord identifier le disque:

Essayez d'abord a glabel status(car votre lecteur n'est pas représenté par DOWNou REMOVED):

$ glabel status
gptid/c7868819-ddc1-11e2-8c3e-00138f3fd9c7     N/A  da0p1
gptid/c96da0bc-ddc1-11e2-8c3e-00138f3fd9c7     N/A  da2p1
  1. Vous pouvez voir votre partition avec glabel status

    Ensuite, vous pouvez facilement identifier le nom du périphérique de disque (ex: da0 pour la gptid/c7868819-ddc1-11e2-8c3e-00138f3fd9c7partition).

    Vous pouvez consulter le journal de démarrage de votre système à partir de /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. Vous ne pouvez pas voir votre partition avec 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)
    

    À partir de là, vous pouvez facilement repérer celui qui manque ( da1 dans ce cas), puis jeter un coup d'œil dmesgpour identifier ce disque.

Donc, pas de vraie solution ici. J'espère juste que cela vous aidera à voir les choses un peu plus clairement.

Pour en savoir plus :

Ouki
la source
Veuillez voir les notes ajoutées ci-dessus ... ada2 est-il le mauvais disque?
Dan
Oui. On dirait que c'est celui-là.
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

la source

mishutka
la source
0

Vous pouvez essayer quelque chose comme ça. Cela a fonctionné pour moi:

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

qui devrait afficher la liste complète des numéros de série.

booboy
la source
0

J'ai fait un script qui répertorie tous les GPTID et le numéro de série du disque dur associé et le nom du périphérique.

#!/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
7wp
la source
-3

En supposant que vous ayez besoin d'un uuid du disque particulier sur un système Linux, vous pouvez obtenir avec:

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

ou par étiquette fs:

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

ou par connectivité matérielle:

ls-la /dev/disk/by-path/
Vladeli
la source
4
Ce n'est PAS Linux. udevest spécifique à Linux, autant de /procchoses fantaisistes ... malheureusement ici.
Ouki
Soit dit en passant, je ne suis pas sûr que Linux garderait un disque en place de udevtoute façon.
Ouki