LINUX.ORG.RU

Научите: Win7 + GPT + Grub

 , , ,


2

6

Поймал себя на мысли, что (очень!) редко захожу в Win7, установленную на SSD и отжирающую, на секундочку, 70ГБ. В связи с этим было принято стратегическое решение: запилить Win7 на HDD с разметкой GPT (надо, камрады, надо чтобы была под рукой, всенепременно), а на SSD переместить раздел home.

«Сказано - сделано» - подумал я, но не тут то было. Оказывается, для установки Win7 в GPT-диск нужно грузиться в UEFI-mode. Если для CD-ROM'а у моей материнки предусмотрена опция «UEFI: CD-ROM», то для разделов дисков я вижу только префикс «AHCI:». Вот и получается, что первый этап установки с диска проходит отлично, а дальше - пшик, загрузиться в свежеустановленную винду не могу.

Думал сделать загрузку винды через Grub, но тот ругается: «error: invalid signature», т.е. вроде как не позволяет из MBR-mode переключиться в UEFI-mode.

Получается, линукс тоже придётся каким-то образом переводить в UEFI, но как? Как конвертнуть SSD с разметкой MBR в разметку GPT я знаю, но что дальше? Как заставить материнку грузить системы с хардов в UEFI-mode? Как запилить дополнительные разделы для подержки UEFI? Каков порядок их следования и ID-шники? В общем, я облазил практически весь тырнет, но так чтобы в целом охватить все нюансы - не получилось. Информации много, и она разбросана, цельной картины в голове так и не составил.

Камрады, взываю к вам. Научите.
Спасибо!

P.S. Материнка: ASRock Z68 Pro3.


1. на диске делаем раздел fat32, есть мнения насчет того что диск надо чтобы был со спец uuid, но я брал старую флешку в fat32 и не изменял на ней разделы.

2. Для проверки загрузки, возьми shellx64.efi и на этом fat32 разделе положи его как efi/boot/bootx64.efi

3. По идее после этого в биос будет доступен диск для загрузки и прописывать дополнительно ничего не надо. Будет грузится консоль.

Ну дальше уже зависит как это у тебя отработает, я лично подменял bootx64.efi на файл от grub и ......

irton ★★★★★ ()
Ответ на: комментарий от irton

2. Для проверки загрузки, возьми shellx64.efi и на этом fat32 разделе положи его как efi/boot/bootx64.efi

а вот этот вот shellx64.efi - что это и где его брать?

dbzix ()
Ответ на: комментарий от dbzix

любой какой нагуглится. если ненагуглится, могу выложить который у меня.

irton ★★★★★ ()
Ответ на: комментарий от irton

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

dbzix ()
Ответ на: комментарий от dbzix

но как проверить, что этот код не вредоносный?

ты хоть гуглить-то пробовал?

UEFI Shell

The UEFI Shell is a shell/terminal for the firmware which allows launching UEFI applications which include UEFI bootloaders. Apart from that, the shell can also be used to obtain various other information about the system or the firmware like memory map (memmap), running partitioning programs (diskpart), loading UEFI drivers, editing text files (edit), hexedit etc. You can download a BSD licensed UEFI Shell from Intel's Tianocore EDK2 Sourceforge.net project.

x86_64 UEFI Shell (Beta)

x86_64 UEFI Shell (Old)

i386 UEFI Shell (Beta)

i386 UEFI Shell (Old)

Use the Beta Shell. If it doesn't work use the Old shell. Few Asus and other AMI Aptio x86_64 UEFI firmware based motherboards (from Sandy Bridge onwards) provide an option called Launch EFI Shell from filesystem device . For those motherboards, download the x86_64 UEFI Shell and copy it to you EFI SYSTEM PARTITION as <EFI_SYSTEM_PARTITION>/shellx64.efi (mostly /boot/efi/shellx64.efi) .

https://help.ubuntu.com/community/UEFIBooting

novitchok ★★★★★ ()
Ответ на: комментарий от irton

