Booting linux from vhd

Могу ли я загрузить Linux с VHD?

Есть ли способ загрузить систему Linux с виртуального жесткого диска в Windows 7?

Если есть способ, как я могу поставить его там в первую очередь?

РЕДАКТИРОВАТЬ: Чтобы уточнить, я не пытаюсь запустить Linux в виртуальной машине. Я пытаюсь загрузить его на своей физической машине с виртуального жесткого диска, как я могу это сделать с Windows 7.

Вы не можете. В Windows поддержка VHD интегрирована в процесс загрузки, и Linux не предлагает такую ​​поддержку. Кроме того, я не знаю, что Linux поддерживает загрузку с любого другого типа виртуального диска.

да, мы только что выпустили пример Linux VHD, который позволяет загружать любой компьютер.

Вы можете найти больше информации здесь:

1 Linux как реальное устройство

С VBoot для Linux вы можете предварительно установить и предварительно настроить ОС Linux и ее приложения, а затем распространить полученный файл виртуального диска в формате VHD. VHD может загрузить реальный компьютер с конфигурацией и приложениями, доступными мгновенно. Таким образом, операционные системы действительно управляемы, так же просто, как файлы. Мы называем такой Linux VHD настоящим устройством в том смысле, что он загружает физические компьютеры.

Настроить и загрузить компьютер с VHD-файлом очень просто. Вы загружаете файл VHD, перетаскиваете его в файловую систему Windows или Linux, затем настраиваете загрузчик и перезагружаете компьютер.

2 Linux как виртуальное устройство

Точно такой же VHD-файл также запускается как виртуальная машина с использованием программного обеспечения для виртуализации, такого как VMLite Workstation, VirtualBox, Xen и Virtual PC, Hyper-V и т. Д. По умолчанию он оптимизирован для VMLite Workstation.

Если установлена ​​VMLite Workstation, вы можете просто дважды щелкнуть файл ubuntu-910-desktop-i386.mop, чтобы запустить виртуальный жесткий диск как виртуальную машину с VMLite Workstation.

Источник

Можно ли загрузить Linux с виртуального жесткого диска?

есть ли способ загрузить систему Linux с VHD в Windows 7?

Если есть способ, как я могу поставить его там в первую очередь?

EDIT: чтобы уточнить, я не пытаюсь запустить Linux на виртуальной машине. Я пытаюсь загрузить его на своей физической машине с VHD, как я могу сделать с Windows 7.

7 ответов

нельзя. В Windows поддержка VHD интегрирована в процесс загрузки, и Linux такой поддержки не предлагает. Кроме того, я не знаю, что Linux поддерживает загрузку с любого другого типа виртуального диска.

да, мы только что выпустили образец Linux VHD, который можно загрузить с любого компьютера.

вы можете найти более подробную информацию здесь:

1 Linux как реальное устройство

с VBoot для Linux, вы можете предварительно установить и предварительно настроить ОС Linux и ее приложений, затем распространить полученный файл виртуального диска в формате VHD. Vhd может загрузить реальный компьютер, с конфигурацией и приложениями, доступными мгновенно. Таким образом, операционные системы действительно управляемы, так же просто, как файлы. Мы называем такой виртуальный жесткий диск Linux реальным устройством в том смысле, что он загружает физические компьютеры.

очень легко настроить и загрузить компьютер с vhd-файлом. Загрузите файл vhd, поместите его в файловую систему Windows или Linux, затем настройте загрузчик и перезагрузить компьютер.

2 Linux как виртуальное устройство

точно такой же файл vhd также работает как виртуальная машина с помощью программного обеспечения виртуализации, таких как Vmlite Workstation, VirtualBox, Xen и Virtual PC и Hyper-V и т.д. По умолчанию он оптимизирован для рабочей станции VMLite.

Если Vmlite Workstation установлена, вы можете просто дважды щелкнуть ubuntu-910-desktop-i386.файл mop для запуска виртуального жесткого диска в качестве виртуальной машины с Vmlite Workstation.

образец Ubuntu VHD пакет готов для загрузки:

загрузить, извлечь, затем дважды щелкните настройка.exe на Windows, перезагрузка На Linux, нужно настроить загрузчики.

сначала создайте загрузочный Win 7 VHD с помощью этой известной процедуры из Keith Combs.

загрузки операционной системы Win 7 на VHD.

иди бесплатного установщика Wubi.

