파일 손상의 일반적인 원인으로, 문서는 종종 "파일 수준 잠금을 올바르게 구현하지 않는 NFS"또는 이와 유사한 SQLite의 원인으로 인용합니다.
SQLite 데이터베이스 파일을 손상시키는 방법 , 2.1 절
2.1 잠금 구현이 깨져 있거나없는 파일 시스템
SQLite는 기본 파일 시스템에 의존하여 문서가 말한 것처럼 잠금을 수행합니다. 그러나 일부 파일 시스템은 잠금 논리가 버그를 포함하여 잠금이 항상 광고되는 것처럼 작동하지는 않습니다. 특히 네트워크 파일 시스템과 NFS의 경우 특히 그렇습니다. 잠금 프리미티브에 버그가있는 파일 시스템에서 SQLite를 사용하고 두 개 이상의 스레드 또는 프로세스가 동시에 동일한 데이터베이스에 액세스하려고하면 데이터베이스가 손상 될 수 있습니다.
이 - 또는이 효과가있는 것 -은 일반적으로 혼합 된 Windows / Unix 환경에서 10 년 이상 자주 언급되었습니다. 그러나, 나는 결코 어떤 표시도 발견하지 못했다. 어느 네트워크 파일 시스템 (또는 클라이언트 / 서버 조합)은 실제로 위험합니다.
내 고객에게 무엇을 말할 수 있습니까?
1
공유 프로토콜이기 때문에 파일 시스템에 관한 것이 많지 않습니다 (NFS는 이름에도 불구하고 파일 시스템이 아닙니다). Samba는 쓰기 잠금을 수행합니다.
—
Frank Thomas
그래서 그것은 문제가 될 것이다. 중에서 특정 클라이언트 / 서버?
—
peterchen
글쎄, 그 서버 문제. 그러나 당신은 대부분 옳습니다. NFS는 쓰기를 위해 파일을 열 때 잠금을 구현하기 위해 존재하는 기본 파일 시스템을 알려 주어야합니다. 그 파일 시스템은 EXT, BTRFS, MurderFS, NTFS, 또는 그 밖의 것이 될 수 있습니다. 모든 FS는 쓰기 잠금을 처리해야하지만 공유 프로토콜은 네트워크 요청과 파일 시스템 관련 의미 사이의 중개를 담당합니다. 불행히도, NFS는 이것을 잘 수행하지 못합니다. 왜 그런지는 모르겠지만 실제로 FS 작업을 추상화하는 방식에 문제가 있다고 생각합니다.
—
Frank Thomas