В общем, я немного разобрался с проблемой «Win7 не ставится на диск с GPT-разметкой».
Перво-наперво, инсталляция меня предупреждала, что разделы некорректно расставлены. Я же не обратил на это внимания.

Только сегодня, порывшись в интернетах, переместил раздел MSR, шедший первым, сделав его вторым; на первое же место как раз определил раздел System EFI. Странно, что инсталляция сама этого не сделала, потому что сразу за MSR у меня было МНОГО свободного места... Ну видишь ты, что непорядок, ну возьми расставь разделы как надо, тем более MSR вообще не хранит никаких данных... Чёрт с ним, оставим на совести мелкомягких, с этим разобрались.

Теперь моя таблица разделов выглядит так:

sdb1 - System EFI partition (type EF00)
sdb2 - MSR partition (type 0C01)
sdb3 - NTFS with Win7 installation
sdbX - rest...
sdbY - rest...
...

Теперь самые интересности. Сразу после первого этапа установки появляется в опциях загрузки Windows Boot Manager. На самом деле, он появился ещё вчера, но вчера при его выборе вообще ничего не происходило, я просто попадал в GRUB.

Теперь же при выборе Boot Manager'а начинается загрузка Win7, но дальше возникает некая ошибка 0xc0000225 с мистическим сообщением о некоем hardware changes.

Потупив немного, я отключил SSD, и всё стало загружаться и работать на «ура». Инсталляция завершилась, Win7 грузится с GPT через UEFI - всё как и хотел.
Стоило только подключить SSD назад, начались те же проблемы.
Попробовал переустановить заново, ничего не отключая, но ошибка 0xc0000225 и сообщение про чёртовы hardware changes остались. Repair с инсталляционного диска не помог :(

Пока гуглю, но уже есть прогресс :) По крайней мере, установка на GPT на моей системе возможна.

В любом случае, если у кого есть что сказать по этой теме - милости прошу.

dbzix ()

Кстати, подписавшимся. Очень помогли охватить картину в целом вот эти три крутые штуки:

dbzix ()

Путь самуря пройден практически самостоятельно.
Спешу поделиться опытом.

Было.
/dev/sda - SSD, размеченный в MBR
/dev/sdb - HDD, размеченный в GPT
На SSD стояли Win7 и LMDE. Схема разметки была такая:
/dev/sda (MBR):

sda1 - ntfs 100M (boot files)
sda2 - ntfs 70G  (windows)
sda3 - extended partition
  sda4 - ext2 200M (/boot)
  sda5 - swap 8G
  sda6 - ext4 (rest) (/)
/dev/sdb (GPT)
sdb1 - MSR 100M  (type 0c01)
sdb2 - ntfs 100G (misc files for win)
sdb3 - ext4 500G (/home)
...
Что хотелось сделать.
Очень редко используемую Win7 переместить на GPT HDD (/dev/sdb), а ежедневно используемый /home переместить на MBR SSD (/dev/sda).

Prerequisites.

  • Читаем от корки до корки.Arch wiki
  • Если у вас диски с GPT, вам, скорее всего, нужен UEFI. Если у вас UEFI, вам, скорее всего, нужны диски с GPT. Это необязательное условие, т.к. UEFI прекрасно работает с разметкой MBR. Но, например, для установки Win 7/8 x64 в GPT раздел вам придётся загружать её в UEFI-mode со всеми вытекающими (об этом ниже).
  • Отсюда сразу совет. В связке GPT+UEFI на диске с разметкой GPT первым разделом обязательно должен идти раздел EFI System Partition. Он имеет тип ef00 и обычно форматируется в fat32. Для работы с GPT используется утилита gdisk. Размер раздела ef00 должен составлять 100-200М, больше, как пишут везде, не нужно.


Поехали!

1. Windows 7
Первым делом я захотел установить Win7 на раздел с GPT. Переразбил разделы, высвободил место. Первым разделом у меня был MSR (при первичной разметке Win помещает в начало этот раздел, как пишут, для дальнейших манипуляций; неясно почему она также не создаёт сама раздел EFI System Partition и оставляет это на пользователей), поэтому пришлось это учесть и составить схему разбивки диска следующим образом:

sdb1 - EFI System Partition 200M (type ef00)
sdb2 - MSR 128M (type 0c01)
sdb3 - ntfs (windows )
sdb4 - ntfs (misc files for windows)
...
Раздел MSR, в принципе, винда сама же при установке и создаёт, так что можно не делать этого руками. Важно лишь, чтобы первым разделом был именно EFI System Partition. И так на каждом диске с GPT-разметкой.
Всё готово, загружаемся с установочного носителя в UEFI-mode (выбирается при помощи загрузочного меню материнской платы) и устанавливаем. После первого этапа установки компьютер перезагружается и... отказывается загружать свежеустановленную систему для окончания установки. Ошибка 0xc0000225, говорит что были hardware changes. Arch wiki подсказывает:
Windows 7 will not boot in UEFI Mode.
If you have installed Windows to a different harddisk with GPT partitioning and still have a MBR partitioned harddisk in your computer, then it is possible that the UEFI BIOS is starting it's CSM support (for booting MBR partitions) and therefor Windows will not boot. To solve this merge your MBR harddisk to GPT partitioning or disable the SATA port where the MBR harddisk is plugged in or unplug the SATA connector from this harddisk.
Вариантов, как пишут, два. Либо отключить на время устройство с разметкой MBR и установить Win куда хотели; либо конвертировать MBR-диск в GPT-диск - и всё заработает.
Мы будем конвертировать, конечно же, так что пока окончание установки Win7 можно отложить.

2. Convert MBR to GPT
Здесь всё просто. Запускаем gdisk, проверяем порядок следования разделов, записываем изменения на диск, всё. Но, т.к. мы уже имеем дело с GPT, а грузим систему всё ещё в BIOS-mode, необходимо сделать ещё кое-что - создать раздел, который GRUB будет использовать для загрузки нашей (пока ещё BIOS-style) системы.
Я пользовался вот этим замечательным руководством.
Т.е. понадобится небольшой (размером 1-4М) раздел с кодом ef02 для загрузки существующей linux-системы через GRUB средствами BIOS на диске с разметкой GPT. Место, где будет добавлен этот раздел, значения не имеет.
Всё просто. Добавили раздел. Сообщили ядру про изменения в таблице разделов. Сделали grub-install на нужное устройство. Обновили grub.cfg при помощи update-grub.
Сейчас у нас получился вот такой GPT-диск (/dev/sda, SSD):
sda1 = BIOS Boot Partition 4M (type ef02)
sda2 = ext2 (/boot)
sdb3 = ext4 (/)
sdb4 = swap
sdb5 = ext4 (/home)
На этом шаге получили систему с двумя GPT-дисками, готовую к установке Win7, способную загружаться в BIOS-mode в linux и в UEFI-mode в Win7 после её установки. Для выбора способа загрузки используется всё то же загрузочное меню материнской платы.
В принципе, здесь можно остановиться. Мы можем использовать оба диска, все системы загружаются. Единственный нюанс - linux у нас грузится с GPT-диска в режиме BIOS, а значит не может загружать Win7, которая установлена на другой GPT-диск, но в режиме UEFI. Мы можем при помощи системного меню выбирать, какую систему загружать. Либо мы можем конвертировать linux в режим загрузки UEFI и использовать GRUB для загрузки всех UEFI-систем. Это делаем в следующем пункте.

3. Transition from grub-pc to grub-efi.
Сделать это тоже просто.
Нужен установочный диск с линухой (или любой подходящий live-диск) и вот это руководство.
Больше не нужен раздел с кодом ef02, т.к. мы будем использовать связку GPT-UEFI и никаких больше совместимостей с BIOS, но, как уже говорилось, нужен раздел EFI System Partition (код ef00, нужен для файлов загрузки efi-системы).
Т.е. загрузились в live-систему в режиме UEFI (именно в режиме UEFI - это важно для корректной установки grub-efi), смонтировали разделы /, /boot и /boot/efi (это как раз наш раздел с кодом ef00, куда помещаются данные для efi-загрузки; /boot/efi - просто общепринятое место монтирования). Дальше смонтировали специальные файловые системы (/dev, /dev/pts, /proc, /sys), сделали chroot и в chroot-окружении установили пакет grub-efi. Дальше установили новый GRUB на устройство (grub-install /dev/sda) и удовлетворились результатом. Покинули chroot. Отмонтировали всё, перезагрузились - ура! В системном меню появился новый пункт загрузки (у меня он зовётся linuxmint, но можно переименовать его при помощи утилиты efibootmgr).
После этого можем загружаться в свежеконвертированную систему через UEFI, убедиться что мы действительно загрузились в UEFI-mode (существует путь /sys/firmware/efi), и, при желании, добавить в меню GRUB нашу EFI-Win7 при помощи update-grub. Тогда нам вообще не нужно системное загрузочное меню материнской платы для выбора системы для загрузки. Мы выбираем для загрузки пункт, который загружает GRUB, а уже с его помощью выбираем что грузить дальше. Всё как и было :)

Наш /dev/sda в финале выглядит так:
sda1 = EFI System Partition 200M (type ef00)
sda2 = ext2 (/boot)
sdb3 = ext4 (/)
sdb4 = swap
sdb5 = ext4 (/home)

Задача выполнена. Всем спасибо, все свободны.

P.S. Копирование данных раздела /home с диска на диск делал в live-системе при помощи cp -ax.
P.P.S. Готов расцеловать авторов live-gparted и live-clonezilla.

dbzix ()
Ответ на: комментарий от dbzix

/boot не обязательно делать отдельным разделом. grub-uefi загрузит ядро даже из под softraid+lvm.

bhfq ★★★★★ ()
Ответ на: комментарий от bhfq

я не хотел ничего менять, был раздел /boot и пусть остаётся, кто знает какие ещё эксперименты я буду проводить :)

dbzix ()

Шикарно. Держи пять )))) Давно думал переехать на мультибут на UEFI + GPT.

targitaj ★★★★★ ()
Ответ на: комментарий от dbzix

Более "правильная" разметка

sda1 = swap
sda2 = EFI System Partition 260M (type ef00)
sda3 = MSR 128M (type 0c01)
sda4 = ntfs (windows )
sda5 = ext4 (/) altlinux
sda6 = ext4 (/) ubuntu
sda7-x

EFI System Partition можно разместить в любом месте диска. Расположение swap в начале диска никак не мешает загрузке но в случае случайного стирания больше вероятноть восстановления. При другом расположении MSR-раздела ругается windows. Установку ОС можно проиводить в любой последовательности. В каждом linux необходимо сделать update-grub. В загрузочном меню материнской платы выбираем UEFI:(пункт загрузки),Но windows традиционно увидет только себя,у altlinux более красивое меню.

alexteplov ()

В части запиливание Линукса на GPT/UEFI могу сказать следущее... Из обязательного: Размечать диск нужно gdisk'ом.

1. Размечаешь /boot-раздел 40-150мб с меткой ef00(это главное). Далее форматируешь этот раздел в FAT32 и мотируешь в /boot перед установкой.

2.Используем загрузчик gummiboot. Gummiboot - это простой UEFI менеджер загрузки, который запускает исполняет настроенные EFI образы.

На момент, когда я интересовался данным вопросом, grub вообще не мог нормально грузить c GPT/UEFI.
Вот установка на примере Arch

QIQuJIunn ★★ ()
Последнее исправление: QIQuJIunn (всего исправлений: 3)

paragon-ом перемести раздел, а хоум уже и в линуксе

mystery ★★ ()
Ответ на: комментарий от QIQuJIunn

А почему именно gdisk'ом? Почему gparted не годится?

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.