Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Загрузочная флешка штатными средствами  (Прочитано 30896 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« : 14-05-2016 09:29 » 

Добрый день.

Появилась идея идти в ногу со временем и подсобрать весь инструментарий с CD и DVD дисков в одну флешку. Проблемы следующие:
1. Создание загрузочной флешки с образа диска. Нет желания использовать программы, вроде, unetbootin или rufus. Теоретически полагаю, что штатных средств должно быть достаточно. Прочёл в интернете, что "dd", позволяет точно копировать содержимое, однако копирование "dd if="source.iso" of=/dev/sdx" создаёт странный эффект: lsblk показывает, что устройство лишь одно, например, sdb, sdc... без разметки секций sdb1, sdc1... fdisk это подтверждает, секций нет, но Linux видит флешку и её монтирует. При попытке загрузиться с неё вылетает ошибка ...DISK FAILURE... Далее, при создании секции заблаговременно, например, ntfs, и последующем "dd if="source.iso" of=/dev/sdxn". Происходит запись, всё монтируется, всё видится, но загрузки нет, попытка установить в секции флаг загружаемости дело не меняет. В общем, что-то из виду упускается.
2. Создание нескольких секций на флешке. Хотелось бы, конечно, чтобы она несла и несколько систем на себе. Тем не менее, даже в простом варианте с записью данных, Windows видит лишь первую секцию, Linux видит всё, первое намекает уже на особенности, возможно, здесь тоже что-то не понимаю. А возможно, существует какой-нибудь загрузчик или способ, позволяющий использовать разные образы дисков с флешки?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 14-05-2016 11:55 » 

ISO (ISO-9660) — файловая система для CD.
Во-первых, флешка — обычное блочное устройство как и HDD и загрузка с него делается через самый первый сектор. Далее зависит от системы: с таблицей партиций или без. Обычно флешка имеет таблицу партиций с единственной партицией (потому, что тупые системы типа винды не рассматривают другие партиции).

Напомню цепочку загрузки с HDD:
- BIOS грузит MBR и запускает в нем исполнение кода.
- Код MBR подгружает и запускает загрузчик.
- Загрузчик выбирает, какую партицию дальше грузить, нужно ли загрузить следующий уровень загрузчика или можно справиться самостоятельно.

На практике лучше иметь несколько флешек, чем все на одной. Надежнее и проще.
« Последнее редактирование: 14-05-2016 13:02 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 14-05-2016 14:44 » 

Спасибо. Скорее всего несколько флешек лучше, просто пытаюсь разобраться для себя.

Так как поступить? Предположим в образе установочного диска есть загрузчик, имя его известно.
1. Должен ли загрузчик на устройстве располагаться монолитно (сектор за сектором с начала до конца) или может располагаться согласно файловой системе? То есть, можно ли его записывать самостоятельно или нужно делать это каким-то особенным образом?
2. Предположим загрузчик записан как надо, остаётся правильно прописать MBR можно ли это сделать каким-то штатным образом из командной строки, например.
3. При установке Linux на компьютер приходится настраивать загрузчик, например, GRUB. Можно ли его установить на флешку, но использовать не как стартер ядра ОС, а как селектор других загрузчиков на флешке. Например, в первой партиции я запишу образ Windows, во второй дистрибутив Linux. При загрузки BIOS стартует MBR->GRUB, а тот уже передаёт управление либо партиция 1, какой-нибудь bootnt(?), либо партиция 2 с его загрузчиком ядра Linux.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 14-05-2016 15:30 » 

Сначало разбиваеш флешку на партции. С помошью утилиты fdisk. Форматировать в принципе не нужно. Так как ты будеш затем на эти партиции загонять образы при помоши dd. Исталируеш GRUB. Заливаеш образы. И настраиваеш GRUB на образы.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 14-05-2016 17:01 » 

ОК. Предположим мне нужно залить два образа, тогда партиций нужно три? Третья под GRUB? И форматировать её придётся, под что? Второе: Windows видит только первую партицию, значит первая под Windows, вторая под Linux, третья под GRUB и прочее. GRUB сам найдёт любой загрузчик в образе подобно тому, как находит ядро ОС при установке? Или прописать конкретно?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #5 : 14-05-2016 17:17 » 

GRUB садится на MBR + любой раздел. Как правило в директорию /root/GRUB/. Там будут хранится конфигурационные файлы. Первый граб нужно было прописывать ручками конфигурацию. Во втором, есть скрипт автоконфигурации. Точнее погугли "man GRUB". Главная проблема Linux, настроил и забыл. Через года три или четыре приходится снова доки читать.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 14-05-2016 17:20 » 

Спасибо.) Сейчас читаю https://wiki.archlinux.org/index.php/GRUB, буду пробовать.
Записан
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 15-05-2016 18:57 » 

