Бывают случаи, когда установил ты систему, обновил её до упора, поставил драйвера и тонну программ, настроил — и только потом внезапно обнаруживаешь, что эта дрянь при установке исподтишка разметила тебе диск в 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
#cid90864
Ответить
Исключительно и категорически благодарен за такое подробное описание! Распечатал и подшил.
imen
#cid90876
Ответить
Почему «незаменимый»?!?
Прекрасно заменяется как минимум на SystemRescueCd (SRCD http://www.sysresccd.org/SystemRescueCd_Homepage )!
ЗЫ: Помнится относительно fdisk'а были вопросы к… особенностям реализации. Хотя лично не сталкивался. Ну да я не часто переразбиваю диски.