런타임 시 루트 디렉터리 교체

런타임 시 루트 디렉터리 교체

저는 임베디드 리눅스 시스템을 개발 중입니다. 시스템은 일반적으로 마더보드를 부팅할 수 있는 USB 스틱에 기록되는 ISO 파일을 생성하여 설치됩니다.

설치가 자동으로(예: 밤새) 수행되도록 하려면 기존 시스템이 실행되는 동안 보드에 설치할 수 있도록 하고 싶습니다.

내 설치는 busybox와 설치 스크립트가 포함된 initrd 파일과 설치할 루트 파일 시스템의 나머지 부분이 포함된 .tar.gz 아카이브의 두 부분으로 나뉩니다.

  1. 부트로더는 커널을 로드하고 이를 initrd로 가리킨 다음 커널을 부팅합니다.
  2. initrd 설치 스크립트는 대상 드라이브 /dev/sda를 마운트하고 포맷하고 부트 로더를 설치한 다음 마지막으로 .tar.gz 및 initrd에서 루트 파일 시스템을 복사합니다.

지금 나는 원한다

  1. install.iso를 호스트에서 대상 장치로 복사합니다. (괜찮아요)
  2. 위의 설치 단계를 따르세요.

내 문제는 현재 실행 중인 시스템을 어떻게 새 시스템으로 교체해야 할지 모르겠다는 것입니다. 현재 설치의 루트(/)를 제거하고 initrd로 교체해야 한다고 가정합니다. 하지만 방법을 알 수 없는 것 같아요!

답변1

나는 당신이 원하는 것을 성취하기 위한 다양한 방법을 생각할 수 있다. 이 모든 것에는 어느 정도의 위험과 어려움이 따른다. 가장 큰 위험은 설치가 잘못되거나 중단될 경우 수동 설치가 필요한 부팅할 수 없는 시스템이 된다는 것입니다.

내 주요 아이디어(부트로더 등에 따라 다름)는 현재 사용 중인 프로세스를 정확하게 사용하는 것입니다. 기본적으로 새 설치 이미지를 컴퓨터에 영구적으로 보관되는 USB 스틱에 복사합니다. 그런 다음 재부팅하고 정상적으로 부팅하고 설치하십시오.

이는 다음에 따라 달라집니다.

  1. 핸즈프리 설치. 나는 당신이 이것을 가지고 있다고 가정합니다. 그렇지 않으면 밤새 다시 설치하는 것이 문제가되지 않을 것입니다.
  2. 부트로더에는 USB 또는 로컬 파일 시스템 부팅을 자동으로 선택하는 기능이 있습니다(또는 재부팅하기 전에 애플리케이션 수준 명령을 통해).
  3. 마지막으로 USB 장치 대신 로컬 보드에서 부팅하도록 부트로더를 구성하거나 단순히 USB 장치의 내용을 지우거나 부팅할 수 없게 만들어 부트로더가 충돌하도록 해야 합니다.

또 다른 접근 방식은 마더보드에 두 개의 부팅/루트 파티션을 두고 사용하지 않는 파티션에 설치한 다음 재부팅이 끝나면 부트로더가 다른 파티션으로 부팅하도록 하는 것입니다. chroot 환경을 사용하여 설치 프로그램이 처음부터 부팅되었다고 생각하도록 강제할 수 있습니다. 그러나 이는 환경에 큰 변화가 될 수 있으며 빠른 속도로 승리할 수는 없습니다.

답변2

initrd를 먼저 설치한 다음hub_root를 설치해 보셨나요? 하고 싶은 일인 것 같습니다.

관련 정보