none
Восстановление и перенос загрузчика Windows XP RRS feed

  • Вопрос

  • Добрый день.

    Возникла следующая ситуация:

    На жёстком диске есть 2 раздела:
    В начале диска (primary) - с файлами boot.ini, ntldr и ntdetect.com.
    Дальше logical с самой Windows и данными.

    Т.е.,
    Primary с загрузчиком,
    Extended,
    Logical с данными.

    У меня возникло 2 проблемы:
    Первая.
    Когда я отформатировал первый раздел и постави туда Linux (это непринципиально, допустим, просто отформатировал), Windows, естественно, перестал загружаться. Я пытался восстановить загрузчик, снова отформатировав первый раздел (где был Linux), загрузился с CD в консоль восстановления, скопировал из папки i386 файлы ntldr и ntdetect.com, запустил bootcfg /rebuild (создав заново boot.ini), fixboot и fixmbr. Тем не менее, несмотря на это, Windows не загружался - появлялось сообщение Operating System not found.
    Мне пришлось снова отформатировать первый раздел, поставить туда Windows (2-ю копию), которая создала те же самые boot.ini, ntldr и ntdetect.com. Затем я добавил в boot.ini данные о Windows на втором разделе, запустил её и стёр все файлы (вторую копию Windows), кроме boot.ini, ntldr и ntdetect.com с первого раздела.
    Т.о., я вернулся к тому, с чего начал.

    Вопрос - почему для восстановления загрузчика потребовалось устанавливать вторую копию Windows? Почему не хватило консоли восстановления?

    Вторая.
    Второй вопрос - как мне перенести загрузчик с перевого раздела диска на второй, логический, чтобы можно было отформатировать первый раздел (и установить туда Linux)?

Ответы

  • Есть такой загрузчик - grub4dos. Он, в отличие от grub, может читать NTFS и загружать ntldr.
    Только мне это не совсем помогло - вылезла какая-то ошибка с кракозябрами (видимо, русский не распознался). Но, думаю, это было сообщение от уже загруженного ntldr.

    В общем, стёр я Windows совсем:)
    • Помечено в качестве ответа Nikita PanovModerator 3 сентября 2009 г. 18:08
    16 июня 2009 г. 20:13

