Intereting Posts
Как установить старые программы, расположенные на старых дистрибутивах ISO? изменение файловых сообщений не работает задержка записи в операционной файловой системе Как заменить все подстрочные индексы UTF-8 с процентным кодированием на простой текст UTF-8? Почему Dropbox говорит «Killed» в Arch Linux? Загрузочный USB с Windows не загружается в Ubuntu ls занимает много времени в небольшом каталоге Проблемы с DHCP Virtualbox Что эквивалентно «grep | разрезать "с помощью sed или awk? Обновления / приложения / пакеты для Ubuntu 10.10 без подключения к Интернету Передача параметра в dstat-плагин создание моментального снимка устройства-mapper многомерного линейного устройства объемом lvm с данными коров за пределами группы томов Блокировать страны на основе IP в брандмауэре Обратный поиск прерывает многолинейную подсказку терминала Top не показывает некоторые процессы в зависимости от пользователя

Поместите grub на виртуальный диск

Чтобы узнать о процессе запуска Linux, я поместил grub в файл образа диска и попытался выполнить загрузку с помощью qemu. В настоящее время я не помещал никакого образа ядра в диск просто grub. Я установил grub используя

kpartx -av mydrive.img losetup /dev/loop1 /dev/mapper/loop0p1 mount /dev/loop1 mnt/mydrive/ cd mnt/mydrive/boot grub-install --no-floppy --boot-directory=. -v /dev/loop0 

Я хотел пройти последовательность загрузки шаг за шагом, поэтому я ожидал, что grub заявит, что ядро ​​отсутствует, а затем я хочу исправить это, установив ядро ​​и продолжая добавлять вещи вплоть до X.

Теперь я получаю

ошибка: нет такого устройства

Но ожидаемый

Ошибка: нет файла конфигурации

form rescue prompt, ls дает

 (hd0) (fd0) 

Вопросы: * Какое устройство ищет grub? Это что-то, что относится к хост-системе? [Частично решено, UUID совпадает с UUID для виртуальной файловой системы] * Почему Grub не может найти устройство?

Все работает отлично, если я устанавливаю grub (и ничего, кроме grub) из live-cd (я выбрал Bodhi-linux, так как это небольшой двоичный дистрибутив) внутри VM. Будет ли qemu предоставить загрузочный раздел другой uuid, не используемый снаружи?

Вот таблица разделов для виртуального диска:

 Disk mydrive.img: 264 MB, 264241152 byte 32 huvuden, 63 sektorer/spår, 256 cylindrar, totalt 516096 sektorer Enheter = sektorer av 1 · 512 = 512 byte Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Diskidentifierare: 0xebe6ebdb Enhet Start Början Slut Block Id System mydrive.img1 2048 516095 257024 83 Linux 

Кажется, что модуль для такого раздела (я предполагаю, что метка раздела DOS / MBR) не установлен grub по умолчанию в core.img .

Для установки необходимого модуля также используйте следующее:

 grub-install --modules part_msdos --root-directory=. /dev/loop0 

Затем grub должен иметь возможность читать таблицу разделов, файловую систему и, следовательно, установку, содержащуюся в mnt/mydrive/boot .

В результате команда grub ls должна выводить что-то вроде:

 (hd0) (hd0,msdos1) (hd0) 

Обратите внимание, что, как заметил Джайлс, это относится только к архитектуре x86.

Задний план

Если вы хотите узнать правильный порядок, перед установкой ядра вам необходимо установить хост-систему в QEMU. Хотя этот подход кажется интуитивным для изучения процесса загрузки, это единственный рабочий путь. Позволь мне объяснить:

Бегущая система любой ОС имеет как минимум 3 части:

  1. Ядро
  2. Погрузчик
  3. Последняя загруженная ОС.

Компьютеры работают в двух режимах:

  1. Реальный режим
  2. Защищенный режим , иногда называемый неверно как виртуальный режим.

Все процессоры x86 работают в той или иной форме из этих двух режимов независимо от того, насколько они сложны и насколько быстро они работают. Подробнее см. В списке справа от статей WikiPedia, которые я связал.


Как это работает

  1. Все компьютеры запускаются в реальном режиме.
  2. В реальном режиме делаются такие вещи, как «Проверка настроек BIOS», убедитесь, что все ваши устройства подключены, и «Управление часами для синхронизации».
  3. Когда Real Mode завершает проверку, управление передается загрузчику, а также загрузчику. Загрузочный загрузчик выполняет именно то, что подразумевает его название, загружая достаточно кусочков кода для передачи управления ПК из реального режима в защищенный режим. Некоторые загрузчики достигают этого переноса в начале своего «захвата». Некоторые делают в конце, но большинство из них делают это на этапах. См. Загрузка .
  4. Как только загрузчик загружает этапы, ОС может безопасно и эффективно обрабатывать все остальные операции, так как ПК теперь находится в режиме «Постоянный защищенный режим» до следующего перезапуска.

Как это относится к Grub

Если вы посмотрите на файлы, которые были скопированы, когда вы правильно установили Grub, вы увидите файлы, содержащие текст Stage. Должно быть 3. Stage1 *, Stage1_5 * и Stage2 *

  1. Stage1 Загружает boot.img который встроен в MBR / EFI. Он настроен на подключение к дискам, а на самом конце загружает core.img
  2. Stage1_5 использует core.img для загрузки секторов 0-62, обычно называемых BootSector. Эти секторы по соглашению не содержат ничего, поэтому элементы, помещенные в них, никогда не перезаписываются и не обновляются автоматически
  3. После начала Stage_2 будут определены первые 62 сектора и путь к вашему ядру. Stage_2 загружает ядро ​​и его вспомогательные файлы, большинство из них – исходный RAM-диск в память. Затем RAM Disk и Kernel несжаты и используются для настройки системы yur и управления передачей на выбранную вами ОС Linux.

См. GNU Grub


Теперь причина, по которой я говорю это, противоречит интуиции: вы не можете начать с шага 3 «Как это работает» и «Проработайте свой путь через« Как это относится к Grub » . По завершении Stage1.5 Stage_2 отправит вам запрос на спасение, так как ядро ​​и начальный RAM-диск, если он у вас есть, после того, как он был несжатым, у вас нет устройства для настройки, в вашем случае hd0 . Также корректно сообщается сообщение об ошибке Grub.

ошибка: нет такого устройства

правильно, потому что на hd0 нет ОС, поэтому нет ОС, чтобы рассказать Grub Stage_2: «Эй, я ОС, которая должна быть загружена». Таким образом, вы должны работать в обратном направлении, создавая или устанавливая ОС, затем устанавливая ядро ​​и, наконец, устанавливая загрузчик. В вашем случае вам нужно настроить QEMU на загрузку образа ISO LiveCD в качестве CD-ROM, затем установить ОС на виртуальный диск hd0 затем настроить загрузчик. Список LiveCD см. В разделе « Основные дистрибутивы DistroWatch» . Если вы чувствуете себя более комфортно с меньшим раздуванием, попробуйте Source Based Distribution, например Gentoo .