zpool에서 디스크를 식별해야합니다… 어떻게?


14

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이것이 나쁜 디스크 라는 것을 의미합니까 ?


최신 정보:

좋아, 나는 그것이 ada2나쁜 디스크 라고 확신한다 . 메모가 있으므로 어떤 디스크인지 알고 있습니다.

그러나 내가 상자에 마지막으로 있을 때 나는 ada0에 여분을 남겼습니다 . 원격으로 ada2ada0 으로 바꿀 수 있습니까 ? 누군가 사무실에 도착할 때까지?


여기서 질문은이 파티션의 디스크를 식별하는 방법에 대한 것입니다. (디스크 시리얼은 dmesg에서 찾을 수 있습니다)
Ouki

내 나쁜 점 dmesg: 드라이브 모델은 있지만 직렬은 아닙니다. 그런 smartcl -i종류의 정보 만 줄 수있는 것 같습니다 . 인클로저에서 디스크를 꺼내면 디스크 레이블에 기록 된 것처럼 왜 필요한가요?!
Ouki

일련 번호가 필요하므로 어떤 디스크를 꺼낼 지 알고 있습니다. 긴 gptid 문자열이 무엇을 의미하는지 모르겠습니다.
Dan

2
gptidGEOM 고유 한 ID입니다. 이제 디스크가 다운되었으므로 직렬을 얻을 수 없지만 여전히 "adaX"를 뽑아 낼 수는 있습니다.
Ouki

이것은 모범 사례가 GPT 레이블을 사용하고 GPT 레이블에 일련 번호 (또는 그보다 낮은 하위 자릿수)를 포함하도록 권장하는 이유의 전형적인 예입니다. 이렇게하면 ZFS에서 GPT 레이블이 실패했다고 알리면 디스크 SN이 정확히 무엇인지 알 수 있습니다. GPT 레이블은 디스크 트레이의 앞면에 물리적으로 레이블이 붙어 있어야하므로, 주어진 일련 번호를 찾기 위해 어떤 드라이브를 당겨야하는지 분명합니다. Lucas & Jude의 ZFS Mastery 를 참조하십시오 .
Jim L.

답변:


14

디스크 일련 번호를 얻으려면 디스크 일련 번호가 실행 중이고 사용 가능한 상태 여야합니다.

  • camcontrol identify <device> |grep ^serial (이것은 (S) ATA 특정 일 수 있습니다)
  • smartcl -i <device> |grep ^Serial
  • 인클로저에서 디스크 레이블을 제거한 후 디스크 레이블 읽기

귀하의 경우에는 3 번째 솔루션 만 사용할 수 있다고 생각합니다. 따라서 먼저 디스크를 식별한다고 가정하면 다음과 같습니다.

먼저 glabel status드라이브를 DOWN또는로 표시하지 않았으므로 a를 시도하십시오 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(일명 " 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해당 디스크를 식별 할 수 있습니다.

따라서 실제 해결책은 없습니다. 좀 더 명확하게 이해하는 데 도움이되기를 바랍니다.

더 알고 :


위의 추가 정보를 참조하십시오 ... ada2가 불량 디스크입니까?
Dan

네. 그게 하나입니다.
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

일련 번호의 전체 목록을 출력해야합니다.


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

-3

Linux 기반 시스템에서 특정 디스크의 UUID가 필요하다고 가정하면 다음을 얻을 수 있습니다.

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

또는 fs 레이블로 :

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

또는 하드웨어 연결로 :

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

4
이것은 리눅스 가 아닙니다 . 불행히도 여기에 udev많은 멋진 /proc것들 과 같이 리눅스가 있습니다.
Ouki

그건 그렇고, 리눅스가 udev어쨌든 디스크를 보관하지 않을 것이라고 확신 합니다.
Ouki
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.