Что сделано:
- разбил флешку (16G(sdd)) на три секции (6G(sdd1)+6G(sdd2)+остаток(sdd3))
- dd if="Windows_source".iso of=/dev/sdd1
- dd if="Linux_source".iso of=/dev/sdd2
- sdd3 отформатировал и попробовал установить grub
mount /dev/sdd3 /mnt/usb
grub-install --boot-directory=/mnt/usb /dev/sdd
Вышло несколько предупреждений и одна ошибка, как понял ему нужно ставиться в первую секцию(партицию) диска. Прочёл, что пишут люди, проблема решается добавлением ключа --force. Ошибки остались, но всё установилось.
- grub-mkconfig -o /mnt/usb/boot/grub/grub.cfg
В результате были найдено только ядро моей текущей системы и прописано. Попробовал перезагрузиться, загрузка с флешки пошла, grub заработал, выдал мой вариант ядра. Его выбор загрузил систему в штатном режиме - сам этот факт говорит о некой работоспосбности, но загрузчики с образом дисков пока не нашёл. Может, перемонтировать их в /mnt, по умолчанию их автоматом монтируют в /run? С прописыванем вручную пока разбираюсь - немного непонятно: конфигурация опирается на системные sda, sdb, sdd... но в другом компьютере нумерация может измениться, стоит ли опираться на UUID?
Ещё вопрос по самому grub, когда grub-mkconfig создаёт файл конфигурации, то путь к нему он сам прописывает внутри загрузчика? Иными словами, как загрузчик находит свой конфигурационный файл?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #8 : 15-05-2016 19:11 » 

Во втором грабе не разбирался. В первом грабе нужно было вручную прописывать партицию, где находится его конфигурация.
Нужно опираться на UUID дисков. Они как правило уникальны в любой системе. Как ты сам правильно заметил, буквы у дисков могут отличаться. Даже в пределах одной системы.

Для второго граба, насколько я помню есть конфигурационный файл, на основе которого скрипт строит и ишет подключаемые партции.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #9 : 15-05-2016 19:22 » 

Сейчас у себя посмотрел. Вся конфигурация перенесена в /etc.
В самом автоматически сконфигурируемом скрипте есть такая надпись
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

Следовательно тебе нужно шаманить в каталоге /etc/grub.d  или с файлом /etc/default/grub относительно естественно, если бы твой третий раздел был бы рутом.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 15-05-2016 19:35 » 

Тут схема похожая, когда выполняется:
grub-install --boot-directory=/mnt/usb /dev/sdd
то загрузчик прописывается в MBR на диске sdd, а его модули и прочее располагается в /mnt/usb, то есть фактически в /dev/sdd3. Монтирование обязательно, указание без монтирования /dev/sdd3 ведёт к ошибке.
В команде:
grub-mkconfig -o /mnt/usb/boot/grub/grub.cfg
положение grub.cfg можно задать любое, вот и интересно как он его находит?
В grub.cfg, как понял можно вручную добавить
menuentry "Windows" {
chainloader (hd3,1)+1
}
Пока ещё не совсем разобрался в синтаксисе этой команды. Ещё есть команда ntldr - как бы запуск загрузчика Windows, полагаю к запуску загрузчика образа диска она отношения не имеет.
Записан
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 15-05-2016 19:41 » 

