Progress28.ru

IT Новости
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Bios boot partition

Загрузка Windows 7/10 с GPT диска на BIOS системе (без UEFI)

Сегодня мы разберемся, как установить любую современную версию Windows (в том числе Windows 7 или Windows 10) на жесткий диск, с таблицей разделов GPT на устаревшем компьютере с BIOS, который не поддерживает современную среду UEFI. Необходимость выполнить такой трюк возникла при попытке установить Windows Server 2008 R2 x64 на сервере HP DL380 G8 (сервера HP DL пока не поддерживают EFI) с локальными дисками, общая емкость которых в RAID 5 превышает 4 Тб. При стандартной установке Windows на диск с MBR разметкой, в системе доступны только 2 Тб. Разметить или получить доступ к оставшимся 2 ТБ места на диске из-под Windows не получится. Единственный способ воспользоваться всем доступным местом на диске – преобразовать разметку диска в формат GPT.

В этой статье описано, как настроить загрузку Windows с жесткого диска, размеченного в таблице разделов GPT на компьютере с классическим BIOS (в котором отсутствует UEFI) или в режиме Legacy BIOS. Операционная система Windows не умеет загружаться с GPT дисков на старых BIOS системах. Для обхода этого ограничения мы воспользуемся методикой переноса BCD загрузчика Windows на отдельную небольшую USB флешку (или HDD диск) с таблицей разделов MBR. Данная флешка будет использоваться только для запуска загрузчика Windows, который затем должен передать управление основному образу Windows, расположенному на диске с GPT разметкой. Инструкция универсальная и должна работать как в Windows 7, так и Windows 10 и любых других поддерживаемых 32 и 64 редакциях Windows.

Преимущества GPT перед MBR

Какие же преимущества дает использование GUID Partition Table (GPT) — нового формата размещения таблиц разделов на жестком диске. Таблица разделов GPT позволяет обойти ряд ограничений классической таблицы разделов MBR. Перечислим основные моменты:

  • Поддержка жёстких дисков размером более 2,2 Тб (максимальный доступный размер диска для GPT- 9,4 ЗетаБайт (9,4 × 1021 байт))
  • Поддержка до 128 разделов на диске (в MBR только 4 раздела)
  • Высокая надежность, достигаемая благодаря дублированию таблицы разделов в нескольких местах диска и проверки таблицы разделов с помощью циклической проверки четности с избыточностью (CRC). Таким образом, структура раздела диска не будет потеряна при повреждении первых секторов диска.
  • Нет необходимости использовать логические разделы, подверженные различным ошибкам

Загрузка Windows с GPT диска

Согласно официальной документации Microsoft http://msdn.microsoft.com/en-us/windows/hardware/gg463525.aspx , все ее ОС, начиная с Windows Server 2003 SP1, поддерживают тома с разметкой GPT в качестве дисков с данными, однако загрузиться с GPT тома смогут лишь 64 битные версии Windows, установленные на материнских платах с поддержкой новой спецификации UEFI (Unified Extensible Firmware Interface). Таким образом, не получится установить или загрузить Windows с GPT диска на старых компьютерах с классическим BIOS.

Еще раз отметим важный факт, который следует навсегда усвоить: загрузка Windows x64 с GPT диска возможна только на системе с UEFI.

Таким образом, если ваш компьютер работает на базе BIOS, и вам необходимо чтобы его диск содержал таблицу разделов GPT, проще всего будет добавить в систему еще один жесткий диск (обычный или SSD) с разметкой MBR, установить на него Windows и в дальнейшем загружаться уже с него.

Мы попробуем немного модифицировать эту методику. Для этого нам понадобится USB флешка или SD карта небольшого объема (не менее 64 Мб) с MBR разметкой, на которой мы разместим диспетчер загрузки Windows – bootmgr. Эта загрузочная флешка будет обеспечивать первоначальную загрузку системы и передавать управление загрузчику основной системы, расположенному на GPT томе.

