Cần xác định đĩa trong zpool Hướng như thế nào?


14

Tôi cần thay thế một đĩa xấu trong zpool trên FreeNAS.

zpool status trình diễn

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

Làm cách nào để tìm # serial của đĩa đó?


Hơn:

glabel status cho:

                                      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

Tôi không thấy gptid/5fe33556ở đó.

camcontrol devlistđưa ra:

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

Điều đó có nghĩa là đó ada2là đĩa xấu?


CẬP NHẬT:

OK, tôi khá chắc chắn rằng đó ada2là đĩa xấu. Và tôi có ghi chú của mình, vì vậy tôi biết đó là đĩa nào.

Nhưng có vẻ như tôi đã để lại một cái dự phòng ở đó - ada0 - lần cuối cùng tôi ở trong hộp. Tôi có thể thay thế ada2 bằng ada0 từ xa không? Cho đến khi ai đó đến văn phòng?


Vì vậy, ở đây câu hỏi là về cách xác định phân vùng này từ đĩa nào? (như các chuỗi đĩa có thể được tìm thấy trong dmesg)
Ouki

Điều xấu của tôi về dmesg: có mô hình ổ đĩa, nhưng không phải là nối tiếp của nó. Dường như chỉ smartcl -icó thể cung cấp cho bạn loại thông tin đó. Tại sao bạn lại cần nó, vì một khi bạn gỡ đĩa ra khỏi vỏ của nó, nó được ghi trên nhãn đĩa?!
Ouki

Tôi cần số sê-ri # vì vậy tôi biết đĩa nào sẽ rút ra ... Tôi không biết chuỗi gptid dài đó đề cập đến điều gì ... nó thường nói "ada" một cái gì đó, nhưng không còn nữa.
Dan

2
Đây gptidlà id duy nhất GEOM. Bây giờ đĩa của bạn không hoạt động, bạn không thể lấy serial, nhưng bạn vẫn có thể tìm ra "adaX" nào để lấy ra.
Ouki

Đây là một ví dụ cổ điển về lý do tại sao thực tiễn tốt nhất khuyên bạn nên sử dụng nhãn GPT và bao gồm số sê-ri (hoặc ít nhất là một số chữ số thấp của nó) trong nhãn GPT. Theo cách đó, khi ZFS cho bạn biết nhãn GPT đã bị lỗi, bạn sẽ biết chính xác đó là đĩa SN. Nhãn GPT cũng cần phải được dán nhãn vật lý ở mặt trước của khay đĩa, do đó, không rõ ràng ổ đĩa nào cần được kéo để xác định vị trí một số sê-ri nhất định. Xem ZFS Mastery của Lucas & Jude.
Jim L.

Câu trả lời:


14

Để có được một đĩa nối tiếp yêu cầu nó đang chạy và có sẵn:

  • camcontrol identify <device> |grep ^serial (đây có thể là (S) ATA cụ thể)
  • smartcl -i <device> |grep ^Serial
  • đọc nhãn đĩa một khi được gỡ bỏ khỏi vỏ

Trong trường hợp của bạn, tôi nghĩ rằng giải pháp thứ 3 là chỉ có sẵn. Vì vậy, giả sử bạn chỉ muốn đầu tiên xác định đĩa:

Hãy thử đầu tiên glabel status(vì ổ đĩa của bạn không được hiển thị là DOWNhoặc REMOVED):

$ glabel status
gptid/c7868819-ddc1-11e2-8c3e-00138f3fd9c7     N/A  da0p1
gptid/c96da0bc-ddc1-11e2-8c3e-00138f3fd9c7     N/A  da2p1
  1. Bạn có thể thấy phân vùng của bạn với glabel status

    Sau đó, bạn có thể dễ dàng xác định tên thiết bị đĩa (ví dụ: da0 cho gptid/c7868819-ddc1-11e2-8c3e-00138f3fd9c7phân vùng).

    Bạn có thể xem hệ thống của bạn bắt đầu đăng nhập từ /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. Bạn không thể thấy phân vùng của mình với 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)
    

    Từ đó, bạn có thể dễ dàng phát hiện cái nào bị thiếu ( da1 trong trường hợp này), sau đó xem xét dmesgđể xác định đĩa đó.

Vì vậy, không có giải pháp thực sự ở đây. Tôi chỉ hy vọng rằng nó giúp bạn nhìn mọi thứ rõ ràng hơn một chút.

Để biết thêm :


Xin vui lòng xem ghi chú thêm ở trên ... ada2 là đĩa xấu?
Dan

Vâng. Trông đó là một.
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

nguồn


0

Bạn có thể thử một cái gì đó như thế này. Nó làm việc cho tôi:

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

cần xuất ra toàn bộ danh sách các số sê-ri.


0

Tôi đã tạo một tập lệnh liệt kê tất cả GPTID và số sê-ri và tên thiết bị của ổ cứng liên quan.

#!/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

Giả sử bạn cần uuid của đĩa cụ thể trên hệ thống dựa trên Linux, bạn có thể nhận được với:

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

hoặc bởi nhãn fs:

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

hoặc bằng kết nối phần cứng:

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

4
Đây không phải là Linux. udevlà Linux cụ thể, như nhiều /procthứ ưa thích ... không may ở đây.
Ouki

Nhân tiện, tôi không chắc chắn Linux sẽ giữ một đĩa trong udevđó.
Ouki
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.