Linux에서 무결성을 위한 디스크 페이지 캐시 크기

Linux에서 무결성을 위한 디스크 페이지 캐시 크기

Linux 관련 응용 프로그램에서 시스템 오류가 발생할 경우 블록 기반 디스크 형식의 손상을 제한하려고 합니다. 즉, 파일은 기본적으로 단위 크기의 배수인 오프셋을 사용하여 응용 프로그램에서 정의한 고정 크기 단위로 읽고 기록됩니다.

쓰기 도중이나 동기 쓰기 전에 끔찍한 일이 발생하면 블록 n에 대한 쓰기가 손상될 수도 있고 손상되지 않을 수도 있다는 것을 알고 있습니다. 이는 불가피합니다.

제가 피하고 싶은 것은 블록 n-1이나 블록 n+1이 비활성화된 경우(이 기간 동안 활동이 없음) 손상될 가능성입니다.

이제 블록 크기가 터무니없이 작은 경우(예: 4바이트) 다양한 운영 체제 및 하드웨어 측면에서 블록 n이 블록 n-1 및 n+1과 "동일한 페이지에" 있다는 것이 분명합니다. 페이지가 실행 중인 경우 일부 재해로 인해 디스크의 블록 n뿐만 아니라 n-1, n+1 등이 손상될 수 있습니다(아무 것도 변경되지 않은 경우에도?).

청크 n에 대한 쓰기가 본질적으로 인접 청크와 독립적이도록 청크의 크기를 조정할 수 있는 방법이 있습니까? 즉, 한 청크가 정지 상태인 경우 바쁜 인접 청크로 인해 해당 청크가 발생하지 않습니다.

필요한 경우 패딩을 삽입하여 정렬 문제를 해결할 수 있으므로 극복할 수 없습니다.

지금까지 내 생각은 다음과 같습니다.일반적으로 인용되는 512바이트 디스크 블록은 너무 작아서 가능성이 없어 보이며 이것이 최신 디스크에 적용되는지 확실하지 않으며 어쨌든 OS 메모리 쓰기 캐시 단위 크기는 확실히 이보다 큽니다. 나는 x86 페이지 테이블이 4k(적당한 크기처럼 들림) 또는 4M(너무 클 것 같음)일 수 있다는 것을 알고 있습니다. sysconf(_SC_PAGESIZE)는 숫자를 반환하지만 정확합니까?

우리는 내 쓰기가 daft가 아닌 파일 시스템 유형(예: ext-n 또는 xfs)에 대한 것이며 해당 시스템이 표준 64비트 Linux x86 시스템(해당되는 경우)이라고 가정할 수 있습니다.

관련 정보