из Windows 7, установить Ubuntu Установщик Wubi, но убедитесь, что вы устанавливаете файлы на основной раздел физического HD (не раздел C: windows VHD)

перезагрузка при запросе сделать это, но не выбирайте Ubuntu еще из меню загрузки (он не будет работать), вам нужно запустить Windows 7 в последний раз.

теперь важный бит: В Windows 7 убедитесь, что вы измените настройки просмотра папок на «Показать все файлы» и убедитесь, что файлы ОС не скрыты. Как только вы сделали это, перейдите к C: диск. Вы увидите два важные файлы: wubildr и wubildr.mbr

Читайте также:  Защитник windows 10 управляется организацией

скопируйте эти два файла в корень физического раздела (т. е. раздела, где Windows7.vhd файл находится и папку Ubuntu, которая была создана при установке wubi выше). Просто убедитесь, что вы копируете файлы в нужный раздел, убедитесь, что вы можете видеть, что есть файл подкачки.sys bootmgr и bootsect.файл bak.

вот оно! перезагрузитесь и выберите Ubuntu из Windows загрузчик.

можно использовать образ диска в качестве корневого устройства, но при компиляции в ядро или загрузчик несколько сложнее. Поскольку спецификация VHD находится в свободном доступе, расширение lilo или grub или ядра linux, чтобы дать vhd тот же статус, что и a .iso или .img или другой файл образа диска должен быть простым делом программирования, занимая у вас не более года или двух выходных и вечеров. Тогда вы будете героем, и после того, как ваши патчи будут приняты в основной источник ядра линии вы имеете право получить татуировку смокинга.

lol это поздний ответ, но вы можете попробовать установщик WUBI или unetbootin. Они не используют файлы VHD, хотя они позволяют загружать несколько дистрибутивов linux без каких-либо разделов, пока у вас есть копия компакт-диска или iso.

Источник

Загрузка Linux с VHD на компьютере с UEFI

В статье о возможности загружать Linux с VHD был предложен способ загружать Linux на машине с Windows без необходимости разбивать диск на разделы. Но было одно существенное ограничение: рассматривался только вариант загрузки BIOS, т.е. legacy-загрузки. Сейчас появляется всё больше устройств без поддержки режима legacy (например, многие ноутбуки, выпущенные в 2020 году). Поэтому в этой статье будет рассмотрена загрузка Linux с VHD на компьютерах с UEFI.

В чём отличия UEFI от BIOS, в интернете описано достаточно подробно, можно посмотреть, например, в этой статье. Для нас наиболее важным будет необходимость использовать разметку GPT для загрузочного диска и при создании разделов на VHD. Эксперименты проводились при отключенном Secure Boot. Не буду подробно останавливаться на моментах, описанных в предыдущей части. Как и ранее, предполагается, что читатель имеет представление о работе с консолью в Windows и Linux, умеет работать со стандартными системными утилитами, с ПО для виртуализации и т.п.

Предварительно отмечу еще ряд моментов. Можно было бы рассмотреть загрузку системы с внутреннего жесткого диска компьютера, но мы немного усложним задачу и будем загружать систему со съемного USB-диска, на котором будет располагаться VHD-файл. Все действия применимы и для внутреннего жесткого диска, а некоторые особенности будут отмечены в отдельном разделе.

Разработчики grub4dos недавно выпустили версию своего загрузчика для UEFI. При использовании версии grub4dos-for_UEFI-2021-02-10.7z на виртуальной машине у меня не возникло особых проблем при загрузке Linux с VHD, но на реальном железе при работе с тем же самым образом VHD была получена ошибка: Error 24: Attempt to access block outside of partition. С учетом простоты, с которой UEFI позволяет заменить загрузчик (простая замена файла), было решено воспользоваться загрузчиком grub2 из дистрибутива Debian debian-10.8.0-amd64-netinst.iso.

Установка Linux на VHD

Есть два ключевых отличия от варианта для BIOS:

1) в настройках VirtualBox необходимо установить опцию «Enable EFI»;

2) при установке Debian диск был разбит на два раздела: ESP (EFI system partition) размером

100 Мб, отформатированный в FAT32, и EXT4, занимающий всё оставшееся место.

Возможны и другие варианты разбиения. Раздел ESP при желании можно вынести за пределы VHD (он нам нужен только для загрузки на виртуальной машине), но все дальнейшие настройки сделаны исходя из того, что на VHD будет два раздела.

Подготовка Linux к загрузке с VHD

Скрипт из предыдущей статьи нам подходит для загрузки на локальном компьютере, где состав дисков меняется редко и заранее известно, на каком диске хранится VHD-файл. Но мы себе поставили новую цель: иметь возможность загружаться с USB-носителя на любом компьютере с любой конфигурацией жестких дисков. Загрузчики grub4dos и grub2 умеют искать файлы на доступных разделах и работать с UUID разделов. Мы этим воспользуемся при создании конфигурационного файла загрузчика, а пока добавим обработку UUID в скрипт loop_boot_vhd.

В скрипт добавлено считывание нового параметра loop_dev_uuid . В нём ожидается UUID раздела, на котором находится VHD-файл (путь к нему передается, как и раньше, в параметре loop_file_path ). Если задан loop_dev_uuid , то значение, переданное в loop_dev_path , игнорируется и заменяется на найденный по UUID путь к устройству. Кроме того, если диск подключен по USB, то он может определяться в системе с задержкой. Поэтому добавлено ожидание (до 10 секунд), во время которого выполняется ежесекундная проверка, появилось нужное устройство или нет. Мы ищем раздел по UUID с помощью утилиты findfs. Она не входит в образ initramfs, для её добавления необходимо создать скрипт /etc/initramfs-tools/hooks/copyfindfs (не забывайте делать скрипты исполняемыми).

Скрипт loop_boot_vhd необходимо расположить, как и ранее, в /etc/initramfs-tools/scripts/local-top/. После чего пересобрать initramfs, и VHD-образ можно считать готовым.

Читайте также:  Dwg linux чем открыть

Настройка grub.cfg

В GRUB2 можно получить UUID раздела с помощью модуля probe, поэтому он должен быть в сборке. За основу была взята сборка GRUB2 с установочного диска Debian, для загрузки нам понадобятся следующие файлы:

Их необходимо скопировать на EFI-раздел USB-диска:

Далее необходимо создать конфигурационный файл \EFI\debian\grub.cfg.

В cfg-файле всё достаточно очевидно, только обращу внимание, что VHD-файл имеет название debefi.vhd, и система будет искать его в корне всех найденных разделов. Для исключения ошибок название файла необходимо сделать уникальным для загружаемой системы. Ну и «gpt2» используется потому, что Linux установлен на втором разделе внутри VHD.

Особенности настройки параллельно с Windows bootloader

Disclaimer: дальнейшие действия могут привести к невозможности загрузить компьютер штатными средствами, все действия вы выполняете на свой страх и риск. Перед экспериментом проверьте, контролирует ли установленное антивирусное ПО целостность загрузчика. И не забывайте о возможных побочных эффектах.

Я опишу один из вариантов реализации выбора между загрузкой Windows и Linux: с помощью замены загрузчика на GRUB2. Загрузка EFI-систем по умолчанию начинается с файла \EFI\Boot\BOOTX64.EFI, в Windows 10 используется \EFI\Microsoft\Boot\bootmgfw.efi. Заменить загрузчик Microsoft на GRUB2 можно просто заменив файл. Необходимо быть внимательным, если сомневаетесь в получении результата с первого раза, то лучше сначала поэкспериментируйте на виртуальной машине. С помощью diskpart.exe надо подключить EFI-раздел Windows, на котором необходимо:

переименовать/перенести файл \EFI\Microsoft\Boot\bootmgfw.efi в \EFI\boot\ms.efi;

файл bootx64.efi из ISO-образа Debian переименовать в \EFI\Microsoft\Boot\bootmgfw.efi;

grubx64.efi разместить в \EFI\Microsoft\Boot\grubx64.efi;

probe.mod разместить в \EFI\debian\x86_64-efi\probe.mod;

ранее созданный grub.cfg скопировать в \EFI\debian\grub.cfg и добавить пункт для передачи управления загрузчику Microsoft:

Теперь при загрузке сначала будет появляться меню GRUB2 с выбором загрузки Windows («ms») или Linux («vhdUUID»).

Если на каком-то из этапов загрузки возникают ошибки, то (как и с grub4dos) необходимо попытаться вводить команды вручную и смотреть, какие ошибки выдает система, как и куда монтируются разделы, доступны ли все необходимые файлы и т.п.

Источник

Загрузка Linux с VHD на компьютере с BIOS

Загрузка Linux с VHD может пригодиться в различных сценариях, например, когда на компьютере установлена Windows и есть необходимость в Linux, но WSL или виртуальной машины с Linux недостаточно, а разбивать диск на разделы нет желания. Microsoft позволяет грузить Windows с VHD «из коробки» начиная со старших редакций Windows 7. Но что делать, если возникла необходимость загрузить таким способом Linux?

На форумах часто можно встретить мнение, что загрузить Linux с VHD либо нельзя, либо очень сложно. Полезной информации в интернете на эту тему действительно мало. Базовая идея, как это осуществить, описана тут. Суть в следующем:

Необходимо убедиться в поддержке NTFS на всех этапах.

Необходимо убедиться в поддержке loop-устройств.

Добавить в загрузочные скрипты ОС команду монтирования loop-устройства.

Убедиться, что все необходимые утилиты добавлены в образ, обновить initramfs внутри VHD.

В случае legacy-зарузки (BIOS) и использования штатного загрузчика Windows добавить grub4dos в меню bootmgr, а в меню grub4dos добавить пункт для загрузки с VHD.

Практическое применение этой идеи для Arch Linux описано тут. В этой статье я проведу аналогичный эксперимент с Debian. Предполагается, что читатель имеет представление о работе с консолью в Windows и в Linux, умеет работать со стандартными системными утилитами, с ПО для виртуализации и т.п. — элементарные вещи подробно не расписаны.

Процесс загрузки будет выглядеть так: bootmgr -> grub4dos -> initramfs -> debian. Рассмотрим подготовку каждого этапа справа налево.

Установка Linux на VHD

Для начала необходимо создать пустой образ VHD с фиксированным размером. Если нужно минимизировать размер образа, то для экспериментов с CLI достаточно создать диск объемом

1,5 Гб. Для рабочей системы с GUI можно ограничиться объемом 10 Гб (с условием хранения пользовательских данных вне VHD).

Создадим VHD с помощью diskpart.exe:

Далее необходимо установить Debian на VHD. Я для этого воспользовался VirtualBox 6.1, устанавливал debian-10.8.0-amd64-netinst.iso. Параметры виртуальной машины — по умолчанию, новый диск создавать не надо, достаточно подключить ранее созданный debian.vhd.

Установка Debian стандартна, обращу внимание только на некоторые моменты.

При разметке диска я создал один загрузочный раздел ext4. Раздел подкачки на VHD я делать не стал, после установки можно разместить файл или раздел подкачки в удобном месте.

При выборе дополнительного ПО для установки я оставил только SSH-сервер и стандартные системные утилиты. Всё остальное можно поставить потом, по необходимости. GRUB установлен в MBR. Если при установке была выбрана русская локаль, то после установки можно добавить локаль en_US командой dpkg-reconfigure locales .

Подготовка Linux к загрузке с VHD

В установленную систему необходимо добавить поддержку NTFS и утилиту partprobe, которая позволяет сообщить ядру ОС о необходимости повторного чтения таблицы разделов жёсткого диска.

Затем надо подготовить скрипты для initramfs.

initramfs — это начальная файловая система в оперативной памяти, которая содержит утилиты и скрипты, требуемые для монтирования файловых систем перед вызовом init, располагающегося в корневой файловой системе.

Скрипты для initramfs созданы на основе документации. Наши дополнения для initramfs мы будем размещать в следующих каталогах.

Читайте также:  Windows users folder rename

/etc/initramfs-tools/hooks/ — здесь размещаются скрипты, которые запускаются при генерации initramfs-образа. Тут мы разместим скрипт для добавления в initramfs утилиты partprobe с необходимыми библиотеками.

/etc/initramfs-tools/scripts/local-top/ — после выполнения этих скриптов загрузчик считает, что root-устройство смонтировано. Т.е. здесь будет скрипт для монтирования VHD.

Скрипт для добавления partprobe в initramfs возьмем из этой статьи с добавлением еще одной библиотеки. Надо создать файл partcopy и сделать его исполняемым:

Скрипт для монтирования VHD сделан на основе скрипта для Arch Linux с учетом особенностей выбранного дистрибутива Linux. Скрипт необходимо сохранить под именем loop_boot_vhd и сделать исполняемым:

