Я восстановил 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-го раздела приветствуется.
Другие публикации по теме, которые я просмотрел:
- Какая утилита может перенести загрузочный раздел Windows на другой жесткий диск?
- Создайте загрузочный BCD с нуля с помощью Bcdedit
- Должны ли параметры device и osdevice соответствовать загрузочному или разделу Windows?
- Исправление загрузчика Windows7
- Можно ли исправить ошибку 0xc0000225 без переустановки Windows?
PS: Во время тестирования к ноутбуку не подключались никакие другие диски или USB-накопители.
решение1
После копирования sda3 в sda1 в реестре Windows на sda1 все еще есть некоторые "указатели", указывающие на sda3. Проверьте содержимое HKLM\SYSTEM\MountedDevices\DosDevices\C: и D:, указывают ли они на правильный раздел. (Значение \DosDevices\C: — это подпись раздела — должна быть подпись для sda1)
Чтобы создать загрузочные файлы для sda1: (при загрузке с sda3, сопоставленного с c:, sda1, сопоставленного с d:)
bootsect /nt60 d: /mbr - для установки загрузочного кода раздела sda1 (не помешает записать загрузочный код Windows в MBR)
bcdboot d:\windows /sd: - для создания BCD на sda1
Вам не нужно редактировать существующие системные BCD на sda2 и BCD на sda1!!!
Наконец, измените активный раздел на sda1.
Перезагрузить.
ВидетьКак переместить загрузочные файлы Windows 7 на другой диск/разделдля помощи.
решение2
Я описал некоторые шаги, которые я предпринял для решения этой проблемы, и они сработали для меня, поэтому я надеюсь, что они помогут и будущим читателям, и, возможно, даже автору поста, хотя прошло уже много времени.
Процедура, которую я использовал для переноса Windows 7 с одного раздела на меньшем и медленном жестком диске на более быстрый раздел жесткого диска в Dell OptiPlex 780 MT
- Получите USB-флеш-накопитель(и)
- рекомендуется 32 ГБ+
- Я использовал Amazon Smiles, чтобы он мог генерировать пожертвования на благотворительность, пока я делаю покупки
- Создайте системный диск восстановления на одном из загрузочных USB-накопителей.
- Он стал ОГРОМНЫМ с тех пор, как я им последний раз пользовался, требуя более 16 ГБ
- Следуйте инструкциям SysResc CD из Windows с помощью Rufus
- Уменьшите тома до минимальных размеров, оставив около 40 ГБ свободного места на разделах ОС.
- Цель состоит в том, чтобы иметь достаточно нераспределенного пространства на новом жестком диске, чтобы оно соответствовало или превышало размер исходного раздела Windows 7.
- Резервное копирование/перемещение данных из разделов на USB-флеш-накопитель или другой внешний диск
- Запустить очистку диска и дефрагментацию
- DiskMgmt.MSC в W7 теперь можно использовать для расширения/сжатия томов
- Загрузитесь с компакт-диска восстановления системы
- Предостережение: если у вас есть системный и администраторский пароли BIOS, которые используют заглавные буквы, то System Rescue CD будет думать, что вы пытаетесь выполнить индивидуальную загрузку. Он оставит вас в режиме LILO Boot: без каких-либо инструкций, справки, команд и т. д. для загрузки. Я очистил системный пароль BIOS, чтобы он попал в меню загрузки по умолчанию
- После успешной загрузки запустите,
startx
чтобы войти в графический интерфейс.- Запустить GPartEd
- Перейдите на старый, более медленный диск с текущей установкой Windows 7 и скопируйте раздел Windows.
- Перейдите на новый более быстрый диск с нераспределенным пространством и вставьте скопированный раздел.
- Операция может занять несколько минут в зависимости от вашего оборудования, но будет отображаться индикатор выполнения.
- Отметьте скопированный раздел Windows 7 как активный.
- Перейдите в окно терминала/командной строки.
- Запустите
testdisk
и создайте/сбросьте загрузочный сектор нового раздела Windows 7 (не знаю, необходим ли этот шаг, но я просто так сделал)- Google Использование testdisk для восстановления загрузочного сектора на разделе
- Создайте папки /mnt/Dell и /mnt/Win7, используя
mkdir
- Они исчезнут при следующей загрузке с компакт-диска/USB-накопителя System Rescue.
- Смонтируйте старый раздел Dell Recovery в /mnt/Dell с помощью
mount
командыmount /dev/hdb1 /mnt/Dell
- Смонтируйте новый раздел Windows 7 в /mnt/Win7
mount /dev/hda4 /mnt/Win7
- Скопируйте файлы загрузчика Windows в новый раздел Windows 7.
- Создайте папку /mnt/Win7/Boot, используя
mkdir
- Скопируйте /mnt/Dell/bootmgr в /mnt/Win7/ с помощью
cp
команды cp /mnt/Dell/boot.sdi /mnt/Win7/
cp /mnt/Dell/Boot/BCD /mnt/Win7/Boot/
- Вы также можете скопировать файл /Boot/BCD.LOG, но не уверен, что это необходимо.
- Имейте в виду, что эта конфигурация загрузки по-прежнему указывает на старые загрузочные и системные разделы Windows 7. Ее нужно будет отредактировать, чтобы она указывала на новые загрузочные и системные разделы Windows 7 (в моем случае те же самые)
- Создайте папку /mnt/Win7/Boot, используя
- Запустите
- Запустить GPartEd
- Загрузитесь в BIOS
- Измените загрузочное устройство со старого диска на новый.
- В качестве альтернативы вы можете использовать меню загрузки. Загрузитесь с нового раздела Windows 7 успешно.
- Загрузите Windows 7
- Поскольку он указывает на старые загрузочный и системный разделы, он по-прежнему работает со старым жестким диском.
- Диск C: — это старая система.
- Откройте командную строку Cmd от имени администратора.
- Запустить DiskMgmt.MSC
- Присвойте новому разделу Windows 7 букву диска, если она ему еще не назначена (в моем случае — G:).
- Перейдите в каталог G:\Boot.
G:
cd Boot
- Покажите конфигурацию загрузки на новом разделе, используя
bcedit /store BCD
- Запишите текущий старый загрузочный GUID (в моем случае {d57db94d-450e-11e5-a383-b8ac6f1ac098})
- Отредактируйте новую скопированную конфигурацию загрузки, чтобы добавить новый раздел Windows 7.
- СсылкаДобавление загрузочных записей
bcdedit /store /copy {d57db94d-450e-11e5-a383-b8ac6f1ac098} /d "Win7 Debug"
- Новый GUID раздела W7 теперь {c15e345e-9c47-11ea-a7d8-b8ac6f1ac098}
bcdedit /store BCD /enum /v
(Чтобы просмотреть GUID для справки)- СсылкаКак перенести загрузочные файлы Windows 7 bootmgr на другой диск(Большая благодарность red.october за публикацию своего вопроса и ответа на этом сайте!)
bcdedit /store BCD /set {bootmgr} device partition=G:
- Дополнительные шаги в моем случае
bcdedit /store BCD /set {c15e345e-9c47-11ea-a7d8-b8ac6f1ac098} device partition=G:
bcdedit /store BCD /set {c15e345e-9c47-11ea-a7d8-b8ac6f1ac098} osdevice partition=G:
bcdedit /store BCD /displayorder {c15e345e-9c47-11ea-a7d8-b8ac6f1ac098} {d57db94d-450e-11e5-a383-b8ac6f1ac098}
- При желании можно сделать новый загрузочный раздел разделом по умолчанию.
bcdedit /default {c15e345e-9c47-11ea-a7d8-b8ac6f1ac098}
- Запустить DiskMgmt.MSC
- Перезагрузитесь с помощью System Rescue CD/USB
- Используйте GPartEd, чтобы пометить старый раздел Windows 7 как Скрытый
- Снимите флажок загрузки на старом разделе Dell System Recovery.
- Перезагрузите Windows 7 на новом диске.
Если вы не допустили ошибок и не столкнулись ни с какими трудностями или ошибками при выполнении любого из шагов, то вы, как и я, успешно перенесли и раздел Windows 7, и менеджер загрузки Windows 7 с одного раздела на исходном жестком диске на новый раздел на другом жестком диске, не используя диск восстановления Windows 7 (который OEM-реселлеры не выдают вместе с ПК) и не используя сомнительные сторонние приложения. Приятным сюрпризом является то, что если у вас были какие-либо файлы или папки, зашифрованные EFS до миграции, то они по-прежнему будут доступны на новом разделе без необходимости предварительной расшифровки. DiskMgmt.MSC теперь отображает новый раздел Windows 7 как C:, а старый раздел Windows 7 без буквы диска.
После загрузки на новый раздел Windows 7, полностью независимый от исходного жесткого диска, вы можете изучить, как очистить загрузчик на этом разделе, чтобы указать все на него, а не на старый раздел Windows 7. Если у вас есть раздел Windows XP на новом диске, как у меня, то вы можете добавить запись для его загрузки с помощью bcdedit. После того, как вы убедитесь, что все стабильно, вы можете стереть старый раздел и использовать его для других целей. Я искренне надеюсь, что это поможет кому-то еще в достижении подобных целей.
Управление дисками W7 после миграции: