Watch at Ease세상을 읽고, 일상의 답을 찾다.

기술 · 실용 가이드

Linux “Value too large for defined data type”? overflow된 metadata field부터 증명하세요

파일은 정상일 수 있습니다. binary와 syscall, size/inode/blocks/filesystem counter, caller ABI를 확인한 뒤 프로그램 경계를 고치세요.

EOVERFLOW caller-operation-field 도식
오리지널 일러스트: caller ABI, operation, metadata field. Watch at Ease

파일은 정상일 수 있습니다. binary와 syscall, size/inode/blocks/filesystem counter, caller ABI를 확인한 뒤 프로그램 경계를 고치세요.

EOVERFLOW는 caller type이 결과를 표현하지 못한다는 뜻입니다. Linux stat은 off_t, ino_t, blkcnt_t 때문에 실패할 수 있습니다.

1. caller와 error 보존

command, stderr, exit, binary path/version, architecture, container, runtime library, mount namespace를 저장합니다. 64-bit host가 caller ABI를 보장하지 않습니다.

삭제, truncate, copy, remount를 먼저 하지 마세요. EOVERFLOW는 representation failure이지 corruption 증거가 아닙니다.

2. operation과 metadata 분류

bounded syscall trace로 stat/open, statfs/statvfs, time conversion을 구분하고 pathname과 errno 75를 기록합니다.

stat은 size, inode, block count, filesystem call은 counter가 원인일 수 있습니다.

3. known-good interface 비교

같은 namespace와 mount에서 current tool로 device, inode, size, blocks, filesystem을 비교합니다.

binary가 32-bit, static, legacy toolchain, compatibility wrapper인지 확인합니다. 작은 파일도 large inode를 가질 수 있습니다.

4. program boundary 수정

source 소유자는 build 전체에 large-file interface를 일관되게 적용하고 header 전에 _FILE_OFFSET_BITS=64를 설정합니다.

source가 없으면 maintained ABI-correct build를 설치합니다. 데이터 이동은 비교 또는 임시 containment일 뿐입니다.

5. original object 검증

original unchanged object와 boundary fixture를 재시험해 identity와 성공을 확인합니다.

build에 architecture/macros를 기록하고 모든 mount class에서 large-file 및 large-inode test를 추가합니다.

EOVERFLOW repair path
오리지널 일러스트: compare, rebuild, original verification. Watch at Ease