Вопрос или проблема
Раньше я использовал загрузку с устаревшего BIOS на этой машине для двойной загрузки Ubuntu 16.04 и Windows 10 на трех жестких дисках. Я использовал GRUB для загрузки в Ubuntu на комбинации SSD и HDD, а Windows 10 на своем SSD, но я также мог загрузить этот диск с Windows 10 в виртуальной машине под Ubuntu.
Когда я обновился до Ubuntu 18.04, я переустановил как Ubuntu, так и Windows в режиме UEFI. Все работает, как ожидалось, за исключением того, что я больше не могу использовать физический диск Windows 10 в Virtualbox.
Я пытался настраивать разрешения в течение нескольких дней, но в итоге я просто попадаю в оболочку восстановления GRUB при загрузке. Я могу загрузить виртуальную машину с живого диска и получить доступ к диску без проблем.
Я действительно не знаком с разделами загрузки EFI или тем, как они работают. Я даже не уверен, нужен ли мне раздел EFI для каждой операционной системы, но я хотел бы иметь возможность использовать диск Windows 10 на других машинах без жестких дисков Ubuntu.
Может кто-то сказать, что я делаю неправильно?
Вот моя конфигурация. /dev/sda – это мои точки монтирования home и var. sdc – это мой корень. sdb – это диск с Windows.
Диск /dev/sda: 931.5 GiB, 1000204886016 байт, 1953525168 сектор(ов)
Единицы: сектора по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 4096 байт
Размер I/O (минимум/оптимум): 4096 байт / 4096 байт
Тип метки диска: gpt
Идентификатор диска: 1D529F06-982A-4C10-86F1-9AABFA271304
Устройство Начало Конец Секторы Размер Тип
/dev/sda1 2048 16777215 16775168 8G Linux swap
/dev/sda2 16777216 25165823 8388608 4G Linux filesystem
/dev/sda3 25165824 1659922431 1634756608 779.5G Linux filesystem
*** ИГНОИРУЙТЕ ЭТИ РАЗДЕЛЫ ***
/dev/sda4 1659922432 1695938559 36016128 17.2G Linux filesystem
/dev/sda5 1695938560 1704327167 8388608 4G Linux filesystem
/dev/sda6 1704327168 1828964351 124637184 59.4G Linux filesystem
/dev/sda7 1828964352 1926782975 97818624 46.7G Microsoft basic data
Диск /dev/sdb: 238.5 GiB, 256060514304 байт, 500118192 сектор(ов)
Единицы: сектора по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимум/оптимум): 512 байт / 512 байт
Тип метки диска: gpt
Идентификатор диска: C76B0EBA-27D6-4FE0-A92F-F78276F26981
Устройство Начало Конец Секторы Размер Тип
/dev/sdb1 2048 1023999 1021952 499M Windows recovery environment
/dev/sdb2 1024000 1228799 204800 100M EFI System
/dev/sdb3 1228800 1261567 32768 16M Microsoft reserved
/dev/sdb4 1261568 500117503 498855936 237.9G Microsoft basic data
Диск /dev/sdc: 29.8 GiB, 32017047552 байт, 62533296 сектор(ов)
Единицы: сектора по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимум/оптимум): 512 байт / 512 байт
Тип метки диска: gpt
Идентификатор диска: D7616B5D-A0FA-4ACD-9122-DAB9BA2F21ED
Устройство Начало Конец Секторы Размер Тип
/dev/sdc1 2048 411647 409600 200M EFI System
/dev/sdc2 411648 62531583 62119936 29.6G Linux filesystem
Я выяснил, что нужно просто нажать delete по мере загрузки виртуальной машины, чтобы войти в BIOS, а затем вручную добавить опцию загрузки EFI для Windows.
На данное время я использую оболочку EFI для загрузки Windows.
Вы можете вручную запустить загрузчик, используя оболочку EFI: введите
fs0:, чтобы получить доступ к первой файловой системе, которая обычно является ESP. Введите cd
EFI{имя_ос}, где {имя_ос} – это название директории, в которой ваша
ОС установила свой загрузчик. (Вы не сказали, какую ОС вы
установили, поэтому я не могу точно сказать, что это. Ввод команды ls EFI покажет
вам, что там есть.) Запустите загрузчик, введя его имя. Опять же, я
не могу знать, что это. Для Linux это обычно grubx64.efi. Для
Windows это bootmgfw.efi.
Смотрите, как в ответе здесь:
Как выйти из оболочки EFI в виртуальных машинах
Вы также можете воссоздать физический диск, не включая раздел хоста.
При создании файла vmdk параметр -mbr не требуется, но
убедитесь, что вы НЕ включаете раздел, в котором находится хостовая ОС,
то есть включение всего физического диска в vmdk приведет к сбою. Моя окончательная
команда (с исключением раздела #3 хоста) была:C:\Program Files\Oracle\VirtualBox>VBoxManage.exe internalcommands
createrawvmdk -filename e:\VirtualBox\Ubuntu.vmdk -rawdisk
\.\PhysicalDrive0 -partitions 1,2,4,5,6,7
Ответ или решение
Загрузка физического диска с EFI в VirtualBox на хосте с Ubuntu 18.04
Введение
Виртуализация операционных систем предоставляет значительную гибкость для пользователей, позволяя запускать несколько операционных систем на одном физическом устройстве. В вашем случае вы работаете с VirtualBox и хотите загрузить физический диск Windows 10 с поддержкой EFI на хосте, где установлена Ubuntu 18.04. Эта задача может быть сложной, особенно при переходе с BIOS на UEFI, поскольку необходимо правильно настраивать параметры виртуальной машины и учитывать нюансы работы с EFI.
Основные этапы для решения проблемы
-
Создание виртуальной машины (VM) в VirtualBox:
- Запустите VirtualBox и создайте новую виртуальную машину.
- Выберите соответствующую версию Windows, соответствующую установленной версии Windows 10.
- Убедитесь, что вы выбрали тип "Linux" и версию "Ubuntu (64-bit)" для другой виртуальной машины, если создаете такую.
-
Настройка параметров UEFI:
- В настройках виртуальной машины перейдите в раздел "Система".
- Убедитесь, что опция "Enable EFI" (включить EFI) активирована. Это позволит вашей виртуальной машине использовать UEFI вместо традиционного BIOS.
-
Создание VMDK файла для физического диска:
- Для доступа к физическому диску Windows 10 необходимо создать формат VMDK, который будет ссылаться на ваш физический диск. Для этого выполните следующую команду в терминале:
VBoxManage internalcommands createrawvmdk -filename /path/to/your/vmdk/file.vmdk -rawdisk /dev/sdb
Обязательно замените
/path/to/your/vmdk/file.vmdk
на фактический путь, который вам нужен.
- Для доступа к физическому диску Windows 10 необходимо создать формат VMDK, который будет ссылаться на ваш физический диск. Для этого выполните следующую команду в терминале:
-
Настройка прав доступа:
- Вам потребуется предоставить пользователю, под которым вы работаете, права на доступ к физическому диску. Для этого добавьте пользователя в группу
vboxusers
:sudo usermod -aG vboxusers $(whoami)
- После этого выполните перезагрузку системы, чтобы изменения вступили в силу.
- Вам потребуется предоставить пользователю, под которым вы работаете, права на доступ к физическому диску. Для этого добавьте пользователя в группу
-
Добавление EFI загрузочной записи:
- При запуске виртуальной машины нажмите
Delete
, чтобы войти в меню EFI. - Используйте команду для добавления нового загрузочного элемента:
efibootmgr -c -d /dev/sdb -p 2 -L "Windows" -l "\EFI\Microsoft\Boot\bootmgfw.efi"
- Здесь
/dev/sdb
– это диск Windows 10, а-p 2
указывает на номер EFI раздела.
- Здесь
- При запуске виртуальной машины нажмите
-
Загрузка через EFI оболочку (опционально):
- Если загрузка не происходит автоматически, вы можете запустить загрузчик Windows вручную через EFI оболочку, используя приведенные инструкции:
- Введите
fs0:
для доступа к первому файловой системе. - Далее введите команды
cd EFI/Microsoft/Boot
иbootmgfw.efi
для запуска загрузчика Windows.
- Введите
- Если загрузка не происходит автоматически, вы можете запустить загрузчик Windows вручную через EFI оболочку, используя приведенные инструкции:
Рекомендации
-
Избегайте создания зеркала целого диска с использованием параметра
-mbr
, это может привести к несовместимости с виртуализацией. Убедитесь, что вы исключили все разделы, кроме необходимых для загрузки Windows. -
Важно придерживаться структуры каталогов при работе с EFI, чтобы обеспечить правильное обнаружение различных загрузчиков. Поддерживайте текущие резервные копии системы для минимизации возможных рисков.
Заключение
Проблема с загрузкой Windows 10 в VirtualBox на хосте с Ubuntu 18.04 может быть решена с помощью ряда действий, описанных выше. Дальнейшая работа с EFI и физическими дисками в виртуальных машинах требует аккуратности в управлении разделами и файлами загрузки. Помните о важности быть осторожным при изменении конфигураций, так как ошибки могут привести к невозможности загрузки.