Мнение Общественности |
Оценка Проекта
Всего ответов: 2940
|
Статистика |
|
|
grub + grub4dos + ElTorita iso
| |
Scampada | Дата: Понедельник, 23.03.2015, 22:58 | Сообщение # 1 |
Неизвестный
Группа: Пользователи
Сообщений: 8
Статус: Отсутствует
| Я пытаюсь собрать следующую связку. Основной загрузчик у меня grub 2.0. Менять его я ни на что не планирую, т.к. редактировал исходники и собирал вручную, чтобы сделать кастомную тему. Я хочу сделать в нем пункт, в котором я смогу загрузить из iso лайв-дистрибутив, в частности сейчас, например Arch Linux. В этом образе используется ElTorito загрузчик, и просто найти там vmlinuz и initrd нельзя, initrd там нет, как-то иначе устроено. Я сделал одним из пунктов grub переход в grub4dos, в котором выполнял следующие шаги:
map --mem [...] (hd0,4)/bootimages/arch.iso (0xff) map --hook root (0xff) chainloader (0xff) boot
После этого у меня действительно появилось загрузочное меню лив-дистрибутива Арча, правда, если грузить с флешки, то сначала там показывает картиночку с болванкой и надписями Welcome\Bienvenue\Добро пожаловать, а потом уже меню, а здесь картинку почему-то не показало... Ну ладно. В общем выбрал я в меню Арча пункт Load Arch Linux x86_64, и началась загрузка, причем из-за того, видимо, что маппил в память -- довольно шустро. Но уже очень скоро все вывалилось вот в такую ошибку:
Цитата Waiting 30 seconds for device /dev/disk/by-label/ARCH-201503 ... ERROR: '/dev/disk/by-label/ARCH-201503' device did not show up after 30 seconds... Falling back to interactive prompt sh: can't access tty; job control turned off
Я не настолько крут, чтобы сходу понять, что здесь не так. Ведь вроде я смаппил образ, как в примерах было указано, и он начал грузиться, но... что-то в его среде исполнения оказалось не соответствующим настройкам... Может ли кто-нибудь подсказать, почему так и как это можно решить?
|
|
| |
Atlant | Дата: Понедельник, 23.03.2015, 23:22 | Сообщение # 2 |
Эксперт
Группа: Проверенные
Сообщений: 2210
Статус: Отсутствует
| Пробуй гибридную загрузку образа: Цитата title Some of Linux partnew (%@root:~1,3%,3) 0x00 /Boot/Linux.iso map /Boot/Linux.iso (0xff) map --hook chainloader (0xff) - Образ должен быть дефрагментирован - Wincontig в помощь. - Grub4Dos этого года. - Жирным выделена цифра, которая означает номер в таблице разделов (от 0 до 3), используемый для гибридной загрузки ISO. В примере меню это 4-я позиция таблицы разделов, и если там уже есть раздел с инфой то он будет затерт! Поэтому внимательно выбери свободную позицию в таблице разделов.
|
|
| |
Scampada | Дата: Вторник, 24.03.2015, 00:37 | Сообщение # 3 |
Неизвестный
Группа: Пользователи
Сообщений: 8
Статус: Отсутствует
| Спасибо за ответ. В примере предполагается, что образ лежит на том же разделе, что и grub4dos? Можно сделать partnew (%@root:~1,3%,3) 0x00 (hd0,5)/Boot/Linux.iso, или тут по-другому? Я просто не понял, откуда в примере берется образ, вернее, понял, что из корня, но там нет команды, устанавливающей корневой раздел, вот я и запутался. И что такое %@root:~1,3% ?Добавлено (23.03.2015, 23:50) --------------------------------------------- Этот способ несет потенциальную угрозу только для внутреннего содержимого раздела, он не может нарушить целостность таблицы разделов или их физического расположения? Добавлено (24.03.2015, 00:32) --------------------------------------------- Тьфу ты. Так у меня еще и g4d 09 года. Тогда понятно, что там что-то может не работать. Может быть, даже и предложенный способ не придется использовать, если накатить актуальную версию. Добавлено (24.03.2015, 00:37) --------------------------------------------- Однако, нет, grub4dos latest version показывает как раз имеющуюся у меня -- 0.4.4 от 2009. На sourceforge по крайней мере. Сейчас поищу на других источниках... Последняя версия которую я смог найти, датирована январем 2014, пойдет? 0.4.6а
|
|
| |
Atlant | Дата: Вторник, 24.03.2015, 01:32 | Сообщение # 4 |
Эксперт
Группа: Проверенные
Сообщений: 2210
Статус: Отсутствует
| Цитата Scampada ( ) В примере предполагается, что образ лежит на том же разделе, что и grub4dos? Да, хотя можно указать и другой раздел. Переменная %@root% (пример ее значения - (hd0,0)) означает текущий рутовый раздел, обычно после загрузки меню это раздел где находиться Grub4Dos. В grldr и grub.exe есть внутреннее меню которое ищет на устройствах menu.lst, и раздел/устройство на котором файл-меню будет найден первым станет рутовым и менюшки будут загружены. (%@root:~1,3%) у большинства пользователей загрузочных флешек/USB-HDD будет означать (hd0,3) - четвертый основной раздел и скорее всего он не используется. А в меню я пишу (hd0,3) в виде переменной (%@root:~1,3%), на случай если у пользователя флешка/USB-HDD отформатирована или определиться глючным биосом как флоп - (fd0). Тогда Grub4Dos не похерит раздел на первом винчестере, как случилось бы если в меню написать - partnew (hd0,3) 0x00 /Boot/Linux.iso. Почитай нумерацию устройств Grub4Dos-а.
Цитата Scampada ( ) Этот способ несет потенциальную угрозу только для внутреннего содержимого раздела, он не может нарушить целостность таблицы разделов или их физического расположения? Команда partnew пишет в таблицу разделов номер начального сектора образа и их общее количество. Данные о предыдущем основном/расширенном разделе в записываемой ячейки Таблицы разделов затираются.Добавлено (24.03.2015, 01:32) ---------------------------------------------
Цитата Scampada ( ) Так у меня еще и g4d 09 года. Обновись до последней сборки 0.4.5с, это стабильная ветка.
Цитата Scampada ( ) Может быть, даже и предложенный способ не придется использовать, если накатить актуальную версию. С простым мапингом образа линукс не заработает, тут нужна гибридная загрузка ISO или передача пути+имени образа через параметр ядра (если конечно линукс поддерживает такую опцию), пример: Цитата title Install Ubuntu map /Boot/ubuntu-14.04-desktop-i386.iso (0xff) map --hook kernel (0xff)/casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper only-ubiquity iso-scan/filename=/Boot/ubuntu-14.04-desktop-i386.iso quiet splash -- initrd (0xff)/casper/initrd.lz
Цитата Scampada ( ) Однако, нет, grub4dos latest version показывает как раз имеющуюся у меня -- 0.4.4 от 2009. На sourceforge по крайней мере. Это очень древняя версия, выше я привел ссылку на актуальный сайт где разработчик выкладывает новые версии.
|
|
| |
Scampada | Дата: Вторник, 24.03.2015, 13:07 | Сообщение # 5 |
Неизвестный
Группа: Пользователи
Сообщений: 8
Статус: Отсутствует
| Цитата Команда partnew пишет в таблицу разделов номер начального сектора образа и их общее количество. Данные о предыдущем основном/расширенном разделе в записываемой ячейки Таблицы разделов затираются. Слишком опасно для использования с винчестером, один сбой и полтеррабайта данных в опасности. Это удобно при работе с флешкой, но в том-то и заключается моя цель, чтобы иметь возможность грузиться с образов без использования флешки -- "все в одном". Если без этого не обойдется, тогда, конечно, беда. Придется отказаться от такой реализации.
Цитата С простым мапингом образа линукс не заработает, тут нужна гибридная загрузка ISO или передача пути+имени образа через параметр ядра (если конечно линукс поддерживает такую опцию), пример: Там в образе просто нет привычного механизма с vmlinuz\initrd, там есть только vmlinuz. Внутри там syslinux вроде, я что-то читал о том. что можно его цеплять из груба. То есть понял так, что можно без chainload, что ли.Добавлено (24.03.2015, 13:07) --------------------------------------------- В образе есть папка syslinux, но в ней нет syslinux.bin. Трудно понять. Добавлено (24.03.2015, 13:07) --------------------------------------------- Есть syslinux.c32
|
|
| |
JOYsticK8000 | Дата: Вторник, 24.03.2015, 13:21 | Сообщение # 6 |
Экспериментатор
Группа: Проверенные
Сообщений: 144
Статус: Отсутствует
| Scampada, Вот что подсказывает интернет Цитата Прямая загрузка из образа диска GRUB2 может загружать образы ядер ОС в том числе из файлов-образов, отображаемых в псевдоустройство командой loopback. Однако следует иметь в виду, что псевдоустройство действует только в пределах загрузчика. В общем случае загрузка из образа выглядит примерно так: Код loopback loop файл-образа linux (loop)/путь/к/vmlinuz параметры initrd (loop)/путь/к/initrd Arch Linux dual ISO В этом примере GRUB2 загружает официальный установочный образ ArchLinux. В сгенерированном меню будут варианты загрузки для обеих архитектур, имеющихся в образе – i686 и x86_64. grub.cfg Код dir= insmod regexp # для шаблонов * в именах файлов probe -s root_uuid -u $root # получаем UUID для подстановки в img_dev=
for iso in $dir/archlinux-*-dual.iso ; do # ищем образ(ы) Arch по шаблону regexp -s build 'archlinux-(.+)-dual' $iso # получаем из имени образа дату сборки for arch in i686 x86_64 ; do # делаем для обеих архитектур
menuentry "Arch Linux ISO $build $arch" --source="\ loopback loop $iso probe -s isolabel -l loop linux (loop)/arch/boot/$arch/vmlinuz archisolabel=\$isolabel img_dev=/dev/disk/by-uuid/$root_uuid img_loop=$iso earlymodules=loop initrd (loop)/arch/boot/$arch/archiso.img"
done done Файл образа с именем вида archlinux-YYYY.MM.DD-dual.iso должен лежать в корне раздела. В этом случае текст файла конфигурации можно использовать "как есть", без каких-либо правок – загрузчик сам определит конкретное имя образа (или образов), сам прочитает UUID раздела, метку образа, и при загрузке передаст всё это дистрибутиву через параметры ядра. Если же вы хотите использовать для образа (образов) особый каталог, впишите путь к нему (относительно корня раздела) в строку dir=, например Источник
|
|
| |
Atlant | Дата: Вторник, 24.03.2015, 13:24 | Сообщение # 7 |
Эксперт
Группа: Проверенные
Сообщений: 2210
Статус: Отсутствует
| Цитата Scampada ( ) Слишком опасно для использования с винчестером Просто определи - какую позицию в таблице разделов можно свободно использовать под гибридную загрузку - PartInfo в помощь.
Цитата Scampada ( ) Внутри там syslinux вроде, я что-то читал о том. что можно его цеплять из груба Лучше сразу Grub4Dos-ом запускать, минуя syslinux, потому что чем меньше костылей тем надежнее.
Дай ссылку где можно скачать образ.
|
|
| |
Scampada | Дата: Вторник, 24.03.2015, 14:23 | Сообщение # 8 |
Неизвестный
Группа: Пользователи
Сообщений: 8
Статус: Отсутствует
| Цитата Просто определи - какую позицию в таблице разделов можно свободно использовать под гибридную загрузку - PartInfo в помощь.
Я еще маны partnew не читал -- как там определяются параметры раздела. Ну, чтобы в таблице партиций не перезаписался, например, размер раздела.
Цитата Atlant ( ) Лучше сразу Grub4Dos-ом запускать, минуя syslinux, потому что чем меньше костылей тем надежнее. Да, я уже попробовал цеплять syslinux и все упало даже раньше, чем в предыдущих попытках.
Цитата Atlant ( ) Дай ссылку где можно скачать образ. https://www.archlinux.org/download/
JOYsticK8000, во, что-то подобное мне и нужно было, дело было в конкретном синтаксисе. Ну и не знал, какой запрос в гугл писать, чтоб получить именно этоДобавлено (24.03.2015, 14:23) --------------------------------------------- щас буду пробовать
|
|
| |
Atlant | Дата: Вторник, 24.03.2015, 15:26 | Сообщение # 9 |
Эксперт
Группа: Проверенные
Сообщений: 2210
Статус: Отсутствует
| Цитата Scampada ( ) Я еще маны partnew не читал -- как там определяются параметры раздела. Забыл что ParrtInfo не указывает буквы дисков. Возьми лучше BootIce, выбираешь устройство, жмешь Part Manage. Первая колонка это номер раздела, в той же нумерации что и Grub4Dos, Drive - буква раздела/логического диска.
|
|
| |
Scampada | Дата: Вторник, 24.03.2015, 16:38 | Сообщение # 10 |
Неизвестный
Группа: Пользователи
Сообщений: 8
Статус: Отсутствует
| Цитата Atlant ( ) Забыл что ParrtInfo не указывает буквы дисков. Возьми лучше BootIce, выбираешь устройство, жмешь Part Manage. Первая колонка это номер раздела, в той же нумерации что и Grub4Dos, Drive - буква раздела/логического диска. По ссылке только билды для винды, попозже погуглю под другие платформы.
JOYsticK8000, ваш рецепт пригодился, сделал на его основе один попроще, для загрузки одного конкретного варианта.
Цитата iso=(hd0,msdos5)/bootimages/arch.iso probe -s root_uuid -u $root loopback loop $iso probe -s isolabel -l loop linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=\$isolabel img_dev=/dev/disk/by-uuid/$root_uuid img_loop=$iso earlymodules=loop initrd (loop)/arch/boot/x86_64/archiso.img boot То есть это помогло мне начать загрузку без grub4dos. Но спустя некоторое время вывалился в
Цитата ::Setup a loop device from '(hd0,msdos5)/bootimages/arch.iso' located at device '/dev/disk/by-uuid/1ea8...' ::mounting '/dev/disk/by-uuid/1ea8...' to '/run/archiso/img_dev' ::Device '...' mounted successfully losetup: /run/archiso/img_dev/(hd0,msdos5)/bootimages/archiso: failed to set up loop device: No such file or directory Где-то что-то лишнее, я пока еще поэкспериментирую, возможно, сам разберусь.Добавлено (24.03.2015, 16:38) --------------------------------------------- Возможно, не стоило делать iso=(hd0,msdos5)/bootimages/arch.iso
|
|
| |
Atlant | Дата: Вторник, 24.03.2015, 17:43 | Сообщение # 11 |
Эксперт
Группа: Проверенные
Сообщений: 2210
Статус: Отсутствует
| Написал менюшки загрузки без гибридного монтирования образа.
Цитата Scampada ( ) Возможно, не стоило делать iso=(hd0,msdos5)/bootimages/arch.iso Нужно так писать - img_loop=/bootimages/arch.iso, это же команда поиска образа.
|
|
| |
Scampada | Дата: Вторник, 24.03.2015, 18:26 | Сообщение # 12 |
Неизвестный
Группа: Пользователи
Сообщений: 8
Статус: Отсутствует
| Цитата Atlant ( ) Нужно так писать - img_loop=/bootimages/arch.iso, это же команда поиска образа. То есть оно, вроде, при этом ищет заданный путь на всех разделах? Не нужно номер раздела указывать?
|
|
| |
Atlant | Дата: Вторник, 24.03.2015, 19:58 | Сообщение # 13 |
Эксперт
Группа: Проверенные
Сообщений: 2210
Статус: Отсутствует
| Ищет на всех разделах, всех устройств.
|
|
| |
Scampada | Дата: Вторник, 24.03.2015, 23:52 | Сообщение # 14 |
Неизвестный
Группа: Пользователи
Сообщений: 8
Статус: Отсутствует
| Короче. Все в результате зафурычило вот так:
Код loopback loop (hd0,msdos5)/bootimages/arch.iso linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=\ARCH_201503 img_dev=/dev/disk/by-id/wwn-0x50014ee2b0b09217-part5 img_loop=bootimages/arch.iso earlymodules=loop initrd (loop)/arch/boot/x86_64/archiso.img Да, да, именно так. Потому что по uuid img_dev упорно монтироваться не хотел (ошибка про Waiting 30 seconds...), а id probe не даёт (почему?). Пришлось вписать вручную. Еще более смешным оказалось то, что когда ядро стало получать id раздела вместо uuid, оно нашло новый способ увильнуть от работы: оно не нашло
Цитата /dev/disk/by-label/$isolabel: No such file or directory Это как вообще понимать? Ну, что поделать: пришлось мне и $isolabel заменить на ARCH_201503... После этого я наконец перестал вываливаться в "interactive prompt". Теперь можно накатывать систему с iso-шников без использования USB. Счастье-то какое.
|
|
| |
Atlant | Дата: Среда, 25.03.2015, 22:23 | Сообщение # 15 |
Эксперт
Группа: Проверенные
Сообщений: 2210
Статус: Отсутствует
| Цитата Scampada ( ) Это как вообще понимать? Ты не объявил переменную $isolabel, вот grub2 и записал вместо значения переменной ее имя.
|
|
| |
|
|