Таким образом мы сможем обеспечить загрузку любой (как 32, так и 64 битной версии Windows . ) с GPT диска на системе с BIOS, не поддерживающей EFI.

Установка Windows на GPT диск на компьютере с BIOS

Предположим, у нас есть компьютер с BIOS (без UEFI), на жестком диске которого используется новая таблица разделов GPT. При попытке установить Windows на gpt диск такой компьютер, установщик Windows выдаст ошибку:

В русской версии ошибка:

Установить Windows 10/8.1/7 непосредственно на GPT диск в такой ситуации возможно только в режиме UEFI через эмуляцию этой среды с помощью DUET. Но в таком режиме возможно установка только 64 битных версий Windows, и сама процедура, как мы уже говорили выше, довольно сложная.

В таком случае, гораздо проще в обычном режиме установить Windows на MBR диск, а потом сконвертировать его в GPT с помощью утилиты gptgen.

Gptgen – преобразуем таблицу разделов диска из MBR в GPT без удаления разделов

Консоль Windows “Управление дисками” позволяет сконвертировать диск из разметки MBR в GPT только «чистые» неразмеченные диски. Консоль не позволит выполнить конвертацию разделов на диске, на котором уже установлена ОС.

Для онлайн преобразования жесткого диска из MBR в GPT можно воспользоваться небольшой утилитой Gptgen, позволяющей «на лету» преобразовать формат таблицы раздела без необходимости удаления всех разделов (без потери данных).

Скачайте утилиту gptgen, и распакуйте ее в произвольный каталог (например, c:toolsgptgen-1.1).

  1. Запустите командную строку с правами администратора
  2. Выполните команду: diskpart
  3. В контексте diskpart выведем на экран все диски в системе: list disk В данном примере в системе имеется один диск размером 40 Гб с индексом 0 (Disk 0). Как вы видите, этот диск имеет стандартную таблицу разделов MBR (столбец Gpt пустой)
  4. Преобразуем таблицу разделов диска 0 из MBR в GPT командой: gptgen.exe -w \.\physicaldrive0 В процессе выполнения утилиты появился предупреждение о том, что разработчики не гарантируют, что после преобразования в GPT с раздела на этом диске с него получится загрузиться .

Итак, преобразование таблицы разделов в GPT прошло успешно!

Перенос загрузчика Windows на USB флешку

Перезагружаем компьютер и удостоверяемся, что BIOS система не может загрузится с жесткого диска с GPT таблицей. Так и должно быть! Подключаем к системе небольшую USB флешку или SD карту. Загружаемся с установочного CD / USB диска с Windows (подойдет как установочный диск с Windows 10, так и Win 7, как в нашем случае) и на экране установки нажимаем Shift+F10, открывая консоль командной строки:

  1. Выполните команду: diskpart
  2. Выведем список дисков в системе: list disk . В данном случае в системе имеются два диска: Disk 0 – жесткий диск с системой размером 40 Гб (* в столбце Gpt указывает, что данный диск содержит таблицу разделов GPT) и Disk 1 – USB флешка размером 1 Гб.
  3. Разберемся с разделами на дисках и буквами, которые им назначены. Выберем жесткий диск: select disk 0 и выведем список разделов на нем: list volume Исходя из размеров разделов можно понять, что система установлена на 2 разделе (Volume 2), которому назначена буква D: (данная буква может не соответствовать букве системного диска, который отображается в самой Windows)
  4. Создадим необходимые разделы на флешке:
    select disk 1 (выбираем флешку)
    clean (очистка содержимого диска)
    create partition primary size=1000 (создаем на USB флешке основной раздел, в данном случае размером 1 Гб)
    format (форматируем его в файловой системе FAT32. Не используйте для USB флешки файловую систему NTFS, т.к. загрузится с такого раздела не получится )
    select partition 1 (выбираем первый раздел на флешке)
    active (помечаем раздел как активный)
    list volume (выведем список разделов еще раз. В этом примере видно, что созданный нами раздел имеет индекс 3)
    select volume 3 (выберем его)
    assign letter=G (назначим ему свободную букву диска, например G)

    list volume (удостоверимся, что разделу на флешке присвоена буква G)
    exit (Выход из утилиты diskpart)
  5. Скопируем файлы среды загрузки с системного диска на флешку: bcdboot d:Windows /l en-us /s g:
  6. Запишем на флешку загрузочный код для обеспечения загрузки bootmgr (диспетчера загрузки Windows): bootsect /nt60 G: /mbr /force
  7. Перезагружаемся

Зайдите в BIOS и задайте максимальный приоритет загрузки вашему USB (SD) накопителю. Сохраните изменения. Если вы все сделали правильно, система должна загрузиться корректно. Удостовериться, что ваша Windows находится на GPT диске можно в диспетчере дисков (diskmgmt.msc), открыв свойства системного диска. На вкладке Volumes указано, что тип таблицы разделов – GPT (Partition style — GUID Partition Table)

Подобная методика переноса загрузчика на отдельную USB флешку позволит воспользоваться всеми преимуществами таблицы разделов GPT и использовать всю емкость жесткого диска (размером более 2.2 Тб) на системах с BIOS (без среды UEFI). Подобный трюк можно проделать со следующими (даже 32 битными версиями) Windows:

  • Windows 10 / Windows Server 2016
  • Windows 8, Windows 8.1
  • Windows Server 2012 / 2012 R2
  • Windows 7
  • Windows Server 2008 / 2008 R2
  • Windows Vista
  • Windows Server 2003 SP1 / 2003 (64-bit)
  • Windows XP x64

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

Загрузка с GPT диска из BIOS

Мотивация

На рабочем видеосервере вышел из строя жесткий диск, размеченный в MBR, на котором была установлена ОС Windows 7.

Ситуация осложнялась тем, что диска для замены под рукой не оказалось, покупать долго, от слова ОЧЕНЬ (особенности организации процессов на предприятии), а сервер необходимо вводить в строй.

Из подручных материалов был только диск, который в данном сервере использовался для хранения архива. Сервер старый, а диск из новых (линейка WD Purple), соответственно встал вопрос, каким образом заставить загружаться старый компьютер (читай компьютер с BIOS) с данного жесткого диска, который размечен в GPT, чтобы не терять полезный объем.

Изучение данного вопроса привело на сайт rodsbooks.com, на котором нашлось решение.

Решение задачи

Собственно сам вольный пересказ, за теоретической частью, почему это оказалось не тривиальной задачей, добро пожаловать в великий и могучий Гугль

Итак, для решения данной задачи нам понадобиться Live CD/DVD/USB с GNU/Linux.
Лично я для этих целей пробовал использовать Ubuntu 16.04 и Debian 8. Сам автор предлагает использовать записанный на «болванку» Gparted , но каждый волен использовать то что ему ближе.

Для начала, необходимо обзавестись DUET: gitlab.com/tianocore_uefi_duet_builds/tianocore_uefi_duet_installer/repository/master/archive.tar.gz (собственно вся «магия» содержится именно в нем), а также SYSLINUX: www.kernel.org/pub/linux/utils/boot/syslinux/5.xx/syslinux-5.10.tar.gz (скачивать необходимо именно эту версию, в последующих необходимый для дальнейших манипуляций файл gptmbr.bin не скомпилирован. Чтобы не проводить его компиляцию самим, просто скачайте архив по ссылке).

Полученные файлы необходимо записать в удобное сетевое хранилище (либо на флешку) после чего, для удобства, перенести во временное хранилище на запущенной Linux системе.
Теперь загружаемся в любимый дистрибутив GNU/Linux.

Первое, что необходимо после загрузки в Live CD, разметить наш диск в таблице разделов GPT.
(Я привожу примеры для Ubuntu 16.04)
Открываем консоль (консоль должна быть английской, локализованая консоль вызывает ошибки при обработке скрипта) и размечаем диск при помощи fdisk:

Теперь создаем новую таблицу разделов GPT на диске, а также необходимые разделы. Предполагается, что диск в системе один и определяется как /dev/sda, в противном случае, необходимо изменить название диска на то, которое подходит именно вам.

Я не буду коментировать по шагам то, что описано выше, т.к. это стандартные процедуры, которые выполняются в fdisk. Единственное, на что стоит обратить внимание, так это на то, что при создании первого раздела, на котором будет храниться DUET, необходимо изменить его тип на ‘EFI System’ (

), а тип второго раздела, выбрать как ‘Microsoft basic data’ (

) собственно на него и будет в дальнейшем производится установка Windows.

С разметкой закончили, теперь создаем файловые системы:

Со стандартными процедурами закончили, теперь переходим к магии.

Установка DUET

Я скопировал SYSLINUX и TianoCore в /tmp/1 и перешел в папку с TianoCore:

Делаем исполняемыми copy_duet_files.sh и duet-install:

Теперь необходимо скопировать эмулятор EFI TianoCore:

Монтируем первый раздел в /mnt и устанавливаем EFI. Я выбрал EDK_UEFI64, потому что в дальнейшем при настройке загрузки, UDK_X64 почему-то не сохранял настройки. Разбираться было лень.

Вот и вся магия. Достаточно перезагрузить компьютер и в BIOS выставить загрузку с жесткого диска. В результате должна получится приветственная надпись как изображено ниже:

После нее, если все прошло гладко, и скрипт copy_duet_files.sh отработал правильно, появится приглашение эмулятора EFI.

К сожалению, на виртуальной машине воспроизвести это не получается, поэтому я привел картинку от EFI VirtualBox, она практически такая же как и та, которую должны увидеть вы.

Дальнейшая настройка загрузки производится уже через это меню. Оставляю последующую настройку загрузки через меню EFI для персонального изучения, тем более, что ничего сложного там нет. К примеру для начала можно потренироваться в том же VirtualBox в режиме загрузки EFI.

Вставляем диск с дистрибутивом Windows в дисковод или используем предварительно сформированную установочную флешку. В меню эмулятора EFI выбираем откуда производить загрузку (это выбирается через меню ‘Boot Maintenance Manager’ → ‘Boot From File’, выбор устройства с которого грузится флешка или CD/DVD. Для начала установки этого достаточно. В списке надо будет выбрать файл bootx64.efi именно он является загрузочным). Дальнейшая загрузка и установка происходит при помощи стандартного установщика Windows, но с возможностью установки на диск, который размечен в GPT.

My name is Philipp C. Heckel and I write about nerdy things.
This site moved here from blog.philippheckel.com/blog.heckel.xyz!

  • Stay connected
  • LinkedIn

Creating a BIOS/GPT and UEFI/GPT Grub-bootable Linux system

  • May 28 / 2017
  • 9
  • Bash, BIOS, GPT, Linux, Scripts, UEFI

Creating a BIOS/GPT and UEFI/GPT Grub-bootable Linux system

Good old Master Boot Record (MBR) unfortunately cannot address anything beyond 2TB, so partitioning large disks and making them bootable is impossible using MBR. The GUID Partition Table (GPT) solves this problem: It supports disks up to 16EB. However, installing grub does not work without a special BIOS boot partition. If you also want to support booting the same system via UEFI, another partition, the EFI System Partition (ESP), is necessary.

This should post shows you how to partition a disk with GPT and make a bootable Linux system via BIOS/Legacy and UEFI.

Requirements & Assumptions

For this post, I’ll assume that you are running everything on a Debian-based system, and all commands shown must be run as root.

1. Create a minimal Linux (optional)

For this example, we’ll use a small Linux install that we can create with the following commands. This will bootstrap (debootstrap) a minimal Ubuntu 16.04 system to the chroot/ folder which we will later use to boot our system. To create a bootable system, we need a kernel and the bootloader modules and files, so let’s install linux-image-generic and grub-pc:

Alternatively, you can of course use any Linux root file system, provided that it has a kernel and grub. You could, for instance, just copy your own root file system to the chroot/ folder.

2. Creating a GPT with a BIOS boot partition and an EFI System Partition

Now that we have the Linux root file system in the chroot/ folder, we’ll create a sparse file that represents our disk. You may of course do all this with a proper HDD/SSD, i.e. with /dev/sdX, but for testing things using a raw disk file is much easier. The following snippet will create 3 partitions:

  • A 1 MB BIOS boot partition (of type ef02) that Grub will use to store its core image.
  • A 100 MB EFI System Partition (of type ef00) formatted as FAT32 in which we will store the EFI boot image
  • And a partition for our root file system (in our example formatted with ext4)

Once this is done, you can list the partitions with gdisk -l test.img:

After the partitions are created, the EFI and root partition need to be formatted:

Note that I named the root partition demoroot (the ext4 label). This will be important later in the Grub configuration.

3. Copying the root file system, installing grub into the BIOS partition

Now that the partition to be used for our root file system is formatted, let’s copy our chroot/ directory to it and then install grub to the disk with grub-install. Because the disk is GPT formatted, grub will use the BIOS partition to install its core image:

After this, you should be able to boot the system via BIOS from the root GPT partition. I always do that via KVM like this:

4. Preparing the EFI partition

After you’ve verified that you can boot via BIOS, let’s make sure that we can also boot on UEFI systems. We formatted the EFI partition earlier. All that’s remaining is to create/copy the bootx64.efi image file and a valid grub.cfg to it.

Grub can create the EFI image via the grub-mkimage command using the Grub modules in /usr/lib/grub/x86_64-efi (part of the grub-efi-amd64-bin package). In order to avoid having to load anything from the file system, we include all the modules in the image. If you are not booted via EFI, you may need to install the grub-efi-amd64-bin package.

The Grub config file in the EFI partition grub.cfg is rather simple: It uses search --label demoroot to look for the root partition and then simply includes the actual grub config file via configfile . .

Let’s mount the EFI partition again, create the image and the grub config:

After that, the EFI partition should contain the two files /EFI/BOOT/bootx64.efi and /EFI/BOOT/grub.cfg. You can verify that like this:

That’s it. You should now be able to boot this image via UEFI. I always test this with KVM and OVMF:

5. One script to do it all

If you are an impatient man/woman, then you may just want to run the following script to do all of this in one go. You’ll of course have to adjust it to your needs for production use.

The script can be called in two ways:

Here’s the script:

9 Comments

This is a great article, I found it super useful. Thanks 🙂

FYI, I had to apt-get the ‘udev’ package because partprobe complained about ‘udevadm’ being missing and I needed to apt-get ‘parted’ so that partprobe was installed. I also added ‘–arch=amd64’ to debootstrap because I wanted a 64bit distro, it seemed to default to ‘i386’ which I assumed mean’t 32bit.

My next step is to investigate the ‘live_boot’ package to see if I can turn the distro into one that can install itself somewhere when booted and I’d like to find a way to squeeze the image size down from 30GB to something much smaller. Any ideas?

Thanks once again for the article,

Best regards
Mark

Is it possible to have a working system on a sparse file with only uefi, without any bios partition? Thanks a lot for your script!

The BIOS partition is used by grub only for BIOS boot. If you want UEFI only all you need is the EFI partition. The EFI grub.cfg references the grub.cfg on the root partition, not the boot partition, so you should be good there. You’d have to adjust the script not to create a BIOS partition, obviously.

