램디스크를 루트파일 시스템으로 사용하지 않고 난드플래시를 루트파일시스템으로 사용하는 경우가 많이 있다.

이때 발생하는 문제점이 몇개 있다.

기본적으로  yaffs 가 되었던 보통 저널링 파일시스템을 사용한다.

저널링 파일시스템은 파일이 깨져도 저장하기 전까지의 데이타는 보존된다. 

하지만 저널링 파일시스템의 단점은 파일정보가 이상하다고 판단되면 자신의 파티션 모두를 스캔하여 

정보를 재 가공한다는 것이다. 이 과정에서 부팅시간이 파티션 용량만큼 느려진다.


예전에 1GB 플래시를 추가로 하나더 연결한 후 부팅시 이것을 mount 하여 사용하였는데 

경우에 따라 최대 40초이상을 대기해야만 하였다.

문제의 근원은 플래시에 데이타를 쓰고 있을때 전원이 꺼지면서 발생한다.

임베디드 시스템에서 이를 막을 수 는 없으니...

플래시에 데이타를 쓰지 않을 수도 없고...


해결책

   1. 파티션 크기를 줄여 사용한다.

       정보가 깨지더라고 스캔하는 시간을 줄일 수 있다.

   2. 데이타를 쓰는 경우 빈번하게 쓰지 않도록 조정한다.

        자주 쓰는것 보다 몰아서 플래시에 저장하는 편이 확률적으로 전원이 꺼질경우 에러가 날 확률이 준다.

   3. 파티션을 여러개로 분할하여  읽기만 하는 파일들은 read only 로 마운트 한다.

   4. 램디스크를 활용한다.

       루트파일시스템은 램디스크를 사용하고 다른 파일들은 플래시에 저장하여 사용한다.

   5. 가장확실한것은 전원 종료를 알고 대처하는 것이다. (임베디드에서는 거의 불가능 ㅜ.ㅜ)

   6. 대부분의 경우 주기적으로 발생하는 로그데이타를 저장하는 것 때문에 발생한다. 

      이런 로그데이타는 파일을 이용하지 말고 직접 mtd 디바이스를 제어하는 것이 아주많이 안정적이다.

      물론 코드의 양이 약간 많아진다. 

      커널의 로그데이타는 램디스크로 당연히 넘기거나 저장되지 않도록 한다.



최근에 있었던 가장 안좋은 경우는

파일시스템의 슈퍼블럭이 날라가 더이상 아무것도 할수없는 상황이 발생하였다.

저널링이라고 해도 어떻게 할 방법이 없다.

이영역은 갱신되는 영역이 아닌지라 날라가고 나니  OTL


플래시를 사용할 땐 이런문제들에 대해서 한번씩 고민하고 시스템에 적용하자

꼭 ~~~~