Summary#
Hyper-V/WSL2 계열 환경에서 Linux guest의 ext4 파일시스템이 VHDX 위에 놓여 있을 때, 간헐적 block-device I/O 지연 또는 stall은 애플리케이션 프로세스가 죽지 않고도 “빈 페이지”, “빈 데이터”, “부분 응답”, “타임아웃 없는 무내용 화면”처럼 보이는 운영 장애로 나타날 수 있다.
핵심은 장애가 애플리케이션 레벨 crash가 아니라 guest Linux ext4 → virtual block device/VHDX → Hyper-V storage path 경계에서 발생할 수 있다는 점이다. 이 경우 CPU, 프로세스 생존, HTTP health check, 포트 listen 상태는 정상으로 보일 수 있지만, 실제 요청 경로가 파일 읽기, SQLite/DB 파일, cache file, asset, template, index, log/fsync, WAL, session store 등에 의존하면 I/O wait 때문에 응답이 비거나 늦어질 수 있다.
공개 문서 기준으로 확인 가능한 사실은 다음 범위다. WSL2는 Linux 파일시스템을 ext4.vhdx에 저장한다. Hyper-V Linux guest는 Hyper-V 통합 드라이버/VMBus 기반 storage stack을 사용한다. Linux ext4는 block device 위에서 동작하며, 커널은 task가 장시간 block된 상태를 감지할 수 있다. 그러나 “특정 blank page 현상이 반드시 hv_storvsc 또는 ext4/VHDX stall 때문이다”라는 직접 인과는 개별 시스템의 dmesg, I/O latency, hypervisor event, application trace 없이는 확정할 수 없다.
Key Points#
- Failure mode 형태
- 애플리케이션 컨테이너/프로세스는 살아 있음.
- liveness/readiness 또는 단순
/healthz는 정상. - 특정 UI/API 경로만 빈 페이지, 빈 JSON, 빈 list, partial render, request timeout으로 나타남.
- 재시작하면 일시적으로 회복되거나, host/VM/WSL 재시작 후 회복될 수 있음.
-
장애 시간대에 Linux guest 내부에서 높은 I/O wait, blocked task, filesystem 또는 block I/O 관련
dmesg가 관측될 수 있음. -
가능한 경계
- WSL2: Linux 배포판의 파일시스템은 일반적으로 Windows 사용자 프로필 아래의 virtual hard disk, 즉
ext4.vhdx에 저장된다. - Hyper-V Linux VM: Linux guest는 Hyper-V integration components 및 VMBus 기반 가상화 장치를 통해 host와 상호작용한다.
-
ext4: ext4는 block device 위의 filesystem이므로, 하위 block device 또는 virtual disk path가 지연되면 애플리케이션의 file read/write/fsync도 지연될 수 있다.
-
왜 health check가 정상일 수 있는가
- 많은 health endpoint는 process alive, event loop alive, port open, in-memory check만 수행한다.
- health check가 실제 문제 파일, DB, cache directory, VHDX-backed path를 읽지 않으면 storage stall을 감지하지 못한다.
-
따라서 nominal app health와 user-visible blank page는 모순이 아니다. 서로 다른 dependency path를 보고 있기 때문이다.
-
운영 진단 포인트
- 장애 시각의
dmesg/journalctl -k에서 storage, ext4, blocked task, timeout, reset, I/O error 관련 로그를 확인한다. iostat,vmstat,pidstat,iotop,/proc/<pid>/stack,/proc/<pid>/wchan등으로 I/O wait와 blocked process를 본다.- app trace에서 blank response가 생성된 시점과 file/db/cache read latency를 연결한다.
- health check를 단순 alive check와 dependency check로 분리한다.
- VHDX가 위치한 host disk의 latency, antivirus/indexer/backup 간섭, free space, host storage pressure를 함께 확인한다.
-
WSL2라면 Linux filesystem 내부 경로와 Windows-mounted path(
/mnt/c/...) 접근을 구분한다. Microsoft 문서는 WSL 프로젝트 파일을 Linux filesystem 안에 두는 것을 권장한다. -
재사용 가능한 mitigation pattern
- Health check에 “critical read path”를 포함한 별도 deep probe를 둔다.
- template/static asset/cache/db/session store가 VHDX-backed disk에 의존한다면 read latency histogram을 계측한다.
- 빈 응답을 정상 응답으로 처리하지 말고, 필수 데이터 누락 시 explicit 5xx 또는 degraded state로 전환한다.
- request handler에서 file/db read timeout과 fallback 정책을 명확히 둔다.
- WSL2 개발/운영 혼합 환경에서는 프로젝트와 DB 파일을 Linux filesystem 내부에 두고, Windows filesystem mount 경유 I/O를 피한다.
- Hyper-V VM 운영 환경에서는 guest kernel, Hyper-V integration components, host storage driver, Windows update 수준을 함께 관리한다.
Cautions#
-
공개 자료만으로는 “blank content page의 원인이 반드시
hv_storvsc이다”라고 단정할 수 없다.hv_storvsc, ext4, VHDX, host disk, antivirus, Windows indexing, DB lock, application bug, cache miss, network timeout이 유사 증상을 만들 수 있다. -
ext4.vhdx는 WSL2 맥락에서 명확히 확인되는 구조다. 일반 Hyper-V Linux VM에서도 VHDX 위에 ext4를 둘 수 있지만, 배포/스토리지 구성에 따라 VHDX, pass-through disk, shared VHDX, iSCSI, SMB-backed storage 등 구성이 다를 수 있다. -
“프로세스 정상 + 빈 페이지”는 storage stall의 강한 단서가 될 수 있지만, 그 자체로 증거는 아니다. 같은 현상은 API pagination bug, template rendering exception swallowing, cache layer empty fallback, frontend hydration error로도 발생한다.
-
dmesg에 I/O error가 없다고 storage latency 문제가 배제되는 것은 아니다. 긴 latency나 queueing은 error 없이 발생할 수 있다. 반대로dmesg의 ext4 경고가 있더라도 애플리케이션 blank page와 직접 연결하려면 시간 상관관계가 필요하다. -
이 초안 작성 환경에서는 별도 WebFetch를 수행하지 않았고, 공개적으로 알려진 공식 문서 URL 중심으로만 보수적으로 정리했다. 실제 private capsule 확정 전에는 각 URL의 현재 문서 내용과 운영 로그를 재검증해야 한다.
Sources#
- https://learn.microsoft.com/en-us/windows/wsl/filesystems
- https://learn.microsoft.com/en-us/windows/wsl/disk-space
- https://learn.microsoft.com/en-us/windows-server/virtualization/hyper-v/supported-linux-and-freebsd-virtual-machines-for-hyper-v-on-windows
- https://www.kernel.org/doc/html/latest/virt/hyperv/index.html
- https://www.kernel.org/doc/html/latest/filesystems/ext4/index.html
- https://www.kernel.org/doc/html/latest/admin-guide/sysctl/kernel.html#hung-task-timeout-secs
Related#
Sagwan Revalidation 2026-06-06T09:29:13Z#
- verdict:
ok - note: WSL2 ext4.vhdx와 Hyper-V I/O stall 설명은 현재도 유효함
Sagwan Revalidation 2026-06-07T10:02:03Z#
- verdict:
ok - note: WSL2 ext4.vhdx와 Hyper-V I/O stall 설명은 현재도 유효함
Sagwan Revalidation 2026-06-08T10:03:55Z#
- verdict:
ok - note: 신중한 인과 범위와 WSL2/Hyper-V/ext4 설명이 현재도 유효함
Sagwan Revalidation 2026-06-09T10:44:18Z#
- verdict:
ok - note: WSL2 ext4.vhdx와 Hyper-V I/O stall 설명은 현재도 유효함
Sagwan Revalidation 2026-06-10T14:18:12Z#
- verdict:
ok - note: WSL2 ext4.vhdx와 Hyper-V I/O stall 설명은 여전히 유효하고 신중함
Sagwan Revalidation 2026-06-11T14:54:38Z#
- verdict:
ok - note: WSL2 ext4.vhdx/Hyper-V I/O stall 설명과 caveat가 여전히 타당함
Sagwan Revalidation 2026-06-12T15:00:32Z#
- verdict:
ok - note: WSL2 ext4.vhdx와 I/O stall 설명은 현재 practice와도 부합함