Зачем всё это понадобилось.
Для смарфона Lenovo P770 понадобилось поставить обновление ROW_S106->ROW_S113, которое ставится только путем прошивки аппарата через FlashTool. Под Linux экспериментировать с прошивкой было страшно, т.к. нормальных средств для этого я не нашел и было решено поставить Windows 7 Pro x64 на единственный свободный раздел GPT диска.
Особенности.
- Установка Windows 7 в единственный раздел, в то время как установщик обязывает иметь три раздела: ESP, MSR и раздел с системой.
- Диск уже разбит на разделы и переразбивать его затруднительно.
- Установлен GRUB2 и его необходимо оставить как есть.
Т.е. нужно с минимальными изменениями установить Windows 7 в уже работающую систему.
И так приступим.
- Копирование установочных файлов Windows 7 Pro x64.
Вставив установочный диск с Windows тут же обнаружилось, что существующую таблицу разделов установщик считает неправильной. Значит следующий шаг придется делать на другой машине, которой нет. Но выход есть - виртуальная машина.
1.1. Скопировать файлы установки Windows на один физический раздел.
1.1.1. Выбираем инструмент для копирования установочных файлов Windows на свободный раздел.
Я выбрал VirtualBox (потому что он у меня уже был) для загрузки виртуальной машины с установочного диска Windows и Paragon-14 для копирования подготовленного виртуального раздела на физический.
1.1.2. Копируем установочные файлы Windows на виртуальный раздел.
Загружаем чистую виртуальную машину с загрузочного диска Windows. Я решил ставить систему на один раздел, т.е. объединить раздел с установочными файлами с ESP.
О том как поставить систему в один раздел можно наглядно посмотреть на видео с 5:50 :
http://www.youtube.com/watch?v=8Ljk7WKTb8c#t=350
После окончания копирования файлов будет первая перезагрузка. На этом этапе надо виртуальную машину выключить.
1.1.3. Запускаем виртуальную машину с Paragon boot CD и делаем копию раздела с установочными файлами.
1.1.4. Загружаем компьютер с Paragon boot CD и восстанавливаем копию раздела с установочными файлами Windows в свободный физический раздел. У меня это 5 раздел GPT диска (hd0,gpt5).
# gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.6
Found valid GPT with protective MBR; using GPT.
Command (? for help): p
Disk /dev/sda: 1465149168 sectors, 698.6 GiB
Number Start (sector) End (sector) Size Code Name
1 2048 526335 256.0 MiB EF00 EFI System
2 526336 1574911 512.0 MiB 8300 Linux filesystem
3 1574912 18352127 8.0 GiB 8200 Linux swap
4 18352128 85460991 32.0 GiB 8300 Linux filesystem
5 85463040 152567807 32.0 GiB 0700 Basic data partition
6 152569856 286787583 64.0 GiB 8300 Linux filesystem
7 286787584 1465147391 561.9 GiB 8300 Linux filesystem
1.2. Сконфигурировать загрузчик Windows.
1.2.1. Загружаем компьютер с загрузочного диска Windows 7.
Вызываем консоль Shift-F10. С помощью утилиты diskpart присваиваем разделу (hd0,gpt5) свободную букву, в моем случае - С:
diskpart
> list volume
> select volume
> assign
> exit
С помощью утилиты bcdedit модифицируем конфигурацию загрузчика Windows BCD в директории С:\Boot. Т.к. я ставил Windows 7 в один раздел с ESP, то все файлы у меня в едином разделе.
bcdedit -store c:\Boot\BCD -set {bootmgr} device partition=\Device\HarddiskVolume1
bcdedit -store c:\Boot\BCD -set {bootmgr} path \EFI\Microsoft\Boot\bootmgfw.efi
bcdedit -store c:\Boot\BCD -set {default} device partition=C:
bcdedit -store c:\Boot\BCD -set {default} path \Windows\system32\winload.efi
bcdedit -store c:\Boot\BCD -set {default} osdevice partition=C:
Даже если буква диска С: была занята, то в параметры device partition=C: и osdevice partition=C: надо поставить имеющуюся букву. После перезагрузки всё равно буквы поменяются.
Загрузчик надо привести к следующему виду:
Windows Boot Manager
--------------------
identifier {bootmgr}
device partition=\Device\HarddiskVolume1
path \EFI\Microsoft\Boot\bootmgfw.efi
description Windows Boot Manager
locale en-US
inherit {globalsettings}
default {default}
resumeobject {3fc29e38-6a32-11e3-ad1f-ea1e11e553b3}
displayorder {default}
toolsdisplayorder {memdiag}
timeout 30
Windows Boot Loader
-------------------
identifier {default}
device partition=C:
path \Windows\system32\winload.efi
description Windows 7
locale en-US
inherit {bootloadersettings}
recoverysequence {2342f4cd-69b0-11e3-b888-8796a3ea9673}
recoveryenabled Yes
osdevice partition=C:
systemroot \Windows
resumeobject {3fc29e38-6a32-11e3-ad1f-ea1e11e553b3}
nx OptIn
1.2.2. Загружаем Linux. Копируем директорию \Boot из раздела с установочными файлами Windows в EFI раздел физического диска (hd0,gpt1)\EFI\Microsoft
Затем копируем директорию \Windows\Boot\EFI из раздела с установочными файлами Windows в EFI раздел физического диска (hd0,gpt1)\EFI\Microsoft
Таким образом в EFI разделе (hd0,gpt1) у нас оказалась следующая структура файлов:
./EFI
./EFI/calculate
./EFI/calculate/grubx64.efi
./EFI/Microsoft
./EFI/Microsoft/Boot
./EFI/Microsoft/Boot/BCD
./EFI/Microsoft/Boot/BCD.LOG
./EFI/Microsoft/Boot/BCD.LOG1
./EFI/Microsoft/Boot/BCD.LOG2
./EFI/Microsoft/Boot/BOOTSTAT.DAT
./EFI/Microsoft/Boot/bootmgfw.efi
./EFI/Microsoft/Boot/bootmgr.efi
./EFI/Microsoft/Boot/memtest.efi
+ куча MUI файлов с разными языками и шрифры.
На этом копирование установочных файлов Windows 7 завершено и теперь надо её загрузить и завершить процесс установки.
2. Сконфирурировать загрузчик GRUB2.
2.1. Узнаем UUID EFI раздела:
# blkid /dev/sda1
/dev/sda1: UUID="0EDA-242E" TYPE="vfat" PARTLABEL="EFI System" PARTUUID="76b2dab2-95fe-43db-b48f-f5cb6624a1a4"
2.2. Монтируем разделы загрузки, если они еще не смонтированы:
#mount /dev/sda2 /boot
#mount /dev/sda1 /boot/efi
2.3. Обновляем конфигурацию GRUB2:
Вставляем новый раздел в конфигурацию загрузчика GRUB2 /boot/grub/grub.cfg:
menuentry 'Windows 7 (loader) (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-chain-0EDA-242E' {
insmod part_gpt
insmod fat
set root='hd0,gpt1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 --hint='hd0,gpt1' 0EDA-242E
else
search --no-floppy --fs-uuid --set=root 0EDA-242E
fi
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
Теперь можно загрузить Windows 7 и продолжить установку.
В дальнейшем, директорию в разделе Windows C:\Boot и файлы из корня С:\ можно удалить - они в EFI системе там без надобности. И еще, не спешите выбрасывать копию раздела, созданную Paragon - это готовая к развертыванию система, остается только конфигурацию загрузчика BCD подправить.