파일 길이가 무작위로 0바이트가 되는 알려진 ext4 문제가 있습니까?

파일 길이가 무작위로 0바이트가 되는 알려진 ext4 문제가 있습니까?

우리 회사에서는 Linux 3.4를 실행하는 Android 장치를 만들고 있는데 가끔(드물지만) ext4 emmc 파일 시스템의 파일 길이가 갑자기 0이 되는 것을 발견했습니다. 일반적으로 파일에 쓸 때 부적절한 종료가 발생했다고 의심하지만 이 경우 파일은 처음 시작할 때 한 번 기록되고 다시는 기록되지 않는다는 것을 알고 있습니다.

이 문제를 일으킬 수 있는 ext4 코드의 버그를 아는 사람이 있습니까? ext4는 아직 활발하게 개발 중인 것으로 보입니다. 어쩌면 일부 시스템 관리자가 이 문제를 겪고 이를 해결하는 패치나 커널 버전을 알고 있을까요?

답변1

파일에 쓰는 경우 파일을 열고 쓰는 데 시간이 걸릴 수 있습니다.

언제 파일열려 있는옵션을 사용하면 O_CREAT|O_WRONLY|O_TRUNCopen을 호출할 때 즉시 0바이트 파일을 얻게 됩니다. 이 시간과 쓰기 플러시 사이에 전원이 끊기면 0바이트 파일을 얻게 됩니다. 이는 파일 시스템과 관련이 없습니다. 효과적인 열기 및 쓰기는 단일 원자 작업이 아니므로 결과가 좋지 않을 수 있습니다.

완화 방법은 임시 파일(동일한 파일 시스템)에서 열기/쓰기 작업을 수행한 다음이름을 바꿔라이는 원자성이 보장됩니다. 이렇게 하면 정의되지 않은 상태로 끝나지 않습니다.

MMC 플래시의 성능이 저하되고 하드웨어 수준 쓰기가 올바르게 완료되지 않을 가능성도 있지만 그럴 가능성은 낮으며 사례별 도구가 필요합니다.

일반적으로 두 프로세스나 스레드가 동시에 동일한 파일에 쓰는 경우는 극히 드뭅니다. "동일한 파일에 동시에 쓰지 마십시오. 이렇게 해야 할 타당한 이유가 생각나지 않으며 이를 방지할 수 있는 여러 방법을 생각할 수 있습니다.

저는 안드로이드에 대한 자세한 내용을 알지 못하며, libcs가 다르면 제가 설명하는 것과 다른 결과가 나올 것이라고 의심합니다.

관련 정보