블록 장치에 쓸 때 부분적인 fsync

블록 장치에 쓸 때 부분적인 fsync

나는 블록 장치 위에 직접 데이터 저장소를 작성했습니다. 내구성을 보장하기 위해 디스크에 동기화하고 싶습니다. 하지만 문제는 이렇습니다. 일부만 동기화하고 싶습니다.

나는 충돌 복구를 위해 로그를 유지하고 디스크의 실제 위치에 적용하기 전에 향후 변경 사항을 로그에 기록합니다. 그런 다음 나머지 디스크에 실제 변경 사항이 적용되기 전에 로그 변경 사항이 디스크에 기록되었는지 확인하고 싶습니다(로그를 확인할 때까지는 fsync에 관심이 없습니다).

전체 블록 장치를 간단히 동기화할 수 있지만 그렇게 하면 긴급하지 않은 많은 항목을 기록해야 합니다.

두 가지 옵션을 생각했지만 부분적인 fsync(2) 호출이 없다는 사실에 놀랐고, 내가 찾은 바에 따르면 이를 요청하는 사람이 아무도 없었습니다.

  1. mmap(2) 완전한 블록 장치 및 사용법동기화(2)일부를 동기화하세요.
  2. 오픈(2)장치를 두 번 차단합니다. 한 번은 O_SYNC지연 쓰기용이고 한 번은 내 저널 쓰기용입니다.

답변1

Linux 관련 시스템 호출이 있습니다.동기화파일범위()

(참고로 블록 장치를 사용하는 것은 이식성이 없습니다.FreeBSD)

관련 정보