Linux에서 루트 파일 시스템을 완전히 전환하는 방법은 무엇입니까?

Linux에서 루트 파일 시스템을 완전히 전환하는 방법은 무엇입니까?

저는 플래시 장치(UBIFS가 포함된 MTD 장치)에서 rootfs를 실행하고 있습니다. 참고: 비트베이크 시스템이므로 본격적인 우분투나 그 어떤 것도 아닙니다.

나는 장치를 포맷하고 여기에 새 rootfs를 쓸 수 있기를 원하므로 ubidetach장치가 필요하고 그렇게 할 수 있지만 그러기 위해서는 모든 프로세스/셸/응용 프로그램 등을 종료해야 합니다. .. 존재했던 적이 있습니다. 즉, 다음과 같은 목록이 있습니다.

fuser -vm /dev.

그래서 지금까지 시도한 것은(어느 정도 작동함)ivob_root를 사용하는 것입니다. 다음을 수행합니다.

  1. bin, sbin, lib 등을 새 /tmp_root/ 폴더에 복사했습니다.
  2. /proc, /sys, dev를 마운트/바인딩하고 /tmp_root/로 실행합니다.
  3. 피벗_루트 호출
  4. oldroot에서 모든 것을 제거하십시오.
  5. oldroot/dev와 관련된 모든 프로세스를 종료합니다.
  6. 이전 루트 제거

이것은 잘 작동합니다. 이제 UBIFS 및 Flash MTD 장치를 분리할 수 있습니다. 그러나 실행 중인 모든 애플리케이션을 종료해야 했는데 이는 그다지 유용하지 않습니다!

따라서 제가 (적어도 실험적으로) 하고 싶은 것은 pivot_root하나 또는 이와 유사한 것을 만드는 것입니다 switch_root. 그런 다음 모든 앱을 실행하고 (희망적으로) MTD 장치를 새로 고칠 수 있습니다. 일반적으로 이것이 사실이지만 initramtfs(또는 내가 읽은 바 있음) 제 경우에는 이미 실행 중인 rootfs에서 몇 가지 테스트를 수행하고 파일 시스템을 전환하고 싶었습니다.

내가 만든 것과 동일한 폴더를 사용하여 /tmp_root다음을 시도했습니다.

  • exec switch_root /tmp_root /sbin/init
  • exec -c /dev/console switch_root /tmp_root /sbin/init

그러나 나는 항상 같은 결과를 얻습니다. 예를 들면 다음과 같습니다.

이전 루트 파일 시스템이 initramfs가 아닙니다: 잘못된 인수

조금 막혔습니다. 시스템이 가동되고 실행되면 rootfs를 완전히 전환할 수 있습니까?

노트:Linux 커널 4.1.x 실행

답변1

정보:

루트 디렉터리 전환

switch_root는 마운트된 /proc, /dev, /sys 및 /run을 newroot로 이동하고 newroot를 새 루트 파일 시스템으로 만들고 시작합니다.내부에 프로세스.

내부에

프로그램 초기화는 프로세스 ID 1을 갖는 프로세스이며 필요한 방식으로 시스템을 초기화하는 일을 담당합니다. init는 커널에 의해 직접 시작되며 일반적으로 프로세스를 종료하는 신호 9에 저항합니다.다른 모든 프로그램은 init에 의해 직접 시작됩니다.또는 하위 프로세스 중 하나를 통해.

이전에 시작된 모든 프로그램, 데몬, 모듈(?)은 switch_rootinit 프로세스 1에 의해 시작됩니다. switch_root는 init를 종료하므로 init가 종료된 후에 시작된 모든 항목은 사라집니다.

새로운 init가 시작되려면 새로운 rootfs에 모듈(?), 프로그램, 데몬이 있어야 합니다. 새로운 프로세스 1은 모듈(?)을 다시 로드하고 데몬을 다시 시작한 후 사용자 프로그램을 생성합니다.


"이 장치를 포맷하고 여기에 새 rootfs를 쓸 수 있기를 원합니다."

새로운 rootfs를 구축했고 이를 "설치"할 준비가 되었다고 가정합니다.

포맷 후 어떻게 시작하나요? 이미 시작되었으므로 switch_root를 원하는 이유입니까?

그렇다면 switch_root는 아마도 필요한 도구가 아닐 것입니다.

다른 도구를 사용하면 새 rootfs의 형식을 지정하고 복사할 수 있습니다.

  • 당신의 부트 로더.
  • 부팅 가능한 USB에 설치된 라이브 Linux 배포판입니다.
  • 사용자 정의 비트베이크 파일 시스템에는 시스템을 부팅하는 데 최소한의 것만 필요하며 파티셔닝, 포맷 및 복사 도구(프로그램)가 필요합니다. 이는 MTD의 다른 파티션에 있는 다른 "드라이브"에 있거나 bzImage의 일부인 USB 또는 메모리 initramfs에 있을 수도 있습니다.
  • 새 rootfs는 일시적으로 다른 파티션(예: USB)에 있습니다. 현재 커널과 rootfs 대신 부트로더에서 부팅하도록 부트로더를 조정해야 합니다.
  • 네트워크 부팅 이더넷 PXE 또는 심지어 NFS.

이것이 도움이 됩니까?

관련 정보