Identifikasi Disk pada server SuperMicro yang menjalankan FreeBSD

8

Saya menjalankan server SuperMicro 2U dengan 6 disk di ZPool. Saya ingin mengidentifikasi setiap ruang drive menggunakan Drive Carrier LED dari menjalankan perintah dari alat di FreeBSD. Apakah ada cara untuk melakukan ini?

Saya tahu jika drive berjalan di atas Kartu Raid, saya bisa menggunakan utilitas kartu raid untuk mengidentifikasi setiap disk tetapi dalam kasus saya, tidak ada serangan perangkat keras.

Apakah ada alat untuk melakukan ini di FreeBSD atau Linux?

Timothy C. Quinn
sumber

Jawaban:

3

Untuk sebagian besar solusi ZFS saya, Anda lebih baik bertaruh bahwa saya memiliki tabel dan satu set label yang mengidentifikasi drive oleh SAS WWN parsial mereka . Ini adalah fungsi dari pengontrol LSI yang saya gunakan, yang berbunyi seperti:

    NAME                        STATE     READ WRITE CKSUM
    vol1                        ONLINE       0     0     0
      mirror-0                  ONLINE       0     0     0
        c10t50000393482B340Cd0  ONLINE       0     0     0
        c10t50000393482B4CF0d0  ONLINE       0     0     0
      mirror-1                  ONLINE       0     0     0
        c10t50000393482B4DB4d0  ONLINE       0     0     0
        c10t50000393482BAB48d0  ONLINE       0     0     0
      mirror-2                  ONLINE       0     0     0
        c10t50000393482BDA68d0  ONLINE       0     0     0
        c10t500003935803910Cd0  ONLINE       0     0     0

masukkan deskripsi gambar di sini

Ada beberapa opsi untuk menjalankannya. Salah satunya adalah utilitas SanTools SMARTmon komersial yang tersedia untuk OEM dan integrator. Ini memanfaatkan fitur SCSI Enclosure Services (SES) di unit JBOD eksternal, tetapi juga memiliki beberapa keajaiban untuk disk internal.

Anda juga dapat memiliki opsi tergantung pada pengontrol yang Anda gunakan. Apakah Anda hanya menggunakan pengontrol motherboard atau SAS HBA non-RAID yang dibuat khusus?

putih
sumber
Catatan: notasi cXtYdZ hanya Solaris. Kebanyakan distro Linux memiliki direktori / dev / disk / by-id / yang berisi symlink dari nama yang mengandung WWN ke /dev/sdXnama style. Tidak tahu, jika FreeBSD memiliki sesuatu yang serupa.
the-wabbit
Menggunakan motherboard karena saya hanya menggunakan drive SATA untuk saat ini. Dapat bermigrasi ke SAS dalam waktu dekat. Saya juga mempertimbangkan untuk melakukan persis apa yang Anda usulkan yang hanya memberi label teluk dengan stiker. Kedengarannya seperti beralih ke SAS HBA non-RAID khusus adalah cara untuk digunakan dalam jangka panjang. Satu dengan API CLI untuk * nix akan menempatkan lapisan gula pada kue;)
Timothy C. Quinn
9

Cara orang miskin untuk mengidentifikasi disk adalah dengan mengeluarkan dd if=/dev/daX of=/dev/nulldan melihat LED aktivitas disk mana yang paling cepat berkedip. Ini tentu saja memerlukan periode aktivitas rendah untuk disk lain dalam sistem, tetapi sangat umum.

Jika Anda memiliki pengontrol SAS (LSI) yang dapat digunakan, sas2ircuAnda dapat menggunakannya untuk mengeluarkan perintah "display" untuk membuat daftar drive yang tersedia dan serial-serialnya dan kemudian menjalankan perintah "LOCATE" untuk mengedipkan lampu pada enklosur.

the-wabbit
sumber
Alih-alih "Aktivitas rendah", lebih baik hentikan semua I / O dengan melepas disk dan mematikan pekerjaan patroli.
Roman
1
sas2ircu FTW! Terima kasih, Anda menyelamatkan saya. Kebetulan, saya memiliki IT mem-flash LSI HBA dengan backplane supermicro 12 bay dengan mini-sas tunggal. Berjalan di supermicro mobo, e3-1230v3, 32gb ecc. menjalankan FreeNAS 9.3 terbaru. Perintah LOCATE berkedip merah (kesalahan), meninggalkan LED aktivitas biru dengan fungsi normal. Perintah tampilan dengan aneh menunjukkan bahwa pengontrol LSI adalah # 0 tetapi enklosur muncul sebagai # 2 (Kemungkinan pengontrol mobo sata 2 dan sata 3 menjadi # 0 dan # 1, tapi itu dugaan).
Therealstubot
4

Saya tahu ini adalah pertanyaan lama, tetapi itu memberi saya beberapa bagian yang saya kumpulkan, dan saya pikir saya akan menembak kembali naskah yang saya buat, karena ini adalah kecocokan yang hampir tepat dengan situasi saya: ini membutuhkan sas2ircu : http://www.avagotech.com/docs-and-downloads/host-bus-adapters/host-bus-adapters-common-files/sas_sata_6g_p20/SAS2IRCU_P20.zip dan dari port, bash dan sg3_utils

Itu membuat beberapa asumsi, saya pikir yang utama adalah bahwa ia dilampirkan ke pengontrol 0. Anda dapat menggunakan sas2ircu listuntuk mengidentifikasi nomor pengontrol Anda.

Ini akan memeriksa kolam yang dipilih (melalui status zpool). Jika tidak ada kesalahan itu akan:

  • menyimpan file (di /root/.sas2ircu/drives) dengan pemetaan nama perangkat ke slot enklosur
  • matikan led apa saja yang sebelumnya diaktifkan oleh skrip ini (ini disimpan di /root/.sas2ircu/locs)

