저는 임베디드 리눅스 시스템을 개발 중입니다. 시스템은 일반적으로 마더보드를 부팅할 수 있는 USB 스틱에 기록되는 ISO 파일을 생성하여 설치됩니다.
설치가 자동으로(예: 밤새) 수행되도록 하려면 기존 시스템이 실행되는 동안 보드에 설치할 수 있도록 하고 싶습니다.
내 설치는 busybox와 설치 스크립트가 포함된 initrd 파일과 설치할 루트 파일 시스템의 나머지 부분이 포함된 .tar.gz 아카이브의 두 부분으로 나뉩니다.
- 부트로더는 커널을 로드하고 이를 initrd로 가리킨 다음 커널을 부팅합니다.
- initrd 설치 스크립트는 대상 드라이브 /dev/sda를 마운트하고 포맷하고 부트 로더를 설치한 다음 마지막으로 .tar.gz 및 initrd에서 루트 파일 시스템을 복사합니다.
지금 나는 원한다
- install.iso를 호스트에서 대상 장치로 복사합니다. (괜찮아요)
- 위의 설치 단계를 따르세요.
내 문제는 현재 실행 중인 시스템을 어떻게 새 시스템으로 교체해야 할지 모르겠다는 것입니다. 현재 설치의 루트(/)를 제거하고 initrd로 교체해야 한다고 가정합니다. 하지만 방법을 알 수 없는 것 같아요!
답변1
나는 당신이 원하는 것을 성취하기 위한 다양한 방법을 생각할 수 있다. 이 모든 것에는 어느 정도의 위험과 어려움이 따른다. 가장 큰 위험은 설치가 잘못되거나 중단될 경우 수동 설치가 필요한 부팅할 수 없는 시스템이 된다는 것입니다.
내 주요 아이디어(부트로더 등에 따라 다름)는 현재 사용 중인 프로세스를 정확하게 사용하는 것입니다. 기본적으로 새 설치 이미지를 컴퓨터에 영구적으로 보관되는 USB 스틱에 복사합니다. 그런 다음 재부팅하고 정상적으로 부팅하고 설치하십시오.
이는 다음에 따라 달라집니다.
- 핸즈프리 설치. 나는 당신이 이것을 가지고 있다고 가정합니다. 그렇지 않으면 밤새 다시 설치하는 것이 문제가되지 않을 것입니다.
- 부트로더에는 USB 또는 로컬 파일 시스템 부팅을 자동으로 선택하는 기능이 있습니다(또는 재부팅하기 전에 애플리케이션 수준 명령을 통해).
- 마지막으로 USB 장치 대신 로컬 보드에서 부팅하도록 부트로더를 구성하거나 단순히 USB 장치의 내용을 지우거나 부팅할 수 없게 만들어 부트로더가 충돌하도록 해야 합니다.
또 다른 접근 방식은 마더보드에 두 개의 부팅/루트 파티션을 두고 사용하지 않는 파티션에 설치한 다음 재부팅이 끝나면 부트로더가 다른 파티션으로 부팅하도록 하는 것입니다. chroot 환경을 사용하여 설치 프로그램이 처음부터 부팅되었다고 생각하도록 강제할 수 있습니다. 그러나 이는 환경에 큰 변화가 될 수 있으며 빠른 속도로 승리할 수는 없습니다.
답변2
initrd를 먼저 설치한 다음hub_root를 설치해 보셨나요? 하고 싶은 일인 것 같습니다.