파일 날짜/시간을 메타데이터로 사용: 신뢰할 수 있나요?

파일 날짜/시간을 메타데이터로 사용: 신뢰할 수 있나요?

배경:내 디렉토리에 파일 세트가 있고 파일 이름 순서대로 하나의 파일로 병합합니다. 나는 그것들 t1.txt, t2.txt, t3.txt...을 정수 순서로 병합한다고 부릅니다.

상태:여러 가지 이유로 향후 파일 병합 작업을 위한 메타데이터로 파일 이름을 제거하고 싶습니다.

행동:다음을 기반으로 하는 파일 병합 시스템으로의 마이그레이션을 고려 중입니다.파일이 생성된 날짜/시간(분명히 나중에 병합할 순서대로 파일을 만들어야 합니다.)

질문:

  1. 날짜/시간 정렬 파일 병합이 안정적인가요? 숨겨진 문제가 있나요? 일부 파일은 10분의 1초 이하의 간격으로 생성됩니다. 이것이 치명적인 결함입니까?

  2. 정렬된 병합에 대해 고려해야 할 다른 사항이 있나요?

날짜/시간은 나에게 간단해 보인다. OTH, 처음에는 간단하고 간단해 보이는 일이 결국 상상보다 더 복잡해지는 경우가 많습니다. 그래서 내가 물었다.

답변1

대부분의 Unix 시스템은 파일 생성 시간을 추적하지 않습니다. 파일이 작성될 때마다 업데이트되는 파일 수정 시간을 추적합니다. 파일이 생성될 때 순차적으로 기록되고(즉, 두 번째 파일이 생성되기 전에 첫 번째 파일이 완전히 기록됨) 이후에 수정되지 않은 경우 수정 시간 순서는 파일이 생성된 순서와 동일합니다. 그러나 업데이트되면 복잡한 시나리오에서는 달라질 수 있습니다.

수정 시간(mtime) 외에도 모든 Unix 시스템에는 액세스 시간(atime)과 inode 변경 시간(ctime)이라는 두 가지 다른 파일 타임스탬프가 있습니다. 액세스 시간은 파일을 읽을 때 업데이트되지만 성능상의 이유로 일부 시스템(특히 기본적으로 Linux)은 항상 업데이트하지 않습니다. inode 변경 시간은 파일에 대한 일부 메타데이터(이름, 권한 등)가 변경될 때 업데이트됩니다. 파일을 쓸 때도 업데이트되지만 atime이 변경되더라도 파일을 읽을 때는 업데이트되지 않습니다. atime이나 ctime 모두 당신에게 쓸모가 없습니다.

많은 역사적 Unix 시스템은 1초 해상도로 파일 타임스탬프를 추적합니다. 최신 Unix 시스템은 더 나은 해상도를 갖는 경향이 있지만 이를 위해서는 여러 플레이어의 주의가 필요합니다.

  • 사용하는 커널은 더 미세한 시간적 해상도를 지원해야 합니다.
  • 파일 시스템은 이보다 미세한 시간적 해상도를 저장할 수 있어야 합니다.
  • 체인의 모든 구성 요소(예: NFS에 있는 파일을 위한 NFS 서버)는 이러한 보다 정밀한 시간 확인을 지원해야 합니다.
  • 파일을 복사하는 데 사용되는 모든 도구(아카이버, 네트워크 동기화 장치 등)는 단 몇 초보다 더 미세한 시간 분해능을 유지할 수 있어야 합니다.
  • 파일 시간을 읽는 애플리케이션은 1초 미만의 해상도를 고려해야 합니다. 기존 Unix 프로그래밍 인터페이스는 파일 타임스탬프의 1초 미만 해상도를 지원하지 않으므로 애플리케이션은 상대적으로 최신 API(POSIX:2008 표준화- 채택이 그리 빠르지 않기 때문에 여전히 상대적으로 새로운 것입니다.)

체인의 모든 사람이 나노초 타임스탬프를 지원하더라도 파일이 실제로 두 클럭 주기 이상 떨어져 생성된 경우에만 파일이 다른 타임스탬프를 갖게 됩니다. 커널이 나노초를 기록한다고 보장하지 않기 때문입니다.알아채다두 파일 생성 사이에 1나노초 이상이 지났습니다. 시계를 읽는 데는 시간이 걸리므로 항상 완료되는 것은 아닙니다. 파일을 열고 데이터를 쓰고 다음 파일로 이동하기 전에 파일을 닫는 스레드가 있는 경우 1초 미만의 해상도를 기록하는 거의 모든 기존 시스템이 다른 타임스탬프를 기록할 것이라고 생각하지만 위험은 최소화됩니다. . (다른 스레드가 파일에 쓸 때 마이크로초 해상도에서도 타임스탬프 충돌이 발생할 수 있습니다. 그러나 일반적으로 이 경우 순서에 의존할 수 없습니다.)

따라서 컴퓨터가 지금보다 훨씬 빠르지 않은 한, 사용하는 모든 도구가 1초 미만의 해상도를 지원한다면 가능하고 안정적이었습니다. 그러나 시계 결함이 발생하거나 1초 미만의 타임스탬프 지원을 위한 도구를 검토하지 않는 경우 취약합니다. 오류가 발생할 가능성이 적도록 파일 이름을 사용하는 것이 좋습니다.

답변2

atime ctime 또는 mtime?

어느 것이 무엇인지 기억하려면: 알파벳 순서로 읽으세요.

  • atime은 개별적으로 업데이트될 수 있습니다.
  • ctime은 atime을 업데이트합니다
  • mtime은 atime과 ctime을 업데이트합니다.

시스템은 mtime을 사용하여 atime 또는 ctime을 위조할 수 있습니다. (게으른)

관련 정보