FreeNASのzpoolの不良ディスクを交換する必要があります。
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
が不良ディスクであることを意味しますか?
更新:
OK、ada2
が不良ディスクであると確信しています。そして、私はメモを持っているので、それがどのディスクであるかを知っています。
しかし、私はそこにスペアを残したようです-ada-最後に箱に入ったとき。リモートでada2をadaに置き換えることはできますか?誰かがオフィスに来るまで?
ディスクシリアルを取得するには、ディスクシリアルが実行中であり、使用可能である必要があります。
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
glabel status
でパーティションを確認できます
次に、ディスクデバイス名を簡単に識別できます(例:gptid/c7868819-ddc1-11e2-8c3e-00138f3fd9c7
パーティションのda0)。
/var/log/messages
(別名 "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)
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
を見てそれを特定しますディスク。
したがって、ここでは実際の解決策はありません。私はそれがあなたが物事をもう少し明確に見るのに役立つことを願っています。
詳しく知るには:
#!/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
すべての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
このようなものを試すことができます。それは私のために働きました:
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
シリアル番号のリスト全体が出力されます。