如何將ata4.00與適當的/dev/sdX或實際實體磁碟相符?

如何將ata4.00與適當的/dev/sdX或實際實體磁碟相符?

在日誌中取得類似這樣的內容:

10 月 2 日 22:11:21 jupiter 核心:[439646.093111] ata4.00:異常 Emask 0x0 SAct 0x0 SErr 0x0 操作 0x6
10 月 2 日 22:11:21 jupiter 核心:[439646.093144] ata4.00:BMDMA stat 0x6
10 月 2 日 22:11:21 jupiter 核心:[439646.093176] ata4.00:指​​令失敗:WRITE DMA EXT
10月2日22:11:21木星核心:[439646.093206] ata4.00:cmd 35/00:98:00:0d:ff/00:02:42:00:00/e0 tag 0 dma 339968 out
10 月 2 日 22:11:21 木星內核:[439646.093282] ata4.00:狀態:{ DRDY ERR }
10 月 2 日 22:11:21 jupiter 核心:[439646.093306] ata4.00:錯誤:{ ICRC ABRT }
10 月 2 日 22:11:21 jupiter 核心:[439646.093353] ata4:軟重置鏈接
10 月 2 日 22:11:21 jupiter 核心:[439646.265242] ata4.00:配置為 UDMA/133
10 月 2 日 22:11:21 jupiter 核心:[439646.265268] ata4:EH 完成

現在我想知道要更換哪個磁碟。但我找不到“ataX.YZ”和 /dev/disk/ 條目之間的任何明確映射。

答案1

  • 您應該從 dmesg 獲取更多資訊:

    dmesg | grep ata
    

    就像是:

    [    2.345126] ata2.00: ATA-8: WDC WD20EARX-00PASB0, 51.0AB51, max UDMA/133
    

    那將是我的 Wester Digital 硬碟。


  • 如果您有一個型號的多個驅動器,可以採用以下方法(當上述方法無濟於事時):

    1. 尋找從 SCSI 主機到 ata* ID 的對應:

      $ egrep "^[0-9]{1,}" /sys/class/scsi_host/host*/unique_id
      /sys/class/scsi_host/host0/unique_id:1
      /sys/class/scsi_host/host1/unique_id:2
      /sys/class/scsi_host/host2/unique_id:3
      /sys/class/scsi_host/host3/unique_id:4
      
    2. 尋找從 SCSI 主機到 sd* ID 的對應:

      $ ls -l /sys/block/sd*
      ... /sys/block/sda -> ../devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda
      ... /sys/block/sdb -> ../devices/pci0000:00/0000:00:1f.2/host1/target1:0:0/1:0:0:0/block/sdb
      

    現在您可以透過主機* 標識符連結這兩個結果。因此,如果在這種情況下我遇到 ata2 問題,我會尋找 unique_id 2 → host1,然後尋找 sd* 是 host1 → sdb。


  • 我還嘗試想出一句俏皮話。不知道這是否堅固。您首先必須將 ata* 設定為變數:

    FAIL=ata1
    

    然後運行:

    echo "$FAIL -> $(ls -l /sys/block/ | grep $(grep "^$(echo $FAIL | cut -c 4-)" /sys/class/scsi_host/host*/unique_id | sed "s/.*\(host[0-9]\{1,\}\).*/\1/") | awk '{print $8}')"
    

    它應該返回類似:

    ata1 -> sda
    

答案2

在我的某些伺服器中,一台 scsi_host 上有兩個或多個裝置。我不知道它是否正確,但我認為它可以通過目標來區分並且它對我有用:

ls -l /sys/block/sd*
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sda -> ../devices/pci0000:00/0000:00:01.0/0000:01:00.0/host3/target3:0:0/3:0:0:0/block/sda
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sdb -> ../devices/pci0000:00/0000:00:1f.2/host6/target6:0:0/6:0:0:0/block/sdb
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sdc -> ../devices/pci0000:00/0000:00:1f.2/host7/target7:0:0/7:0:0:0/block/sdc
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sdd -> ../devices/pci0000:00/0000:00:1f.2/host8/target8:0:0/8:0:0:0/block/sdd
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sde -> ../devices/pci0000:00/0000:00:1f.2/host9/target9:0:0/9:0:0:0/block/sde
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sdf -> ../devices/pci0000:00/0000:00:1f.2/host10/target10:0:0/10:0:0:0/block/sdf
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sdg -> ../devices/pci0000:00/0000:00:1f.2/host11/target11:0:0/11:0:0:0/block/sdg
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sdh -> ../devices/pci0000:00/0000:00:1c.4/0000:04:00.0/host13/target13:0:0/13:0:0:0/block/sdh
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sdi -> ../devices/pci0000:00/0000:00:1c.4/0000:04:00.0/host13/target13:0:1/13:0:1:0/block/sdi

簡單的 bash 腳本:

#!/bin/bash

#inspired by http://askubuntu.com/questions/64351/how-to-match-ata4-00-to-the-apropriate-dev-sdx-or-actual-physical-disk

for d in /sys/block/sd*
do
  s=`basename $d`
  h=`ls -l $d | egrep -o "host[0-9]+"`
  t=`ls -l $d | egrep -o "target[0-9:]*"`
  a2=`echo $t | egrep -o "[0-9]:[0-9]$" | sed 's/://'`
  a=`cat /sys/class/scsi_host/$h/unique_id`
  echo "$s -> ata$a.$a2"
done

它的輸出:

sda -> ata4.00
sdb -> ata7.00
sdc -> ata8.00
sdd -> ata9.00
sde -> ata10.00
sdf -> ata11.00
sdg -> ata12.00
sdh -> ata14.00
sdi -> ata14.01

答案3

現在已經太晚了,但是為了其他讀者......我必須回答您的另一個問題“現在我想知道要更換哪個磁碟。”

ICRC 錯誤標誌幾乎總是與損壞的 SATA 電纜相關,這很容易更換/測試。如果驅動器電源故障,則有可能會升起 ICRC 標誌。

但可以肯定的是,有驅動器有任何問題的證據!更換 SATA 電纜。

相關內容