ต้องการระบุดิสก์ในสวนสัตว์ ... อย่างไร


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เป็นดิสก์ที่ไม่ดีหรือไม่?


UPDATE:

ตกลงฉันค่อนข้างแน่ใจว่าada2เป็นดิสก์ที่ไม่ดี และฉันมีบันทึกของฉันดังนั้นฉันรู้ว่าดิสก์นั่นคืออะไร

แต่ดูเหมือนว่าฉันทิ้งอะไหล่ไว้ที่นั่น - ada0 - ครั้งล่าสุดที่ฉันอยู่ในกล่อง ฉันสามารถแทนที่ada2ด้วยada0จากระยะไกลได้หรือไม่ จนกว่าจะมีคนมาที่สำนักงาน?


ดังนั้นที่นี่คำถามเพิ่มเติมเกี่ยวกับวิธีการระบุดิสก์ที่พาร์ติชันนี้มาจากไหน? (ในขณะที่ดิสก์ serials สามารถพบได้ใน dmesg)
Ouki

ความเลวของฉันเกี่ยวกับdmesg: มีรูปแบบไดรฟ์ แต่ไม่ใช่อนุกรม ดูเหมือนว่าsmartcl -iจะให้ข้อมูลแบบนั้นกับคุณได้เท่านั้น ทำไมคุณถึงต้องการใช้มันเมื่อคุณถอดดิสก์ออกจากกล่องหุ้มมันเขียนไว้บนฉลากดิสก์!
Ouki

ฉันต้องการซีเรียล # เพื่อให้ฉันรู้ว่าดิสก์ใดที่จะดึงออกมา ... ฉันไม่รู้ว่าสตริง gptid ที่มีความยาวนั้นหมายถึงอะไร ... มันเคยพูดอะไรบางอย่างว่า "ada" แต่ไม่มีอะไรเพิ่มเติม
ด่าน

2
gptidเป็น GEOM ID ไม่ซ้ำกัน ตอนนี้ดิสก์ของคุณไม่ทำงานคุณไม่สามารถรับซีเรียลได้ แต่คุณยังสามารถหาได้ว่า "adaX" ที่จะดึงออกมา
Ouki

นี่เป็นตัวอย่างคลาสสิกว่าทำไมแนวปฏิบัติที่ดีที่สุดแนะนำให้คุณใช้ป้ายกำกับ GPT และรวมหมายเลขซีเรียล (หรืออย่างน้อยหลายหลักที่มีลำดับต่ำสุดของมัน) ในป้ายกำกับ GPT ด้วยวิธีนี้เมื่อ ZFS บอกคุณว่าป้าย GPT ล้มเหลวคุณจะรู้ว่าดิสก์ SN คืออะไร ฉลาก GPT จะต้องมีการติดฉลากทางร่างกายที่ด้านหน้าของถาดดิสก์ด้วยดังนั้นจึงไม่จำเป็นต้องดึงไดรฟ์เพื่อระบุหมายเลขซีเรียลที่กำหนด ดูZFS Masteryโดย Lucas & Jude
Jim L.

คำตอบ:


14

ในการรับดิสก์อนุกรมต้องใช้และพร้อมใช้งาน:

  • camcontrol identify <device> |grep ^serial (นี่อาจเป็น (S) ATA เฉพาะ)
  • smartcl -i <device> |grep ^Serial
  • อ่านฉลากดิสก์เมื่อนำออกจากกล่องหุ้ม

ในกรณีของคุณฉันคิดว่าโซลูชันที่ 3 มีให้เฉพาะ ดังนั้นสมมติว่าคุณต้องการระบุดิสก์ก่อน:

ลอง a ก่อน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การระบุดิสก์นั้น

ดังนั้นจึงไม่มีทางออกที่แท้จริง ฉันแค่หวังว่ามันจะช่วยให้คุณเห็นสิ่งต่าง ๆ ชัดเจนขึ้น

หากต้องการทราบข้อมูลเพิ่มเติม :


โปรดดูหมายเหตุเพิ่มเติมข้างต้น ... 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

ที่ควรแสดงรายการหมายเลขซีเรียลทั้งหมด


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

สมมติว่าคุณต้องการ uuid ของดิสก์เฉพาะบนระบบที่ใช้ Linux คุณสามารถ:

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

หรือโดยฉลาก fs:

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

หรือโดยการเชื่อมต่อฮาร์ดแวร์:

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

4
นี่ไม่ใช่ Linux udevเฉพาะลีนุกซ์เป็น/procสิ่งที่แปลกใหม่... น่าเสียดายที่นี่
Ouki

อย่างไรก็ตามฉันไม่แน่ใจว่า Linux จะเก็บดิสก์ไว้ในudevนั้น
Ouki
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.