Недавно на работе возникла задача перенести рабочие места менеджеров со старых компов на новые. А человеки они такие - они привычны к своему годами выстроенному окружению. Поэтому я решил перенести систему "как есть". Благо везде 10ка, а она довольно либерально относится к таким миграциям с железки на железку, с семеркой такое не проканало бы...Вот только старые системы были установлены в MBR, а материнские платы с процами 11ого поколения MBR не очень то и поддерживают...
Если вкратце - то переносится раздел с виндой, перед ним создается EFI раздел размером в 100 МБ и MSR размером в 16... Последний оказался нужен. Для работы системы он не нужен, но вот обновления нормально на такую "перенесенную" систему без него не встанут совсем...
Будут откатываться на 95%, всякие UpdateAssitant'ы будут ругаться на то, что не могут определить возможно ли установить Windows на этот компьютер, попытки обновиться с CD - тоже.
Загружаемся в окружении восстановления, если активирован recovery в винде (если систему изначально апдейтили с семерки, как в моем случае - скорее всего - нет) или грузимся с winPE, открываем cmd и идем в diskpart
diskpart
lis dis
sel dis 0
смотрим диски в системе и выбираем тот, на котором стоит винда и нужно вкрячить загрузчик, он не обязательно будет номером 0. К примеру если система стояла на HDD, потом добавили SSD и перенесли систему на него - то скорее всего SSD будет иметь номер 1. Но в данном кейсе - перенос системы на другое железо и диск только 1 и он девственно чист - у него номер ноль
list part
Это покажет уже разделы на HDD, опять таки - диск у нас девственно чист, на нем нет ничего, делаем это чтобы, к примеру, не потереть загрузочную флешку или еще какой диск подключенный к системе
Если диск не девственно чист, или к примеру была уже сделана копия загрузочного диска - то мы увидим имеющиеся на нем разделы. В случае полного копирования системы в MBR мы увидим как минимум 2 раздела - на 500 МБ NTFS "Зарезервировано системой" и раздел с виндой.
sel part 1
del part override
Этими командами мы удаляем раздел с номером 1, тот на котором в mbr был загрузчик.
Теперь можно приступить к созданию минимальной разметки для винды
create part efi size=100
sel part 1
format quick fs=fat32 label="EFI"
создаем раздел, выбираем его (имеет смысл сделать lis part
чтобы убедиться что выбран свежесозданый раздел или посмотреть его номер, вдруг не 1?) и форматируем в FAT32 с меткой EFI
Далее, по аналогии, создаем MSR, но его форматировать не нужно
create part msr size=16
Все, базовая разметка есть. Теперь переносим раздел, если диск был пуст или не переносим, если диск был склонирован и мы работали с клоном. В последнем случае между разделом MSR и виндой будет не маленький такой зазор почти в 400 МБ - разница в размере раздела EFI и MBR. Можно оставить, можно подвинуть раздел, или можно на стадии создания разметки сделать EFI и MSR пожирнее (для MSR валидны размеры в 16 и 128 МБ, лучше придерживаться этого, иначе могут возникнуть проблемы при установке обновлений, я просто клал раздел с виндой на целевой диск уже после создания базовой разметки, так как двигать разделы ближе к началу диска - операция не многим отличная по времени при их переносе из копии)
Криво-Ручное создание загрузчика
Далее будет про то как ручками создать хранилище BCD и перенести загрузчик, но не рекомендую, пишу для себя, так как при таком создании загрузчика система снова не будет нормально обновляться... Но теперь на стадии "Проверки Компьютера" она будет ругаться на то, что ей недостаточно места, хотя места может быть хоть несколько терабайт...
lis part
sel part 1
assign letter=Z
Ищем EFI раздел, выбираем, назначаем буковку, это будет нужно для копирования EFI загрузчика
lis part
sel part 3
assign letter=C
Находим раздел с виндой, выбираем, назначем букву.
В моем случае это 3ий раздел и буква C
При работе с полной копией диска, когда удаляли MBR раздел - номер раздела может отличаться, а буква может быть уже назначена. На этом с diskpart все.
exit
Приступаем к копированию загрузчика
mkdir Z:\EFI\Microsoft\Boot
xcopy /s C:\Windows\Boot\EFI\*.* Z:\EFI\Microsoft\Boot
В современных виндах файлы EFI загрузчика существуют в системе, даже если изначально ее ставили в MBR, их мы и копируем на EFI раздел. Если их, по какой-то причине, нет, то забрать их можно с установочного диска, другой инсталяции винды. Пути будут такие же, разве что при копировании с установочного диска путь будет CD:\EFI\Microsoft\Boot
, то есть такой же как и целевой путь, но с литерой установочного диска. После копирования идем в раздел куда мы их перенесли
Z:
cd EFI\Microsoft\Boot
bcdedit /createstore BCD
bcdedit /store BCD /create {bootmgr} /d "Windows Boot Manager"
bcdedit /store BCD /create /d "Windows" /application osloader
И в папке куда мы их скопировали создаем новый BCD, в BCD создаем новую EFI запись, в EFI записи - новый загрузчик винды. Последняя команда выдаст GUID созданного загрузчика. Он нам нужен, копируем. В WinPE окружении, в терминале можно просто выделить его мышью и нажать ПКМ.
Далее этот GUID в тексте будет {your-guid}, понадобиться он один раз
bcdedit /store BCD /set {bootmgr} default {your-guid}
bcdedit /store BCD /set {bootmgr} path \EFI\Microsoft\Boot\bootmgfw.efi
bcdedit /store BCD /set {bootmgr} displayorder {default}
Выставляем наш загрузчик дефолтным, указываем путь до него и выставляем в дефолт список установленных систем
bcdedit /store BCD /set {default} device partition=c:
bcdedit /store BCD /set {default} osdevice partition=c:
bcdedit /store BCD /set {default} path \Windows\System32\winload.efi
bcdrdit /store BCD /set {default} systemroot \Windows
Настраиваем собственно default - указываем букву системы, путь для загрузчика который загружается загрузчиком ;) и корень установленной системы. Если побаловаться с этими параметрами и правильно переименовать папки, сменить буковки дисков, то можно грузить винду, к примеру из папки NotANormalWin с диска W: ))) Но многое может поломаться... так как множество приложений ожидает systemroot в Windows, а букву в C
Собственно можно перезагружаться. Система загрузиться, некоторые обновления встанут без проблем, но обновления что захотят что либо записать в BCD - пойдут лесом, так как он помечен как отредактированнйый ручками и автоматика с ним работать откажется...
Ручное создание загрузчика
Для начала так же присваиваем буквы разделам EFI и Windows
lis part
sel part 1
assign letter=Z
sel part 3
assign letter=C
Точно так же, разделы могут иметь другие номера, а у винды уже может быть буковка, забыл написать - посмотреть буковки можно в diskpart
командой lis vol
Выходим из diskpart
командой exit
Идем в EFI раздел и папку boot
Z:
cd EFI\Microsoft\Boot
Если мы криворучным способом до этого создавали BCD, то он там будет. Снимаем с него атрибуты неприкосновенностиattrib BCD -s -h -r
и либо удаляем, либо делаем бекап (уж не знаю зачем, в прочем этот метод работает и на системах, где загрузчик был, да сплыл, и в нем могут быть какие-нить хитрые записи)ren BCD BCD.bak
Далее копируем то же и туда же, но не ручками, а с помощью виндовой утилиты
bcdboot C:\Windows /l ru-ru /s Z: /f ALL /c
Собственно перезагружаемся, должно работать, если работает, можно удалить бекап BCD, но мне обычно лень, так как нужно опять перезагружаться в WinPE...
Z:
del \EFI\Microsoft\Boot\BCD.bak
Ну и буковки с разделов можно снять...
diskpart
lis disc
sel disk 0
lis vol
lis part
sel part 1
remove letter=Z
Ищем EFI, снимаем буковку. Я точно не помню, но мне кажется, что буковка снимается сама при перезагрузке.
Комментарии (15)
JackKatch
31.10.2022 11:25Не очень понятно утверждение "не очень то поддерживают". Могу ошибаться, я не в теме, но MBR просто формат записи информации о структуре разделов на диске. Как это может не поддерживаться...?
ksgray Автор
31.10.2022 11:59Да, все верно. MBR - это формат записи о структуре диска. Только вот современные материнские платы для загрузки со "старого" загрузочного диска эмулируют работу старого BIOS. Некоторые новые платы вообще не имеют в настройках UEFI всякие Legacy\CSM\etc
А для загрузки в UEFI режиме даже не нужно форматировать диск в GPT - UEFI загрузится, если найдет загрузчик, и ему не важно в какой разметке
JackKatch
01.11.2022 17:18+1Случайно сейчас понадобилось провести эксперимент, грузится с флэш CSM и читать данные сервисом BIOS. (На современной плате) Отказывалось работать. Крутил, вертел, нашел решение, нужно было, кроме поддержки CSM включить еще legacy PCI - работа с устройствами (как то так, не помню точно). (Просто комментарий)
PeterZha
31.10.2022 20:12+2Там теперь проблема в том, что для загрузки в CSM (non-UEFI) нужно наличие дискретной видеокарты, тк у встроенной в новые процы нет своего legacy BIOS, и в режиме CSM она просто не инициализируется.
Поэтому у некоторых вендоров в отсутствие видеокарты просто нет пункта legacy boot (CSM), а некоторые пугают пользователя надписью "to enable CSM boot please install pcie graphics card"..
ksgray Автор
31.10.2022 23:47В моем случае - это вообще тонкие платформы, не предусматривающие дискретный GPU
rrusstt
31.10.2022 12:21+1автор видимо не в курсе про bcdboot.exe который вносит нужные правки чтобы загружать откуда надо файлы загрузчика и винды.
И я первый раз слышу про "он помечен как отредактированнйый ручками и автоматика с ним работать откажется "
Пруфы! Где пруфы, какой код у этого маркера?
А вообще хабр теперь помойка из-за этой кармы, специально залогинился только ради этого комментария, можете минусовать на здоровье, это лишь подтверждает мое впечатлениеksgray Автор
31.10.2022 12:23+1В конце статьи есть "нормальный способ" с bcdboot) Пруфы... у меня вроде осталась одна рабочая станция, если не забуду вечером сделаю пруфы
Текст ошибки нашел, более подробно будет вечером, когда менеджер покинет свое рабочее место. Заодно и его машину перенесу
Не удается открыть данные загрузки. Том для открытого файла был изменен извне, поэтому работа с этим файлом невозможна.
Если направите меня в направлении, которое покажется вам достаточным пруфом - буду благодарен. Возможно я и на самом деле что-то понял не так
ShadowMaster
Переносил Windows 7 с SATA SSD с загрузкой MBR на NVMe. Никаких проблем вообще не было. Единственное, что перед переносом нужно поставить обновление с поддержкой NVMe (кажется KB2990941) и можно отдельно поставить драйвер для SSD (у самсунга он есть). Дальше записал флешку с дистрибутивом windows 7 с интегрированным KB2990941, запустил установку, самое главное дать разбить диск как она хочет, дальше можно установку прервать (а можно и подождать 5 минут окончания). А потом просто удалил раздел с семеркой на новом диске и акронисом скопировал с растягиванием раздел семерки со старого диска. Два служебных раздела оставил. Семерка запустилась как будто всегда тут жила.
MikkiKre
Да, поставить чистую систему, а потом перезаписать поверх раздел со старой это хорошая идея, спасибо. Пусть все танцы с бубнами в статье автора пляшет для сисадмина Билл Гейтс:)
Ditroo
У меня есть быстрый способ:
mbr2gpt /validate /allowFullOs
За тем:
mbr2gpt /convert /allowFullOs
Всё.
ksgray Автор
Это если вываливать весь образ на новый HDD/SSD в mbr. У меня в кейсе был диск на 500 Гб разбитый на 2 раздела. Я просто подготовил служебные разделы, перенес систему на NVMe и перенес "Диск Д" на SATA SSD для данных, не меняя разметки на SSD, что уже была размечена в GPT. Так как компов у меня таких было полтора десятка - старался сводить к минимуму ненужные копирования, перезагрузки и прочие телодвижения...
harios
Всю жизнь так делал, только вместо акрониса R-Drive Image .
ksgray Автор
Да тут можно хоть dd использовать, у меня просто корпоративная лицензия Acronis и Paragon куплены, чего бы не использовать?
ksgray Автор
"Главное дать разбить диск как она хочет". Я делаю то же самое, но руками. От начала переноса системы до полного запуска - одна перезагрузка. Да и интересно самому