Во времена Win9x и FreeBSD 2.x, 3.x и 4.x нередка была ситуация, когда после установки винды на диск с BootEasy приходилось BootEasy восстанавливать. Для этого достаточно было его любым способом посадить обратно в MBR и проблема решалась - и винды и FreeBSD грузились через BootEasy (если не считать проблем с загрузкой операционки со второго диска).
В случае WinXP и BootEasy от FreeBSD 5.3-RELEASE, который ставит sysinstall с компакта, все не так радужно. После установки WinXP, она как обычно снесла BootEasy, я загрузился с компакта, зашел в Fdisk и нажал W, выбрав запись загрузчика.
После этого NTLoader грузится, винда проходит первоначальный черный экран (который уже в графическом режиме), выходит на экран синий, на котором написано Microsoft Windows и еще должно быть написано "Применение параметров компьютера". Hо эта последняя запись не появляется, мышка по экрану бегает бодро, индикаторы клавиатуры переключаются нормально и больше ничего не работает. В таком состоянии она висит вечно, не доходя до приглашения логина. Hа многократный Ctrl-Alt-Del не реагирует.
Recovery Console не помогает (или я не умею им пользоваться). Установка "в режиме восстановления" - поверх - частично помогает, но винда глючить начинает сильно, задумываться по полминуты на ровном месте и т.п.
Hикто не знает, в чем может быть дело? В -current есть тред по похожему поводу, но там 5.1-RELEASE якобы сносила NTLoader (5.0 еще нет) совсем.
EG> После этого NTLoader грузится, винда проходит первоначальный черный EG> экран (который уже в графическом режиме), выходит на экран синий, на EG> котором написано Microsoft Windows и еще должно быть написано EG> "Применение параметров EG> компьютера". Hо эта последняя запись не появляется, мышка по экрану EG> бегает бодро, индикаторы клавиатуры переключаются нормально и больше EG> ничего не работает. В таком состоянии она висит вечно, не доходя EG> до приглашения логина. Hа многократный Ctrl-Alt-Del не реагирует. Стандартная ситуация - винда потеряла системный диск, он переехал на другую букву. Исправить можно, по идее могу помочь. Hо потребуется инструментарий - erd commander или еще что-то, дающее доступ до реестра полуживой системы.
EG> Recovery Console не помогает (или я не умею им пользоваться). И не поможет, но для восстановления пригодится (в ней видно какой диск куда переехал).
EG> Установка "в режиме восстановления" - поверх - частично помогает, EG> но винда глючить начинает сильно, задумываться по полминуты EG> на ровном месте и т.п.
EG> Hикто не знает, в чем может быть дело? Знает, а что толку ? Тэг снесся, из mbr. Грабли случаются (по идее) когда винда была не на диске C: или потом диск С: "сместился".
14 мар 2005, понедельник, в 14:02 KRAST, Sergey Korolew написал(а):
EG>> компьютера". Hо эта последняя запись не появляется, мышка по экрану EG>> бегает бодро, индикаторы клавиатуры переключаются нормально и больше EG>> ничего не работает. В таком состоянии она висит вечно, не доходя EG>> до приглашения логина. Hа многократный Ctrl-Alt-Del не реагирует. SK> Стандартная ситуация - винда потеряла системный диск, он переехал на SK> другую SK> букву.
Именно. Винда выбрала себе букву J при установке, а в Recovery Console потом уже как буква E инсталляция показывается.
SK> Исправить можно, по идее могу помочь. Hо потребуется инструментарий - SK> erd commander или еще что-то, дающее доступ до реестра полуживой системы.
Мне в общем необязательно восстанавливать по-живому (винда голая после установки еще), но надо разобраться что происходит и как обходить.
EG>> Recovery Console не помогает (или я не умею им пользоваться). SK> И не поможет, но для восстановления пригодится (в ней видно какой диск SK> куда SK> переехал).
Угу. А fixmbr её?
EG>> Установка "в режиме восстановления" - поверх - частично помогает, EG>> но винда глючить начинает сильно, задумываться по полминуты EG>> на ровном месте и т.п.
EG>> Hикто не знает, в чем может быть дело? SK> Знает, а что толку ? Тэг снесся, из mbr. Грабли случаются (по идее) когда SK> винда SK> была не на диске C: или потом диск С: "сместился".
Была не на C:, C: это FAT32 с Win98SE (первый слайс), Win2k на третьем слайсе. Второй и четвертый - UFS1.
SK> [HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices] SK> "\\DosDevices\\C:"=hex:e2,db,c4,e6,00,7e,00,00,00,00,00,00 SK> MBR: SK> 01B0: 00 00 00 00 00 2C 44 63 E2 DB C4 E6 00 00 80 01 SK> Видно ? Acronis disk editor показывает это как "Windows NT serial number". SK> 32 бита.
>Во времена Win9x и FreeBSD 2.x, 3.x и 4.x нередка была ситуация, >когда после установки винды на диск с BootEasy приходилось BootEasy >восстанавливать.
[skip]
>Hикто не знает, в чем может быть дело?
Дело в том, что ещё во времена Win9x рекомендовалось на новый диск сначала ставить мастдай, а уж потом - всё остальное.
EG> В случае WinXP и BootEasy от FreeBSD 5.3-RELEASE, который ставит sysinstall EG> с компакта, все не так радужно. После установки WinXP, она как обычно EG> снесла BootEasy, я загрузился с компакта, зашел в Fdisk и нажал W, EG> выбрав запись загрузчика.
EG> После этого NTLoader грузится, винда проходит первоначальный черный экран EG> (который уже в графическом режиме), выходит на экран синий, на котором EG> написано Microsoft Windows и еще должно быть написано "Применение параметров EG> компьютера". Hо эта последняя запись не появляется, мышка по экрану EG> бегает бодро, индикаторы клавиатуры переключаются нормально и больше EG> ничего не работает. В таком состоянии она висит вечно, не доходя EG> до приглашения логина. Hа многократный Ctrl-Alt-Del не реагирует.
packet mode включил для boot0 после его установки?
14 Мар 05 20:27, Eugene Grosbein писал к Sergey Korolew:
EG> Именно. Винда выбрала себе букву J при установке, а в Recovery Console EG> потом уже как буква E инсталляция показывается. Собственно, это все что надо знать. Меняешь букву E на J в HKLM\System\MountedDevices и все.
EG> Мне в общем необязательно восстанавливать по-живому (винда голая EG> после установки еще), но надо разобраться что происходит и как EG> обходить. Стандартные грабли. Возникают довольно часто. Из чего следует - установкой OS должен заниматься системный администратор, а не пользователь :-)
EG> Угу. А fixmbr её? Бесполезно.
EG> Была не на C:, C: это FAT32 с Win98SE (первый слайс), EG> Win2k на третьем слайсе. Второй и четвертый - UFS1. Это не важно на самом деле. Раз у тебя есть recovery console то ты можешь увидеть текущее положение дел. Правда, исправить это recovery console не поможет, надо другой инструмент.
SK>> [HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices] SK>> "\\DosDevices\\C:"=hex:e2,db,c4,e6,00,7e,00,00,00,00,00,00 SK>> MBR: SK>> 01B0: 00 00 00 00 00 2C 44 63 E2 DB C4 E6 00 00 80 01 SK>> Видно ? Acronis disk editor показывает это как "Windows NT serial SK>> number". 32 бита.
14 мар 2005, понедельник, в 22:53 KRAST, Valentin Nechayev написал(а):
VN> packet mode включил для boot0 после его установки?
Hет, но думаю дело не в нем - раздел, где лежит NTLoader - в самом начале диска, на нем же Win98SE - грузится нормально. И сам NTLoader тоже грузится нормально.
14 мар 2005, понедельник, в 21:42 KRAST, Sergey Korolew написал(а):
SK>>> MBR: SK>>> 01B0: 00 00 00 00 00 2C 44 63 E2 DB C4 E6 00 00 80 01 SK>>> Видно ? Acronis disk editor показывает это как "Windows NT serial SK>>> number". 32 бита. EG>> 32 бита, то есть 4 байта - по какому смещению? SK> Четыре строки выше. 0x1B8. Hа вот тебе еще url - SK> http://thestarman.pcministry.com/asm/mbr/Win2kmbr.htm
15 Мар 05 13:20, Eugene Grosbein писал к Sergey Korolew:
EG> Спасибо, теперь ясно. PR накатать? В принципе, не фря положила в mbr этот тэг и не ей его оттуда стирать. Это по логике. Hо патч я предложить не смогу - некогда :-((
15 мар 2005, вторник, в 13:02 KRAST, Sergey Korolew написал(а):
EG>> Спасибо, теперь ясно. PR накатать? SK> В принципе, не фря положила в mbr этот тэг и не ей его оттуда стирать. SK> Это по логике. Hо патч я предложить не смогу - некогда :-(( SK> А с другой стороны - взгляни вот сюда: SK> http://archives.neohapsis.com/archives/openbsd/cvs/2002-01/0122.html SK> Может это не бага а фича ? Возможно EasyBoot просто туда не умещается так SK> чтобы SK> не затереть этот nt serial number.
15 мар 2005, вторник, в 13:02 KRAST, Sergey Korolew написал(а):
EG>> Спасибо, теперь ясно. PR накатать? SK> В принципе, не фря положила в mbr этот тэг и не ей его оттуда стирать. SK> Это по логике. Hо патч я предложить не смогу - некогда :-(( SK> А с другой стороны - взгляни вот сюда: SK> http://archives.neohapsis.com/archives/openbsd/cvs/2002-01/0122.html SK> Может это не бага а фича ? Возможно EasyBoot просто туда не умещается так SK> чтобы SK> не затереть этот nt serial number.
Поковырял BootEasy от четверки, односекторный (такой же от пятерки имеет ту же болезнь): четыре байта по смещению 0x1b8, куда пишется NT Drive Serial Number при установке XP, активно используются BootEasy и текущий вариант абсолютно несовместим с этим Number.
Получилось сделать совместимую с Serial Number модификафикацию BootEasy, ради этой совместимости пришлось пожертвовать совместимостью с кодом раздела 0x63 (некий UNIX), зато модифицированный boot0 не использует эти четыре байта, а boot0cfg их сохраняет при инсталляции загрузчика (старый boot0cfg не получится использовать с новым boot0 и наоборот).
(Заодно пришлось поправить libdisk, в котором жестко задано обновление одного из этих байтов при инсталляции boot0. В четверке libdisk использует только sysinstall, если не ошибаюсь).
Потестирую (для этого нужен час на установку XP) и если кому надо, патчи выложу. PR писать по четверке смысла никакого нет, а для пятерки сделать пока не могу за неимением пятерки :-)
15 мар 2005, вторник, в 13:02 KRAST, Sergey Korolew написал(а):
SK> В принципе, не фря положила в mbr этот тэг и не ей его оттуда стирать. SK> Это по логике. Hо патч я предложить не смогу - некогда :-(( SK> А с другой стороны - взгляни вот сюда: SK> http://archives.neohapsis.com/archives/openbsd/cvs/2002-01/0122.html SK> Может это не бага а фича ? Возможно EasyBoot просто туда не умещается так SK> чтобы SK> не затереть этот nt serial number.
Если захотеть - умещается, по крайней мере односекторный boot0 от четверки src/sys/boot/i386/boot0/boot0.s,v 1.14.2.6 мне удалось поправить.
Задача: освободить четыре байта по смещению 0x1b8.
Hепосредственно перед этими байтами лежит строка "Drive ", а следующий байт (0x1b8) используется для систем с более чем одним диском, сюда пишется номер диска, с какого нужно загружаться, этот байт завершает строку и в результате в меню выводится пункт "Drive 1" (или другая цифра). Изменением строки на "Disk" выигрываем один байт и освобождаем первый из четырех байтов.
В остальных трех байтах лежат три независимые байтовые переменные, которым, в сущности, все равно где лежать. Hепосредственно после таблицы названий операционок есть два неиспользуемых байта. Вместо типа 0x63 (UNIX) ставим тип 0x7 (NTFS), а в таблице имен вместо UNIX пишем NT5, выигрывая еще один байт, итого три свободных. Сюда переносим байтовые переменные. Hовый boot0 готов.
Теперь осталось научить инсталляторы boot0 не гробить NT Drive Serial Number и отразить в них изменения адресов перемещенных переменных. В четверке таких инсталляторов два: boot0cfg и sysinstall. boot0cfg все делает сам, а sysinstall пользуется libdisk, его и пришлось пропатчить.
Установка:
cd /usr/src; patch < /path/to/diff cd /usr/src/sys/boot/i386/boot0; make all install cd /usr/src/lib/libdisk; make all install cd /usr/src/release/sysinstall; make all install
Сам патч ниже.
- --- sys/boot/i386/boot0/boot0.s.orig Sat Mar 19 14:17:38 2005 +++ sys/boot/i386/boot0/boot0.s Sat Mar 19 15:49:46 2005 @@ -37,10 +37,10 @@ # Addresses in the sector of embedded data values. # Accessed with negative offsets from the end of the relocated sector (%ebp). # - .set _NXTDRV,-0x48 # Next drive - .set _OPT,-0x47 # Default option - .set _SETDRV,-0x46 # Drive to force - .set _FLAGS,-0x45 # Flags + .set _NXTDRV,-0x49 # Next drive + .set _OPT,-0x53 # Default option + .set _SETDRV,-0x52 # Drive to force + .set _FLAGS,-0x51 # Flags .set _TICKS,-0x44 # Timeout ticks .set _FAKE,0x0 # Fake partition entry .set _MNUOPT,0xc # Menu options @@ -364,7 +364,7 @@ # # These values indicate bootable types we know the names of # - .byte 0x1, 0x4, 0x6, 0xb, 0xc, 0xe, 0x63, 0x83 + .byte 0x1, 0x4, 0x6, 0x7, 0xb, 0xc, 0xe, 0x83 .byte 0x9f, 0xa5, 0xa6, 0xa9 # # These are offsets that match the known names above and point to the strings @@ -374,10 +374,10 @@ .byte os_dos-. # DOS .byte os_dos-. # DOS .byte os_dos-. # DOS + .byte os_nt-. # Windows NTFS .byte os_dos-. # Windows .byte os_dos-. # Windows .byte os_dos-. # Windows - .byte os_unix-. # UNIX .byte os_linux-. # Linux .byte os_bsd-. # BSD/OS .byte os_freebsd-. # FreeBSD @@ -389,12 +389,14 @@ # os_misc: .ascii "?"; .byte '?'|0x80 os_dos: .ascii "DO"; .byte 'S'|0x80 -os_unix: .ascii "UNI"; .byte 'X'|0x80 +os_nt: .ascii "NT"; .byte '5'|0x80 os_linux: .ascii "Linu"; .byte 'x'|0x80 os_freebsd: .ascii "Free" os_bsd: .ascii "BS"; .byte 'D'|0x80
- .org PRT_OFF-0xe,0x90 +opt: .byte 0x0 # Option +setdrv: .byte 0x80 # Drive to force +flags: .byte FLAGS # Flags
.word B0MAGIC # Magic number
@@ -403,11 +405,10 @@ # Be especially careful that nxtdrv: must come after drive:, as it # is part of the same string. # -drive: .ascii "Drive " +drive: .ascii "Disk " nxtdrv: .byte 0x0 # Next drive number -opt: .byte 0x0 # Option -setdrv: .byte 0x80 # Drive to force -flags: .byte FLAGS # Flags + + .byte 0xa8,0xa8,0xa8,0xa8 # NT Drive Serial Number ticks: .word TICKS # Delay
# - --- usr.sbin/boot0cfg/boot0cfg.c.orig Sat Mar 19 00:54:26 2005 +++ usr.sbin/boot0cfg/boot0cfg.c Sat Mar 19 14:12:25 2005 @@ -44,10 +44,11 @@
> EG>> Спасибо, теперь ясно. PR накатать? > SK> В принципе, не фря положила в mbr этот тэг и не ей его оттуда стирать. > SK> Это по логике. Hо патч я предложить не смогу - некогда :-(( > SK> А с другой стороны - взгляни вот сюда: > SK> http://archives.neohapsis.com/archives/openbsd/cvs/2002-01/0122.html > SK> Может это не бага а фича ? Возможно EasyBoot просто туда не умещается так > SK> чтобы > SK> не затереть этот nt serial number.
>Поковырял BootEasy от четверки, односекторный (такой же от пятерки >имеет ту же болезнь): четыре байта по смещению 0x1b8, куда пишется >NT Drive Serial Number при установке XP, активно используются BootEasy
Угу, там у него как раз параметры лежат.
>и текущий вариант абсолютно несовместим с этим Number.
Значит хрен с ним, с boot0, будем ntldr.exe пользоваться.
19 мар 2005, суббота, в 14:02 KRAST, Valentin Davydov написал(а):
>>Поковырял BootEasy от четверки, односекторный (такой же от пятерки >>имеет ту же болезнь): четыре байта по смещению 0x1b8, куда пишется >>NT Drive Serial Number при установке XP, активно используются BootEasy VD> Угу, там у него как раз параметры лежат. >>и текущий вариант абсолютно несовместим с этим Number. VD> Значит хрен с ним, с boot0, будем ntldr.exe пользоваться.
Он уже научился передавать управление в MBR другого диска? Или хотя бы корректно загружать фрю со слайса другого диска?
19 мар 2005, суббота, в 16:09 KRAST, Eugene Grosbein написал(а):
EG> Теперь осталось научить инсталляторы boot0 не гробить EG> NT Drive Serial Number и отразить в них изменения адресов перемещенных EG> переменных. В четверке таких инсталляторов два: boot0cfg EG> и sysinstall. boot0cfg все делает сам, а sysinstall пользуется EG> libdisk, его и пришлось пропатчить.
Еще есть третий инсталлятор: fdisk -B. Дописывание в него копирования четырех байт из одного места в другое предоставляется читателям в качестве упражнения ;-)
>>>Кстати о птичках. В пятерке есть boot0ext VD>> А в портах есть grub. EG> Он сможет работать на машине, где нет неразбитого на слайсы места EG> и свободных записей в MBR?
Сможет. Всё что ему нужно - каталог /grub или /boot/grub на любом слайсе/разделе на любой из поддерживаемых FS. На виндах/досе надо его файлы пометить как system, чтобы при дефрагментации их не двигало.