— 이강우 2022/01/26 13:03
하드웨어 장애 발생시 dmesg
/ messages
에 아래와 같은 로그가 발생한다.
[210684.261133] {2}[Hardware Error]: Hardware error from APEI Generic Hardware Error Source: 1 [210684.261134] {2}[Hardware Error]: event severity: fatal [210684.261135] {2}[Hardware Error]: Error 0, type: fatal [210684.261135] {2}[Hardware Error]: section_type: PCIe error [210684.261135] {2}[Hardware Error]: port_type: 4, root port [210684.261136] {2}[Hardware Error]: version: 3.0 [210684.261136] {2}[Hardware Error]: command: 0x0547, status: 0x4010 [210684.261136] {2}[Hardware Error]: device_id: 0000:16:01.0 # <<- 이부분 [210684.261137] {2}[Hardware Error]: slot: 82 [210684.261137] {2}[Hardware Error]: secondary_bus: 0x18 # <<- 이부분 [210684.261137] {2}[Hardware Error]: vendor_id: 0x8086, device_id: 0x2031 [210684.261138] {2}[Hardware Error]: class_code: 000406 [210684.261138] {2}[Hardware Error]: bridge: secondary_status: 0x0000, control: 0x0013 [210684.261139] {2}[Hardware Error]: aer_uncor_status: 0x00000020, aer_uncor_mask: 0x00100000 [210684.261139] {2}[Hardware Error]: aer_uncor_severity: 0x00062030 [210684.261139] {2}[Hardware Error]: TLP Header: 00000000 00000000 00000000 00000000 [210684.261140] Kernel panic - not syncing: Fatal hardware error!
위부분에서 중요한것은 장애가 발생한 장치를 찾는것이다. device_id
부분을 확인한다. 위의 예에서는 16:01.0
이 장치 아이디값이다.
장치 아이디를 확인했으면 lspci
명령어로 어떤 장치인지 확인한다.
$ lspci -s 16:01.0 -vv 16:01.0 PCI bridge: Intel Corporation Sky Lake-E PCI Express Root Port B (rev 02) (prog-if 00 [Normal decode]) Physical Slot: 82 Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr+ Stepping- SERR+ FastB2B- DisINTx+ Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx- Latency: 0, Cache Line Size: 64 bytes Interrupt: pin A routed to IRQ 29 NUMA node: 0 Bus: primary=16, secondary=18, subordinate=1b, sec-latency=0 I/O behind bridge: [disabled] Memory behind bridge: 97700000-97afffff [size=4M] Prefetchable memory behind bridge: 0000000092000000-00000000972fffff [size=83M] Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort+ <SERR- <PERR- BridgeCtl: Parity+ SERR+ NoISA- VGA- VGA16+ MAbort- >Reset- FastB2B- PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn- Capabilities: <access denied> Kernel driver in use: pcieport
해당 장치는 PCI Bridge
장치인데 이게 메인보드 칩셋에 있는 장치이긴 하지만 이 칩셋이 문제가 생긴것인지 아니면 이 칩셋을 통해 연결된 다른 PCI장치가 문제인지는 알 수가 없다.
그래서 해당 장치 하위에 연결된 또다른 장치들을 확인해보아야 한다.
-t
옵션을 추가하여 tree 형태로 보도록 한다. 또는 -tvvnnQ
와 같은 상세 옵션을 적용한다.
$ lspci -s 16:01.0 -tvv 0000:16:01.0-[18-1b]----00.0-[19-1b]----03.0-[1a-1b]--+-00.0 Intel Corporation Ethernet Connection X722 for 1GbE +-00.1 Intel Corporation Ethernet Connection X722 for 1GbE +-00.2 Intel Corporation Ethernet Connection X722 for 1GbE \-00.3 Intel Corporation Ethernet Connection X722 for 1GbE
이제 정확한 오류 장비를 확인할 수 있다.