우리는 OS 및 응용 프로그램 (250-500Meg)을위한 작은 내부 NAND 장치와 데이터를위한 8Gb SDHC SD 카드가있는 SD 카드가있는 소형 임베디드 Linux 시스템 (2.6.35-ish)을 연구하고 있습니다.
장치의 전원은 언제든지 차단 될 수 있습니다.
시스템은 데이터를 SD 카드에 저장해야합니다. 이 데이터는 매우 중요합니다 ... 시스템의 전체적인 목적입니다. 시스템은 일반적으로 원격 위치의 모든 네트워크에서 완전히 연결 해제되며 4-8 주마다 스니커 넷을 통해 데이터를 검색합니다.
현재 SD 카드에 VFAT가 있습니다. 그것은 주로 첫 번째 테스트 클라이언트가 데이터를 수동으로 Win7 랩톱에 쉽게 복사 할 수 있도록하는 것이 었습니다.
그러나 이제는 잘못된 시간에 정전으로 인해 데이터가 손실 될 때까지는 시간 문제 일뿐입니다.
데이터 손실을 방지하기 위해 이러한 시스템을 구성하는 가장 좋은 방법은 무엇입니까? JFFS2는 데이터를 쓰는 방법 (그리고 성능 요구가 전혀 높지 않음) 측면에서 원하는 것처럼 들리지만 block2mtd 등을 사용하는 것은 상당히 어리석은 소리입니다. 또한 카드의웨어 레벨링이 어떻게 상호 작용하는지 잘 모르겠습니다. 그것으로.
가장 좋은 방법은 무엇입니까?
편집하다
이제 파일 시스템 VFAT를 그대로두고 0xFF로 채워진 하루 크기의 파일을 한 번에 할당하여 전원 사이클 오류에 대한 노출을 크게 제한하려고합니다. 그런 다음 미리 작성된 블록 내에서만 레코드를 추가 할 수 있었고 SD 카드가 너무 어리석지 않아 0xFF 영역에 쓰기 / 쓰기 수준의 쓰기가 이루어지기를 바랍니다.
noatime을 사용할 수 있지만 수정 된 시간 필드에 쓰지 못하도록하는 VFAT nomtime이 있습니까? 새로운 날의 파일이 생성 될 때까지 메타 데이터 업데이트를 전혀 막을 수있는 방법이 필요합니다.
편집 2
전자 스택 교환의 누군가가 NAND에 ECC 데이터가 있다는 것을 상기시켜 주므로 삭제를 막을 방법이 없습니다.
그렇다면이 상황에서 block2mtd를 통한 JFFS2가 적합합니까?
편집 3
생각보다 나빠요 내가 가지고있는 SD 카드는 동일한 내용을 디스크에 쓰더라도 데이터 블록을 지 웁니다. 지우기 블록은 64KB이며 쓰기를 완전히 지연 시키기에는 너무 큽니다. 나는 일종의 저널에 NAND 플래시 (쓰기 동작을 제어 할 수 있음)에 최대 128KB의 데이터를 저장 한 다음 SD 카드의 VFAT 파티션에있는 128KB 정렬 파일에 128KB 블록을 쓴다. 다른 SD 카드에는 128KB 지우기 블록이 있습니다).
sync
SD 카드에 쓸 때마다 명령을 사용하십시오 . 이는 RAM에 저장하지 않고 비트를 변경 / 생성 한 후에 비트를 불필요하게 기록하므로 변경 사항이 카드에 거의 적용되지 않습니다 전력 손실에 의해 사라지지 않을 것입니다.
sync
메타 데이터가 중간 업데이트되는 시간의 비율이 증가하기 때문에 문제가 더 악화 될 수 있습니다.