컴퓨터 강제 종료로 인한 바이너리 파일의 데이터 손상

컴퓨터 강제 종료로 인한 바이너리 파일의 데이터 손상

C++를 사용하여 일부 데이터를 바이너리 파일에 저장했습니다. 데이터를 저장한 지 2분 만에 갑자기 컴퓨터 전원이 꺼졌습니다. 컴퓨터를 다시 시작했을 때 데이터가 손상되었습니다. 바이너리 파일을 읽었을 때 모든 값은 이었습니다 0. 이는 확실히 제가 파일에 쓴 값이 아닙니다.

갑작스러운 컴퓨터 전원 꺼짐으로 인해 내 파일의 데이터가 손상되었을 가능성이 있습니까? 아니면 한번 기록하고 디스크에 저장한 데이터는 갑작스러운 전원 차단 시에도 손상되지 않기 때문에 그럴 수 없도록 하기 위한 것입니까? 후자라면 문제에 대한 자세한 조사를 시작해야 하지만 다른 어떤 것도 잘못되었을 가능성은 전혀 없습니다. 이 프로그램은 매우 간단하고 2년 동안 사용해왔는데, 이 프로그램을 사용하여 작성된 파일의 데이터 손상을 본 것은 이번이 처음입니다.

PS 실제로 파일 저장이 완료되었습니다. 파일을 저장한 프로그램은 파일 I/O를 올바르게 관리합니다. 즉, 쓰기가 끝나면 파일을 닫습니다. 또한 전원이 꺼졌을 때 프로그램이 실행되지도 않았습니다. Windows 8.1에서 이런 일이 발생했습니다.

답변1

간단히 말하면, 데이터 파일을 생성할 때 운영 체제는 다음 세 가지 작업을 수행해야 합니다.

  1. 데이터를 포함하는 데 필요한 블록을 할당합니다.
  2. 해당 블록에 0을 쓰거나 읽으려고 하면 0이 표시되도록 합니다.
  3. 할당된 블록에 데이터를 씁니다.

2단계는 시스템 보안상의 요구 사항입니다. 할당된 블록에는 이전에 다른 사람의 데이터가 포함되어 있었을 수 있으며, 귀하가 이전 데이터를 읽을 수 있도록 허용하는 것은 시스템에 대한 보안 위반이 됩니다. 따라서 대신 0을 얻습니다. 2단계와 3단계 사이에 전원이 차단되면 데이터 대신 0이 표시됩니다.

기본 운영 체제 및 파일 시스템에 따라 프로그램 내에서 데이터를 디스크에 명시적으로 동기화하지 않는 한 3단계는 2단계 이후 임의로 오랜 시간이 걸릴 수 있습니다.

POSIX 호환 시스템에서는 다음을 호출하세요.fsync()귀하의 데이터가 영구 저장소에 도달했는지 확인하십시오.

관련 정보