2012-10-27 3 views
0

내부 SD 카드가있는 내장형 Linux 장치에서 작업하고 있습니다. 이 장치는 장치를 열고 SD 카드를 꺼내지 않고도 업데이트 할 수 있어야합니다. 목표는 사용자가 USB 플래시 드라이브로 장치를 업데이트 할 수 있도록하는 것입니다. 내부 SD 카드를 새로운 SD 카드 이미지로 완전히 덮어 쓰고 싶습니다.루트로 마운트 된 내부 SD 카드 깜박임

내 첫번째 생각은 루트 파일 시스템을 마운트 해제의 효과에 뭔가를 사용하는 것이었다 그러나

dd if=/mnt/flashdrive/update.img of=/dev/sdcard 

, 사실은 "로그인"와 "systemd와 같은 프로세스로, 제대로 루트 파일 시스템을 마운트 해제하기 어려운 나타납니다 "여전히 루트에 대한 리소스를 사용하고 있습니다. 예를 들어 로그인을 죽이면 즉시 업데이트 스크립트도 종료됩니다.

물론 루트를 마운트 해제하지 않고 항상 dd를 사용할 수 있습니다. 그러나 이것은 다소 어리석은 것처럼 보입니다. : P

또한 시스템이 실제로 루트 파일 시스템을 마운트하기 전에이 논리를 수행하도록 시스템 초기화 스크립트를 수정하려고합니다.

이 유형의 업데이트를 수행하는 올바른/쉬운 방법이 있습니까? 나는 그것이 전에 행해졌다고 상상할 것이다.

감사합니다.

답변

0

마운트 된 파일 시스템을 다시 이미징하면 마운트가 읽기 전용 인 경우에도 좋은 생각이 아닙니다.

고려 :

  • 가 실제 루트 파일 시스템으로 (압축 된 이미지에서 초기화) 램 디스크를 사용하지만, 아마도 업그레이드 드롭 할 수있는 아래의 파일 시스템에서 가장 중요한 도구를 제외하고 모두 장착이 . 대부분의 Linux 구현은 부트 프로세스 초기에 주 디스크 파일 시스템을 마운트하기 전에이를 수행합니다. 업그레이드를 위해 재부트하는 것이 옵션 일 수 있습니다.

  • SD 카드가 필요한 것보다 클 수 있습니다. 업그레이드 할 때마다 파티션을 두 개씩 교대로 사용하십시오. 또는 업그레이드/복구를 수행하기 위해 부팅하는 유지 관리 파티션이 있어야합니다.

  • 실제로 파일 시스템을 이미지화하지 않고 개별 파일을 업그레이드하십시오.

+0

필자가 설명한 이중 파티션 설정으로 갈 것입니다. 이는 많은 흥미로운 이점을 제공하며, 2GB SD 카드로이를 감당할 수 있습니다. 답변 해주셔서 감사합니다. – beta

0

중 하나 또는 모두를보십시오 :

  1. 먼저 단일 사용자 모드로 아래로 가져 : telinit 1

및/또는

  1. 다시 마운트 /와 같은 읽기 전용 : mount -o remount,ro /

실행 전 dd

0

개인적으로 나는 결코 당신이하는 것처럼하지 않을 것이지만 할 수 있습니다.

당신의 리눅스 시스템은 부팅 할 때마다 그것을합니다.실제로, 여러분의 커널은 처음에 initrd를 마운트하고 모든 모듈을로드 한 다음 pivot_root을 호출하여 실제 /를 마운트합니다. 이 방법 :

pivot_root

당신이

mount /dev/hda1 /new-root 
cd /new-root 
pivot_root . old-root 
exec chroot . sh <dev/console >dev/console 2>&1 
umount /old-root 

마지막으로 한가지 같은 것을 할 수있는, 쉘에서 사용할 수있는 명령, 당신은 더 나은 man 8 pivot_root를 실행 싶지만 당신에게 아이디어를주고도 소프트웨어 업그레이드를 수행하는 것은 매우 약합니다. 다른 해결책을 고려하십시오.