Нужно определить диск в zpool ... как?

14

Мне нужно заменить плохой диск в zpool на FreeNAS.

zpool status шоу

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

Как мне найти серийный номер этого диска?


Больше:

glabel status дает:

                                      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

Я не вижу gptid/5fe33556там.

И camcontrol devlistдает:

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

Означает ли это, что ada2это плохой диск?


ОБНОВИТЬ:

Хорошо, я уверен, что ada2это плохой диск. И у меня есть свои заметки, поэтому я знаю, что это за диск.

Но похоже, что я оставил запасной там - ada0 - в прошлый раз, когда я был в коробке. Могу ли я заменить ada2 на ada0 удаленно? Пока кто-нибудь не доберется до офиса?

Дэн
источник
Так что здесь вопрос больше в том, как определить, с какого диска этот раздел? (как
серийники
Мое плохое про dmesg: модель привода есть, а не его серийный. Кажется, только smartcl -iможет дать вам такую ​​информацию. Кстати, зачем вам это, потому что, когда вы извлекаете диск из корпуса, он записывается на этикетке диска ?!
Ouki
Мне нужен серийный номер #, поэтому я знаю, какой диск вытащить ... Я не знаю, к чему относится эта длинная строка gptid ... Раньше она что-то говорила "ада", но не более того.
Дэн
2
Это gptidуникальный идентификатор GEOM. Теперь, когда ваш диск не работает, вы не можете получить серийный номер, но вы все равно можете выяснить, какой "adaX" вытащить.
Ouki
Это классический пример того, почему лучшие практики рекомендуют использовать метки GPT и включать серийный номер (или, по крайней мере, несколько его младших разрядов) в метку GPT. Таким образом, когда ZFS сообщает вам, что метка GPT провалилась, вы точно будете знать, что это за SN диска. Надпись GPT также должна быть физически помечена на передней панели лотка для дисков, поэтому неясно, какой диск нужно извлечь, чтобы найти заданный серийный номер. Смотрите ZFS Мастерство от Лукаса и Джуд.
Джим Л.

Ответы:

14

Чтобы получить серийный диск, он должен быть запущен и доступен:

  • camcontrol identify <device> |grep ^serial (это может быть (S) ATA специфично)
  • smartcl -i <device> |grep ^Serial
  • считывание метки диска после извлечения из корпуса

В вашем случае, я думаю, что 3-е решение является единственным доступным. Итак, если вы просто хотите сначала идентифицировать диск:

Попробуйте сначала glabel status(как ваш привод не показан DOWNили REMOVED):

$ glabel status
gptid/c7868819-ddc1-11e2-8c3e-00138f3fd9c7     N/A  da0p1
gptid/c96da0bc-ddc1-11e2-8c3e-00138f3fd9c7     N/A  da2p1
  1. Вы можете увидеть свой раздел с glabel status

    Затем вы можете легко определить имя дискового устройства (например, da0 для gptid/c7868819-ddc1-11e2-8c3e-00138f3fd9c7раздела).

    Вы можете взглянуть на журнал запуска вашей системы из /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. Вы не можете видеть свой раздел с 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)
    

    Оттуда вы можете легко определить, какой из них отсутствует ( в данном случае da1 ), а затем посмотреть, dmesgчтобы идентифицировать этот диск.

Таким образом, здесь нет реального решения. Я просто надеюсь, что это поможет вам увидеть вещи немного яснее.

Чтобы узнать больше :

Ouki
источник
Пожалуйста, смотрите добавленные заметки выше ... Является ли ada2 плохой диск?
Дан
Ага. Похоже, это один.
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

источник

Мишутка
источник
0

Вы можете попробовать что-то вроде этого. Это сработало для меня:

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

это должно вывести весь список серийных номеров.

booboy
источник
0

Я сделал скрипт, который перечисляет все GPTID и связанный серийный номер жесткого диска и имя устройства.

#!/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
источник
-3

Предполагая, что вам нужен uuid конкретного диска в системе на базе Linux, вы можете получить:

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

или по метке fs:

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

или с помощью аппаратного подключения:

ls-la /dev/disk/by-path/
vladeli
источник
4
Это НЕ Linux. udevспецифичен для Linux, так как много причудливых /procвещей ... к сожалению, здесь.
Ouki
Кстати, я не уверен, что Linux все равно будет держать диск в нём udev.
Ouki