Từ GRUB2, khởi động ISO theo khối lượng logic LVM2


8

tl; dr - Có thể khởi động từ tệp .iso nằm trong một khối logic lmv2 không được mã hóa không? Làm sao?

Tôi đang cố gắng thiết lập điều này trong VirtualBox VM trước khi tôi thực hiện điều đó với máy tính xách tay của mình. Tôi có các thiết lập sau:

  • Phân vùng 4 gpt
    • gpt1 - 2M ef02 bios khởi động
    • gpt2 - 5G không được mã hóa không lvm, đối với dữ liệu linh tinh, iso, v.v.
    • gpt3 - lvm không được mã hóa 5G, cho / boot, iso, v.v.
    • gpt4 - còn lại, lvm, được mã hóa bằng dm-crypt / luks, cho root, trao đổi, nhà, v.v.
  • trong gpt2, tôi có các bản sao của Arch hiện tại và Xubfox
  • trong gpt3, tôi có một lvm2 lv với cùng các bản sao của cùng một iso

Tôi có các công việc sau:

  • trong gpt4, cài đặt chức năng của Arch và Xubfox (và muốn thêm các bản phân phối khác vào các khối logic khác tại một số điểm)
  • grub2 được cài đặt từ Arch trên / dev / sda
  • sử dụng lệnh configfile của grub2, có thể chuyển đổi và khởi động từ cả menu grub2 của distro
  • có thể khởi động iso từ menu grub từ gv2 không phải lvm

Những gì tôi muốn làm là khởi động từ iso trong gpt3 lvm (và cuối cùng, thậm chí không có phân vùng gpt2 không lvm nào cả).

Mục nhập của tôi là:

menuentry "Xubuntu ISO" {
  set isofile="/xubuntu-12.04.1-desktop-amd64.iso"
  # from non-lvm
  loopback loop (hd0,gpt2)$isofile
  # from lvm
  #loopback loop (vgboot-iso)$isofile
  linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
  initrd (loop)/casper/initrd.lz
}

2 dòng loopback trỏ đến 2 bản sao khác nhau của cùng một iso. Tôi đã xác minh tại dòng lệnh grub rằng cả hai dòng loopback đều hoạt động.

Khi khởi động từ iso trong phân vùng không phải lvm, mọi thứ đều hoạt động tốt.

Khi khởi động từ iso trong phân vùng lvm, khởi động bắt đầu và cuối cùng gặp lỗi này:

(initramfs) /scripts/casper-premount/20iso_scan: line 46: can't open /dev/sr0: No medium found

Đối với mục vòm:

menuentry "Arch ISO" {
  set isofile="/archlinux-2012.09.07-dual.iso"
  loopback loop (hd0,gpt2)$isofile
  #loopback loop (vgboot-iso)$isofile
  linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201209 img_dev=/dev/sda2 img_loop=$isofile earlymodules=loop
  initrd (loop)/arch/boot/x86_64/archiso.img
}

Khởi động từ gpt2 iso hoạt động, nhưng tôi không biết phải thay đổi "/ dev / sda2" để khởi động lvm.


EDIT: Điều này có thể được thực hiện? Đối với bất kỳ tệp .iso chính thức nào của distro Linux hiện tại? Fedora? Debian? mở? CentOS?

Điều này là không thể? Hay đó là điều mà không ai nghĩ sẽ thử trước đây?


EDIT2: Tiền thưởng của tôi đã hết hạn từ lâu và sau 9 tháng, tôi cho rằng điều này đơn giản là không thể với bất kỳ bản phân phối Linux nào. Tôi sẽ để ngỏ câu hỏi, nhưng tôi nghi ngờ sẽ có một giải pháp hiệu quả bất cứ lúc nào trong tương lai gần.

Câu trả lời:


1

Sử dụng Fedora 21 ISO, tôi vừa thử thành công như sau:

