Я восстановил Windows7 с аварийного DVD, который пришел вместе с моим ноутбуком. Восстановление перераспределяет диск SSD по умолчанию, но я бы хотел это изменить. Точнее, после завершения восстановления разделы выглядят следующим образом:

root@ubuntu:~# fdisk -l /dev/sda

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048   419432447   209715200   27  Hidden NTFS WinRE
/dev/sda2   *   419432448   419637247      102400    7  HPFS/NTFS/exFAT
/dev/sda3       419637248   839067647   209715200    7  HPFS/NTFS/exFAT

Комментарии:

  • /dev/sda2 - это небольшой раздел с bootmgr и Boot .
  • Windows7 установлена в /dev/sda3 , в которой нет bootmgr в этом разделе.

Теперь я хотел бы скопировать Windows7 из /dev/sda3 в /dev/sda1 и сделать его загрузочным. Поскольку разделы имеют одинаковый размер, это очень просто в Linux:

root@ubuntu:~# dd if=/dev/sda3 of=/dev/sda1 bs=4096

После этого я изменил тип раздела:

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048   419432447   209715200    7  HPFS/NTFS/exFAT
/dev/sda2   *   419432448   419637247      102400    7  HPFS/NTFS/exFAT
/dev/sda3       419637248   839067647   209715200    7  HPFS/NTFS/exFAT

Затем я перезагрузился. Windows7 загружается из /dev/sda3 (который становится C: :), а /dev/sda1 становится D: Теперь я делаю загрузочную копию Windows7 (см. Переключение моего загрузочного диска Windows 7 с D на C с помощью BCDBoot и возможно ли скопировать все файлы Windows 7 с одного жесткого диска на другой?):

C:\> bcdboot d:\windows /s d:
Boot files successfully created.

C:\> bootsect /nt60 d: /mbr
Target volumes will be updated with BOOTMGR compatible bootcode.
F: (\\?\Volume{b6e65e71-6179-11e5-82c7-806e6f6e6963})
Successfully updated NTFS filesystem bootcode.
\??\PhysicalDrive0
Successfully updated disk bootcode.
Bootcode was successfully updated on all targeted volumes.

Двойная проверка:

C:\> bcdedit

Windows Boot Manager
--------------------
identifier              {bootmgr}
device                  partition=\Device\HarddiskVolume2
description             Windows Boot Manager
locale                  en-US
inherit                 {globalsettings}
default                 {current}
resumeobject            {0b9ac05e-6182-11e5-b742-8dbb81fd6d74}
displayorder            {current}
toolsdisplayorder       {memdiag}
timeout                 30

Windows Boot Loader
-------------------
identifier              {current}
device                  partition=C:
path                    \Windows\system32\winload.exe
description             Windows 7
locale                  en-US
inherit                 {bootloadersettings}
recoverysequence        {0b9ac060-6182-11e5-b742-8dbb81fd6d74}
recoveryenabled         Yes
osdevice                partition=C:
systemroot              \Windows
resumeobject            {0b9ac05e-6182-11e5-b742-8dbb81fd6d74}
nx                      OptIn

C:\> bcdedit /store D:\Boot\BCD

Windows Boot Manager
--------------------
identifier              {bootmgr}
device                  partition=D:
description             Windows Boot Manager
locale                  en-us
inherit                 {globalsettings}
default                 {default}
resumeobject            {f38db522-680d-11e5-829a-18f46ae2d7b0}
displayorder            {default}
toolsdisplayorder       {memdiag}
timeout                 30

Windows Boot Loader
-------------------
identifier              {default}
device                  partition=D:
path                    \windows\system32\winload.exe
description             Windows 7
locale                  en-us
inherit                 {bootloadersettings}
osdevice                partition=D:
systemroot              \windows
resumeobject            {f38db522-680d-11e5-829a-18f46ae2d7b0}
nx                      OptIn
detecthal               Yes

После того, как я загрузил Linux и пометил раздел как загрузочный (это можно сделать в Windows, но я использую знакомые мне инструменты):

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048   419432447   209715200    7  HPFS/NTFS/exFAT
/dev/sda2       419432448   419637247      102400    7  HPFS/NTFS/exFAT
/dev/sda3       419637248   839067647   209715200   27  Hidden NTFS WinRE

Содержимое /dev/sda1 следующее (двойная проверка):

root@ubuntu:~# ls -l /mnt/sda1
total 10749077
drwxrwxrwx 1 root root       4096 Sep 25 06:11 Boot
-rwxrwxrwx 1 root root     383786 Nov 20  2010 bootmgr
drwxrwxrwx 1 root root          0 Sep 23 21:50 Config.Msi
lrwxrwxrwx 2 root root         60 Jul 14  2009 Documents and Settings -> /mnt/sda1/Users
-rwxrwxrwx 1 root root 4717092864 Sep 23 21:50 hiberfil.sys
-rwxrwxrwx 1 root root 6289461248 Sep 23 21:50 pagefile.sys
drwxrwxrwx 1 root root          0 Jul 14  2009 PerfLogs
drwxrwxrwx 1 root root       4096 Sep 23 20:35 ProgramData
drwxrwxrwx 1 root root       8192 Sep 23 21:26 Program Files
drwxrwxrwx 1 root root      12288 Sep 23 21:12 Program Files (x86)
drwxrwxrwx 1 root root       4096 Sep 22 22:00 $Recycle.Bin
drwxrwxrwx 1 root root      20480 Sep 23 21:50 System Volume Information
drwxrwxrwx 1 root root       4096 Sep 23 21:05 Temp
drwxrwxrwx 1 root root          0 Sep 23 21:50 Update
drwxrwxrwx 1 root root       4096 Sep 22 21:58 Users
-rwxrwxrwx 1 root root       4112 Jul 19  2011 version
drwxrwxrwx 1 root root      24576 Sep 23 21:02 Windows

Выглядит хорошо. К сожалению, при загрузке у меня Bootmgr is missing. Press Ctrl+Alt+Del to restart.

Я установил Grub в /dev/sda1 (перезаписывает загрузчик по умолчанию):

grub-install --force --no-floppy --boot-directory=/mnt/sda1/Boot /dev/sda1

со следующим /mnt/sda1/Boot/grub/grub.cfg:

menuentry "Windows 7" {
    insmod ntfs
    insmod ntldr
    ntldr (hd0,msdos1)/bootmgr
}

Grub правильно передал управление bootmgr , но он постоянно загружается из /dev/sda3 . Когда я удаляю раздел /dev/sda3 , отображается начальный экран загрузки, но потом ничего не происходит (загрузка просто зависает).

Затем я установил ntldr в /dev/sda1 (скопировал NTDETECT.COM , NTLDR из 64ntfile.zip) с "родным" загрузочным сектором:

C:\> bootsect /nt52 d:

и этот boot.ini:

[Boot Loader]
timeout=30
Default=multi(0)disk(0)rdisk(0)partition(1)\Windows

[Operating Systems]
multi(0)disk(0)rdisk(0)partition(1)\Windows="Windows 7 (boot.ini)" /fastdetect

После загрузки отображается сообщение "Произошла ошибка чтения диска". Наверняка SSD-накопитель вряд ли выйдет из строя таким образом, поэтому я думаю, что проблема в загрузочном байт-коде / логике, которая не может правильно обрабатывать адресацию / расположение диска. Я установил Grub (как указано выше) с этим конфигом:

menuentry "Windows 7" {
    insmod ntfs
    insmod ntldr
    ntldr (hd0,msdos1)/ntldr
}

и тогда я мог видеть мое меню относительно boot.ini выше. Когда я продолжаю, компьютер перезагружается без каких-либо сообщений об ошибках (поэтому я попал в цикл).

Как решить проблему? Любое решение для загрузки Windows с 1-го раздела приветствуется.

Другие посты по теме, которые я осмотрел:

PS: Никакие другие накопители или USB-накопители не подключены к ноутбуку при тестировании.

1 ответ1

0

После того, как вы скопировали sda3 в sda1, в реестре Windows на sda1 остаются некоторые "указатели", указывающие на sda3. Проверьте содержимое HKLM\SYSTEM\ MountingDevices \ DosDevices \ C: и D:, если они указывают на правильный раздел. (\ DosDevices \ C: значение является подписью раздела - должно быть подписью для sda1)

Чтобы создать загрузочные файлы для sda1: (при загрузке на sda3 сопоставляется с c:, sda1 сопоставляется с d:)

  1. bootsect /nt60 d: /mbr - установить загрузочный код раздела sda1 (не вредит записать загрузочный код Windows в MBR)

  2. bcdboot d:\windows / sd: - создать BCD на sda1

Вам не нужно редактировать существующую Системную BCD на sda2 и BCD на sda1 !!!

Наконец измените активный раздел на sda1.

Перезагружать.

См. Как переместить загрузочные файлы Windows 7 на другой диск / раздел для справки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .