데비안은 왜 원본 파일의 바이트를 수정하는 것보다 원본 파일을 임시 파일로 바꾸는 것을 선호합니까?

데비안은 왜 원본 파일의 바이트를 수정하는 것보다 원본 파일을 임시 파일로 바꾸는 것을 선호합니까?

맨페이지 에서 mp3gain다음 내용을 읽을 수 있습니다.

   -t        mp3gain  writes  modified  mp3  to  temp  file,  then deletes
             original instead of modifying bytes in original file (This is
             the default in Debian)

   -T        mp3gain modifies bytes in original file instead of writing to
             temp file.

대부분의 배포판(및 Windows)은 일부 바이트를 변경합니다(가능한 경우 mp3의 패딩 태그 공간에서 추측됩니다). 이것의 또 다른 이점은 속도가 더 빠르다는 것입니다. 특히 수천 개의 파일에 태그를 지정할 때는 더욱 그렇습니다. 여기에는 변경된 클러스터만 Dropbox 등으로 동기화할 수 있는 추가 이점이 있습니다.

그러나 데비안은 전체 파일(변경된 바이트 포함)을 임시 파일에 다시 쓴 다음 원본 파일을 임시 파일로 바꿉니다.

이유를 알고 싶습니다. 이 사실을 이해하시는 분의 실제 이유를 알고 싶습니다. (정보를 바탕으로 추측하는 것은 자유지만 더 많은 답변을 얻을 때까지 답변 수락을 보류할 것입니다.)

답변1

귀하의 질문에 따르면 데비안은 모든 쓰기에 임시 파일을 사용하지만 이는 사실이 아닙니다. 이것은 단지 기본 설정입니다 mp3gain.

버전 1.4.3-2에서 패키지 관리자(Stefan Fritsch)는 ReiserFS에 임시 파일을 작성하는 것이 훨씬 빠르기 때문에 이것이 데비안의 기본값이 될 것이라고 결정했습니다. 이는 다음에서 파생됩니다.수리하다존재하다https://packages.debian.org/source/squeeze/mp3gain

다른 배포판의 패키지 관리자는 Stefan의 의견에 동의하지 않을 수 있으므로 임시 파일을 사용하지 않는 기본 설정을 변경하지 않았습니다.

답변2

당신은해야안 돼요파일이 수정되었습니다. 파일에 쓰는 유일한 안전한 방법은 다음과 같습니다.

  1. 파일( )을 처음 생성한 사람인 경우 O_EXCL.
  2. 새 임시 파일에 쓴 다음 (원자적으로) 실행합니다 rename(2).
  3. 추가 전용 모드( )로 파일을 엽니다 O_APPEND.

그렇지 않으면 당신은~ 할 것이다프로그램이 충돌할 때(프로그램이 완벽하다고 거짓말하지 마십시오) 또는 전원이 끊길 때 데이터는 항상 손실됩니다.

아직 이러한 규칙을 이해하지 못하는 주요 애플리케이션이 많이 있습니다.쓰기 자르기 모드에서 파일을 여는 옵션(전혀 유용하지 않기 때문)

답변3

파일을 제자리에서 변경하는 것이 항상 쉬운 것은 아닙니다.

파일 중간에 날짜를 추가하면 크기가 커지며 변경된 모든 데이터를 새 위치에 써야 합니다. 파일 중간에 먼저 데이터를 쓴다면 이전 데이터를 저장해야 이동이 가능하고, 도중에 충돌이 나지 않기를 바랍니다. 결과를 새 파일에 쓰는 것이 훨씬 쉽습니다.

새 파일을 작성한 다음 원본 파일로 바꾸는 것도 이전 파일에 액세스하는 모든 프로세스가 중단 없이 작업을 계속할 수 있다는 이점이 있습니다. 해당 파일 내에서 항목을 이동하면 프로세스가 상당히 지저분해질 수 있습니다.

관련 정보