З GRUB2 завантажте ISO у логічному томі LVM2


8

tl; dr - Чи можливо завантажуватися з файлу .iso, який знаходиться в незашифрованому логічному томі lmv2? Як?

Я намагаюся налаштувати це у віртуальній машині VirtualBox, перш ніж зробити це реально зі своїм ноутбуком. У мене встановлено наступне:

  • 4 gpt перегородки
    • gpt1 - завантаження 2M ef02 bios
    • gpt2 - 5G незашифрований не-lvm, для даних про різне, ізо-і т.д.
    • gpt3 - 5G незашифрований lvm, для / boot, iso та ін.
    • gpt4 - залишився, lvm, зашифрований dm-crypt / luks, для root, swap, home тощо.
  • У gpt2 у мене є копії поточних Arch та ISO Xubuntu
  • у gpt3 у мене є lvm2 lv з тими ж копіями тих самих iso

У мене є такі роботи:

  • в gpt4, функціонуючі установки Arch та Xubuntu (і хотіли б додати інші дистрибутиви в інші логічні томи в якийсь момент)
  • grub2, встановлений з Arch on / dev / sda
  • використовуючи команду configfile grub2, може перемикатися та завантажуватися з обох меню grub2 дистрибутива
  • може завантажувати iso з меню grub з не-lvm gpt2

Що я хотів би зробити, це завантажуватися з iso в gpt3 lvm (і, зрештою, навіть не мати не-lvm gpt2 розділу).

Мій запис про грунт:

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 лінії зворотного зв'язку вказують на 2 різні копії одного і того ж ізо. У командному рядку grub я перевірив, що обидва рядки циклу працюють.

Під час завантаження з iso в не-lvm-розділі все працює добре.

Під час завантаження з iso в розділі lvm завантаження запускається і з часом отримує цю помилку:

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

Для запису арки:

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
}

завантаження з gpt2 iso працює, але я не знаю, що змінити "/ dev / sda2" на lvm для завантаження.


EDIT: Чи можна це зробити? Для будь-якого офіційного файлу .iso поточного дистрибутива Linux? Федора? Debian? openSUSE? CentOS?

Це неможливо? Або це щось, про що ніхто не думав спробувати раніше?


EDIT2: Моя щедрість вже давно минула, і через 9 місяців я припускаю, що це неможливо з будь-яким дистрибутивом Linux. Залишаю питання відкритим, але сумніваюся, що найближчим часом буде робоче рішення будь-коли.

Відповіді:


1

Використовуючи Fedora 21 ISO, я просто успішно спробував таке:

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 скаже Linux завантажувати всі LVM та виконувати пошук у скануванні .


UUID в рядку , яка починається з searchє одним з логічного тому, що містить файл ISO, НЕ так? Щоб його отримати, ви повинні зробити sudo blkid.
Ерік

Це можна зробити набагато простіше, дивіться мою відповідь щодо завантаження Fedora та Ubuntu з LVM.
Ерік

1

Натхненний цим простим рішенням для Ubuntu , я використав наступне, що працює для завантаження iso Fedora 27 KDE та iso Ubuntu 17.10.

Я просто додав у файл наступні рядки /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
}

Пояснення

  • Рядок, що починається з, set iso_pathвизначає шлях, де файл логіки можна знайти в логічному томі. Коли я запускаю свою систему, вона лежить /home/erik/Downloads/transmission/Fedora-KDE-Live-x86_64-27/Fedora-KDE-Live-x86_64-27-1.6.iso", але /homeце встановлений логічний том, тому я залишаю це поза і починаю шлях/erik/Downloads/…
  • Рядок, що починається з, searchмає в кінці дивну буквено-числову змінну (так званий UUID), що починається з 6340. Я отримав цей номер від команди

    sudo blkid
    

    що дало мені, поряд з іншими, наступний рядок

    /dev/mapper/fedora_pluto-home: UUID="6340d364-fc09-44d1-914f-b902a6394a55" TYPE="ext4"
    
  • Потім, ще одна важлива річ, якщо ви хочете завантажувати інші ізо файли, - це рядки, які починаються з linuxі initrd. Я отримав їх, відкривши файл iso з file-roller(gui для вилучення стислих архівів) або mc(файловий менеджер консолі).

    • Fedora та подібне: Там ви переходите до каталогу /isolinux, де ви знайдете файл з назвою isolinux.cfg. Там я знайшов деякі рядки, що починаються з label, а під ними наступні важливі рядки

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

      які ви використаєте для заповнення останніх двох рядків моєї груб2 menuentry.

    • Ubuntu та подібне: там ви переходите до каталогу /boot/grub, де ви знайдете файл з назвою grub.cfg. Тут ви знайдете рядки, що починаються з menuentry, а під ними наступні важливі рядки

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

      яку ви можете просто скопіювати.


0

Я думаю, що це не можливо для офіційного файлу більшості дистрибутивів.

Помилка, яку ви отримуєте:

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

означає, що під час завантаження жива система, яку ви запускаєте, шукає диск CD / DVD і не знаходить жодного.

Живі компакт-диски не налаштовані для пошуку джерела iso на LVM; Ви можете, можливо, змінити сценарії завантаження зображення, щоб це зробити, але я не думаю, що жоден поточний офіційний дистрибутивний файл .iso робить це. Ви можете спробувати зв’язатися з улюбленими дистрибутивами дистрибутива, щоб інтегрувати це, можливо?


Це є можливим, побачити мій просту відповідь, де я завантажитися з Fedora 27 і Ubuntu 17.10.
erik

0

Ви можете спробувати це:

Додайте це на початку меню:

insmod lvm

Потім вкажіть свій LVM-розділ за допомогою:

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

Тож ваш запис Xubuntu ISO буде таким:

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
}

Будь ласка, внесіть необхідні виправлення.

Це повинно змусити GRUB розпізнавати об'єм lvm2, що дозволяє читати в ньому файл ISO. Однак, ймовірно, ISO все одно не знайдеться ...


Я спробував ваші пропозиції, але, як ви сказали, ізо все ще не знайдено.
знімок

0

Тільки крапка на ньому:

ISO під час завантаження повинен монтувати iso, тому треба знати, як його знайти.

Grub2 може бачити ISO з командами insmod ..., але це не робить нічого іншого, як нехай Grub2 читає всередині ISO, циклічно встановлює його тощо, але як тільки Linux всередині ISO запускає LVM / LUKS / цикл / і т.д. не там (не встановлено), сценарії завантаження всередині ISO повинні знати, як встановити цю петлю LVM / LUKS /; тому, якщо той Linux не готовий до цього, завантажитися з нього не вдасться.

Зразок без LVM, LUKS тощо ... якщо звичайний Linux LiveCD ISO не призначений для пошуку та монтажу циклу до файлу .iso під час завантаження, завантажувати його з Grub2 (з .iso як a файл).

У таких випадках вам потрібен апаратний емулятор CD / DVD (якщо він є реальним обладнанням) або просто встановити .iso на віртуальний CD / DVD-блок віртуальної машини.

Іншим варіантом, звичайно, є "редагування" такого ISO, щоб включити під час завантаження деякі сценарії для пошуку та встановлення LVM / LUKS / тощо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.