2017-03-17 11 views
0

와 함께 작동합니다. 무엇 내 전문가 것은입니다 :방법 ext4에 내가 ext4를 파일 시스템의 적절한 사용을 테스트하고, 최근 fallocate

시스템이 충돌 할 때, 데이터 쓰기 반환 확인을 할 수없는 손실,하지만 metadate 캔이었다.
내 용도는 다음과 같습니다 1. centin 공간 할당을 위해 fallocate 호출 fallocate (fd, 0, 0, 4 * 1024 * 1024); // 4메가바이트
2. 전화 fsync를 (FD) 할 데이터와 메타 데이터 무작위 4K 크기의 파일을 작성하는
3. 다음 내가 함수를 호출 디스크에 대한 쓰기 (임의의 데이터를하지만 0). O_DRICT 플래그를 사용하지만 fsync를 호출하지 않습니다. 반환 기록 확인 오프셋을 기록합니다.
4. 기록 된 그 오프셋. 하지만 일부 오프셋, 4k 데이터를 읽을 0에서 찾을. 그것은 오프셋을 홀 파일처럼 사용되지 않는 것을 의미합니다. 이 null를 돌려 읽을 때 파일의 메타 데이터를 fallocate를 호출하고 fsync를하는 것은 여전히 ​​보인다 후 일부 블록을 나타내는 이유 < 1.
그렇게 사용되지 않습니다

내 질문이다. 그것은 내 이해입니다.
< 2. 다른 API를 호출하여 파일이있는 공간을 할당 할 때 구멍이 아닌지 확인한 다음 O_DIRECT로 데이터를 반환하면 데이터가 손실되지 않도록 확인할 수 있습니다.

Thanks. 

답변

0

파일 공간에만 쓰면 구멍을 제거 할 수 있습니다. 쓰기가 없으면 더티 페이지가없고 fsync는 단순히 아무 일도하지 않습니다.

4 단계를 어떻게 실행했는지 궁금합니다. 수동 충돌로 작업 한 것 같습니다. 당신이 충돌하지 않고 쓰기 후 읽기 경우, 제로가 아닌 0을 쓴 제공해서는 안된다. 크래시 후 읽으면 디스크 캐시가 존재해도 0이 발생할 수 있습니다. 그러나 제로 이런 종류의 구멍처럼되지 않습니다, 그들은 디스크 (매우 아마도 디스크에 포함 된 제로)에서 읽을 제로입니다.