8

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

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

  • 4 gpt разделы
    • gpt1 - 2M ef02 bios boot
    • gpt2 - 5G незашифрованный non-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. Я оставлю вопрос открытым, но я сомневаюсь, что в ближайшее время найдется рабочее решение.

5 ответов5

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 выполнит их поиск.

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
      

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

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.

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .