Из GRUB2 загрузите ISO-образ в логическом томе LVM2


8

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

Я пытаюсь настроить это на виртуальной машине VirtualBox, прежде чем я сделаю это по-настоящему на своем ноутбуке. У меня есть следующие настройки:

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

У меня есть следующие рабочие:

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

То, что я хотел бы сделать, это загрузиться с iso в gpt3 lvm (и, в конечном счете, даже не иметь раздел gpt2 non-lvm).

Моя запись в Grub:

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 разных копии одного и того же iso. Я проверил в командной строке 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.


РЕДАКТИРОВАТЬ: это может быть сделано? Для какого-либо официального файла .iso дистрибутива Linux? Fedora? Debian? OpenSUSE? CentOS?

Это невозможно? Или это что-то, что никто не думал попробовать раньше?


РЕДАКТИРОВАТЬ 2: Моя награда давно истекла, и через 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 и iso-scan ищет их.


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определяет путь, по которому файл iso можно найти на логическом томе. Когда я запускаю свою систему, она лежит /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"
    
  • Затем, другой важной вещью, если вы хотите загрузить другие iso-файлы, являются строки, начинающиеся с linuxи initrd. Я получил их, открыв файл iso с помощью file-roller(графический интерфейс для извлечения сжатых архивов) или 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
      

      который вы будете использовать, чтобы заполнить последние две строки моего grub2 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

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

Ошибка, которую вы получаете:

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

означает, что при загрузке живая система, которую вы запускаете, ищет диск CD / DVD и не находит его.

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


Это является возможным, увидеть мой простой ответ, где я загрузиться с Fedora 27 и Ubuntu 17.10.
Эрик

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 все еще не будет найден ...


Я попробовал ваши предложения, но, как вы сказали, iso все еще не найден.
Snapshoe

0

Просто точка на этом:

ISO при загрузке должен монтировать iso, поэтому должен знать, как его найти.

Grub2 может видеть ISO с помощью команд insmod ..., но это не делает ничего, кроме как позволить Grub2 читать внутри ISO, монтировать его в цикле и т. Д., Но как только Linux внутри ISO запускает LVM / LUKS / loop / etc не там (не смонтирован), загрузочные скрипты внутри ISO должны знать, как монтировать этот LVM / LUKS / loop; поэтому, если этот Linux не готов к этому, загрузка с него невозможна.

Пример без LVM, LUKS и т. Д. ... если обычный ISO-образ Linux LiveCD не предназначен для поиска и монтирования цикла в файл .iso во время загрузки, его загрузка с Grub2 будет невозможна (с .iso как файл).

В таких случаях вам необходим аппаратный эмулятор CD / DVD (если используется реальное оборудование) или просто смонтируйте .iso на виртуальном CD / DVD-устройстве виртуальной машины.

Другой вариант, конечно, заключается в том, чтобы «отредактировать» такой ISO для включения при загрузке некоторых скриптов для поиска и монтирования LVM / LUKS / и т. Д.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.