2016-10-05 3 views
1

장치가 부팅되는 동안 rootfs 파티션의 내용을 바꾸는 방법은 무엇입니까?
debian 버전을 제거한 상태에서 pine64 (1GB)를 사용하고 있으며 장치가 실행되는 동안 rootfs 파티션의 모든 파일을 대체 할 팩토리 리셋 스크립트를 작성하는 데 큰 충격을 받았습니까? 상주 복원 파일은 tar 또는 img 파일 일 수 있습니다.
이미 두 가지 방법장치가 부팅되는 동안 커널을 재설정하는 방법은 무엇입니까?

  1. 장치의 파티션 이미지에서 파티션을 DD 형식을 시도했다.
    sudo dd if=pine-debian.img skip=*start of rootfs partition* seek=*start of rootfs partition* of=/dev/mmcblk0
  2. 압축 된 내용을/디렉토리에 추출하십시오.
    sudo tar -C/-zxvf pine-debian.tar.gz

는 접근 방식 모두 후, 시스템은 모든 명령, 심지어 LS를 인식 할 수 있습니다. 이 문제를 해결하는 방법에 대한 도움을 주시면 감사하겠습니다. 장치가 실행되는 동안 fs 컨텐츠를 대체하는 방법은 무엇입니까?

답변

1

이상적으로는 rootfs 복사본이있는 두 개의 파티션이 있어야합니다. 현재 사용하지 않는 파티션을 dd으로 작성한 다음 방금 작성한 파티션을 루트로 가리 키도록 부트 로더 구성을 업데이트 할 수 있습니다. swupdate은 이러한 이중 은행 시나리오를 지원하지만 U-Boot에 대한 기본 지원 만 제공합니다. 다른 부트 로더를 사용한다면 스왑을 수행하기위한 스크립트를 추가해야합니다.

실제로 덮어 쓸 필요가있는 경우 해당 파일 시스템이 현재 사용 중이므로 파티션을 직접 덮어 쓸 수 없습니다. 현재 일부 파일 (특히 libc)이 사용 중이므로 Untarring도 실패합니다. 당신은 --unlink-first 옵션을 untar 명령에 추가하려고 할 수 있습니다. 그러나 그것이 작동하는지 확실하지 않습니다.

다른 두 옵션 :

  1. 대신 전체 rootfs를 덮어 쓰는, 데비안 패키지 업그레이드를 사용합니다. 업그레이드를 안전하게하기 위해 사전 및 사후 설치 스크립트가 있습니다.
  2. (임시, 소형) in-RAM 루트 파일 시스템으로 스왑하여 업그레이드를 수행하십시오. 이 루트 파일 시스템은 busybox와 업그레이드를 수행하는 스크립트를 포함해야합니다. 모든 프로세스를 종료 한 다음 임시 rootfs로 pivot_root를 수행하거나 kexec --initrd=...을 사용하여 in-RAM 루트 파일 시스템으로 부트 할 수 있습니다.