한 설치에서 다른 설치로 Linux를 핫플러그할 수 있습니까?

한 설치에서 다른 설치로 Linux를 핫플러그할 수 있습니까?

내 컴퓨터에 독립 실행형 Linux가 여러 개 설치되어 있고 적절한 Linux로 재부팅합니다. 전체 재부팅 없이 하나에서 다른 것으로 전환할 수 있는지 궁금합니다. 예를 들어 fstab을 복사하고 새로 마운트된 파티션을 나열한 다음 mount -a.

분명히 커널은 변경되지 않지만 괜찮습니다. 작업 파티션만 변경하고 싶습니다. 나는 또한 이것이 가능하다면 아무것도 실행하지 않고 명령줄에서 수행되어야 한다는 것이 명백하다고 생각합니다. 아니면 아이디어가 처음부터 효과가 없고 순수한 광기였나요?

그 이유는 나는 대개 별도의 "실험적" 설치에서 급진적인 변경(예: 데비안의 "amd64" 커널로 이동)을 시도하기 때문입니다. 재부팅하여 시작하면 좋겠지만, 전체 재부팅 없이 해당 설치로 바로 이동할 수 있다면 좋을 것입니다. 이를 단순히 루트 파티션을 동적으로 변경하는 것으로 생각할 수도 있지만 이는 단순히 불가능할 수도 있습니다.

예, 아래에서 배운 대로 가능합니다. 커널 자체를 교체할 필요가 없으면 "chroot"를 사용하십시오. 전체 재부팅을 시뮬레이션하려면 "kexec"를 사용하십시오.

답변1

나는 이것이 불가능하다고 생각한다.

이론적으로 당신이 하고 싶은 일은 다음과 같습니다:

  1. 를 사용하면 시스템이 "단일" 실행 수준으로 이동합니다 init 1. 여기서는 이론적으로 init 및 bash만 실행합니다.
  2. /를 제외한 모든 파티션을 마운트 해제합니다. /usr이 루트 파티션에 있는지 여부에 따라 이 시점에서 시스템 작동이 중지될 수 있습니다.
  3. 다른 운영 체제의 루트 디렉터리를 어딘가에 설치합니다.
  4. ivot_root는 루트를 새 파티션으로 변경합니다.
  5. init 5init에게 실행(또는 2 또는 적절한 항목)을 통해 새 시스템을 시작하도록 지시합니다.

문제는ivot_root가 현재 프로세스의 루트 파티션만 변경한다는 것입니다. 즉, init에는 영향을 주지 않으며 init에게 시스템을 부팅하라고 지시하면 이전 시스템이 부팅된다는 것입니다. init에게ivot_root를 실행하라고 지시하는 방법이 필요합니다. 제 생각엔 불가능할 것 같습니다.

아, 그리고 다른 운영 체제가 다른 init 서비스를 사용할 때 어떤 일이 발생하는지 논의하지 않겠습니다(예를 들어 Fedora는 systemd를 사용하고 Ubuntu는 upstart를 사용함). 커널 아래의 init 프로세스(pid 1)를 교체해야 하는데 이는 실제로 불가능합니다.

답변2

다른 커널을 사용해 보려면 재부팅하거나 가상 머신에서 실행해야 합니다. 가상 머신이 더 편리하지만 실제 하드웨어에서 커널을 테스트할 수는 없습니다.

설치된 어셈블리의 서로 다른 집합에 대해 서로 다른 설정을 원하는 경우 가상 머신을 사용할 수도 있습니다. 가상 머신의 오버헤드를 피하려면 다음을 수행하십시오.chroot. 나는 종종 64비트 설치에서 32비트 프로그램에 쉽게 접근하기 위해 또는 안정적인 것(예: Debian stable) 외에 최신 것(예: Debian 불안정)을 얻기 위해 이 작업을 수행합니다. 나는 썼다대체 Debian/Ubuntu 릴리스에 대한 chroot 설정 안내. 당신은 또한 볼 수 있습니다경량의 격리된 Linux 환경

답변3

만약 너라면아니요커널을 변경하고 싶거나 변경해야 하지만 여기서 지적한 대로 다른 파일 시스템을 사용하고 싶습니다.

분명히 커널은 변경되지 않지만 괜찮습니다. 작업 파티션만 변경하고 싶습니다.

그렇다면 아마도 당신은 당신의 말로, chroot를 (마운트하고)해야 할 것입니다.

이는 루트 파티션을 동적으로 변경하는 것으로 생각할 수 있습니다.

나는 종종 다른 커널을 사용하는 파일 시스템과 상호 작용하기 위해 구조 시스템(예: Clonezilla)에서 chroot를 사용해 왔습니다. 새 커널 모듈을 로드하는 것과 같은 작업을 수행할 수 있을 것으로 기대하지는 않지만 파일을 읽고 쓰는 데는 괜찮습니다(fstab 수정, grub.conf 조정 등).

바인드 마운트를 사용하여 chroot 환경을 더욱 유용하게 만들 수 있습니다. 나는 이것을 chroot 대상 내부에 마운트된 파일 시스템을 복사하는 데 사용했습니다.

mount /dev/sda1 /mnt
for d in dev sys proc; do mount -obind /$d /mnt/$d; done
chroot /mnt

관련 정보