AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 64219
Accepted
Karolis T.
Karolis T.
Asked: 2009-09-11 08:55:14 +0800 CST2009-09-11 08:55:14 +0800 CST 2009-09-11 08:55:14 +0800 CST

如何知道哪个块设备映射到哪个物理驱动器

  • 772

我有一台带有软件 RAID 1 的服务器,两个热插拔 sata 磁盘。一个硬盘开始显示错误,我正在考虑删除和更换它,唯一的问题是我不知道两者中的哪一个对应于哪些设备。而且我无法关闭服务器来找出答案。

我有 /dev/sda 和 /dev/sdb,/dev/sda 是失败的。考虑过做一些事情

# mdadm --manage /dev/md0 --remove /dev/sda1

然后以某种方式使用调整软件停止/暂停驱动器并尝试听两者中的哪一个停止了,但这在嘈杂的服务器环境中不起作用。驱动面板没有 LED。

感谢您的任何想法!

linux
  • 4 4 个回答
  • 2410 Views

4 个回答

  • Voted
  1. igustin
    2009-09-11T09:04:31+08:002009-09-11T09:04:31+08:00

    你能看到磁盘上的 S/N 吗?使用 hdparm -i /dev/sda 获取 S/N 并识别磁盘。

    • 3
  2. Best Answer
    Bart Silverstrim
    2009-09-11T09:03:28+08:002009-09-11T09:03:28+08:00

    sda 和 sdb 中的 A 和 B 应映射到驱动器的通道 1 和 2(或 0 和 1)。如果系统设置为贴上标签,您可以这样说。我不知道您的驱动器的布线结构如何;我已经在主板上用小字体对它们进行了编号,这样您就可以知道哪个端口连接到哪个驱动器。

    如果有足够的空间让您感受驱动器,我想您也可以使用您的想法尝试感受驱动器的振动。再次取决于它们的安装方式。

    • 1
  3. joshk0
    2009-09-11T09:23:39+08:002009-09-11T09:23:39+08:00

    一个简单的方法来检查哪个驱动器是哪个驱动器,如果你有正确的驱动器 LED,就是

    dd if=/dev/sda of=/dev/null

    看看哪一个的灯牢牢地粘在上面。

    • 1
  4. syntaxerror
    2013-10-26T15:12:09+08:002013-10-26T15:12:09+08:00

    好吧,去年我写了一个脚本,将这些ataX.YY东西翻译成设备名称,在这里找到:
    Linux ATA 错误:翻译成设备名称?

    但是,从那时起,我个人版本的这个脚本得到了重大改进(例如,现在甚至会显示 HDD 连接到的控制器),所以我只需一分钟的工作就可以将其缩减为您的特殊版本目的:

    #!/bin/bash
    #
    # LICENSE: GPL
    
    function float_eval()
    {
        local st=0
        local r=0.0
        if [[ $# -gt 0 ]]; then
           r=$(echo "scale=5; $*" | bc -q 2>/dev/null)
           st=$?
           if [[ $st -eq 0  &&  -z "$r" ]]; then st=1; fi
        fi
    echo $r
    return $st
    }
    
    _heahdcnt=0
    _badhdcnt=0
    _usbcnt=0
    
    echo -e "\nRetrieving assignments from /sys/block ..."
    while read Path ID
    do
       sizeBlk=$(< /sys/block/$ID/size)
    
       if grep -q '/usb[0-9]*/' <<< $Path; then
         echo -ne "\n\n(Device /dev/$ID is not an ATA device, but a USB device [e. g. a pen drive])"
          ((_usbcnt++))
       else
    
         if [ ! -f /sys/block/$ID/device/model ]; then
            echo -e "Error: Couldn't determine model of /dev/$ID\!\n"
         else 
            echo -ne "\n\n/dev/$ID is a $(< /sys/block/$ID/device/model)"
    
           # when we get a 0, something went wrong; so in this case, skip any calculations
           if [ $sizeBlk -gt 0 ]; then
    
             sizegib=$((sizeBlk >> 21))
    
            # nb: since current bc cannot do bit shift operations without external modules 
            # loaded at runtime, we will resort to a temp variable which contains the
            # shifted value
    
             sizeBlkLsh9=$((sizeBlk << 9))
             sizegb=$(float_eval "$sizeBlkLsh9 / 1000000000")
    
             # use formatted output, don't mix literals and arithmetic in one string (as with echo)
    
             LC_NUMERIC=C printf " (%4.0f GiB / %4.0f GB )" $sizegib $sizegb
    
             ((_heahdcnt++))
           else
             ((_badhdcnt++))
           fi
        fi
    
        [[ $sizeBlk -eq 0 ]] && echo "WARNING: There appears to be some trouble with device \
     /dev/$ID. You should check this more thoroughly."
      fi
    
    # process substitution
    done < <(ls -l /sys/block/sd* \
    \
    | sed -e 's^.*-> \.\.^/sys^' \
          -e 's^/host[0-9]\{1,2\}/target\([0-9]\{1,2\}\(:[0-9]\)\{2,3\}/\)\{1,2\}block/^ ^')
    
    echo -e "\n\nScanning of hardware completed.\n"
    
    echo "You have $[$_heahdcnt + $_badhdcnt + $_usbcnt] devices connected:"
    echo -n "$_heahdcnt healthy HDD(s), $_badhdcnt bad HDD(s)"
    [[ $_usbcnt -gt 0 ]] && echo " and $_usbcnt USB device(s)."
    

    注意: float_eval() 辅助函数虽然不是绝对必要的,但可以避免数十亿或数万亿字节的错误计算(GB 和 TB,不要与 GiB/TiB 混淆)。特别是在 TB 范围内,当从(长)整数中的块大小计算时,此类计算可能会越来越偏离其准确值。主要原因(或原因)是在几年前硬盘容量达到 1 TB 标记之前,我们从未在硬盘容量中使用小数点,因此整数计算可能不再适用于所有情况。

    此外,我对有人改进此脚本感兴趣,以便在有两个具有相同制造商 ID 的驱动器时显示序列号。不幸的是,到目前为止,我还没有成功找到这些信息/sys/block/*。

    • 0

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve