Настройка GRUB для выбора другой ОС в виртуальной машине

Вопрос или проблема

На моем ноутбуке у меня настроена конфигурация с двойной загрузкой с установленными Windows 7 и Linux.

Я также использую Linux через Oracle VirtualBox (через файл VMDK) при работе в Windows.

Поскольку у меня всего один HDD, один и тот же загрузчик (GRUB) используется во всех этих случаях.
Возможно ли как-то сделать так, чтобы GRUB выбирал Linux по умолчанию внутри виртуальной машины, а Windows 7 в остальных случаях?

Другие варианты, как добиться того же поведения, также приветствуются.

Эм.. Я не думаю, что вы используете grub на своем жестком диске для загрузки виртуальной машины. Я что-то путаю, или вы?

В любом случае.. В grub есть директива по умолчанию:

# grep default /boot/grub/menu.lst 
default 3

Если Windows стоит вторым сверху, вы должны установить это значение на 1, так как 0 – это первая запись ОС.

Вы можете изменить значение с помощью sed (или интерактивного редактирования, конечно):

# sed 's/default 3/default 2/' -i /boot/grub/menu.lst 

чтобы изменить значение. Есть экспериментальные драйвера для монтирования ext3 в Windows, я бы не рекомендовал ни один из них, честно говоря, не уверен насчет ext4. Возможно, есть хорошие драйвера для Windows.

Вы, вероятно, должны использовать другое устройство загрузки внутри вашей виртуальной машины. Вы просто можете создать образ диска размером 5 МБ и использовать его в качестве “диска” для загрузки в VM. Затем вы можете установить grub (или любой другой загрузчик) там, чтобы запустить Windows из вашей виртуальной машины.

Как замечание, мне интересно, насколькоWindows 7 будет счастлива работать с одного и того же жесткого диска в виртуальной машине, а также на физическом оборудовании… не будет ли у Windows какого-то ужасного кризиса идентичности каждый раз, когда вы что-то меняете?

Я думаю, как говорит этот ответ, способ сделать это – установить grub в отдельный виртуальный раздел. Сначала мне не было очевидно, как это сделать, поэтому я поделюсь шагами, которые я предпринял, основываясь на информации из этого вопроса.

  1. Я создал новый виртуальный диск размером 20 МБ, позволяя ему расти динамически (когда я выбрал фиксированный размер в 5 МБ, как предлагал связанный вопрос, он не был достаточно большим).
  2. Я подключил диск к виртуальной машине, временно поместив его в SATA порт, который идет после существующего жесткого диска, который уже загружается, чтобы он не пытался загрузиться с пустого диска.
  3. Я загрузил виртуальную машину с Linux.
  4. Я установил grub на новый виртуальный диск размером 20 МБ. Вот команды, которые я использовал для этого:

    sudo fdisk /dev/sdb
    Создал новый раздел с помощью команды n, выбрал первичный раздел и другие параметры по умолчанию, затем вышел из fdisk.

    sudo mkfs.ext3 /dev/sdb1

    sudo mkdir /media/new_drive/

    sudo mount /dev/sdb1 /media/new_drive/

    sudo grub-install /dev/sdb --root-directory=/media/new_drive/

    Кроме того, в моем случае я хотел, чтобы grub сразу загружал Linux, так как это единственное, что он может загрузить. Чтобы сделать это, я отредактировал /etc/default/grub, чтобы установить

    GRUB_TIMEOUT=0

    GRUB_RECORDFAIL_TIMEOUT=0

    Я не уверен, почему GRUB_RECORDFAIL_TIMEOUT понадобился в моем случае, но это может быть связано с тем, что это виртуальная машина.

    Затем я выполнил:

    sudo grub-mkconfig -o /media/new_drive/boot/grub/grub.cfg

  5. Выключите виртуальную машину.

  6. Поменял жесткие диски в виртуальной машине так, чтобы новый жесткий диск с установленным grub теперь находился в первом SATA порту, чтобы он загружался первым.

ПРАЗДНИК: Я заметил, что с таким методом во время обновления программного обеспечения иногда он регенерирует grub.cfg на основе вашей конфигурации в /etc/default/grub. Это может быть проблемой, если у вас есть другая версия этого файла для вашего grub в VM, чем для вашего grub вне виртуальной машины. Возможно, вам придется вручную регенерировать ее в каждом из настроек. Я не уверен, есть ли лучший способ обойти это.

Ответ или решение

Конфигурация загрузчика GRUB для выбора разных операционных систем в виртуальной машине (VM) может показаться сложной задачей, особенно в условиях двойной загрузки Windows 7 и Linux. Однако с правильным подходом и некоторыми необходимыми шагами это можно сделать эффективно.

Задача

У вас есть система с двойной загрузкой, где Windows 7 и Linux установлены на одном жестком диске. Вы используете Oracle VirtualBox для работы с Linux в Windows через raw VMDK файл. Поскольку используется один экземпляр загрузчика GRUB, необходимо сделать так, чтобы по умолчанию загружалась Linux в виртуальной машине, а Windows 7 — при обычной загрузке.

Исходная информация о GRUB

Вы правильно заметили, что GRUB не может использоваться одинаково в физической и виртуальной среде. Тем не менее, можно установить GRUB на отдельный виртуальный диск, чтобы изменить поведение загрузки в виртуальной машине. Давайте рассмотрим, как это сделать.

Шаги по установке GRUB в виртуальном диске

  1. Создание виртуального диска:

    • В интерфейсе VirtualBox создайте новый виртуальный диск объемом от 20 МБ и с динамическим расширением. Это обеспечит достаточно места для работы GRUB.
  2. Присоединение диска к виртуальной машине:

    • Прикрепите новый Virtual Disk к виртуальной машине, убедившись, что он расположен после основного диска с системой, чтобы избежать загрузки с пустого диска.
  3. Загрузка в Linux:

    • Запустите виртуальную машину, и загрузитесь в вашу систему Linux.
  4. Установка GRUB:

    • Откройте терминал и выполите следующие команды:

      sudo fdisk /dev/sdb

      Создайте новый раздел с помощью команды n, выбрав первичный раздел и остальные параметры по умолчанию.

      sudo mkfs.ext3 /dev/sdb1

      Затем смонтируйте новый раздел:

      sudo mkdir /media/new_drive/
      sudo mount /dev/sdb1 /media/new_drive/

      Установите GRUB на новый виртуальный диск:

      sudo grub-install /dev/sdb --root-directory=/media/new_drive/
  5. Настройка GRUB:

    • Отредактируйте файл конфигурации /etc/default/grub для установки времени ожидания, чтобы Linux загружался сразу:

      GRUB_TIMEOUT=0
      GRUB_RECORDFAIL_TIMEOUT=0
    • После внесения изменений сгенерируйте конфигурационный файл GRUB:

      sudo grub-mkconfig -o /media/new_drive/boot/grub/grub.cfg
  6. Завершение настройки:

    • Выключите виртуальную машину.
    • Переместите созданный диск с установленным GRUB в первое положение в списке дисков SATA виртуальной машины для того, чтобы он загружался первым.

Итоговые замечания

При использовании описанного метода стоит помнить, что обновления могут переопределять конфигурацию GRUB, основанную на /etc/default/grub. Поэтому рекомендуется периодически проверять файл конфигурации на обоих системах, чтобы избежать конфликтов.

Этот подход не только поможет выбрать нужную операционную систему в зависимости от ситуации (виртуализация или физическая работа), но и обеспечит стабильную работу обеих систем без их влияния друг на друга.

Оцените материал
Добавить комментарий

Капча загружается...