在运行FreeBSD的SuperMicro服务器上识别磁盘


8

我正在ZPool中具有6个磁盘的SuperMicro 2U服务器上运行。我想通过从FreeBSD中的工具运行命令来使用驱动器托架LED标识每个驱动器托架。有没有办法做到这一点?

我知道驱动器是否在Raid Card上运行,我可以使用Raid Card实用程序来识别每个磁盘,但就我而言,没有硬件RAID。

在FreeBSD或Linux中是否有工具可以做到这一点?

Answers:


3

对于我的大多数ZFS解决方案,您最好打赌我有一张桌子和一组通过驱动器的部分SAS WWN标识驱动器的标签。这是我使用的LSI控制器的功能,其内容如下:

    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

在此处输入图片说明

有两种方法可以使它起作用。一种是商用的SanTools SMARTmon实用程序,可供OEM和集成商使用。它利用了外部JBOD单元中的SCSI机箱服务(SES)功能,但对于内部磁盘也具有一定的魔力。

您可能还会有一个选项,具体取决于所使用的控制器。您是使用主板控制器还是专用的非RAID SAS HBA?


注意:cXtYdZ表示法仅是Solaris。大多数Linux发行版都有/ dev / disk / by-id /目录,该目录包含从包含WWN的名称到/dev/sdX样式名称的符号链接。不知道,如果FreeBSD有类似的东西。
the-wabbit

使用主板,因为我现在仅使用SATA驱动器。可能会在不久的将来迁移到SAS。我也正在考虑完全按照您的建议去做,只是在贴纸上贴上标签。从长远来看,听起来像切换到专用的非RAID SAS HBA。带有用于* nix的CLI API的应用程序将为蛋糕锦上添花;)
Timothy C. Quinn

9

穷人识别磁盘的方法是发出a,dd if=/dev/daX of=/dev/null并查看哪个磁盘的活动LED闪烁最快。对于系统中的其他磁盘,这当然需要一段时间不活动,但这是非常通用的。

如果您具有可以使用的(LSI)SAS控制器,sas2ircu则可以使用它发出“ display”命令以列出可用的驱动器及其序列,然后运行“ LOCATE”命令以使机箱上的指示灯闪烁。


最好通过卸载磁盘并关闭巡检作业来停止所有I / O,而不是“低活动”。
2013年

1
sas2ircu FTW!谢谢,你救了我。顺便说一句,我有一个IT快擦写的LSI HBA,它带有一个带单个迷你插槽的超微型12托架背板。在Supermicro主板e3-1230v3、32GB ecc上运行。最新运行FreeNAS 9.3。LOCATE命令闪烁红色(错误)LED,使蓝色活动LED保持正常功能。Display命令奇怪地显示LSI控制器为#0,但机柜显示为#2(mobo sata 2和sata 3控制器可能为#0和#1,但这是推测)。
Therealstubot 2015年

4

我知道这是一个古老的问题,但是它给了我一些内容,我认为我会回想出我想出的脚本,因为这与我的情况几乎完全匹配:它需要sas2ircu :http : //www.avagotech.com/docs-and-downloads/host-bus-adapters/host-bus-adapters-common-files/sas_sata_6g_p20/SAS2IRCU_P20.zip 以及端口bash和sg3_utils

它确实做了一些假设,我认为主要假设是它附加在控制器0上。您可以sas2ircu list用来标识您的控制器编号。

它将检查选定的池(通过zpool状态)。如果没有错误,它将:

  • 保存文件(位于/root/.sas2ircu/drives),其中包含设备名称到机柜插槽的映射
  • 关闭此脚本先前激活的所有led(存储在/root/.sas2ircu/locs中)

如果有错误,它将:

  • 发送完整的zpool status输出的电子邮件
  • 激活任何发生故障的驱动器的指示灯(并将激活的位置存储在/root/.sas2ircu位置中,以便以后可以将其停用)

无论如何,这里是脚本。我将其作为每小时的cron工作进行。

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

3

我不了解FreeBSD,但是在Linux中,有一个来自Intel的软件集合,ledmon(8)我使用用户空间程序ledctl(8)对SuperMicro SC847E26-RJBOD1中特定驱动器上由驱动器控制的特定驱动器上的“定位” LED进行闪烁。 LSI SAS3008 HBA(不是MegaRAID):

$ sudo ledctl locate=/dev/sdce

然后,一旦找到它,我就关闭“定位” LED:

$ sudo ledctl locate_off=/dev/sdce

sgpio(1) HBA和背板之间的通信需要使用


2

我知道这是一个古老的问题,但是对于在FreeBSD> = 10.3上搜索的人来说,sesutil locate da2 on只要它位于提供/ dev / sesN设备的外壳中,就可以用来打开da2的LED。


1

没有标准化的抽象软件界面来点亮驱动器托盘LED(而非活动LED)-这与硬件高度相关。这意味着您仍然需要存储控制器工具(您正在说的RAID卡实用程序)将适当的命令发送到控制器。当然,如何调用或实现此软件取决于存储控制器的制造商/供应商。

(您是否拥有适当的SW袭击无关紧要,因为您显然仍然需要与背板,球童和驱动器对话的存储控制器。)

如果您将企业级驱动器球童与便宜的O型控制器一起使用,那么您可能会不走运。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.