ata4.00을 적절한 /dev/sdX 또는 실제 물리적 디스크와 일치시키는 방법은 무엇입니까?

ata4.00을 적절한 /dev/sdX 또는 실제 물리적 디스크와 일치시키는 방법은 무엇입니까?

로그에서 다음과 같은 내용을 얻습니다.

10월 2일 22:11:21 목성 커널: [439646.093111] ata4.00: 예외 Emask 0x0 SAct 0x0 SErr 0x0 작업 0x6
10월 2일 22:11:21 목성 커널: [439646.093144] ata4.00: BMDMA 통계 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 태그 0 dma 339968 out
10월 2일 22:11:21 목성 커널: [439646.093282] ata4.00: 상태: { DRDY ERR }
10월 2일 22:11:21 주피터 커널: [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 주피터 커널: [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 케이블을 교체하세요.

관련 정보