Бывают случаи, когда установил ты систему, обновил её до упора, поставил драйвера и тонну программ, настроил — и только потом внезапно обнаруживаешь, что эта дрянь при установке исподтишка разметила тебе диск в GUID. А очень нужно MBR.
Интернет-советчики все как один разводят руками и ответственно заявляют, что в таком запущенном случае помогает только переустановка, без вариантов. А это потеря времени и нервов, которых жалко.
Интернет пишет, что невозможно безболезненно поменять GPT на MBR. Интернет ошибается. Будем переобуваться на ходу.

Подготовка

Нам потребуется установочный диск с лицензионной виндой (который у нас и так есть, иначе как бы мы что установили) и незаменимый GParted Live, последнюю версию которого можно скачать с официального сайта.

Большую задачу проще решать, разбив её на несколько маленьких. Так и у нас, вся процедура будет состоять из нескольких:
1. Преобразование GPT в MBR без потери данных
2. Чистка мусора после GPT
3. Восстановление виндового загрузочного раздела EFI
4. Восстановление загрузчика Windows

Поехали.

1. Преобразование GPT в MBR без потери данных

Загружаемся с GParted Live. Во время старта можно выбрать русский язык (24), остальное оставляем по умолчанию. Сразу после загрузки выскочит окно GParted, свернём его: сейчас не нужен, но позже понадобится. А пока запускаем терминал и переводим его в режим суперпользователя:

sudo -s

Штатный fdisk, который идёт с нашим живым Gparted, понимает и GPT, и MBR. В нём и будем работать.

Командой "fdisk -l" смотрим характеристики дисков и определяем имя рабочего. Обычно это /dev/sda, но дальше я буду использовать имя /dev/sdx — во избежание тупого копирования команд с экрана, потому что делать этого ни в коем случае нельзя. Важно понимать, что делаешь, иначе можно лишиться всех данных.

Итак, заходим в нужный диск и командой "p" и ещё раз внимательно смотрим на разделы:

root@debian:/home/user# fdisk /dev/sdx

Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p
Disk /dev/sdx: 465,8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 90C18724-00BA-462F-999B-180EFB80BDCD

Device         Start       End   Sectors   Size Type
/dev/sdx1       2048    206847    204800   100M EFI System
/dev/sdx2     206848    468991    262144   128M Microsoft reserved
/dev/sdx3     468992 134219775 133750784  63,8G Microsoft basic data
/dev/sdx4  134219776 976771071 842551296 401,8G Microsoft basic data

Четыре раздела с именами /dev/sdxN. В столбцах Start и End отображаются точные позиции начала и конца разделов. Единица измерения — логический сектор, равный 512 байт.

Логический сектор равен 512 байт, а вот физический — 4 килобайта, то есть в 8 раз больше. Теоретически начало раздела может не совпадать с началом физического сектора на диске.
Но у нас всё в порядке, все числа из позиции Start делятся на 8.

Раздел 1 (/dev/sdx1) — начинается с сектора 2048 и заканчивается на 206847 включительно. Тип — EFI System. Это загрузочный раздел Windows. На GPT имеет формат FAT32, на MBR — NTFS, внутреннее содержимое кардинально отличается. Поэтому данные можно не сохранять, но сам раздел нужно сохранить обязательно. Причём ровно в тех границах, которые есть.
Раздел 2 (/dev/sdx2) — секторы 206848-468991, Microsoft reserved. Зарезервированное пространство. На GPT необходим, на MBR не нужен.
Раздел 3 (/dev/sdx3) — секторы 468992-134219775. Системный раздел в 64 гигабайта, отформатирован в NTFS. Сохраняем.
Раздел 4 (/dev/sdx4) — секторы 134219776-976771071. Раздел для данных, NTFS.

Всю выведенную информацию нужно аккуратно переписать. Или сделать снимок экрана и сохранить. А лучше и то, и другое.

Начинаем переразметку: создаём пустую структуру MBR.

Command (m for help): o
Created a new DOS disklabel with disk identifier 0x2f2f0d5d.

На данный момент вся информация о разделах уничтожена, диску присвоен случайный идентификатор 0x2f2f0d5d. Но сами разделы физически никуда не делись. Для доступа к ним надо всего лишь правильно указать их границы.

Создаём первый раздел на MBR:

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-976773167, default 2048): 2048
Last sector, +sectors or +size{K,M,G,T,P} (2048-976773167, default 976773167): 206847

Created a new partition 1 of type 'Linux' and of size 100 MiB.

Здесь n — создание нового раздела, p — указание, что он будет основным, а границы мы взяли из бывшего GPT.
Тип созданного раздела "Linux" не должен смущать, он ставится по умолчанию. Поменяем его на NTFS, как надо:

Command (m for help): t
Partition number (1-3, default 1): 1
Hex code (type L to list all codes): b

Здесь t — указание, что в таблице разделов надо поменять тип; 1 — номер раздела; b — код для FAT32 (L — убедиться).

Создаём второй раздел, который на GPT был под номером 3 (напоминаю, бывший второй раздел мы пропускаем, потому что на MBR он не нужен) и третий, который был четвёртым.

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (206848-976773167, default 206848): 468992
Last sector, +sectors or +size{K,M,G,T,P} (468992-976773167, default 976773167): 134219775

Created a new partition 2 of type 'Linux' and of size 63,8 GiB.

Command (m for help): n
Partition type
   p   primary (2 primary, 0 extended, 2 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (3,4, default 3): 3
First sector (206848-976773167, default 206848): 134219776
Last sector, +sectors or +size{K,M,G,T,P} (134219776-976773167, default 976773167): 976771071

Created a new partition 3 of type 'Linux' and of size 401,8 GiB.

На этих разделах уже есть файловая система NTFS и важные данные, поэтому не забываем поменять в MBR тип разделов на правильный, иначе ничего не будет работать (7 — код NTFS):

Command (m for help): t
Partition number (1-3, default 3): 2
Hex code (type L to list all codes): 7

Changed type of partition 'Linux' to 'HPFS/NTFS/exFAT'.

Command (m for help): t
Partition number (1-3, default 3): 3
Hex code (type L to list all codes): 7

Changed type of partition 'Linux' to 'HPFS/NTFS/exFAT'.

Проверяем, всё ли правильно мы разметили:

Command (m for help): p
Disk /dev/sdx: 465,8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x2f2f0d5d

Device     Boot     Start       End   Sectors   Size Id Type
/dev/sdx1            2048    206847    204800   100M  b W95 FAT32
/dev/sdx2          468992 134219775 133750784  63,8G  7 HPFS/NTFS/exFAT
/dev/sdx3       134219776 976771071 842551296 401,8G  7 HPFS/NTFS/exFAT

Здесь p — вывести текущее состояние разметки. Проверяем, и если всё правильно — сохраняем изменения.
(Всё, что мы сейчас делали, не применялось сразу. Для того, чтобы записать изменения на диск надо ввести команду w)

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

root@debian:/home/user# 

На данный момент мы преобразовали диск из GPT в MBR, все данные сохранены, но загрузчика нет — первые 440 байт диска заполнены нулями. И вместо раздела "Microsoft reserved" теперь зияет неразмеченное пространство.
Плюс, на диске сохранена и основная, и резервная таблица GPT, и как при этом поведёт себя восстановление системы — непонятно. С микрософтом надо быть готовым к любым неожиданностям.

2. Чистка мусора после GPT

Внимание!
Если вы не понимаете смысла происходящего — смело пропускайте этот пункт.
С высокой долей вероятности всё будет работать и так, а ошибка станет фатальной.

Пока всё ещё работаем в терминале. Затираем нулями основную таблицу GUID:

dd bs=512 if=/dev/zero seek=1 count=2047 of=/dev/sdx

Опции лучше вводить именно в таком порядке, потому что случайная ошибка или преждевременное нажатие ввода может уничтожить всё нажитое честным трудом. И всё, терминал больше не нужен, его можно закрыть.

Разворачиваем GParted, который свернули в начале:
Последний раздел раздвигаем вправо до упора, избавляясь от неразмеченного куска, где была резервная таблица GUID.
Раздел после неразмеченного пространства (у нас это 2-й, с системой) раздвигаем влево.
Помним, что границы раздела EFI трогать нельзя.

В GParted увеличение NTFS-раздела вправо протекает быстро и по сути достаточно безопасно. А вот с увеличением влево — совсем другая история.
При этой операции происходит побайтовое копирование всего раздела влево с последующим расширением вправо.
То есть, чем больше раздел, тем больше уйдёт времени. И начавшийся процесс отменить нельзя.
Без бесперебойника не надо даже начинать.

3. Восстановление виндового загрузочного раздела EFI

Сейчас на загрузочном разделе (первый по счёту, всегда 100 МБ) файловая система FAT32 и информация для загрузки с EFI.
Нам не нужно ни то, ни другое.
В GParted (см. предыдущий пункт) форматируем раздел в NTFS и ставим на нём флаг "boot". Не забываем применить изменения.

Перезагружаемся в установщик Windows.

В окне установки давим на «Восстановление системы»:

Установщик определит, что загрузочный раздел совсем пустой, автоматически зальёт на него нужную информацию и автоматически же попросит перезагрузку.

4. Восстановление загрузчика Windows

Снова загружаемся с установочного диска Windows и опять заходим в «Восстановление системы». В появившемся окне ставим галку на «Используйте средства восстановления, позволяющие устранить проблемы при запуске Windows. Выберите операционную систему для восстановления.» и жмём «Далее».

Здесь выбираем «Восстановление запуска», ждём завершения и перезагружаемся.

Или же, чтобы не блуждать по окнам можно сразу ввести сочетание клавиш Shift+F10 и в появившейся командной строке выполнить:

X:\Sources> bootsect all /mbr

Система восстановлена.

Сразу после загрузки запустится проверка диска на ошибки chkdsk, надо дать ей отработать.
В восстановленной системе поначалу могут всплыть мелкие косяки (к примеру, в диалоге "Защита и восстановление системы" наблюдался призрачный системный раздел) но они легко исправляются. Эти артефакты появляются из-за смены наименования разделов и не влияют на работоспособность.



LonelyOne
2015.08.08 16:59:40
#cid90864

Ответить

Исключительно и категорически благодарен за такое подробное описание! Распечатал и подшил.

imen
2015.08.14 10:32:07
#cid90876

Ответить

незаменимый GParted Live

Почему «незаменимый»?!?
Прекрасно заменяется как минимум на SystemRescueCd (SRCD http://www.sysresccd.org/SystemRescueCd_Homepage )!

ЗЫ: Помнится относительно fdisk'а были вопросы к… особенностям реализации. Хотя лично не сталкивался. Ну да я не часто переразбиваю диски.