Сейчас у себя посмотрел. Вся конфигурация перенесена в /etc.

Следовательно тебе нужно шаманить в каталоге /etc/grub.d  или с файлом /etc/default/grub относительно естественно, если бы твой третий раздел был бы рутом.
/etc - часть, скажем основной системы, к флешке оно отношения не имеет... Тогда из-за grub`а пришлось бы ставить весь Linux на флешку, но это получится ерунда - загрузчик грузится до ОС и её компонентов.

В этом файле grub.cfg, я понял эту надпись, как предупреждение, а не как запрет. grub-mkconfig сотрёт ручные изменения при своей работе.

Пока думаю, как chainloader настроить.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 16-05-2016 11:17 » new

Сам то chainloader настраивается не сложно. Но win7 (и наверняка все старше) при загрузке пытается перезаписать бут в MBR. С XP и ранее такого не было.
Загрузчик винды умеет загружать другие системы, но для этого ему нужен бут-сектор этой другой системы в отдельном файле на своем системном диске.
« Последнее редактирование: 16-05-2016 11:19 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 16-05-2016 16:09 » 

Не всё так просто, чтобы разобраться лучше что за чем перешёл в консоль GRUB:
там сперва посмотрел (GRUB> ls -l) как он проводит нумерацию дисков, оказалоь, что собственный диск он считает штатно (hd0), а root выставляет в месте, где находится, то есть root=(hd0,msdos3) - у меня он в третьей секции флешки. Остальные диски нумеруются по очереди, как в BIOS.
Далее, решил проверить загрузит ли он мою систему стандартным способом:
set root=(hd1,msdos1)
linux /boot/vmlinuz root=/dev/sda
boot
С некоторыми предупреждениями (не во все опции ядра я вникал) он всё запустил.

Перезагружаю, далее делаю это через chainloader:
set root=(hd1,msdos1)
chainloader +1
Тут не хочет, пишет invalid signature и всё.

Хорошо, записываю так:
set root=(hd1)
chainloader +1
Странно, ошибок нет, вызываю boot. Загружается lilo, который загружает систему штатно.

Пробую следующее:
set root=(hd0)
chainloader +1
boot
GRUB перезагружает сам себя.

После этого:
set root=(hd0,msdos1) - образ Windows setup.
chainloader +1
Также invalid signature.

insmod iso9660 дело не изменяет.

Странно, но в секцию записан iso образ то есть загрузчик должен присутствовать. Возможно, проблема во флешке - она же сама определяет какой сектор где будет храниться? Выравнивание износа... ну это теория.
Прочёл, что есть способ загрузиться через GRUB из файла iso через "loop", но это вариант плохой, Windows без эмуляторов CD или архиваторов не способен читать iso файлы, то есть даже если систему удасться поставить с iso файла находящегося на флешке, далее его невозможно будет просмотреть без установки дополнительных программ, а мало ли потом система захочет там драйвера какие поискать?
Хочется таки более прямой вариант, если он есть.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 16-05-2016 17:55 » 

Чего-то мне кажется сомнительным подход писать iso в партицию. Можно ссылку, где так рекомендуют делать?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 16-05-2016 18:51 » 

Чего-то мне кажется сомнительным подход писать iso в партицию. Можно ссылку, где так рекомендуют делать?
Сначало разбиваеш флешку на партции. С помошью утилиты fdisk. Форматировать в принципе не нужно. Так как ты будеш затем на эти партиции загонять образы при помоши dd. Исталируеш GRUB. Заливаеш образы. И настраиваеш GRUB на образы.
Но, это конечно же были рассуждения и мои предположения в том числе. Сейчас приходит понимание, что загрузчик привязан к MBR, условно, как следствие к устройству, а не его партициям.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 16-05-2016 22:54 » 

Образ HDD и образ CD - совершенно разные вещи. И то и другое — поблочные копии, но файловые системы разные. Кстати, и размеры секторов разные.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines