Кому интересно, читаем далее:
К счастью, Windows 7 и старше, изначально готовы грузится в любом из режимов, нужно только изменить структуру разделов и загрузчик.
Для этого нам понадобится:
- Установочный диск с Windows (или любой другой рабочий установочный носитель).
- systemrescuecd
- Новый диск, на который мы будем мигрировать (конвертацией займетесь сами, если диска нет)
Загрузимся с systemrescuecd и просмотрим наши диски:
fdisk -l
У вас ситуация может немного отличаться, в моем случае, /dev/sda это исходный диск, а /dev/sdb на который будем переносить систему.
Начнем создавать разделы (используем gdisk для разметки в gpt, а fdisk для mbr):
gdisk /dev/sdb
Немного сожмем нашу исходную ФС на разделе /dev/sda2 (чтобы она точно влезла в новый раздел).
ntfsresize -s 126G -f /dev/sda2
Клонируем раздел, и расширяем его на все доступное пространство:
partclone.ntfs -b -I -s /dev/sda2 -o /dev/sdb4
ntfsresize -f /dev/sdb4
Теперь загрузимся с Windows установочного носителя в режиме UEFI, выберем восстановление системы, и запустим командную строку.
Утилита diskpart нам поможет найти наши диски:
Будьте внимательны, выбрав не тот диск, можно сделать очень больно и обидно.
В моем случае, новый диск имеет цифру 1. Его выбираем, выбираем второй раздел и форматируем его в FAT32 (для системного раздела UEFI), в конце назначаем ему букву диска S:
format quick fs=fat32 label="EFI"
assign letter="S"
Сложнее с разделами, куда установлена Windows. После клонирования, метки тома у них одинаковые (можно было и в Linux их поменять). Но нам опять поможет diskpart, мы просто выберем том, и посмотрим его детальные параметры.
Интересный нам раздел с буквой E, на него нужно установить загрузочные файлы:
bcdboot E:\Windows /s s: /f UEFI
Затем, проверим, что конфигурация загрузчика верна, и если это не так, пропишем правильные данные (в моем случае, загрузка указывала на неверный том, и я его переопределил, в примере идентификатор, начинающийся на 586).
Вот и все, после перезапуска, система должна загрузиться.
Из UEFI в BIOS
В обратную сторону все примерно также (помним про типы разметки), но нужно создать один загрузочный раздел с NTFS (метров 100) и раздел для самой системы. Сделать активным загрузочный раздел, а затем установить на него загрузчик и загрузочную информацию (загрузочный раздел у нас с буквой S):
bcdboot E:\Windows /s s: /f BIOS
bootsect /nt60 s: /mbr
Дальше правим загрузочную конфигурацию, и все.
Комментарии (31)
tehnolog
24.02.2016 22:27+1Прошу прощения за глупый вопрос не по теме. Я слышал об UEFI лет 6-7 назад и говорил своим товарищам, что он в будущем заменит биос. На меня тогда смотрели как на чудака. А как с этим обстоит дело сейчас? Я отошел от железок и не в курсе, насколько широко представлена эта технология на новых компьютерах?
MagicGTS
24.02.2016 22:42+2Распространяется в добровольно-принудительном порядке. Я бы не сказал, что UEFI невероятно лучше, чем BIOS. Задумка хорошая, а вот с реализацией не все гладко (тут, на Хабре, один товарищь очерь подробно разобрал многие проблемы)
MTonly
24.02.2016 23:15Есть ли в UEFI возможность выбора порядка приоритетов видеовыходов? (Например, чтобы из имеющихся DP, HDMI, DVI выходом по умолчанию был не DVI, а DP.) Спасибо.
MagicGTS
24.02.2016 23:19Все зависит от реализации самого UEFI, в каждом конкретном случае.
Обычно этого нет. Но если сильно захотеть, можно написать efi скрипт (надо впихнуть его до загрузки вашей ОС). И уже в скрипте, выставлять нужные переменные (какие нужны, смотреть опять индивидуально).
В целом, UEFI предоставляет возможности, схожие с *nix shell.CodeRush
25.02.2016 00:33Только не сам UEFI, а его shell. Диспетчер BDS позволяет запускать пользовательские приложения вместо загрузчиков, все остальное — это уже сам UEFI Shell реализует, от UEFI там только сервисы и прямой доступ к еще не выгруженным драйверам и протоколам.
CodeRush
25.02.2016 00:30Если коротко, то да, но только если производитель вашей платформы предоставляет соответсвующий драйвер. В произвольной реализации UEFI — скорее всего нет.
creker
24.02.2016 22:53По сути, заменил. Материнки все с UEFI идут давным давно. В телефонах уже этот UEFI поселился.
lostinfuture
25.02.2016 10:46Как мне сказал один французский товарищ, UEFI в массы пошло в принтерах :-)
CodeRush
25.02.2016 00:31+1Только она теперь и представлена, по больше части. Исключения крайне редки — хромобуки с coreboot, да машины Apple с EFI 1.10, все остальное — UEFI 2.1+ начиная с систем на чипсете P67.
kay
25.02.2016 11:38Реализация UEFI сильно хромает. Видимо производители не могут осилить спецификацию http://www.uefi.org/sites/default/files/resources/UEFI%20Spec%202_6.pdf
На хабре даже серия статей была про то какие производители рукозады. https://habrahabr.ru/post/266935/
Например мой HP даже при включении SecureBoot позволяет грузить неподписанные ядра. :facepalm:
kay
25.02.2016 11:25Вот только вчера такой же вопрос опубликовал: https://toster.ru/q/295662
Только я пытаюсь сделать это без переноса расзделов, а сразу на одном диске.MagicGTS
25.02.2016 11:28Надеюсь статья вам помогла, если есть не очевидный нюанс, то я внесу его в статью.
kay
25.02.2016 11:43Я не был в курсе этих команд (/? про это молчал, man'ов в винде тоже нет, печаль). Попробую, вдруг получится без переноса разделов.
bcdboot E:\Windows /s s: /f BIOS bootsect /nt60 s: /mbr
P.S. Большинство туториалов на эту тему в интернете убоги и написаны школьниками. Не смог найти ни одного толкового. И часто вместо туториала предлагают просмотреть youtube видео. В 90% случаев предлагают скачать специальную графическую утилиту, да еще и платно. Мне после мира Linux это кажется дикостью :)
kay
25.02.2016 11:55+1Еще парочка дикостей (простите, накипело):
1) Windows 7 не имеет встроенной возможности создавать загрузочную флэшку. Только запись на CD/DVD, только хардкор.
2) Windows 8 имеет такую возможность, но всё еще нет варианта "создать образ". Например создал ISO'шник или IMG, перетащил куда надо и записал.
3) Почему нельзя параметры загрузки заключить в текстовый файл? Почему BCD всё хранит в бинарном формате? Или я что-то не понимаю?Pugnator
25.02.2016 12:02+2bcd это обычный файл реестра, это удобная нативная база данных, зачем им изобретать новый велосипед?
kay
25.02.2016 12:13+3Занятно… Значит в Linux его легко можно отредактировать с помощью hivexregedit. И почему так мало информации об этом. Вот что только что откопал:
hivexregedit --export BCD '\' > BCD.reg
И редактируй сколько душе угодно. Затем:
hivexregedit --merge BCD BCD.reg
Класс!
kay
25.02.2016 14:23Нет, не получается. Делаю следующим образом:
Конвертирую MBR->GPT. Само собой система после этого не грузится. Но разделы в норме, можно примонтировать, всё читается (ntfs boot + ntfs windows).
Перезагружаюсь в recovery, там делаю следующее:
$ diskpart select disk 0 # тот, что с GPT select partition 1 # тот, что первый с NTFS boot, partition 2 это C:\Windows assign letter=S exit
Затем:
$ bcdboot C:\Windows /s s: /f BIOS Boot files successfully created $ bootsect /nt60 s: /mbr Target volumes will be updated with BOOTMGR compatible bootcode S: <\Device\HarddiskVolume1> Successfully updated NTFS filesystem bootcode \??\PhysicalDrive0 Bootcode is only updated on MBR partitioned disks. A different partitioning scheme is used on this disk. Bootcode was successfully updated on all targeted volumes.
Преезагружаюсь, результат тот же — при загрузке "Missing operating system"alexrus
25.02.2016 15:24Дак неудивительно, что не получается. Раз вы мигрируете на UEFI, то команда должна быть такой:
bcdboot E:\Windows /s s: /f UEFI
Самом собой, имена дисков смотрите в diskpart.kay
25.02.2016 15:53Да кто сказал, что я мигрирую на UEFI? Я хочу использовать раздел GPT + Legacy boot.
alexrus
25.02.2016 16:00Я в последнем вашем комментарии прочитал.
«Конвертирую MBR->GPT.»
А что касается вашего вопроса, почему вы уверены, что в легаси можно загрузиться с GPT раздела?kay
25.02.2016 17:21А почему нет? При использовании grub само собой.
MagicGTS
25.02.2016 17:50Windows, при обнаружении валидной MBR (а у HybridGPT она валидная), проверять наличие gpt уже не будет.
Если же у он находит Protective MBR (специально сформированную заглушку, а HybridGPT кроме раздела заглушки, имеет еще и другие разделы, что не по стандарту, и соответствует валидной MBR), то ищет gpt.
Но это все ерунда, когда выясняется, что код загрузчика Windows, загружаясь в режиме MBR, полностью игнорит существование gpt. Естественно его не находит, и выпадает в осадок.
Костыль: разместить загрузочный раздел на флешке или эмулировать его в памяти (должен быть с разметкой MBR).kay
25.02.2016 18:08Я вот про костыль можно подробнее?
MagicGTS
25.02.2016 18:23Сам такое не делал, но может прокатить. Идея такая:
GRUB4DOS умеет затягивать в память образы дисков (простые, линейные) и эмулировать из него рамдиск, который на уровне BIOS будет восприниматься вполне себе нормальным диском. А уже раз есть такой диск, который MBR, то на нем и размещайте загрузочные данные от Windows.
Тут только я не вполне уверен, в какой момент загружается код, умеющий работать с gpt
Идея растет из того, что можно грузить Windows с GPT, если раздел загрузки находится на флешке (тот самый раздел на 100 мегов). Его можно сделать по этой статье.
Пример для floppy с DOStitle MS-DOS find --set-root --ignore-floppies /boot_ntfs map /boot/win98.ima (fd0) map --hook chainloader (fd0)+1 rootnoverify (fd0) map --floppies=1
MagicGTS
25.02.2016 15:44Видимо вас сбила столка концовка статьи, теперь я ее отделил, чтобы больше никого не путать.
a553
Вместо
systemrescuecd
можно использовать любую другую утилиту для клонирования разделов. Я использовал AOMEI backupper.creker
Если я правильно понял, то AOMEI сможет вообще все сам сделать. Сам переводил windows server с MBR на GPT. Делается в один клик на живой системе