воскресенье, 20 марта 2011 г.

Почему установщик Windows записывает новый загрузочный сектор?

Это перевод Why does Windows setup lay down a new boot sector? Автор: Реймонд Чен.

Почему установщик Windows записывает новый загрузочный сектор? Потому что альтернатива - хуже.

Если вы установили ОС, то вы ожидаете, что она запустится. Но если ваш загрузочный сектор повреждён (скажем, у вас новый диск вообще без сектора, либо же он был повреждён вредоносным кодом), то вы ожидаете, что установщик ОС создаст новый, хороший загрузочный сектор. Если бы он этого не делал, то вы бы получили ОС, которая просто не грузится.

Не самое удачное знакомство с новой системой.

Я знаю, что сейчас собираются сказать некоторые люди: "Почему бы установщику системы не спрашивать, не хочешь ли ты перезаписать загрузочный сектор?". Подумайте об этом. Наступил Новый Год, вы распаковали новый компьютер и устанавливаете на него Windows XP... и тут установщик задаёт вам вопрос, на который вы не можете ответить. "Боже, компьютер говорит мне, что у меня нестандартный загрузочный сектор. Он говорит, что, быть может, это так должно быть или же он испорчен. Как, чёрт возьми, я могу знать разницу?" - и это в предположении, что они снизошли до чтения диалога. Гораздо более реалистичный сценарий: "Ой-ой! Компьютер задал мне страшный вопрос! Где тут отмена? Ненавижу компьютеры, их просто невозможно нормально использовать".

Да, это означает, что если вы техно-гик с нестандартным загрузочным сектором, то вы его потеряете при установке Windows. Но Windows не придирается именно к вам. Она затирает и саму себя. К примеру, если у вас установлена Windows XP и вы ставите Windows 2000, то установщик Windows 2000 затрёт загрузочный сектор от Windows XP. В результате загрузчик будет знать, как запустить Windows 2000, но не знать ничего про Windows XP. Вам нужно будет восстановить загрузочные файлы Windows XP, чтобы восстановить эту функциональность (прим.пер.: если вы устанавливаете Windows XP при уже установленной Windows 2000, то хотя загрузочный сектор будет перезаписан, но новый загрузчик от Windows XP знает и про Windows XP и про Windows 2000).

Даже если бы установщик Windows имел опцию "не перезаписывать загрузочный сектор" - вам бы она всё равно не понравилась бы. Установщик Windows дошёл бы до точки, где ему нужно записать новый загрузочный сектор, затем он бы сказал: "ох, тут какой-то непонятный сектор, а пользователь сказал мне его не трогать. Окей, я его не трогаю. Гм, а дальше? Как мне сказать неизвестному загрузочному сектору, куда я поставил новую ОС и как её запускать?". Поскольку авторы установщика Windows не обладают телепатическими способностями, то они не знают, как сказать этому "иностранному" сектору: "пожалуйста, добавь 'Windows' в список известных ОС для загрузки, а вот, как ты можешь её запускать". В результате: вы установили новую ОС, но нет никакого способа её запустить.

Начиная с Windows XP Service Pack 2 и Windows Server 2003 Service Pack 1 дела становятся немного лучше. Эти и будущие версии Windows проверяют версию файла NTLDR и оставляют новую версию загрузчика нетронутой, вместо перезаписи его старой версией. Надеюсь только, что вы не устанавливаете систему, потому что вам нужен новый загрузочный сектор...

2 комментария:

  1. Тем не менее, существует ещё одно решение - поставить старый загрузчик в цепочку. Что вполне приемлемо, т.к. по умолчанию выбор загрузки вообще не предоставляется, но если нажать F8...

    Так поступает, например, RedHat'овская Anaconda. Т.е. после установки Linux после Windows, я всё ещё могу загрузить Windows, а вот если наоборот, то уже фиг. И вот за это отношение к себе, как к единственным тут, Microsoft ещё долго будет получать поток лучей ненависти. :)

    > Надеюсь только, что вы не устанавливаете систему, потому что вам нужен новый загрузочный сектор...

    Помнится, во времена старой NT4 иногда только для этого и начинали установку - что бы восстановить ntldr. :)

    ОтветитьУдалить
  2. Анонимный23 июня 2011 г., 20:21

    > Тем не менее, существует ещё одно решение - поставить старый загрузчик в цепочку.
    Угу. И получить в C эмуляцию наследования агрегацией структур. Любопытно будет посмотреть на юзера-экспериментатора после пяти-семи реинсталляций всякоразных сборок. Бред это. Всё равно никогда не будешь знать, какие ОСы с какими загрузчиками выйдут через пару недель или пяток лет. И так и будет до тех пор, пока кто-нибудь не сподобится выпустить хотя бы черновик спецификации взаимодействия загрузкиков ОСей, универсальный и обязательный для применения.
    А недовольных, сыпящими лучами ненависти, всегда будет хватать. От зависти. Или от обиды, что за 8 лет так и не приняли слова дядюшки Билли про мечту о компьютере в каждом доме. У POSIX-сообщества времени было навалом, с 1993-го по 2001-й. Философию "тот, кто не разбирается в нашей консольке, тот лох, и пусть идёт, откуда пришёл" Билли не навязывал. Так что не он виноват, что сегодня рынком правят как раз вот эти самые лохи.

    ОтветитьУдалить

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

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