Все ответы

  • Достаточно было fixmbr и fixboot. И не забыть, что загрузочный раздел должен быть активным.
    С помощью diskpart можно проверить и если необходимо исправить.

    C:\> diskpart
    DISKPART> select disk 0
    DISKPART> select partition 1
    DISKPART> active
    DISKPART> exit
    C:\> exit
    • Предложено в качестве ответа osr_MVP, Moderator 30 мая 2009 г. 14:26
  • Второй вопрос - как мне перенести загрузчик с перевого раздела диска на второй, логический, чтобы можно было отформатировать первый раздел (и установить туда Linux)?


    А зачем? всегда можно легко восстановить загрузчик Windows. А так какая разница с чего загружаться lilo, grub или ntldr?
  • Попробовал diskpart:

    Выбрал partition 3 (т.к. у меня 1-й primary с загрузчиком, 2-й - extended и третий logical с Windows), сделал его активным, скопировал файлы ntldr, ntdetect.com и boot.ini на 3-й раздел, перезагрузился и снова получил надпись Operating system not found.

    Причём в консоли восстановления сделать раздел активным нельзя, fixboot и fixmbr опять не помогли - пришлось опять запускать установку Windows на первый раздел и после копирования файлов запускать консоль восстановления и там bootcfg /rebuild.

  • А установить Linux допустим на Virtual PC 2007(в виртуальную среду)или подобные программы нельзя?
    А данная сатья вам не подойдет? http://support.microsoft.com/kb/315224/ да и почитайте еще вот эту статью http://support.microsoft.com/kb/314470/
    Что еще можно сделать после входа в консоль востоновления она у вас спращивает с какой копией windows работать если их много.
    сделайте по порядку команды  fixmbr fixboot и bootcfg /rebuild файлы ntldr, ntdetect.com и boot.ini должны храниться сдесь (посмотрите сатьи какторые я вам дал) 1-й primary с загрузчиком.
    Если мой ответ Вам помог, отметь его, пожалуйста.
  • Конечно, Linux можно установить на Virtual PC. Но мой вопрос не в этом. Давайте вообще не будем обращать внимания на Linux. МЕня просто интересует, как перенести загрузчик на другой раздел.
    Про статьи - они к темк относятся, но решения там нет.
    Про команды - я их выполнял:)

  • А смысл переносить загрузчик на другой раздел?
    Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.
  • Конечно, Linux можно установить на Virtual PC.

    Не расскажешь как?
  • Pozhaluysta, esli ne znaete pro perenos zagruzchika - ne pishite. Mne nuzhno perenesti zagruzchik, a obshuzhdat' zachem, pochemu i t. p. ya ne sobiralsia. Pro linux - tozhe ne rasskazhu, u menia vopros ne pro Linux.
  • Второй вопрос - как мне перенести загрузчик с перевого раздела диска на второй, логический, чтобы можно было отформатировать первый раздел (и установить туда Linux)?
    Загрузиться с логического диска не получится, т.к только первичный раздел может быть активным.
    Поэтому ntldr, ntdetect.com и boot.ini должны в вашем случае располагаться на первом (основном) разделе. Тогда, с соответствующими путями в boot.ini, вы сможете загрузить систему с логического раздела.

    Если вы собираетесь ставить линукс в первый раздел, то лучше будет воспользоваться его загрузчиком или установить какой-либо еще.

  • 1)
    Груб можно установить на любой раздел, хоть в root, хоть в раздел с данными. В последнем случае он изменит активный раздел. Так что вы вероятно установили его не туда, куда думали. Кроме того, у него есть stage_1, stage_1.5 и stage_2. Интересно узнать куда всё это устанавливалось.
    Вообще сообщение Operating System not found появляется если в boot секторе активного раздела нет метки 55AAh. Это значит что какая-то программа не до конца "перенесла" активный раздел.
    Я бы на вашем месте запустил diskedit и просмотрел бы внимательно что лежит на диске (в режиме CHS) с адреса 001 до 010 (то есть между MBR и boot сектором диска C:)
    2)
    Ответ: сделать fixboot для этого раздела  и скопировать туда ntldr, ntdetect.com ...
    А вообще - зачём? Всё равно можно будет запускать только один загрузчик - либо win либо lin.
  • На данный момент у меня на первом разделе стоит Linux (загрузчик - grub)

     Device Boot      Start         End      Blocks   Id  System
    /dev/sda1            1783        1913     1052257+  82  Linux swap / Solaris
    /dev/sda2            1914        9729    62781988+   7  HPFS/NTFS
    /dev/sda3   *           1        1782    14313883+  83  Linux

    На разделе с NTFS есть файлы boot.ini, ntdetect.com, ntldr, bootfont.bin (скопированные с раздела, на котором сейчас Linux)
    Раздел primary, active

    в настройках граба я пробовал следующее:
    menu.lst:

    title           Win2
    rootnoverify    (hd0,1)
    savedefault
    makeactive
    chainloader     /ntldr

    title Windows
    find --set-root /ntldr
    chainloader /ntldr

    title=Win3
    rootnoverify (hd0,1)
    chainloader +1

    title           Win21
    rootnoverify (hd0,2)
    savedefault
    makeactive
    chainloader     /ntldr

    title=Win31
    rootnoverify (hd0,2)
    chainloader +1


    Но grub по-прежнему не хочет загружать ни один из пунктов меню.

    либо Starting up... и мигающий курсов
    либо error 15 file not found
    либо  error 17 cannot mount selected partition

  • Загрузиться с логического диска не получится, т.к только первичный раздел может быть активным.
    Я сделал раздел primary и active, как мне перенести туда загрузчик с первого раздела?
  • Я бы сделал так:
    Запустил  комп - дождался меню GRUB - нажал esc и подтвердил действие - нажал c для выхода в командную строку.
    ( Если что не так , груб показывает на каждом этапе какие варианты возможны)
    далее я бы выполнил

    chainloader (hd0,0)+1
    boot

    chainloader (hd0,1)+1
    boot

    chainloader (hd0,2)+1
    boot

    И посмотрел на результаты. В одном из трёх случаев, должен перезапуститься груб (это если выбран раздел с linux), в другом - зависнуть либо показать сообщение об ошибке (выбран swap) ,в  третьем должен загрузиться windows, если загрузчик целый.
    Кроме того, я смущён что раздел /sda1 не начинается с первого сектора. То есть вместо этого
    Device Boot      Start         End      Blocks   Id  System
    /dev/sda1            1783        1913     1052257+  82  Linux swap / Solaris
    /dev/sda2            1914        9729    62781988+   7  HPFS/NTFS
    /dev/sda3   *           1        1782    14313883+  83  Linux
    должно было быть
    Device Boot      Start         End      Blocks   Id  System
    /dev/sda1   *           1        1782    14313883+  83  Linux
    /dev/sda2            1783        1913     1052257+  82  Linux swap / Solaris
    /dev/sda3            1914        9729    62781988+   7  HPFS/NTFS
    
    И ещё меня удивило несовпадение ваших данных. Такое ощущение что у вас там бои крупного масштаба :)
    - в первом посте написано что есть extended раздел, теперь его не видно.
    - "Мне пришлось снова отформатировать первый раздел, поставить туда Windows (2-ю копию), которая создала те же самые boot.ini, ntldr и ntdetect.com. Затем я добавил в boot.ini данные о Windows на втором разделе"

    Ничего не понятно. Сначала вы сказали что вы поставили вторую копию windows на свежеотформатированный первый раздел. Этого не может быть, потому что он только отформатирован: там ничего нет. Ну допустим вы имели ввиду что установили windows второй раз . Но потом вы добавляете в секцию boot.ini данные о windows на втором разделе. Откуда она?


    P.S. Всё таки вы наверное поставили linux не туда , куда думали, потом преобразовали extended раздел. Из-за него изменилась нумерация в дисках (sda1, sda2) что ещё блее запутало ситуацию. А сейчас я  впервые слышу про своп-раздел.

    Исходя из этого рациональная стратегия, это во-первых - представить что где должно лежать и какие разделы быть и сначала рахобраться с ними. Потом решить что будет стоять lin, win или всё вместе. И потом уже ставить в соответсвии с намерениями.
  • - в первом посте написано что есть extended раздел, теперь его не видно.
    Да, как я уже писал выше, я сконверировал раздел с Windows в primary. Да, бои действительно крупного масштаба:) Сейчас у меня загружается только Linux:)

    Ничего не понятно. Сначала вы сказали что вы поставили вторую копию windows на свежеотформатированный первый раздел.
    Для того, чтобы загрузить Windows, я установил вторую копию Windows (заново установил Windows) в первый раздел (сейчас у меня снова там linux), В процессе установки, естественно, появился новый загрузчик (boot.ini, ntldr и ntdetect.com). В этот появившийся boot.ini я и добавил инф-ю о уже имеющейся копии Windows на 3-м разделе.

    Про рациональную стратегию я и сам догадывался, но теперь уже переустанавливать настроенные Win и LIn не буду.

    chainloader hd0,0 0,1 0,2 сейчас попробую...
  • А установить Acronis OS selector пробовали?
    Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.
  • rootnoverify (hd0,0)
    chainloader /ntldr
    Error 17

    chainloader +1
    Error 13

    rootnoverify (hd0,1)
    chainloader /ntldr
    Error 17 cannot mount selected partition

    chainloader +1
    nothing happens

    rootnoverify (hd0,2)
    chainloader /ntldr
    Error 15

    chainloader +1
    Error 13
  • Я вас прошу не делать chainloader /ntldr потому что это только путает, во всяком случае меня. В нормальной, здоровой системе достаточно только chainloader (hd0,x)+1
    Конечно в штатном режиме можно запускать хоть chainloader (hd0,5)+7537, но по-нормальному удобочитаемо и понятно.
    Кроме того, в linux ИМЯ и имя разные. Возможно у вас просто файл называется NTLDR а не ntldr и вот из-за такой мелочи не получается загрузиться.

    Попробуйте выполнить fixboot (но не fixmbr!) для раздела с windows. NTLDR и прочие должны быть там, где есть загрузочная запись. Всё таки я надеюсь это поможет. По идее просто обязано помочь.
    Поскольку у вас рабочий linux, будем работать с ним, хоть и оффтопик для этого форума.
    Запустите консоль.
    Выполните su, введите пароль, нажмите enter
    Далее
    dd if=/dev/sda3  bs=512 count=16 of=/home/Mid/sda3.bootsector
    chown Mid /home/Mid/sda3.bootsector
    В вашем случае вместо Mid должно быть имя учётной записи.
    Эта команда спишет загрузчик NTFS в файл.  И ещё
    dd if=/dev/sda bs=512 count=1 of=/home/Mid/harddisk.mbr
    chown Mid /home/Mid/harddisk.mbr
    Напомню ещё раз что регистр букв важен.
    Эта команда считает MBR.
    Если сами сможете, посмотрите что в этих файлах. Возможно слетела метка NTFS в boot секторе, возможно MBR корявый, вобщем там хорошо всё будет видно :)
    Ну если не можете, то загрузите на хостинг и ссылки сюда.

    P.S. Жёсткий диск один?

    P.S. Я запутался что у вас с разделами. Скорее всего нужен /sda2 а не sda3. Короче нужен тот, где NTFS.
    Разделы с linux и swap не интересны, у них всё нормально.
  • > P.S. Я запутался что у вас с разделами.

    Вот и я запутался, совсем не ясно почему линукс на /sda3? Если вы писали, что у вас только два раздела.


    title Windows
    root (hd0,1)
    makeactive
    chainloader +1

    ntldr должен быть в корне раздела с Windows.
  • Да, естественно, было 2 раздела. Но когда я ставил линукс, я первый разбил на 2 части - 1 для линукса, 1- для swap.

    http://slil.ru/27710368 - mbr

    http://slil.ru/27710375 - sda2 bootsector.

    sda2 Bootsector я посмотрел, вроде всё ок.
    А MBR зачем смотреть? раз grub грузиться, значит тоже всё хорошо.

    Ещё раз хочу обратить ваше внимание на то, что файлы ntldr, boot.ini и ntdetect.com изначально не были на разделе с Windows, я их туда просто скопировал.
  • Как сейчас располагаются разделы?

    Вы писали:
    /dev/sda1            1783        1913     1052257+  82  Linux swap / Solaris
    /dev/sda2            1914        9729     62781988+   7  HPFS/NTFS
    /dev/sda3   *             1        1782      14313883+  83  Linux

    Но исходя из этого должно быть:
    /dev/sda1   *             1        1782      14313883+  83  Linux
    /dev/sda2            1783        1913     1052257+  82  Linux swap / Solaris
    /dev/sda3            1914        9729     62781988+   7  HPFS/NTFS

    Т.е Windows нe на втором, а на третьем разделе.
    Пропишите в menu.lst:

    title Windows
    root (hd0,2 )
    makeactive
    chainloader +1
  • У тебя всё правильно с разделами. Я посмотрел что у тебя сначала в МБР по смешению 1BEh идет  своп-раздел, потом по смещению 1CEh идёт NTFS раздел, затем в 1DEh находиться root-раздел. В чётвёртой позиции всё пусто.
    Просто обычно так не делается, разделы указываются в MBR по порядке расположения. А тут - хаотично.
    Linux считывает разделы из МБР в порядке очереди, вот и получилась такая картина.
    Однако так всё правильно, всё соответствует нормам, то это приемлемо.
    Однако не это главное. В МБР указано что раздел с нтфс - активный ;) но грузится груб.

    MBC явно грубовская, не от Microsoft. Видимо тот код и не смотрит кто у него активный, а кто нет. Потому что груб располгается не только в MBS но и дальше, вплоть до начала раздела. И он продолжает грузить свои куски с диска.
    Так что указано в смещении 04 - хоть 00, хоть 80, хоть 160 - значения не имеет.
    Но всё равно не понятно почему команда chainloader (hd0,1)+1 не помогает.
    Попробуй chainloader(hd0,1)+x, где x - 2, 8, 16, или любое случайное число.
    Всё таки попробуй выполнить ещё раз эту команду, но без rootnoverify, chainloader /ntldr и проч. Просто chainloader (hd0,1)+? и boot.
    Я не получил ответ на вопрос один жёсткий диск или два: это часто является причиной проблем.

    "Ещё раз хочу обратить ваше внимание на то, что файлы ntldr, boot.ini и ntdetect.com изначально не были на разделе с Windows, я их туда просто скопировал."
    Допсутим этот факт учту, но что из него?
    Если бы была установлена только windows, то для её загрузки требуется: её MBC,  файл $BOOT (кстати я его просмотрел, вроде правильный)  правильный указатель активный раздел, ntldr, ntdetect.com на указанном разделе.
    Если юзается груб, то нужен $BOOT и файлы ntldr , ... . Это всё есть. Так что из этого набора где-то есть баг.
    Какая версия груба?

    P.S.
    Надеюсь это поможет
    http://slil.ru/27710898
    Нужно chainloader /boot/grub/offered.mbr

  • Жёсткий диск один - у меня ноут.
    Насчёт того, что я просто скопировал файлы.

    По идее, мало скопировать ntldr на раздел, нужно ещё, чтобы он был прописан в boot-секторе этого раздела, а этого, как я понимаю, у меня нет...

    А что там, в offered.mbr? ;)
  • С жёстким понятно.
    Насчёт компирования файлов - ты же выслал мне boot- сектор NTFS. Значит он у тебя есть. Собственно команда fixboot, которую ты выполнял, создавала это сектор.
    Насчёт offered.mbr - это кроссплатформенный Kido под Linux и Windows ;)
    На самом деле там стандартный загрузочный код MBR от Microsoft, и твоя таблица разделов, которую я туда вшил.
    То есть в файле находится то, что у тебя бы было в MBR как если бы стояла одна Windows на разделе NTFS.
  • Да не, у меня с MBR всё более-менее...
    В mbr находится grub.
    Командой chainloader +1 я заставляю его запускать загрузочный сектор раздела с Windows (первые 512 байт этого раздела).
    Раз оно не запускается, то замена MBR ничего не даст
    Нужно фиксить boot-сектор раздела с Windows.
    Либо найти загрузчик, который сможет запустить ntldr без всяких там бут-секторов.
    1 июня 2009 г. 11:54
  • 1) Я сделал образ не для замены MBR, а для его использования в качестве загрузочного образа. Ты делал chainloader /offered.mbr ?
    2) Про замену MBR - читай №1
    3) Найти такой загрузчик невозможно, так как его не существует. Чтобы загрузить ntldr нужно "уметь" читать NTFS. Его умеют читать только $BOOT (ограничено), сам ntldr (ограничено) и ntfs.sys. Понятно что работать в твоём случае можно только с $BOOT и он у тебя по-моему исправен. Ксати он у тебя и так несколько раз пофиксен.
    Так что  юзай chainloader /offered.mbr.  Если это не поможет, надо действительно копать в сторону $BOOT
    1 июня 2009 г. 12:18
  • 1) Попытался запустить chainloader /grub/boot/offered.mbr. Он его скушал, я написал boot. В результате Starting up... и ничего...
    3) NTFS - это да, но я могу запиха ntldr на флэшку с FAT, или вообще с чем угодно. Так что такой загрузчик был бы интересен.
    1 июня 2009 г. 13:41
  • Я тщательно проверил файлы sda2.bootsector и свой $BOOT и обнаружил что они не совпадают. Высылаю свой.
    http://slil.ru/27715233

    Для прошивки надо выполнить команду согласно инструкциям выше, только надо:
    dd if=/home/Mid/boot.boot bs=512 count=1 of/dev/sda2
    /home/Mid/boot.boot - где файл лежит
    NTFS-раздел всё ещё на /dev/sda2 ?

    На всякий случай для бэкапа выполни до операции
    dd if=/dev/sda2 bs=512  count=1 of=/home/Mid/sda2.backup - в этом файле будет бэкап

    1 июня 2009 г. 16:35
  • Со своим boot-сектором я уже даже пробовал:
    map (hd0,0) (hd0,1)
    map (hd0,1) (hd0,0)
    rootnoverify (hd0,1)
    makeactive
    chainloader +1
    boot

    Но тоже не получилось (перед этим я сделал fixboot c:)

    В общем, попробую ваш boot-сектор...
    1 июня 2009 г. 17:32
  • Попробовал бут-сектор. Ничего. Может, я мало жду после Starting up... (10 секунд). Но для загрузочного сектора это более чем достаточно. В общем, буду искать загрузчик, который сможет запустить ntldr...
  • Я бы удалил разделы с Убунту, передвинул раздел с Виндоус в начало диска, а за ним заново установил линукс.
  • Удалить и заново установить - самое быстрое и простое решение в данном случае.
    Но мне сейчас Windows не нужен, поэтому хочу поэкспериментировать...
    2 июня 2009 г. 14:39
  • Я думаю сектор не загружается из-за кривой нумерации дисков. Попробуй поменять ссылки в таблице разделов местами, так как они должны идти (сделай бэкап до операции).
    Насчёт  boot-сектора - возможно он привязан к расположению $MFT, а значит в некотором роде уникален для каждой машины.
    Насчёт альтернативных boot-секторов, если есть дисковод, то можно отформатировать флопик и туда скопировать файлы ntldr ntdetect.com и boot.ini. Если его нет, можно сделать загрузочную флэшку.
    2 июня 2009 г. 23:06
  • Есть такой загрузчик - grub4dos. Он, в отличие от grub, может читать NTFS и загружать ntldr.
    Только мне это не совсем помогло - вылезла какая-то ошибка с кракозябрами (видимо, русский не распознался). Но, думаю, это было сообщение от уже загруженного ntldr.

    В общем, стёр я Windows совсем:)
    • Помечено в качестве ответа Nikita PanovModerator 3 сентября 2009 г. 18:08
    16 июня 2009 г. 20:13