내 하드 드라이브에 Linux(Debian Jessie)가 설치되어 있습니다. 드라이브 - sda1
, ext4fs 및 sda2
- 스왑
폴더 가 있습니다 /chroot
. 폴더에 다른 시스템이 설치되어 있습니다 /chroot
.
질문:
부팅 관리자에게 시작을 지시하는 방법메인 시스템이 아닌(주로 Debian Jessie) 하지만 시스템은/chroot? 아마도 변경 /menu.lst
하고 /chroot/etc/fstab
? ( vmlinuz root=/dev/sda1/chroot
?)
또는 질문의 또 다른 변형: 파티션의 루트 대신 폴더에 Linux를 설치할 수 있습니까? ( /another_linux/bin
, /another_linux/home
, /another_linux/etc
, ...)
답변1
나는 같은 문제에 직면했고 결국이것을 쓰다다른 시스템(현재 debian, ubuntu)에서 쉽게 작동하도록 만드세요:
스크립트를 실행하여 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를 사용할 필요가 없습니다. 그렇지 않으면 동기화가 중단될 수 있습니다.
바라보다chroot 시작더 알아보기.
답변2
이는 부트로더나 커널로는 수행할 수 없습니다. 커널 옵션에 대한 인수 root
(예: ) root=/dev/sda1
는 표준 Unix 경로 이름과 유사하지만 이러한 경로 이름은 현재 마운트된 파일 시스템을 기반으로 해석됩니다. 이 옵션을 설명할 때 root
,아니요마운트된 파일 시스템. 글쎄, 거의 그렇지 않습니다. 커널이 초기화되면 초기 실행 프로세스의 루트 역할을 하는 Mounted ramfs
라는 최소 파일 시스템 인스턴스가 있습니다 . 옵션 매개변수의 실제 해석은 이름이 지정된 루틴에서 수행됩니다 . 지원되는 구문 중 하나는 format 입니다 .rootfs
start_kernel()
root
name_to_dev_t()
/dev/name
이름sysfs
루트 디렉터리에 파일 시스템을 임시로 마운트 rootfs
하고 일치하는 블록 장치 항목을 찾는 방식으로 설명됩니다.이름아래에 /sys/block
. 이 과정은 더 자세히 설명되어 있습니다여기.
설명된 설정에서는 먼저 최소 환경(예: 제공되는 환경)으로 부팅하고 initrd
임시 마운트 지점에서 실제 루트 파일 시스템을 마운트한 다음 사용할 루트 디렉터리를 변경해야 합니다./dev/sda1
/mnt/rootfs
/mnt/rootfs/chroot
pivot_root(8)
.
이는 루트 파일 시스템의 방식과 다소 유사합니다.Linux 컨테이너(LXC) 설정되었습니다. LXC는 Linux용 운영 체제 수준 가상화 구현입니다. 운영 체제 수준 가상화는 하이퍼바이저로 관리되는 전체 가상화에 대한 가벼운 대안으로 가상 호스팅 환경에서 자주 사용됩니다. 운영 체제 수준 가상화에서는 단일 운영 체제 커널이 격리된 여러 사용자 공간 인스턴스 간에 공유됩니다. 흔히 컨테이너라고 불리는 각 인스턴스, 감옥,가상 사설 서버(VPE) 또는가상 환경(VE)는 기본적으로 호스트 시스템의 자체 디렉터리에 있는 별도의 운영 체제 설치입니다.
답변3
예,Btrfs 하위 볼륨을 사용하여 이를 달성할 수 있습니다..
먼저 당신이 필요합니다여기에 설명된 대로 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
이제 이름이 지정된 하위 볼륨이 있습니다.경로/대상/chroot. 당신은 그것을 확인할 수 있습니다sudo btrfs subvol list /
이제 grub에서 부팅-하위 볼륨 레코드를 생성할 수 있습니다. rootflags=subvol=path/to/chroot
grub 메뉴 항목에서 Linux 커널 로딩 문자열을 추가하거나 다음을 사용하세요 .이것자동 감지.