내 맥북에서 dmesg 명령어를 쳐보자
서론
퇴사를 하고 잠시 쉬는 날, 책을 읽으며 여유를 즐기고 있을 때였다.
문득 떠오른 생각 하나.
"파일 시스템이 읽기 전용일 때, 쓰기까지 하려면 어떻게 해야 할까?"
보통은 mount 명령어에서 -o remount,rw 옵션을 주면, 읽기 전용 파일 시스템을 다시 쓰기 가능하게 마운트할 수 있다.
하지만, 이렇게 해도 여전히 쓰기가 되지 않는 경우가 있다.
왜일까?
이럴 땐 시스템이 더 큰 손상을 막기 위해 스스로 파일 시스템을 읽기 전용(read-only)으로 다시 마운트했을 가능성이 있다.
이런 상황을 파악하려면 dmesg 명령어를 통해 커널 메시지를 확인해야 한다.
특히 EXT3-fs error로 시작하는 메시지나 Remounting filesystem read-only와 같은 문구가 있는지 살펴보면 된다.
dmesg란?
dmesg는 d + mesg의 조합으로, diagnostic message의 약자다.
리눅스에서 커널 메시지 버퍼(kernel ring buffer)의 내용을 출력하는 명령어다.
이 메시지들은 시스템이 부팅될 때, 장치 드라이버가 로드되거나, 커널 내부 이벤트가 발생할 때 출력된다.
예를 들어 USB 장치가 연결되거나 디스크 오류가 발생했을 때, 그 내용이 dmesg에 남는다.
실행으로 옮기자
'도대체 어떤 정보들이 보일까?' 궁금해져서 맥북 터미널에서 dmesg를 실행해 보았다.
생각보다 다양한 정보들이 쏟아졌다.
네트워크 인터페이스, 디스크 상태, HID 장치(SPI) 이벤트, WiFi 큐 상태 등,
"이런 것까지 보여주다니!" 싶을 정도로 하드웨어 관련 저수준 정보가 자세히 출력되었다.
정리
1. HID 입력 장치 (터치패드/펜/지문센서 등)
[SPI][HIDSPI] 구간
SPI(Serial Peripheral Interface) 버스를 통해 HID(Human Interface Device) 장치와 데이터를 주고받는 로그
장치 예시: 터치패드, 펜, 지문 센서 등
RX: 20 01 00 00 00 00 14 00 10 01 00 B5 00 00 0A 00 [SPI][HIDSPI]
TX: 80 00 00 00 ...
- SPI(Synchronous Peripheral Interface)를 통해 HID 장치와 주기적으로 상태 데이터를 교환
- RX 값의 마지막 바이트 증가 (B5, B6, …, CD)는 시퀀스 값으로 보이며,
- TX는 항상 동일 → 주기적인 상태 질의 또는 keep-alive 전송일 가능성
- 정상적인 디바이스 동작 시 흔히 보이는 패턴
2. Wi-Fi 및 네트워크 계층
LQM-WiFi 구간
macOS의 Wi-Fi 드라이버의성능 최적화/품질 상태 모니터링용
LQM-WiFi: BE : Count: 59 avgLatencyMs:1 maxLatencyMs:2
LQM-WiFi: BK : Count: 1 avgLatencyMs:1 maxLatencyMs:1
LQM-WiFi: VI : Count: 0 avgLatencyMs:0 maxLatencyMs:0
LQM-WiFi: VO : Count: 1 avgLatencyMs:2 maxLatencyMs:2
- Wi-Fi 트래픽 클래스별 패킷 수와 지연 시간
- BE: Best Effort, BK: Background, VI: Video, VO: Voice
- 예: BE : Count: 59 avgLatencyMs:1 maxLatencyMs:2 → Wi-Fi 트래픽이 주로 일반(BE)이며, 지연도 안정적
wlan0:com.apple.p2p 메시지
AirDrop, FaceTime, Screen Sharing 등에서 주기적으로 평가되는 QoS 제어 로직
wlan0:com.apple.p2p: isInfraRealtimePacketThresholdAllowed allowed:1 option:32 threshold:50 ...
- macOS의 Wi-Fi 모듈(AWDL 포함)이 실시간 트래픽을 감지하여 QoS 전환이 필요한지 판단 중
- inputPackets, outputPackets의 수가 threshold(50)에 근접하면 "Idle → RealTime"으로 상태 전환
- 이후 사용량이 줄면 다시 "RealTime → None" 등으로 트래픽 상태 전환 로깅
DTIM Missed Count 로그
Wi-Fi 드라이버의 내부 상태 점검용 로그
I [dk] <private>@29318: DTIM missed count: p2p(36), iovar(0), scan(3912), roam(0), homechan(4722), sleep(3957597), misc(0)
- DTIM(Delivery Traffic Indication Map)을 클라이언트가 놓친 횟수
- 대부분 sleep, scan, homechan 상태에서의 손실 → 정상적인 전력 절약 모드로 인한 것
- p2p(36)은 Peer-to-Peer 모드에서 손실된 횟수
3. macOS 커널/보안 관리 계층
process_is_plugin_host 메시지
일반적인 시스템 보안 로그이며, 악성 또는 비정상 로그는 아님
process_is_plugin_host: running binary "bash" in keys-off mode due to identity: com.apple.bash
process_is_plugin_host: running binary "sudo" in keys-off mode due to entitlement: com.apple.private.security.clear-library-validation
- macOS가 특정 바이너리(예: bash, sudo)를 샌드박스 제한 모드(keys-off)로 실행
- 이는 보안상 제한된 권한에서 실행 중임을 의미 (예: 터미널 내의 제한 세션, 보안 도메인, system integrity 보호 영역 등)
- com.apple.private.security.clear-library-validation는 SIP(Security Integrity Protection)에서 권한 해제를 의미
AMFI 및 Corpse 로그
PostgreSQL이 비정상 종료되었고, 시스템은 이를 정상적으로 로깅하고 정리했음
AMFI: Denying core dump for pid 11801 (postgres)
postgres[11801] Corpse allowed 1 of 5
...
Corpse released, count at 0
- AMFI: Apple Mobile File Integrity → 보안상 core dump(메모리 덤프) 방지
- Corpse allowed: macOS crash 분석 시스템에서 프로세스의 상태 정보를 최대 5개까지 보관
- Corpse released: 해당 crash log 정리됨