이 문제와 관련하여 몇 가지 기존 주제가 있지만 내가 추구하는 것은 약간 다릅니다. 임베디드 Linux에 SD 카드가 있는데 전원 손실로 어려움을 겪고 있습니다. 어느 시점에서 하드웨어를 수정하고 올바르게 닫는 등의 작업을 수행 할 수 있습니다. 그러나 지금 당장은 전원 손실 없이도 파일 시스템을 찾고 싶습니다. 데이터 손실이 허용됩니다. 현재 쓰고있는 파일보다 더 많이 잃지 않는 것을 선호하지만 '마운트 할 수 없음', '이 10 분 동안 기다림 fsck'또는 '새로 만들 수 없음'에 직면하는 것보다 여전히 잃을 것입니다 이 inode로 인해 파일에 문제가 있습니다. ' 이 프로그램은 계속 진행되어야합니다!
나는 이것을 보장하기 위해 많은 노력을 기울이고 있습니다. 나는 산업 등급의 구성 요소를 사용하고 있으며 하드웨어 워치 독, 소프트웨어 워치 독, 내부, 외부, 프로그램 재시작, 데몬이 지속적으로 메모리, 파일 설명자 등을 검사하고 워치 독이 워치 독을보고 다른 워치 독이 감시합니다. ...하지만 SD 카드가 마운트되고 작동 할 수 있다고 보장 할 수 없습니까?
지금 가장 좋은 방법은 SD 카드에서 JFS를 사용하고 설치에 fsck 및 fsck.jfs를 포함시키는 것입니다. (램과 플래시를 먹는 600kb +를 추가하는 것은 좋지 않습니다.) 그리고 시작할 때마다 fsck를 실행하십시오 (부팅 시간이 많이 걸릴 수 있습니다. 다소 나쁩니다). 그래도 조금 슬픈 것 같습니다.
누구든지 더 나은 방법이나 더 나은 파일 시스템을 알고 있습니까?
업데이트 : e2fsprogs-libs (jfsutils에 대한 종속성)는 배포판에서 컴파일하기가 어려워 보입니다. ZFS를 살펴볼 것입니다. (배포판 고유하지 않습니다. 그리고 필요하지 않은 많은 일을하는 것 같습니다.)
UPDATE2 : 내 시스템 및 테스트에 대한 추가 정보 : SD 카드 스토리지는 보조 옵션 스토리지입니다. SD 카드는 2Gb-8Gb 산업용 등급 microSD입니다. SD 카드는 mount -t 명령으로 내 rc를 통해 마운트됩니다. "noatime"옵션이지만 "sync"옵션은 없습니다. 내 배포판은 3.10 커널과 1.21 busybox를 갖춘 맞춤형 아날로그 장치 맛 uClinux입니다. 내 기본 저장소는 jffs2가 포함 된 spi 플래시입니다. 나는 그것에 대해 아무런 문제가 없었습니다. 사용 가능한 fsck.jffs2가 있는지조차 모르겠습니다. 반면에 낸드 플래시는 ...하지만 다른 이야기입니다. SD 카드의 목적은 측정 데이터를 저장하는 것입니다. '모니터'프로그램은 결과를 파일에 추가하고 전략적인 동기화 배치를 갖습니다. 파일이 주어진 크기 이상이되면 새로운 파일이 생성됩니다. 주어진 수의 파일에 도달하면 가장 오래된 파일이 삭제됩니다. 전력 손실로 인해 현재 측정 파일이 손실되면 재난이 아닙니다. 파일은 보통 50-100kb이고 1 개의 결과는 보통 1kb입니다. 이것은 초기 개발 단계 일뿐입니다. 아무것도 고정되어 있지 않습니다. 임베디드 시스템에서 비 플래시 파일 시스템을 다루는 것은 이번이 처음입니다. (x86 서버에 ext4가 있습니다.)
나는 vfat로 시작했다. 기본 파일 시스템. (공장에서 공장을 선택해야 할 이유가 있다고 생각했습니다. 작동하는 경우에는 그다지 신경 쓰지 않습니다.) 내장 된 vfat 장치에서 전력 손실 문제를 본 적이 없습니다. 그래도 WinCE에서 FAT 관련 문제가 발생했습니다. 그러나 내 '모니터'프로그램이 100-200 파일에 도달하면 더 이상 생성을 거부했습니다. FAT에는 루트에서 특별한 파일 제한 문제가 있고 하위 디렉토리에서 약간 더 큰 문제가있는 것 같습니다. 1 디렉토리에 500-1000 파일을 만들 수 있어야합니다. 따라서 vfat는하지 않습니다.
그런 다음 ext2로 전환했습니다. 그래도 시작시 fsck를 삽입하지 않았습니다. (내가 그렇게해야한다는 것을 몰랐습니다.) 하루 안에 '모니터'프로그램이 'inode something something'오류로 인해 더 많은 파일을 만들 수 없었습니다. 재앙!
내 현재 솔루션은 시작할 때 "e2fsck -y"가있는 ext2입니다. 지금까지는 유망한 것으로 보입니다. 그러나 e2fsck와 'fsck at startup'의 전체 개념은 저에게 흥얼 거리고 있습니다. 자체적으로 e2fsck는 350kb 이상의 기본 플래시와 램을 소비하고 있습니다. (실행 중이 아닐 때) 이것이 가장 큰 프로그램임을 의미합니다. busybox보다 큽니다. 내 커널과 거의 비슷합니다.
ext3을 고려하고 있습니다. 그것은 메타 데이터를 저널링했지만 아프지 않을 것입니다. 그것이 얼마나 도움이 될지 의심 스럽습니다. 내 작은 파일과 제어 된 동기화를 통해 보호해야한다고 생각합니까? 순서는 쓰기 순서가 있습니다. 데이터가 다소 저널링됨을 의미합니다. 그러나 이로 인해 비 결정적 지연이 발생할 수 있습니다. 내 상황에서 나쁘다. (아마도 문제가 아닙니다.) 예약 된 동기화 기능도 있습니다. 예 : 5 초마다 커밋 내 동기를 방해하는 것 같아요. 쓰기가 너무 많으면 SD 카드에 좋지 않습니다. 심지어 산업적인 것. 이것을 비활성화하는 방법에 대한 문서를 찾을 수 없습니다. 그리고 ext3은 여전히 모든 시작마다 fsck를 실행해야합니다! 그러나 ext3은 여전히 가능합니다.
내선 4. ext3의 많은 성능 문제를 해결합니다. 나는 실제로 성능이 필요하지 않습니다. 그리고 내 배포판에는 내장 mkfs.ext4 및 fsck.ext4가없는 것 같습니다. 아마도 그것은 문제가되지 않습니다. 그래도 그렇습니다. 예 : e2progs-libs (jfsutils에 대한 종속성)에는 많은 컴파일 문제가있는 것 같습니다.
JFS, XFS, BRFSS 모두 내 커널에서 지원합니다. 현재 내 사용자 공간 도구 상자에 포함되어 있지 않습니다. 모두 크고 복잡한 시스템 인 것 같습니다. 그리고 그들은 모두 시작할 때 'fsck'에 해당하는 것으로 보입니까?
나는 또한 자신의 파일 시스템을 던지는 것을 고려했다. 항상 파일 테이블의 사본을 2 개 쓴다. 순회 할 때 올바른 CRC와 최신 시퀀스 번호를 가진 것을 선택합니다. 2 단계 쓰기 시퀀스를 만듭니다. 임시 할당, 커밋시 수정. fsck가 필요하지 않습니다. 그래도 조금 순진한 것 같습니다.
업데이트 3 : BTW, 임베디드 시스템의 특성 (적어도 이것)은 자율적이고, 무인이며, 손이 닿지 않으며 몇 년 동안 실행해야한다는 것입니다. 인간과의 상호 작용 이 필요할 수있는 fsck와 같은 프로그램이 저를 놀라게합니다.