BootMgr в Windows 7 привязывается к железу через C:\Boot\BCD?

Перенёс Windows 7 на другой жёсткий диск (предварительно отвязал от железа, удалив специфичные устройства в Диспетчере Устройств).

Теперь при загрузке выходит ошибка:

Не удалось запустить Windows. Возможно, это произошло из-за недавнего изменения конфигурации.
Состояние: 0xc000000e.
Сведения: Сбой меню загрузки, поскольку требуемое устройство недоступно.

Неужели теперь и новый загрузчик BootMgr привязывается к железу???!!
NTLDR себе такого не позволял, и конфиг (C:\boot.ini) был текстовый.
Теперь же ещё и конфиг бинарный (C:\Boot\BCD). Это безобразие.

Знаю, что можно извращаться с bcdedit и так далее. Вопросы такие:

1) Существует ли универсальный BCD, грузящий винду с 1го диска, 1го раздела? Дайте скачать.
2) Существует ли способ править BCD в Linux? (EasyBCD и BOOTICE под Wine не работают).

p.s. Мне нужно устанавливать Win7 на много машин, и на каждой я не собираюсь извращаться.
В случае с WinXP я просто копирую каталоги из-под линукса, ставлю Grub2, и всё загружается. Как перехитрить Win7 и её ущербный загрузчик (bootmgr) ?
  • Вопрос задан
  • 9153 просмотра
Решения вопроса 1
robux
@robux Автор вопроса
Проблема решена. Делюсь опытом.

Я все ОСи (Linux, WinXP, Win7) клонирую через архивы *.tar.gz, загружаясь в линуксе с флэшки.
Сидеть и целыми днями сюсюкаться с мастерами, затрачивая как обезьяна по 2 часа на комп - мне как-то не стреляет. К тому же в готовых образах уже установлены все программы - офисы, просмотрщики, сделаны настройки рабочего окружения и так далее.

1. Linux.
С линуксом проще всего - он не привязывается к железу.
Пакуешь папки ./tar_root.sh:
#!/bin/sh
cd /
tar --ignore-failed-read --exclude=var/cache/apt -czvf lubuntu1204.tgz bin boot etc home lib opt root run sbin usr var

Потом распаковываешь, ставишь grub и готово (скрипт ниже).

2. WinXP
Хрюшу легко "отвязать" от железа: загружаешься в Безопасном режиме (по F8 в самом начале), заходишь в "Диспетчер устройств", удаляешь всё, что связано с чипчетом (например "Intel 45111"), жёстко выключаешь комп ВЫДЕРНУВ ШНУР питания из жопки, загружаешься в линуксе, правишь файл C:\Boot.ini:
[boot loader]
timeout=3
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows XP disk 1 part 1" /noexecute=optin /fastdetect
multi(0)disk(0)rdisk(1)partition(1)\WINDOWS="Windows XP disk 2 part 1" /noexecute=optin /fastdetect
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows XP disk 1 part 2" /noexecute=optin /fastdetect
multi(0)disk(0)rdisk(1)partition(2)\WINDOWS="Windows XP disk 2 part 2" /noexecute=optin /fastdetect
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Microsoft Windows XP Professional Multiprocessor PC"  /fastdetect /noexecute=alwaysoff /hal=halmacpi.dll /kernel=ntkrnlmp.exe
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Microsoft Windows XP Professional"  /fastdetect /noexecute=alwaysoff /detecthal
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Multiprocessor PC with MPS"  /fastdetect /noexecute=alwaysoff /hal=halmps.dll /kernel=ntkrnlmp.exe

и пакуешь всё это дело ./tar_win.sh:
#!/bin/sh
cd /mnt/win
tar --ignore-failed-read --exclude=Windows/Temp -czvf winxp.tar.gz WINDOWS "Documents and Settings" "Program Files" AUTOEXEC.BAT Bootfont.bin CONFIG.SYS IO.SYS MSDOS.SYS NTBOOTDD.SYS NTDETECT.COM boot.ini ntldr

Распаковываешь на новой машине из-под линукс, обновляешь груб:
update-grub
и готово.

3. Windows 7
Похоже на WinXP, но в безопасном режиме ПЕРЕД удалением чипсетов из Диспетчера устройств нужно ПОПРАВИТЬ РЕЕСТР (запустить regedit), чтобы избежать синего экрана BSOD 0x0000007B, цитирую первоисточник:

Первым делом необходимо удалить ветку реестра HKLM\SYSTEM\MountedDevices.

Теперь нужно включить запуск сервисов, загружающих стандартные драйвера контроллеров IDE и SATA.
Открываем ветку HKLM\SYSTEM\CurrentControlSet\services в левой части редактора реестра. Теперь проверяем следующие разделы в этой ветке: amdide, amdsata, amdxata, atapi, intelide, msahci, pciide. Параметр Start у каждого должен быть равен 0х00000000 (0). Значение Start=0 - запуск сервиса при загрузке Windows. Если он равен 0х00000003 (3) щелкаем два раза на имя параметра (Start) и меняем значение на 0 (рисунок ниже) и нажимаем ОК.

