บูตเป็น chroot หรือไม่?


13

ฉันติดตั้ง Linux (Debian Jessie) บนฮาร์ดไดรฟ์แล้ว Drive - sda1, ext4fs และsda2- swap

ฉันมี/chrootโฟลเดอร์ มีการติดตั้งระบบอื่นใน/chrootโฟลเดอร์

คำถาม:

จะบอก bootmanager ได้อย่างไรให้บูตไม่ใช่ระบบหลัก (หลัก, Debian Jessie) แต่เป็นระบบใน/ chroot ? อาจมีการเปลี่ยนแปลง/menu.lstและ/chroot/etc/fstab? ( vmlinuz root=/dev/sda1/chroot?)

หรืออีกหนึ่งคำถามที่แตกต่าง: เป็นไปได้ไหมที่จะติดตั้ง linux ไม่ได้อยู่ในไดเรกทอรีรากของพาร์ติชั่น แต่อยู่ในโฟลเดอร์? ( /another_linux/bin, /another_linux/home, /another_linux/etc, ... )


1
vmlinuz root=/dev/sda1/chrootจะไม่ทำงาน initrdหนึ่งอาจจะจำลองนี้มีวิธีการคล้ายกับสิ่งที่จะใช้ในการ ดูเช่นที่นี่ คุณเมานต์/new_rootตามที่อธิบายไว้แล้วแทนที่จะcd /new_rootทำcd /new_root/chrootและทำต่อ
n คำสรรพนาม 'm

คำตอบ:


7

สิ่งนี้ไม่สามารถทำได้โดย bootloader หรือเคอร์เนล พารามิเตอร์rootตัวเลือกเคอร์เนลเช่นในroot=/dev/sda1ดูเหมือนว่าชื่อพา ธ Unix มาตรฐาน แต่ชื่อพา ธ ดังกล่าวจะถูกตีความตามระบบไฟล์ที่ติดตั้งในปัจจุบัน ในเวลานั้นrootตัวเลือกถูกตีความไม่มีระบบไฟล์ที่เมาท์ เกือบจะไม่มีเลย ในช่วงเวลาเริ่มต้นเคอร์เนลมีตัวอย่างของน้อยที่สุดramfsระบบแฟ้มที่เรียกว่าติดตั้งเป็นรากสำหรับกระบวนการเริ่มต้นการทำงานrootfs start_kernel()ในความหมายที่แท้จริงของพารามิเตอร์ตัวเลือกที่จะทำในชีวิตประจำที่เรียกว่าroot name_to_dev_t()หนึ่งในไวยากรณ์ที่สนับสนุนคือ/dev/nameรูปแบบที่ชื่อถูกตีความโดยทำการเมานท์ชั่วคราวของsysfsระบบไฟล์ในrootfsรากและกำลังมองหาอุปกรณ์ป้องกันรายการที่ตรงกันชื่อ/sys/blockภายใต้ กระบวนการนี้จะมีการอธิบายในรายละเอียดเพิ่มเติมที่นี่

การติดตั้งตามที่อธิบายไว้จะต้องทำโดยการบูตครั้งแรกในสภาพแวดล้อมน้อยที่สุดเช่นให้บริการโดยinitrdติดระบบแฟ้มรากจริงจาก/dev/sda1ที่จุดเมานท์ชั่วคราวเช่น/mnt/rootfsนั้นเปลี่ยนไดเรกทอรีรากที่จะใช้/mnt/rootfs/chrootpivot_root(8)

นี่ค่อนข้างคล้ายกับวิธีการติดตั้งระบบไฟล์รูทสำหรับLinuX Containers ( LXC ) LXC เป็นการใช้งานการจำลองเสมือนระดับระบบปฏิบัติการสำหรับ Linux การทำเวอร์ชวลไลเซชันระดับระบบปฏิบัติการมักใช้ในสภาพแวดล้อมการโฮสต์เสมือนเป็นทางเลือกที่เบาไปสู่การจำลองเสมือนแบบเต็มรูปแบบที่จัดการโดยไฮเปอร์ไวเซอร์ ในการจำลองเสมือนระดับระบบปฏิบัติการเคอร์เนลระบบปฏิบัติการเดียวจะถูกใช้ร่วมกันระหว่างอินสแตนซ์พื้นที่ผู้ใช้หลายแห่ง แต่ละอินสแตนซ์มักจะเรียกว่า container, คุก, Virtual Private Server (VPE) หรือVirtual Environment (VE) เป็นหลักการติดตั้งระบบปฏิบัติการแยกต่างหากตั้งอยู่ในไดเรกทอรีของตัวเองในระบบโฮสต์


6

ฉันเจอปัญหาเดียวกันและลงเอยด้วยการเขียนสิ่งนี้เพื่อให้มันทำงานอย่างไม่เจ็บปวดในระบบที่แตกต่างกัน (เดเบียนอูบุนตูในปัจจุบัน):

รันmake_chroot_initrdสคริปต์เพื่อสร้างอิมเมจ initrd ที่เปิดใช้งาน chroot ใหม่จากอิมเมจที่มีอยู่:

#  ./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 ในฐานะ bootloader คุณสามารถเพิ่มรายการไปยัง/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
}

(เปลี่ยนไฟล์ / พาร์ติชั่นให้ตรงกับของคุณ)

การติดตั้งทั่วทั้งระบบ

เมื่อคุณพอใจแล้วคุณสามารถทำการเปลี่ยนแปลงได้อย่างถาวร
(จนกว่าแพคเกจเครื่องมือเริ่มต้นจะได้รับการอัพเกรด)
ในระบบ chrooted:

# 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

จากนี้ไปเป็นรูปเริ่มต้นปกติจะรองรับการบูตแบบ chroot
ไม่จำเป็นต้องใช้ initrd.chroot แยกจากกันซึ่งอาจทำให้ข้อมูลไม่ตรงกัน

ดูรายละเอียดที่boot_chroot


3

ใช่คุณสามารถทำเคล็ดลับการใช้ subvolumes

แรกที่คุณต้องแปลง ext4 จะ btrfs ตามที่อธิบายไว้ที่นี่

แปลง chroot ของคุณเป็น subvilume ถ้ายังไม่เป็น:

 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

ตอนนี้คุณได้ subvolume ชื่อpath / to / chroot คุณสามารถตรวจสอบกับsudo btrfs subvol list /

ตอนนี้คุณสามารถสร้างการบูตเพื่อบันทึกไดรฟ์ย่อยในด้วง เพียงแค่เพิ่มrootflags=subvol=path/to/chrootการโหลดเคอร์เนลลินุกซ์ในรายการเมนูด้วงหรือใช้สิ่งนี้เพื่อสอบสวนโดยอัตโนมัติ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.