Jika ada kesalahan itu akan:

  • mengirim email dengan output penuh status zpool
  • aktifkan leds dari setiap drive yang gagal (dan simpan lokasi-lokasi tersebut di lokasi /root/.sas2ircu sehingga nantinya dapat dinonaktifkan)

Lagi pula di sini adalah skrip. Saya menjalankannya sebagai pekerjaan cron per jam.

#! /usr/local/bin/bash
if [ ! "$1" ]; then
  echo "Usage: zpscan.sh pool [email]"
  echo "Scan a pool, send email notification and activate leds of failed drives"
  exit
fi
if [ ! -d /root/.sas2ircu ]; then
  mkdir /root/.sas2ircu
  touch /root/.sas2ircu/drives
  touch /root/.sas2ircu/locs
fi
if [ "$2" ]; then
  email="$2"
else
  email="root"
fi
condition=$(/sbin/zpool status $1 | egrep -i '(DEGRADED|FAULTED|OFFLINE|UNAVAIL|REMOVED|FAIL|DESTROYED|corrupt|cannot|unrecover)')
if [ "${condition}" ]; then
  emailSubject="`hostname` - ZFS pool - HEALTH fault"
  mailbody=$(zpool status $1)
  echo "Sending email notification of degraded zpool $1"
  echo "$mailbody" | mail -s "Degraded Zpool $1 on hostname" $email
  drivelist=$(zpool status $1 | grep -E "(DEGRADED|FAULTED|OFFLINE|UNAVAIL|REMOVED|FAIL|DESTROYED)" | grep -vE "^\W+($1|NAME|mirror|logs|spares)" | sed -E $'s/.*was \/dev\/([0-9a-z]+)/\\1/;s/^[\t  ]+([0-9a-z]+)[\t ]+.*$/\\1/')
  echo "Locating failed drives."
  for drive in $drivelist;
  do
  record=$(grep -E "^$drive" /root/.sas2ircu/drives)
  location=$(echo $record | cut -f 3 -d " ")
  echo Locating: $record
  sas2ircu 0 locate $location ON
  if [ ! "$(egrep $location /root/.sas2ircu/locs)" ]; then
  echo $location >> /root/.sas2ircu/locs
  fi
  done
else
  echo "Saving drive list."
  drivelist=$(zpool status $1 | grep -E $'^\t  ' | grep -vE "^\W+($1|NAME|mirror|logs|spares)" | sed -E $'s/^[\t ]+//;s/([a-z0-9]+).*/\\1/')
  saslist=$(sas2ircu 0 display)
  printf "" > /root/.sas2ircu/drives
  for drive in $drivelist;
  do
  sasaddr=$(sg_vpd -i -q $drive 2>/dev/null | sed -E '2!d;s/,.*//;s/  0x//;s/([0-9a-f]{7})([0-9a-f])([0-9a-f]{4})([0-9a-f]{4})/\1-\2-\3-\4/')
  encaddr=$(echo "$saslist" | grep $sasaddr -B 2 | sed -E 'N;s/^.*: ([0-9]+)\n.*: ([0-9]+)/\1:\2/')
  echo $drive $sasaddr $encaddr >> /root/.sas2ircu/drives
  done

  for loc in $(cat /root/.sas2ircu/locs);
  do
  sas2ircu 0 locate $loc OFF
  done
  printf "" > /root/.sas2ircu/locs
fi

  for loc in $(cat /root/.sas2ircu/locs);
  do
  sas2ircu 0 locate $loc OFF
  done
  printf "" > /root/.sas2ircu/locs
fi
palesius
sumber
3

Saya tidak tahu tentang FreeBSD, tetapi di Linux, ada koleksi perangkat lunak dari Intel yang disebut ledmon(8)dan saya telah menggunakan program userspace ledctl(8)untuk mem-flash LED "temukan" pada drive tertentu di SuperMicro SC847E26-RJBOD1 yang memiliki drive yang dikendalikan oleh sebuah LSI SAS3008 HBA (bukan MegaRAID):

$ sudo ledctl locate=/dev/sdce

Lalu begitu saya menemukannya, saya mematikan LED "temukan":

$ sudo ledctl locate_off=/dev/sdce

sgpio(1) diperlukan untuk komunikasi antara HBA dan backplane.

ja-s
sumber
2

Saya tahu ini adalah pertanyaan lama, tetapi bagi para pencari yang memukul ini, pada FreeBSD> = 10.3, Anda dapat menggunakan sesutil locate da2 onuntuk menyalakan LED da2 asalkan ada di selungkup yang menyediakan perangkat / dev / sesN.

eborisch
sumber
1

Tidak ada antarmuka perangkat lunak abstrak yang distandarisasi untuk menerangi LED Drive Carrier (bukan LED aktivitas) - ini sangat tergantung pada perangkat keras. Ini berarti bahwa Anda masih memerlukan alat pengontrol penyimpanan (utilitas kartu serangan yang Anda bicarakan) untuk mengirim perintah yang sesuai ke pengontrol. Bagaimana perangkat lunak ini disebut atau diimplementasikan tentu saja tergantung pada produsen / vendor pengontrol penyimpanan.

(Tidak masalah bahwa Anda memiliki serangan SW di tempat, karena Anda jelas masih membutuhkan pengontrol penyimpanan yang berbicara dengan backplane, caddies, dan drive Anda.)

Jika Anda menggunakan drive kelas perusahaan dengan pengontrol murah, maka Anda mungkin kurang beruntung.

Roma
sumber