После того, как start будет установлен в значение 0 у всех указанных выше разделов реестра, закрываем редактор реестра и перезагружаем компьютер в обычном режиме. В большинстве случаев этого достаточно...

Если проделанные действия не помогли и Windows 7 все равно не загружается и выдает ошибку STOP 0x0000007b, значит необходимый драйвер контроллера не загружается. Попробуем включить загрузку всех известных операционной системе драйверов.

Для этого ставим значение параметра Start равным 0 в следующих сервисах: adp94xx, adpahci, adpu320, aic78xx, amdsbs, arc, arcsas, elxstor, HpSAMD, iaStorV, iirsp, LSI_FC, LSI_SAS, LSI_SAS2, LSI_SCSI, megasas, MegaSR, nfrd960, nvraid, nvstor, ql2300, ql40xx, SiSRaid2, SiSRaid4, vhdmp, vsmraid, aliide, cmdide, nvraid, viaide.

Я включил первую пачку сервисов, а из второй - только оканчивающиеся на *ide.

Потом питание системника тоже жёстко вырубаем, загружаемся в линукс, ПОДСОВЫВАЕМ C:\Boot\BCD, дополненный с помощью EasyBCD и подправленный через VisualBCDEditor, пакуем всё это барахло ./tar_win7.sh:
#!/bin/sh

cd /mnt/win
tar --ignore-failed-read --exclude=var/cache/apt -czvf /mnt/data/Distr/Win7_x32.Gor.emp3.delink.tar.gz bootmgr \
  config.sys XELDZ autoexec.bat BOOTSECT.BAK Boot Windows Recovery "Program Files" ProgramData \
  "Documents and Settings" Users PerfLogs Progs

Распаковываем (как и Хрюшу) на другом компе, запускаем update-grub и заменяем строчку в файле /boot/grub/grub.cfg:
chainloader +1
на:
ntldr /bootmgr
С первым вариантом Windows7 грузится не на всех машинах.

Я щас везде ставлю Linux (Lubuntu), Grub2 и винду по желанию юзера. Всё делаю через скрипт ./install.sh, предварительно подправив пути дисков и папок:
#!/bin/sh

INST_DEV=/dev/sdb1
INST_MNT=/mnt/vdorogu

BOOT_DISK=/dev/sda

LIN_DEV=/dev/sda3
LIN_MNT=/mnt/root

WIN_DEV=/dev/sda1
WIN_MNT=/mnt/win

## For Ext4
#tune2fs -o journal_data_writeback $LIN_DEV
#tune2fs -O ^has_journal $LIN_DEV
#e2fsck -f $LIN_DEV

## === Mount parts

#mkdir $INST_MNT
#mount $INST_DEV $INST_MNT
#mkdir $LIN_MNT
#mount $LIN_DEV $LIN_MNT
#mkdir $WIN_MNT
#mount $WIN_DEV $WIN_MNT

## === Install Linux

cd $INST_MNT

tar xvzfk ./iso/lubuntu1204.tar.gz -C $LIN_MNT

cd $LIN_MNT

mkdir cdrom
mkdir dev
mkdir media
mkdir mnt
mkdir mnt/win
mkdir proc
mkdir sys
mkdir tmp

chmod 777 tmp
chmod 777 home

grub-install --root-directory=$LIN_MNT $BOOT_DISK
mount --bind /dev $LIN_MNT/dev
mount --bind /proc $LIN_MNT/proc
mount --bind /sys $LIN_MNT/sys

chroot $LIN_MNT grub-install --recheck --no-floppy $BOOT_DISK
chroot $LIN_MNT update-grub

umount $LIN_MNT/dev
umount $LIN_MNT/proc
umount $LIN_MNT/sys

## === Install Windows

cd $INST_MNT

tar xvzf ./iso/winxp3sp3dnet.tar.gz -C $WIN_MNT
#tar xvzf ./iso/win7gor32.tar.gz -C $WIN_MNT

# === Edit fstab

nano $LIN_MNT/etc/fstab


Времени экономится куча, особенно полезно, если нужно быстро систему восстановить.
Любая ОС ставится за 5 минут (распаковка архива) без обезьяних действий.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
FreeManOfPeace
@FreeManOfPeace
Главный инженер по неясным вопросам
Сталкивался с подобным, надо было развернуть одну винду (7 Pro) и проги на 14 машинах (с групповыми политиками и всем таким, так как локалка у нас в училище оставляла желать лучшего), для переноса юзал Acronis LiveCD (у нас на пиратство всем вообще наплевать т.к. Беларусь) и на части машин проблем не было никаких, а на части тоже самое, загрузчик восстанавливал с помощью соответствующей функции на диске с виндой, от чего зависит будут проблемы с переносом или нет непонятно так как машины были с одинаковым железом и одинаковой разбивкой диска (перед клонированием разбивал диск на 3 раздела из под диска с Debian)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы