기술 · 실용 가이드
cp “preserving times … Operation not permitted”는 메타데이터 계약부터 증명하세요
파일 내용은 복사됐지만 한 메타데이터 갱신이 실패했을 수 있습니다. 실제 실행 파일, 대상 객체와 첫 거부 속성을 보존한 뒤 시간, 소유권, 모드, ACL, xattr의 필요성을 결정하세요.

파일 내용은 복사됐지만 한 메타데이터 갱신이 실패했을 수 있습니다. 실제 실행 파일, 대상 객체와 첫 거부 속성을 보존한 뒤 시간, 소유권, 모드, ACL, xattr의 필요성을 결정하세요.
데이터 쓰기 성공은 timestamp, ownership, mode, ACL, security context 또는 xattr 보존을 증명하지 않습니다.
1. 복사와 대상 증거 고정
완전한 명령, cp 실행 경로와 버전, 유효 사용자, 원본과 대상, 종료 코드 및 첫 원시 진단을 기록하고 대상이 이미 있었는지와 소유자를 남기세요.
즉시 sudo를 쓰거나 유일한 대상을 덮거나 stderr를 버리지 마세요. 실패 속성이 시간, 소유자, 모드, context, xattr 중 무엇인지 가립니다.
2. 바이트와 속성을 별도 비교
민감하지 않은 샘플의 hash 또는 byte를 비교하고 양쪽의 type, size, owner, group, mode, atime, mtime을 timezone과 precision과 함께 기계 판독 형식으로 수집하세요. ACL, xattr와 label은 목적이 요구할 때만 확인합니다.
요구, 지원, 관찰 행렬을 만드세요. 내용 hash가 같고 mtime이 새로워도 일반 전송에는 충분할 수 있지만 증분 backup이나 재현 가능한 build에는 실패입니다.
3. 권한과 저장 지원 분류
BusyBox와 GNU의 option이 다르므로 실제 구현을 확인합니다. 대상 filesystem과 mount option을 확인하고 호출자가 소유한 폐기용 파일로 반복하세요.
새 대상만 성공하면 소유권이나 immutable flag를 확인하고 둘 다 실패하면 대상 지원, read-only, ID mapping 또는 security policy를 조사합니다. sudo 성공은 권한 단서이지 자동 허가가 아닙니다.
4. 선언한 최소 수정 선택
시간이 필요하고 지원되면 호출자가 소유한 새 객체에 복사하거나 검토된 권한을 마련합니다. 무관하고 미지원인 속성만 제외하고 손실을 기록합니다. 여러 속성이 필요하면 archive나 filesystem-native tool을 사용하세요.
하나의 미해명 진단 때문에 광범위 chmod/chown, 전역 정책 변경 또는 재귀 sudo를 쓰지 마세요. 이름과 byte가 도착해도 Unix ownership 보존을 뜻하지 않습니다.
5. 실제 목적에 맞춰 검증
대표 sample에서 실제 workflow를 반복하고 대상을 닫았다가 다시 연 뒤 내용과 모든 필수 속성을 확인하세요. timezone과 timestamp precision도 비교합니다.
필수 행렬이 통과하고 허용 손실과 새 실패를 구분하는 종료 정책 및 rollback이 있을 때만 승인합니다. 대상이 계약을 못 맞추면 container나 목적지를 바꾸세요.
