Linux 파일에서 더티 페이지의 쓰기 저장 순서는 무엇입니까?

Linux 파일에서 더티 페이지의 쓰기 저장 순서는 무엇입니까?

Linux에서 단일 파일에 대해 더티 페이지가 디스크에 다시 기록되는 순서는 무엇입니까? 처음부터 끝까지인가요, 아니면 엉망인가요?

시나리오 1: 적용 범위 없음

(디스크에) 파일을 생성하고 대량의 데이터를 빠르게(순차적으로) 씁니다. 이제 나는 이것이 여러 페이지 캐시에 있을 것이라고 가정합니다. 더티 페이지를 다시 쓸 때 페이지가 순서대로 다시 쓰여지나요?

예를 들어 파일 쓰기가 완료되기 전에 서버가 종료된다고 가정해 보겠습니다.

이제 재부팅 후 디스크 파일을 다음 상태로 둘 수 있습니다.

|--올바른 데이터--|---데이터가 설정되지 않음/쓰레기---|--올바른 데이터--|

즉, 파일의 마지막 바이트 세트가 불완전할 수 있지만 그 사이의 데이터도 불완전할 수 있음을 이해합니다.

시나리오 2: 덮어쓰기(루프/링 버퍼와 같은 것을 사용해 보세요)

  1. 파일이 생성되고, 데이터가 기록되고, 최대 크기에 도달한 후 "fsync"(즉, 데이터 + 메타데이터 동기화)가 호출됩니다.
  2. 이제 파일 포인터가 파일의 시작 부분으로 이동하고 데이터가 순차적으로 기록됩니다. (fsync가 완료되지 않음)

이제 서버가 다운됐으니 다시 시작하면 디스크 파일을 다음과 같은 상태로 만들 수 있을까요?

|--Newly written data--|--Old data--|--New data--|...

즉, 새 데이터의 경우 일부 페이지가 순서 없이 디스크에 기록됩니다.

또는

나는 항상 그럴 것이라고 추측할 수 있다

|--새로 작성된 데이터---|----새로 작성된 데이터---|--기존 데이터--|

즉, 이전 데이터와 새 데이터가 혼동되지 않습니다(이전 데이터는 파일이 있는 경우 파일 끝에만 표시됩니다).

관련 정보