mkosi (https://github.com/systemd/mkosi) does the same more or less in a automated manner, but only for UEFI systems.

You probably need to install grml-debootstrap to simplify a lot of this, for Debian Stretch I had to change a lot and it’s a lot easier to have grml-debootstrap generate the correct locales for instance.

Hi
1. Will this technique be good also for buildroot generated rootfs and kernel?
2. I tried the method and the uefi boot didn’t work for me. It reverted to normal boot after few error messages of not being able to uefi boot from cdrom and floppy….
Thanks
Gil

thanks !
hear https://pastebin.com/wUE25LwT#mkbiosefi is a URL for he script !

I have tried to run this solution on Debian9 Stretch (Linux dt 4.9.0-9-amd64 #1 SMP Debian 4.9.168-1+deb9u3 (2019-06-16) x86_64 GNU/Linux) however during boot I get “attempt to read or write outside of partition” from grub. The boot was through BIOS Boot after first part of the article.

Another thing is that I have got error after this part:
# Unmount OS partition
umount $MOUNTDIR/

/tmp/demoQOJKO9/sys: target is busy
(In some cases useful info about processes that
use the device is found by lsof(8) or fuser(1).)

there was system process:
lsof /tmp/demoQOJKO9/sys/
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd-l 397 root 7r REG 0,16 4096 2676 /sys/devices/virtual/tty/tty0/active
which had successfully blocked all of the unmounting attempts. I had dd test.img to usb drive and powered off the system.

Could you point which direction to go to as I belive I have tried all of the posibilities?

Hey… wonderful article. Works splendid. I have one problem btw. I rewrote the scripts to make a Void Linux install. When I boot the Void linux and log in.. take ‘ls /boot’ it only shows the EFI directory not the kernel and initramdisk. This is when I boot using EFI. Do you get the idea whats wrong? Sorry for my bad english.

Leave a comment

I’d very much like to hear what you think of this post. Feel free to leave a comment. I usually respond within a day or two, sometimes even faster. I will not share or publish your e-mail address anywhere.

Bios boot partition

The partition table format traditionally used on PC BIOS platforms is called the Master Boot Record (MBR) format; this is the format that allows up to four primary partitions and additional logical partitions. With this partition table format, there are two ways to install GRUB: it can be embedded in the area between the MBR and the first partition (called by various names, such as the «boot track», «MBR gap», or «embedding area», and which is usually at least 31 KiB), or the core image can be installed in a file system and a list of the blocks that make it up can be stored in the first sector of that partition.

Each of these has different problems. There is no way to reserve space in the embedding area with complete safety, and some proprietary software is known to use it to make it difficult for users to work around licensing restrictions; and systems are sometimes partitioned without leaving enough space before the first partition. On the other hand, installing to a filesystem means that GRUB is vulnerable to its blocks being moved around by filesystem features such as tail packing, or even by aggressive fsck implementations, so this approach is quite fragile; and this approach can only be used if the /boot filesystem is on the same disk that the BIOS boots from, so that GRUB does not have to rely on guessing BIOS drive numbers.

The GRUB development team generally recommends embedding GRUB before the first partition, unless you have special requirements. You must ensure that the first partition starts at least 31 KiB (63 sectors) from the start of the disk; on modern disks, it is often a performance advantage to align partitions on larger boundaries anyway, so the first partition might start 1 MiB from the start of the disk.

Some newer systems use the GUID Partition Table (GPT) format. This was specified as part of the Extensible Firmware Interface (EFI), but it can also be used on BIOS platforms if system software supports it; for example, GRUB and GNU/Linux can be used in this configuration. With this format, it is possible to reserve a whole partition for GRUB, called the BIOS Boot Partition. GRUB can then be embedded into that partition without the risk of being overwritten by other software and without being contained in a filesystem which might move its blocks around.

When creating a BIOS Boot Partition on a GPT system, you should make sure that it is at least 31 KiB in size. (GPT-formatted disks are not usually particularly small, so we recommend that you make it larger than the bare minimum, such as 1 MiB, to allow plenty of room for growth.) You must also make sure that it has the proper partition type. Using GNU Parted, you can set this using a command such as the following:

If you are using gdisk, set the partition type to ‘ 0xEF02 ’. With partitioning programs that require setting the GUID directly, it should be ‘ 21686148-6449-6e6f-744e656564454649 ’.

Caution: Be very careful which partition you select! When GRUB finds a BIOS Boot Partition during installation, it will automatically overwrite part of it. Make sure that the partition does not contain any other data.

Читать еще:  Включение аппаратной виртуализации в bios
Ссылка на основную публикацию
Adblock
detector