나는 alix 2d13을 사용하여 리눅스 기반 어플라이언스를 개발 중이다.Linux 기반 펌웨어, 업데이트하는 좋은 방법을 구현하는 방법?
이미지 파일 만들기, 파티션 만들기, 부트 로더 (syslinux), 커널 및 initrd 설치 및 루트 파일 시스템 파일을 올바른 파티션에 저장하는 스크립트를 개발했습니다. .
구성 파일은 tmpfs 파일 시스템에 있으며 시스템 시작시 자체 파티션에있는 XML 파일을 읽는 소프트웨어로 만들어집니다.
나는 파일 시스템을 업데이트 할 수있는 방법을 찾고 있어요 그리고 난이 개 솔루션을 고려했습니다
- 펌웨어 업데이트이에, 커널, initrd를 및/또는 rootfs 파티션을 포함 할 수있는 압축 파일입니다 initrd는 rootfs 이미지를 올바른 파티션에 dd 처리합니다.
- 펌웨어 업데이트는 두 개의 tar 아카이브 (부팅 용과 루트 파일 시스템 용)를 포함 할 수있는 압축 파일입니다. ; 파일 시스템 이미지 나 사용하지 않는 파일을 삭제하게됩니다하지만 많은 시간을 필요로하며 컴팩트 플래시 메모리를 fastly 죽일 것이다 - :
모든 솔루션은 자신의 장점을 가지고 - 아카이브가 작아서 업데이트하는 데 시간이 덜 필요하지만 짧은 시간에 루트 파일 시스템에 caos가 표시됩니다.
다른 해결책은 파일 목록을 넣고 사전/사후 업데이트 스크립트를 tar 아카이브에 넣는 것입니다. 따라서 파일 목록에 상주하지 않는 파일은 모두 삭제됩니다.
당신은 어떻게 생각하십니까?
에 대한 귀하의 솔루션을 많이, 결국 내가 아주 비슷한 일을했지만 부팅 실패 감지하지 않았지만 내가 비슷한 구현합니다 생각 : - 직접 io 및 동기화 작업을 사용하여 부트 실패 감지 기록을위한 섹터를 예약합니다. - 부트 커널은 타임 스탬프가있는 부트 시도를보고하고 os 이미지를 마운트하는 initrd를 시작합니다. - 부팅 프로세스, 새로운 initrd는 타임 스탬프와 함께 단계별로 단계별로보고 할 것이며 문제를 확인하기 위해 부트 단계는 - 결국 부팅 실패 감지 섹터에서 "모두 완료" –
으로보고합니다. 업그레이드를 위해 tarball을 다운로드하는 것을 선호합니다. 데이터 파티션과 재부팅시 첫 번째 initrd가 업그레이드 tarball을 감지하면 tarball을 처리합니다 (u seful은 삭제할 파일을 식별하고 업그레이드 스크립트를 실행하기 위해 두 개의 특수 파일을 추가합니다. 업그레이드 후 첫 번째 initrd가 새 커널을 kexec하여 부팅을 업그레이드로보고합니다 (tarball을 삭제할 수 있도록). tarball은 보안상의 이유로 개인 키로 서명해야합니다. 이전 디스크 섹터 (부팅 실패 감지)를 사용할 수있는 오류를보고하려면 문제를 피하려면 동기화 쓰기 만 수행하면됩니다. –
"상태 섹터"아이디어를 좋아합니다. 최소한 장애 지점 중 일부는 단일 디스크 위치로 옮기고 섹터에 장애가 발생하면 여유 섹터가 생겨 복구를 시도하거나 적어도 복구 모드를 제공 할 수 있습니다." – Patrick