나는 실행 중인 PC에서 루트 파일 시스템을 교체하는 bash 스크립트 가능 방법을 고안하려고 합니다. 시스템은 ext4 rootfs 및 스왑 파티션이 있는 MBR 파티션 디스크를 사용하지만 불행히도 LVM/BTRFS 또는 이와 유사한 유용한 기능은 사용하지 않습니다. grub/kernel 및 initrd/systemd를 사용하여 최소한의 데비안 배포판을 실행하고 있습니다.
문제의 PC에 물리적으로 접근할 수는 없습니다. 바이너리와 업데이트 셸 스크립트가 포함된 타르볼을 PC에 푸시하는 데 사용할 수 있는 독점 도구를 사용할 수 있는 일부 키오스크 소프트웨어가 실행되고 있습니다. 내 계획은 이 업데이트 시스템을 사용하여 rootfs를 교체하는 것입니다.
내 생각은 기본적으로 다음과 같이 요약됩니다.
initrd를 실제 rootfs로 전환하지 않고 대신 교체하는 사용자 정의 버전으로 교체한 다음(아마도 dd를 사용하여 새 이미지를 작성함) 새 시스템으로 재부팅합니다.
(어쨌든!) 라이브 시스템에서 일종의 임시 파일 시스템으로 switch_root를 수행한 다음 위의 dd를 수행하고 재부팅합니다.
위와 같지만 init 프로세스를 새로운 임시 fs로 피벗_루트하고 위와 같은 작업을 수행합니다.
나는ivot_root 및 switch_root 기능에 익숙하지 않으며 현재 플레이 중입니다. 이전에 이 작업이 수행되었다고 확신하지만 검색했지만 해결책을 찾지 못했습니다!
답변1
보다이 스택 교환 답변. 허용되는 답변은 다음을 가리킨다.이 링크, 여기서는ivot_root를 사용하여 임시 메모리 내 루트 파일 시스템을 생성하는 방법을 설명합니다. 이를 통해 재부팅하지 않고도 루트 파일 시스템을 변경, 크기 조정, 대체하거나 다른 방식으로 엉망으로 만들 수 있습니다.