tl;dr - Возможно ли загрузиться с файла .iso, который находится в незашифрованном логическом томе lmv2? Как?
Я пытаюсь настроить это в VirtualBox VM, прежде чем я сделаю это на самом деле с моим ноутбуком. У меня есть следующая настройка:
- 4 раздела gpt
- gpt1 - 2M ef02 загрузка биоса
- gpt2 - 5G незашифрованный не-LVM, для различных данных, iso и т. д.
- gpt3 - незашифрованный lvm 5G для /boot,iso и т. д.
- gpt4 - оставшийся, lvm, зашифрованный с помощью dm-crypt/luks, для root,swap,home и т. д.
- в gpt2 у меня есть копии текущих образов Arch и Xubuntu
- в gpt3 у меня есть lvm2 lv с теми же копиями тех же iso
У меня работает следующее:
- в gpt4, функционирующие установки Arch и Xubuntu (и хотелось бы добавить другие дистрибутивы в другие логические тома в какой-то момент)
- grub2 установлен из Arch на /dev/sda
- используя команду configfile grub2, можно переключаться и загружаться из меню grub2 обоих дистрибутивов
- можно загрузить iso из меню grub из не-lvm gpt2
Я бы хотел загрузиться с iso-образов в gpt3 lvm (и в конечном итоге вообще не иметь раздела gpt2, отличного от 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
}
Две строки loopback указывают на две разные копии одного и того же iso. Я проверил в командной строке grub, что обе строки loopback работают.
При загрузке с 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? Fedora? 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
}
рд.авто=1сообщит Linux о необходимости загрузить все LVM иизо-сканищет их.
решение2
Вдохновленэто простое решение для Ubuntu, я использовал следующий код, который подходит для загрузки образов Fedora 27 KDE и 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
который вы можете просто скопировать.
решение3
Я думаю, что это невозможно для официальных iso-файлов большинства дистрибутивов.
Ошибка, которую вы получаете:
(initramfs) /scripts/casper-premount/20iso_scan: line 46: can't open /dev/sr0: No medium found
означает, что при загрузке запускаемая вами система ищет CD/DVD-привод и не находит его.
Live CD не настроены на поиск своего исходного iso на LVM; вы, возможно, можете изменить загрузочные скрипты образа, чтобы сделать это, но я не думаю, что какой-либо официальный .iso-файл текущего дистрибутива делает это. Вы можете попробовать связаться с разработчиками вашего любимого дистрибутива, чтобы они интегрировали это, возможно?
решение4
Просто хочу обратить ваше внимание на это:
При загрузке ISO-образ должен быть смонтирован, поэтому нужно знать, как его найти.
Grub2 может видеть ISO с помощью команд insmod..., но это не делает ничего, кроме как позволяет Grub2 читать содержимое ISO, монтировать его в цикле и т. д., но как только Linux внутри ISO запускается, LVM / LUKS / loop / и т. д. отсутствует (не смонтирован), загрузочные скрипты внутри ISO должны знать, как монтировать этот LVM / LUKS / loop; поэтому, если этот Linux не готов к этому, загрузиться с него будет невозможно.
Пример без LVM, LUKS и т. д. Если обычный Linux LiveCD ISO не предназначен для поиска и монтирования цикла в файл .iso во время загрузки, загрузиться в него из Grub2 (с .iso в качестве файла) никогда не получится.
В таких случаях вам понадобится аппаратный эмулятор CD/DVD (если вы используете реальное оборудование) или просто смонтируйте .iso на виртуальном CD/DVD-устройстве виртуальной машины.
Другой вариант, конечно, заключается в «редактировании» такого ISO-образа с целью включения в загрузку некоторых скриптов для поиска и монтирования LVM / LUKS и т. д.