menuentry "Fedora 21 Live M6600" --class fedora {
    insmod part_gpt
    insmod lvm
    insmod ext2
    set vg='m6600'
    set lv='F21Live'
    set root="lvm/${vg}-${lv}"
    search --no-floppy --fs-uuid --set=root --hint=${root} 95e4eec8-c1de-4802-b821-5753de990cbe
    set isofile="/Fedora-Live-Workstation-x86_64-21-5.iso"
    echo "Using ${isofile}..."
    loopback loop $isofile
    linux (loop)/isolinux/vmlinuz0 iso-scan/filename=${isofile} root=live:CDLABEL=Fedora-Live-WS-x86_64-21-5 rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0 rd.auto=1
    initrd (loop)/isolinux/initrd0.img
}

rd.auto = 1 sẽ yêu cầu Linux tải tất cả LVM và quét iso-scan tìm kiếm chúng.


Các UUID trong dòng bắt đầu bằng searchlà một trong những logical volume có chứa các tập tin iso, phải không? Để có được nó, bạn phải làm sudo blkid.
erik

Điều này có thể được thực hiện dễ dàng hơn nhiều, xem câu trả lời của tôi để khởi động Fedora và Ubuntu từ LVM.
erik

1

Lấy cảm hứng từ giải pháp đơn giản này cho Ubuntu , tôi đã sử dụng cách sau, hoạt động để tải iso 27 KDE của Fedora và iso Ubuntu 17.10.

Tôi chỉ nối các dòng sau trong tập tin /etc/grub.d/40_custom

menuentry "Live Fedora KDE 27" --class fedora {
  insmod part_msdos
  insmod lvm
  set iso_path="/erik/Downloads/transmission/Fedora-KDE-Live-x86_64-27/Fedora-KDE-Live-x86_64-27-1.6.iso"
  search --no-floppy --fs-uuid --set=root 6340d364-fc09-44d1-914f-b902a6394a55
  loopback loop ($root)$iso_path
  linux (loop)/isolinux/vmlinuz iso-scan/filename=${iso_path} root=live:CDLABEL=Fedora-KDE-Live-27-1-6 rootfstype=auto rd.live.image quiet
  initrd (loop)/isolinux/initrd.img
}

menuentry "Ubuntu 17.10.1" --class ubuntu {
  insmod part_msdos
  insmod lvm
  set iso_path="/erik/Downloads/transmission/ubuntu-17.10.1-desktop-amd64.iso"
  search --no-floppy --fs-uuid --set=root 6340d364-fc09-44d1-914f-b902a6394a55
  loopback loop ($root)$iso_path
  linux (loop)/casper/vmlinuz.efi  file=/cdrom/preseed/ubuntu.seed boot=casper iso-scan/filename=${iso_path} quiet splash ---
  initrd (loop)/casper/initrd.lz
}

Giải trình

  • Dòng bắt đầu bằng set iso_pathđịnh nghĩa đường dẫn, trong đó tệp iso có thể được tìm thấy trên ổ đĩa logic. Khi tôi khởi động hệ thống của mình, nó nằm trong /home/erik/Downloads/transmission/Fedora-KDE-Live-x86_64-27/Fedora-KDE-Live-x86_64-27-1.6.iso", nhưng /homelà khối lượng logic được gắn kết, vì vậy tôi bỏ nó ra và bắt đầu con đường với/erik/Downloads/…
  • Dòng bắt đầu bằng searchmột biến số chữ số lạ (cái gọi là UUID) ở cuối, bắt đầu bằng 6340. Tôi đã nhận được số này từ lệnh

    sudo blkid
    

    đã cho tôi, cùng với những người khác, dòng sau đây

    /dev/mapper/fedora_pluto-home: UUID="6340d364-fc09-44d1-914f-b902a6394a55" TYPE="ext4"
    
  • Sau đó, một điều quan trọng khác nếu bạn muốn khởi động các tệp iso khác, là các dòng bắt đầu bằng linuxinitrd. Tôi đã nhận được chúng bằng cách mở tệp iso bằng file-roller(gui để trích xuất tài liệu lưu trữ nén) hoặc mc(trình quản lý tệp bảng điều khiển).

    • Fedora và tương tự: Ở đó bạn đi đến thư mục /isolinux, nơi bạn sẽ tìm thấy một tập tin được gọi isolinux.cfg. Ở đó tôi tìm thấy một số dòng bắt đầu bằng label, và bên dưới chúng là những dòng quan trọng sau

      kernel vmlinuz
      append initrd=initrd.img root=live:CDLABEL=Fedora-KDE-Live-27-1-6 rd.live.image quiet
      

      mà bạn sẽ sử dụng để điền vào hai dòng cuối cùng của grub2 menuentry.

    • Ubuntu và tương tự: Ở đó bạn đi đến thư mục /boot/grub, nơi bạn sẽ tìm thấy một tệp có tên grub.cfg. Ở đây bạn sẽ tìm thấy một số dòng bắt đầu bằng menuentry, và bên dưới chúng là các dòng quan trọng sau đây

      linux   /casper/vmlinuz.efi  file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash ---
      initrd  /casper/initrd.lz
      

      mà bạn chỉ có thể sao chép.


0

Tôi nghĩ rằng không thể có tệp iso chính thức của hầu hết các bản phân phối.

Lỗi bạn gặp phải:

 (initramfs) /scripts/casper-premount/20iso_scan: line 46: can't open /dev/sr0: No medium found

có nghĩa là khi khởi động, hệ thống trực tiếp mà bạn đang bắt đầu đang tìm kiếm ổ đĩa cd / dvd và không tìm thấy bất kỳ ổ đĩa nào.

CD trực tiếp không được định cấu hình để tìm kiếm iso nguồn của chúng trên LVM; bạn có thể sửa đổi các tập lệnh khởi động của hình ảnh để làm điều đó, nhưng tôi không nghĩ rằng bất kỳ tệp .iso chính thức nào hiện hành đều làm điều đó. Bạn có thể thử liên hệ với nhà phát triển yêu thích của bạn để có thể tích hợp được không?


có thể, xem câu trả lời đơn giản của tôi, nơi tôi khởi động từ Fedora 27 và Ubuntu 17.10.
erik

0

Bạn có thể thử điều này:

Thêm phần này vào lúc bắt đầu thực đơn:

insmod lvm

Sau đó, chỉ định phân vùng LVM của bạn với:

set lvmpart=lvm/<lvm_group_name>-<lvm_logical_partition_name>

Vì vậy, mục nhập Xubfox ISO của bạn sẽ như thế này:

menuentry "Xubuntu ISO" {
  insmod lvm
  set lvmpart=lvm/<lvm_group_name>-<lvm_logical_partition_name>
  set isofile="/xubuntu-12.04.1-desktop-amd64.iso"
  loopback loop $lvmpart$isofile
  linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
  initrd (loop)/casper/initrd.lz
}

Hãy sửa chữa khi cần thiết.

Điều này sẽ khiến GRUB nhận ra âm lượng lvm2, giúp có thể đọc tệp ISO trong đó. Tuy nhiên, có lẽ ISO vẫn sẽ không được tìm thấy ...


Tôi đã thử đề xuất của bạn, nhưng như bạn đã nói, iso vẫn không được tìm thấy.
snapshoe

0

Chỉ cần một điểm trên đó:

ISO khi khởi động phải gắn iso, vì vậy phải biết cách tìm nó.

Grub2 có thể thấy ISO với các lệnh insmod ..., nhưng điều đó không có gì khác ngoài việc để Grub2 đọc bên trong ISO, gắn kết vòng lặp, v.v., nhưng ngay khi Linux bên trong ISO khởi động LVM / LUKS / loop / etc không có (không được gắn kết), các tập lệnh khởi động bên trong ISO phải biết cách gắn kết vòng lặp LVM / LUKS / đó; Vì vậy, nếu Linux không được chuẩn bị để làm như vậy, nó sẽ không thể khởi động từ nó.

Mẫu không có LVM, LUKS, v.v ... nếu Linux LiveCD ISO bình thường không được thiết kế để tìm kiếm và gắn vòng lặp vào tệp .iso trong khi khởi động, sẽ không bao giờ có thể khởi động vào nó từ Grub2 (với .iso là một tập tin).

Đối với những trường hợp như vậy, bạn cần một trình giả lập CD / DVD phần cứng (nếu trên phần cứng thực) hoặc chỉ cần gắn .iso trên đơn vị CD / DVD ảo của máy ảo.

Tất nhiên, tùy chọn khác là 'chỉnh sửa' ISO đó để kết hợp khi khởi động một số tập lệnh để tìm kiếm và gắn LVM / LUKS / v.v.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.