2010-05-28 5 views
1

시간당 약 10000 개의 메시지가 수신됩니다. ext3 파일 시스템의 시간별 디렉토리에 개별 파일로 저장합니다. 파일 이름에 순서 번호가 포함됩니다. 우리는 rsync를 사용하여 다른 위치에서 20 초마다 이러한 파일을 미러링합니다 (SAN을 통해 문제가되지는 않음).Linux ext3 readdir 및 동시 업데이트

때때로 rsync를 실행하면 파일 n-3, n-2, n-1, n + 1이 선택되고 다음 rsync 실행은 n, n + 2, n + 3, n + 4 등으로 계속됩니다. .

하나의 프로세스가 디렉토리 내의 특정 순서로 파일을 생성 할 때 readdir()을 사용하는 다른 프로세스가 다른 시퀀스로 나타나는 파일을 볼 수 있습니까?

종류의 안부 세바스찬

나는 당신의 질문 재 작성 될 수 있다고 생각
+0

rsync는 파일 목록을 사전 식으로 정렬합니다. 파일 이름은 무엇입니까? 또한 정렬 알고리즘은 버전마다 다를 수 있습니다. –

답변

1

등 : 프로세스 A는 파일 d/x을 만들고 이 다음 수 이 peform받는하는 프로세스 B위한 파일 d/y을 생성

경우 a 동시 readdir()d 및 참조 d/y, 항목이 표시되지 않음 d/x?

대답은 예입니다. readdir에 대한 주문 보증은 실제로 매우 약합니다.

주문을 시행하려면 각 파일을 만든 후 d 디렉토리의 파일 설명자를 명시 적으로 fsync()해야합니다.

+0

답해 주셔서 감사합니다. 그것은 실제로 약하다. 그리고 나는 그것을 벌레라고 부르는 경향이있다. Linux 문서 또는 소스 코드에 대한 지침이 있습니까? Btw, 이제 우리는 ext3 dir_index 옵션을 비활성화했습니다. 지난 달에는 거의 매일 몇 번 문제가 발생했으나 지금은 3 일 연속으로 문제가 발생하지 않았습니다. – Wangnick

+0

fsync가 이러한 일이 발생하지 않도록 할 수 있는지, 궁금해합니다. – Wangnick

+0

@Wangnick : opendir() 또는 rewinddir()에 대한 가장 최근의 호출 이후에 파일이 디렉토리에서 제거되거나 디렉토리에 추가 된 경우, 후속 작업이 수행되는지 여부를 나타내는 readdir() readdir()를 호출하면 해당 파일에 대한 항목이 반환되지 않습니다. * - note, 주문 보증이 없습니다. 프로세스 A가'd/x'를 생성하고,'fsync (d)'를 호출 한 다음'd/y'를 생성 한 다음'fsync (d)'를 호출하면 외부에서 볼 수있는 순서를 얻게됩니다. – caf

관련 문제