chroot로 부팅 하시겠습니까?


13

하드 드라이브에 Linux (Debian Jessie)가 설치되어 있습니다. 드라이브 sda1-ext4fs 및 sda2-스왑

나는이 /chroot폴더에 있습니다. /chroot폴더에 다른 시스템이 설치되어 있습니다 .

질문:

기본 시스템 (기본, 데비안 Jessie)이 아니라 / chroot의 시스템 을 부팅하도록 bootmanager에 알리는 방법은 무엇입니까? 아마, 변화 /menu.lst/chroot/etc/fstab? ( vmlinuz root=/dev/sda1/chroot?)

또는 다른 변형 질문 : 리눅스를 파티션의 루트 디렉토리가 아닌 폴더에 설치하는 것이 가능합니까? ( /another_linux/bin, /another_linux/home, /another_linux/etc, ...)


1
vmlinuz root=/dev/sda1/chroot작동하지 않습니다. 아마에 사용 된 것과 비슷한 방법으로 이것을 시뮬레이션 할 수있을 것입니다 initrd. 예를 들어 여기를 참조 하십시오 . 당신은 마운트 /new_root가 설명 된 바와 같이, 다음 대신 cd /new_rootcd /new_root/chroot계속.
n. '대명사'm.

답변:


7

이것은 부트 로더 나 커널에 의해 수행 될 수 없습니다. 커널 root옵션에 대한 매개 변수 root=/dev/sda1는 표준 Unix 경로 이름처럼 보이지만 이러한 경로 이름은 현재 마운트 된 파일 시스템에 따라 해석됩니다. root옵션이 해석 될 때 마운트 된 파일 시스템 이 없습니다 . 거의 없습니다. 커널 초기화시 초기 프로세스 실행을위한 루트로 mount ramfs라는 최소 파일 시스템 인스턴스가 있습니다. 옵션 매개 변수 의 실제 해석은 이라는 루틴에서 수행됩니다 . 지원되는 구문 중 하나는 형식입니다. 여기서 파일 시스템 의 임시 마운트를 수행 하여 이름 을 해석 합니다.rootfsstart_kernel()rootname_to_dev_t()/dev/namesysfsrootfs루트 아래 의 블록 장치 항목과 일치하는 이름을 찾습니다 /sys/block. 이 과정은 여기 에 더 자세히 설명되어 있습니다 .

설명 된 설정은 먼저 제공되는 환경과 같은 최소 환경으로 부팅 하고 임시 마운트 지점에서 initrd실제 루트 파일 시스템을 /dev/sda1마운트 /mnt/rootfs한 다음 루트 디렉토리를 /mnt/rootfs/chroot사용으로 변경 하여 수행해야 pivot_root(8)합니다.

이는 LinuX 컨테이너 ( LXC ) 의 루트 파일 시스템을 설정하는 방법과 다소 유사합니다 . LXC는 Linux 용 운영 체제 레벨 가상화 구현입니다. 운영 체제 수준 가상화는 일반적으로 가상 호스팅 환경에서 하이퍼 바이저가 관리하는 전체 가상화에 대한 간단한 대안으로 사용됩니다. 운영 체제 수준 가상화에서 단일 운영 체제 커널은 여러 격리 된 사용자 공간 인스턴스간에 공유됩니다. 종종 컨테이너, 감옥, VPE ( Virtual Private Server ) 또는 VE ( Virtual Environment ) 라고하는 각 인스턴스 는 기본적으로 호스트 시스템의 자체 디렉토리에있는 별도의 운영 체제 설치입니다.


6

나는 같은 문제를 겪고 다른 시스템 (현재 데비안, 우분투)에서 고통없이 작동하도록 이것을 작성 했습니다.

make_chroot_initrd스크립트를 실행 하여 기존 이미지에서 새로운 chroot 가능 initrd 이미지를 만듭니다.

#  ./make_chroot_initrd /chroot/trusty/boot/initrd.img-3.13.0-32-generic
making new initrd: /chroot/trusty/boot/initrd.img-3.13.0-32-generic.chroot

새 이미지는 chroot=부팅 매개 변수를 처리 할 수 ​​있다는 점을 제외하면 정확히 동일 합니다.

부트 로더로 GRUB2하면 항목을 추가 할 수 있습니다 /boot/grub/grub.cfg:
(아마도 더 나은 또는 /etc/grub.d/40_custom)

menuentry "ubuntu trusty, (linux 3.13.0-32) (chroot)" {
    insmod ext2                       # or whatever you're using ...
    set root='(hd0,7)'                # partition containing the chroot
    set chroot='/chroot/trusty'       # chroot path
    linux   $chroot/boot/vmlinuz-3.13.0-32-generic root=/dev/sda7 chroot=$chroot rw
    initrd  $chroot/boot/initrd.img-3.13.0-32-generic.chroot
}

(당신과 일치하도록 파일 / 파티션을 변경하십시오)

시스템 전체 설치

만족하면 변경 사항을 영구적으로 만들 수 있습니다
(initramfs-tools 패키지가 업그레이드 될 때까지).
chroot 된 시스템에서 :

# cd /usr/share/initramfs-tools
# cp -pdrv .  ../initramfs-tools.orig       # backup
# patch -p1 < path_to/boot_chroot/initrd.patch
# rm *.orig */*.orig
# update-initramfs -u

이제부터 일반 initrd 이미지는 chroot 부팅을 지원합니다.
별도의 initrd.chroot를 사용할 필요가 없으므로 동기화되지 않을 수 있습니다.

자세한 내용은 boot_chroot 를 참조하십시오.


3

예, Btrfs subvolumes를 사용하여 트릭을 수행 할 수 있습니다 .

먼저 여기에 설명 된대로 ext4를 btrfs로 변환 해야 합니다 .

chroot를 아직 서브 빌리지로 변환하지 않은 경우 :

 sudo mv /path/to/chroot /path/to/chroot-tmp
 sudo btrfs subvol create /path/to/chroot
 sudo mv /path/to/chroot-tmp/* /path/to/chroot
 sudo mv /path/to/chroot-tmp/* /path/to/chroot -r # for directories

이제 path / to / chroot 라는 하위 볼륨이 있습니다 . 당신은 그것을 확인할 수 있습니다sudo btrfs subvol list /

이제 grub에서 하위 볼륨 레코드 부팅을 만들 수 있습니다. 그냥 추가 rootflags=subvol=path/to/chrootGRUB 메뉴 항목에 리눅스 커널로드 문자열 또는 사용 자동으로 프로브.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.