ESXi 를 운영하시다보면, vmkernel log 에서 SCSI sense code 가 발생하는 것을 보신적이 있으실 겁니다. 보통 아래와 같은 메세지처럼 생겼죠.
2011-04-04T21:07:30.257Z cpu2:2050)ScsiDeviceIO: 2315: Cmd(0x4124003edb00) 0x12, CmdSN 0x51 to dev “naa.600508e000000000c9f6baa7c19f6900” failed H:0x0 D:0x2 P:0x0 Valid sense data: 0x5 0x24 0x0
ESXi 서버와 스토리지 어레이간에 문제가 생겼을 경우에 위와 같은 형태의 메세지들이 발생하는데, 위의 메세지를 통해서 정확하진 않더라도, 문제가 되는 부분을 대충은 짐작할 수 있습니다.
이렇게 보시면 됩니다.
H : Host 의 상태
D : Device 상태
P : 플러그인의 상태
여기서 P 의 Code 가 발생하는 경우는 많지 않으니 제외하도록 하고.. 즉 H 에 코드가 발생하는지 아님 D 의 Code 가 발생하는지에 따라서, 호스트에 문제가 있는지 아님 스토리지에 문제가 있는지를 추측해볼 수 있습니다.
만약 스토리지로의 모든 Path 가 Down 된 경우에는 (All Paths Down), D 의 코드가 발생할 수가 없습니다. 호스트와 스토리지간에 연결된 패스가 없기 때문에, 스토리지에서 D 코드를 보내도, 호스트에서는 받을 수가 없기 때문이죠. 즉 이 경우에는 보통 H 에 코드가 생깁니다.
코드의 값이 0일 경우에는 보통 에러가 없다고 보시면 됩니다. 다른 숫자나 알파벳이 발생할 경우에는 무언가 문제가 있다고 보시면 됩니다.
위의 메세지를 보면
H:0x0 D:0x2 P:0x0 라고 되어있는데, D 의 코드가 있는 것을 보실 수 있죠. 그렇다면 위의 메세지는 스토리지에서 호스트로 보낸 메세지 입니다. 그 메세지의 내용이 Valid sense data: 0x5 0x24 0x0 라고 이해하시면 됩니다.
Host code 를 한번 살펴보죠. 0 ~ b 까지 있습니다. 자주 발생하는 것들은 Bold 처리하였습니다. H:0x1 이 발생했다면 All Paths Down 또는 PDL 상태라고 보시면 되는데, 그 구분은 Valid sense data 쪽을 보고 하실 수 있습니다. Valid sense code 가 0x5 0x25 0x0 이거나 0x5 0x68 0x0 이면 PDL 아니라면 APD 로 보시면 됩니다. APD 일 경우에는 Valid sense data 가 주로 0x0 0x0 0x0 입니다. 왜냐하면 스토리지로의 연결이 없기 때문에 Valid sense data 스토리지로부터 수신할 수 없기 때문이죠.
H:0x0 – 에러없음
H:0x1 – 스토리지로의 커넥션이 없음
H:0x2 – Bus 의 상태가 Busy 함
H:0x3 – Timed Out
H:0x4 – Bad Target 아마도, 디바이스가 응답을 하지 않음.
H:0x5 – Abort
H:0x6 – Parity Error (케이블 등의 Physical 문제일 가능성이 있음)
H:0x7 – HBA 의 Internal Error
H:0x8 – Reset
H:0x9 – 예상치 못한 interrupt 발생
H:0xa – Force command Past mid-layer
H:0xb – Driver 단에서 Retry 시도
Device code 는 다음과 같습니다. 아래 코드중에서 Bold 로 표시한것 이외에 다른 코드들은 제가 경험한바는 없습니다. 이런 코드들은 VMware 에서 정의한게 아니라 표준기관에서 정의한 것입니다.
D:0x0 – 에러없음
D:0x2 – 컨디션 체크
D:0x4 – Condition Met
D:0x8 – Busy
D:0x18 – Reservation Conflict
D:0x28 – TASK SET FULL
D:0x30 – ACA Active
D:0x40 – Task Abort
Sense data 키의 설명은 생략하도록 하겠습니다.
매번 위의 설명과 키를 매치하기 어려우실 경우 다음 사이트를 이용하시면 편리하실 겁니다.
예를 들면..
cpu2:2127)ScsiDeviceIO: 2316: Cmd(0x4124403c1fc0) 0x25, CmdSN 0xecab to dev “naa.60a98000572d54724a34642d71325763” failed H:0x1 D:0x0 P:0x0 Possible sense data: 0x5 0x25 0x0.
디바이스 naa.60a98000572d54724a34642d71325763 로의 연결이 없고, sense data 는 0x5 0x25 0x0 인 상태. 0x5 0x25 0x0 는 LOGICAL UNIT NOT SUPPORTED 의 의미로써, 해당 디바이스가 존재하지 않는 상태, 즉 PDL 상태임을 의미합니다. 이 경우에는 Device 로의 연결은 없으나, 스토리지 어레이 로의 연결은 존재하는 상태입니다. 보통 PDL 의 경우, Datastore 를 unmount 하고 detach 하지 않은 상태에서 스토리지 어레이에서 LUN 을 제거하거나, 또는 볼륨 마스킹에서(스토리지 그룹) LUN 을 제거했을 때 많이 발생합니다. 스토리지 어레이의 스토리지 컨트롤러는 문제가 없는 상태입니다.
만약 코드가 아래와 같다면?
cpu2:2127)ScsiDeviceIO: 2316: Cmd(0x4124403c1fc0) 0x25, CmdSN 0xecab to dev “naa.60a98000572d54724a34642d71325763” failed H:0x1 D:0x0 P:0x0 Possible sense data: 0x0 0x0 0x0.
디바이스 naa.60a98000572d54724a34642d71325763 로의 연결이 없고, sense data 도 수신된 것이 없는 상태이기 때문에, 스토리지 어레이로의 연결이 문제가 있다고 보시면 됩니다. All Paths Down 으로 보시면 되겠습니다. 보통 2장 이상의 HBA 가 동시에 fault 날 가능성은 굉장히 적기 때문에 이러한 코드가 발생한다면, 스토리지 어레이의 문제를 의심해볼 수 있겠습니다.
참고로 sense data 중에 0x5 0x20 0x0 와 0x5 0x24 0x0 이 많이 발생하는데, 해당 코드는 SCSI Command 를 스토리지 또는 Local Device 에서 지원하지 않는 경우에 많이 발생하기 때문에, 일반적으로는 무시하셔도 됩니다.
추가할 내용이 있으면 추가하도록 하겠습니다.
좋은 글 감사합니다. 개인 소유 하겠습니다.
한 번 정리할 필요가 있었는데 잘 정리해주셨네요. 감사합니다.