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

기술 · 실용 가이드

sort가 임시 파일을 만들지 못합니까? TMPDIR 변경 전 runtime 경로와 용량을 증명하세요

실패 process에서 GNU sort가 실제 선택한 directory를 확인하고 같은 filesystem을 검사한 뒤 원래 sort의 출력이 검증될 때만 수리를 승인합니다.

원본 일러스트: GNU sort temp directory 선택을 실패 runtime namespace와 filesystem capacity에 연결합니다.
원본 일러스트: GNU sort temp directory 선택을 실패 runtime namespace와 filesystem capacity에 연결합니다. Watch at Ease

GNU sort는 memory buffer를 넘는 input을 temporary file로 spill할 수 있습니다. 생성 실패는 /tmp가 가득 찼거나 host의 scratch가 container 안에도 있다는 증거가 아닙니다.

정확한 command와 runtime을 보존하고 effective directory를 계산한 뒤 같은 runtime에서 path, permission, block, inode, quota를 분리하고 원래 job과 output으로 닫습니다.

command를 고정하고 effective directory를 계산합니다

argv, working directory, environment, input/output, stderr, exit, 모든 -T와 variable expansion을 저장합니다.

명시적 -T, TMPDIR, /tmp 순서를 증거로 적용하고 빈 값이나 잘못된 값도 숨기지 않습니다.

실패 runtime에서 path를 검사합니다

같은 service user, job, container와 mount namespace에서 parent, symlink와 process mount view를 확인합니다.

같은 identity로 create, write, close, rename, remove probe를 수행하며 host root 성공을 대신 쓰지 않습니다.

permission과 capacity를 분리합니다

owner, mode, ACL, read-only flag와 confinement policy를 기록하고 증명된 경계만 수정합니다.

정확한 filesystem의 usable block, free inode와 user/group/project quota를 기록합니다.

가장 작은 범위의 수리를 선택합니다

container path가 없으면 승인된 scratch를 bind하고, 용량은 소유 filesystem, permission과 quota는 해당 policy만 수정합니다.

대체 filesystem이 의도되고 충분할 때만 -T 또는 job-scoped TMPDIR를 사용하며 rollback과 cleanup을 기록합니다.

원래 job을 다시 실행하고 output을 검증합니다

원 runtime에서 원 sort를 실행해 effective directory, mount, stderr, exit와 scratch 사용을 보존합니다.

record count, sort key, duplicate policy, checksum 또는 downstream parse와 atomic publication을 확인하고 경로가 불명확하면 중단합니다.

원본 일러스트: path, capacity, 원 command와 output을 증명한 뒤 수리를 승인합니다.
원본 일러스트: path, capacity, 원 command와 output을 증명한 뒤 수리를 승인합니다. Watch at Ease