Progress28.ru

IT Новости


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

Gpt 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.

grub2-install: “this GPT partition label contains no BIOS Boot Partition”

There seems to be quite a bit of discussion about this but I can’t find a simple answer.

When I try to install grub2 I get this error:

Here is the layout of /dev/sda:

Is there a simple way that I can get around this problem? I understand that I need to create a tiny partition at the beginning of the disk as a «BIOS Boot Partition». I suppose one option would be to move the swap to /dev/sda4 as a logical volume, and use /dev/sda2 as /boot.

Alternatively I could just go back to grub-legacy and not worry about that (is there really an advantage to upgrading to grub2 if it causes this much trouble?).

3 Answers 3

You should first determine whether you want to use a BIOS/CSM/legacy-mode boot or an EFI/UEFI-mode boot. The former is the way that PCs have been booting since the 1980s, but it’s an ugly and hackish system that will be going the way of the dodo before too long. Windows ties BIOS-mode booting to the MBR partition table, which you’re not using (but could; your disk is nowhere near big enough to require GPT). Linux, FreeBSD, and most other modern OSes are more flexible, and support BIOS-mode booting from GPT; but there are sometimes firmware-created complications, and of course if you later decide to install Windows in a dual-boot setup you’ll need to make changes or compromises.

EFI/UEFI-mode booting is less of a hack; but EFI implementations vary greatly in quality and the overall level of expertise and support on the Web for EFI is lower than that for BIOS. Windows ties use of GPT to EFI-mode booting, so if you expect to ever install Windows on your computer, EFI is definitely the way to go. Older computers are BIOS-only. EFI began to take off in the marketplace in mid-2011, so if your computer is older than that, you might not be able to use EFI.

If you go with BIOS-mode booting, you should create a BIOS Boot Partition on the disk. There’s enough room at the start of your disk for this partition, but you’ll need to set your sector alignment value to 1 (from the usual 2048) for this to work. I don’t know offhand if this can be done with parted , but you can do it with gdisk . (Note that the space at the start of your disk is slightly under the recommended 1MiB size for a BIOS Boot Partition, but just by a few sectors. It will probably work fine, but might conceivably fail at some point in the future.) Alternatively, you can shrink any of your partitions by 1-2MiB to make room for the BIOS Boot Partition. This partition does not need to be the first partition on the disk, although that’s the conventional location.

If you go with EFI/UEFI-mode booting, you must create an EFI System Partition (ESP). This partition must be FAT-formatted and must be significantly larger than a BIOS Boot Partition, so you’ll have to resize something to create it. I recommend a size of 550MiB, although a tenth of that might work in a pinch.

To install GRUB, you should first be sure that you’ve installed the correct GRUB package. I’m not sure of naming in all distributions, but in Ubuntu, it would be grub-pc for BIOS/CSM/legacy mode and grub-efi-amd64 for EFI/UEFI mode. An EFI-mode installation will also require booting whatever you’re using to install GRUB (a live CD/USB, presumably) in EFI mode. Doing this may require using your computer’s built-in boot manager, which is typically accessed via a function key, but the details vary from one computer to another.

Читать еще:  Как зайти в uefi bios
Ссылка на основную публикацию