Пользовательского поиска
Четверг, 26.12.2024, 15:46
Приветствую Вас Гость | RSS
Главная | grub + grub4dos + ElTorita iso - Форум | Регистрация | Вход
Меню Проекта
Форма входа
Мы Рекомендуем:
Мнение Общественности
Какую файловую систему на флешке вы предпочитаете?
1. NTFS
2. FAT-16/32
3. Ext-2/3
4. Другую
Всего ответов: 4980
Статистика
GreenFlash
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: Sh1td0wn, asdqqww  
grub + grub4dos + ElTorita iso
ScampadaДата: Понедельник, 23.03.2015, 22:58 | Сообщение # 1
Неизвестный
Группа: Пользователи
Сообщений: 8
Репутация: 0
Статус: Отсутствует
Я пытаюсь собрать следующую связку. Основной загрузчик у меня 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
Репутация: 221
Статус: Отсутствует
Пробуй гибридную загрузку образа:
Цитата
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
Репутация: 0
Статус: Отсутствует
Спасибо за ответ.
В примере предполагается, что образ лежит на том же разделе, что и 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
Репутация: 221
Статус: Отсутствует
Цитата 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
Репутация: 0
Статус: Отсутствует
Цитата
Команда 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
Репутация: 0
Статус: Отсутствует
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=, например

Код
dir=/images

Источник
 
AtlantДата: Вторник, 24.03.2015, 13:24 | Сообщение # 7
Эксперт
Группа: Проверенные
Сообщений: 2210
Репутация: 221
Статус: Отсутствует
Цитата Scampada ()
Слишком опасно для использования с винчестером

Просто определи - какую позицию в таблице разделов можно свободно использовать под гибридную загрузку - PartInfo в помощь.

Цитата Scampada ()
Внутри там syslinux вроде, я что-то читал о том. что можно его цеплять из груба

Лучше сразу Grub4Dos-ом запускать, минуя syslinux, потому что чем меньше костылей тем надежнее.

Дай ссылку где можно скачать образ.
 
ScampadaДата: Вторник, 24.03.2015, 14:23 | Сообщение # 8
Неизвестный
Группа: Пользователи
Сообщений: 8
Репутация: 0
Статус: Отсутствует
Цитата
Просто определи - какую позицию в таблице разделов можно свободно использовать под гибридную загрузку - 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
Репутация: 221
Статус: Отсутствует
Цитата Scampada ()
Я еще маны partnew не читал -- как там определяются параметры раздела.

Забыл что ParrtInfo не указывает буквы дисков. Возьми лучше BootIce, выбираешь устройство, жмешь Part Manage. Первая колонка это номер раздела, в той же нумерации что и Grub4Dos, Drive - буква раздела/логического диска.
 
ScampadaДата: Вторник, 24.03.2015, 16:38 | Сообщение # 10
Неизвестный
Группа: Пользователи
Сообщений: 8
Репутация: 0
Статус: Отсутствует
Цитата 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
Репутация: 221
Статус: Отсутствует
Написал менюшки загрузки без гибридного монтирования образа.

Цитата Scampada ()
Возможно, не стоило делать iso=(hd0,msdos5)/bootimages/arch.iso

Нужно так писать - img_loop=/bootimages/arch.iso, это же команда поиска образа.
 
ScampadaДата: Вторник, 24.03.2015, 18:26 | Сообщение # 12
Неизвестный
Группа: Пользователи
Сообщений: 8
Репутация: 0
Статус: Отсутствует
Цитата Atlant ()
Нужно так писать - img_loop=/bootimages/arch.iso, это же команда поиска образа.
То есть оно, вроде, при этом ищет заданный путь на всех разделах? Не нужно номер раздела указывать?
 
AtlantДата: Вторник, 24.03.2015, 19:58 | Сообщение # 13
Эксперт
Группа: Проверенные
Сообщений: 2210
Репутация: 221
Статус: Отсутствует
Ищет на всех разделах, всех устройств.
 
ScampadaДата: Вторник, 24.03.2015, 23:52 | Сообщение # 14
Неизвестный
Группа: Пользователи
Сообщений: 8
Репутация: 0
Статус: Отсутствует
Короче. Все в результате зафурычило вот так:

 
Код
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

Это как вообще понимать? biggrin
Ну, что поделать: пришлось мне и $isolabel заменить на ARCH_201503... После этого я наконец перестал вываливаться в "interactive prompt". Теперь можно накатывать систему с iso-шников без использования USB. Счастье-то какое.
 
AtlantДата: Среда, 25.03.2015, 22:23 | Сообщение # 15
Эксперт
Группа: Проверенные
Сообщений: 2210
Репутация: 221
Статус: Отсутствует
Цитата Scampada ()
Это как вообще понимать?

Ты не объявил переменную $isolabel, вот grub2 и записал вместо значения переменной ее имя.
 
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:
Чат

Copyright GreenFlash © 2024
Рейтинг@Mail.ru