Немного подробнее поясню логику работы скрипта. Обработка prereqs рекомендована в документации. В переменную cmdline попадает строка инициализации из grub4dos, например, root=/dev/loop0p1 loop_file_path=/debian.vhd loop_dev_path=/dev/sda2 . Далее идет разбор этой строки и из нее определяется номер партиции на loop-устройстве, а в переменные loop_dev_path и loop_file_path сохраняются путь к устройству, на котором хранится VHD-файл, и путь к VHD-файлу на устройстве. Если данные для этих переменных не переданы, то скрипт прекращает работу и система пытается загрузиться в обычном режиме. Если переменные определены, то загружается модуль ядра для подержки loop-устройств с указанием в параметрах максимального количества loop-устройств и максимального количества таблиц разделов на loop-устройстве. Затем командой blkid определяется тип файловой системы диска, на котором хранится VHD-файл. Если VHD лежит на NTFS, то монтирование производится с помощью команды ntfs-3g , иначе — командой mount . Монтирование производится в каталог /host (который при необходимости предварительно создается). После этого VHD подключается в систему командой losetup , а затем partprobe сообщает ядру о новом диске.

После размещения скриптов в нужные каталоги ( /etc/initramfs-tools/scripts/local-top/loop_boot_vhd и /etc/initramfs-tools/hooks/partcopy ) необходимо пересобрать initramfs командой:

Для дальнейшей настройки надо запомнить номер версии ядра: /boot/initrd.img-4.19.0-14-amd64 и /boot/vmlinuz-4.19.0-14-amd64.

На этом образ готов к запуску на реальном железе, можно выключать виртуальную машину и приступать к подготовке загрузчика. Готовый образ debian.vhd надо скопировать в корень диска C:, дальнейшие скрипты написаны исходя из предположения, что VHD находится в корне NTFS-раздела.

Настройка grub4dos

Для начала надо скачать актуальную версию grub4dos. Работа с этой утилитой в различных источниках описана достаточно подробно. Настройка сводится к следующему:

необходимо найти раздел, в корне которого лежит VHD-файл, и сделать его корневым для всех команд в текущем пункте меню (команда find —set-root );

затем загрузить образ жесткого диска (команды map . vhd и map —hook );

далее подключенный образ указать как корневое устройство (команда root );

и указать параметры запуска Linux ( kernel и initrd ).

Получается файл menu.lst с таким содержимым:

Тут надо обратить внимание на один момент: в команде kernel инициализируются переменные, которые передаются в initramfs и используются в ранее созданном скрипте loop_boot_vhd .

В моем примере переменные заполнены исходя из моей конфигурации компьютера: один диск с Windows, разбитый на два раздела (загрузочный «System Reserved» и основной NTFS), а внутри VHD — один раздел ext4.

Настройка загрузчика bootmgr

Обратите внимание: в зависимости от версии Windows и особенностей установки ОС возможны незначительные отличия.

Первое, что надо сделать, — подключить скрытый раздел с bootmgr, в примере ниже я подключаю скрытый раздел «System Reserved» в каталог C:\mnt (каталог должен быть предварительно создан). Команды выполняются в diskpart.exe:

После этого надо распаковать в каталог C:\mnt\ файлы из архива с grub4dos: grldr и grldr.mbr . В этот же каталог надо скопировать файл menu.lst , созданный на предыдущем шаге. После этого раздел можно отключить в diskpart.exe:

Чтобы настроить отображение пункта меню при загрузке Windows, надо сделать следующее:

В ответ будет сообщен GUID нового пункта меню. Полученный GUID используется в следующих командах:

Тут подробно не останавливаюсь, все команды очевидны и хорошо описаны в документации. Ну, и чтобы не переключаться лишний раз между графическим и текстовым режимами:

На этом всё: можно перезагрузить компьютер, выбрать в меню загрузки grub4dos, затем Debian, после чего должен загрузиться Linux.

Что делать, если не грузится?

В этом случае, скорее всего, неверно указаны параметры с путями к устройству, на котором находится VHD-файл, или раздел на loop-устройстве. Если загрузка останавливается на уровне grub4dos, то в консоли надо последовательно вводить команды, перечисленные в menu.lst , и смотреть на результаты, в зависимости от которых правильно указать параметры для загрузки Linux. Если загрузка останавливается в initramfs, то надо проверить доступность необходимых устройств на этом этапе. Проверить можно, последовательно вводя команды из скрипта loop_boot_vhd (основное: смонтировать нужные разделы, найти VHD, подключить его, проверить присвоенный номер партиции с Linux, в моем примере — loop0p1).

А как же UEFI?

Это немного другая история, надеюсь, позже найду время и проведу аналогичный эксперимент с UEFI.

Источник

Оцените статью