\documentclass{article}
\usepackage[koi8-r]{inputenc}
\usepackage[russian]{babel}
\usepackage[a4paper]{anysize}
\usepackage[intlimits]{amsmath}
\marginsize{3cm}{2.0cm}{2cm}{3.0cm}

%%beginskip
\newcommand{\trans}[1]{\footnote{от {\it англ.} #1}}
%%endskip
%;\def\trans#1{{(от. англ #1)}}
\def\question#1{{\subsection{Q: #1}}}
\def\answer{{\bf A:}}
\def\craw#1{{\tt #1}}   % ...  raw output  ...
\def\emphasize#1{{\bf #1}} % ... _don't_ ...

\begin{document}

\title{Линух+Виндовс+* HOWTO}
\author{rgo amty@yandex.ru}
\date{}
\maketitle

\tableofcontents
\newpage

\section{Введение}
Значит так, версия этого документа 0.2. Поэтому я настоятельно 
рекомендую все утверждения тщательно проверять, особенно это
относится к утверждениям насчёт GRUB. То что написано про
лило, сислинух, winnt-loader, и вся ``теоретическая'' часть,
почти наверняка не содержит оишбок. Но гарантировать я не могу.
Поэтому: доверяйте но проверяйте. Если вы найдёте неточность,
или вам кажется что здесь чего-то не хватает, пишите
\verb|amty@yandex.ru|.
 
Если вас абсолютно не интересует как и что делает загрузчик,
вы можете срезу перейти к \ref{loaders}.
\section{Загрузка с харда}
Жёсткий диск снаружи это такая коробочка. Довольно тяжёлая.
Это потому что она --- почти сплошное железо. Снаружи коробка,
а внутри металлический диск\footnote{Вы можете попробовать его
разобрать и посмотреть. Но предупреждаю, я не знаю как собрать
его обратно. Даже и не спрашивайте.}. Изнутри компьютера,
хард выглядит как последовательнось секторов. 

Но такая последовательность при ближайшем рассмотрении не очень удобна.
И для того чтобы избавится от этих неудобств, умные люди придумали
файловые системы, и таблицы разделов.

Старые системы работали не с одномерным массивом секторов, а с трехмерным,
где каждый сектор адресовался тремя числами: номером цилиндра, номером головки,
номером сектора. И благодаря всяким там \dots{} которые гонятся за
обратной совместимостью, до сих пор биос не может отделаться от такой
адресации. Уже давно контроллер жёсткого диска сам решает как отображать
линейные адреса секторов в трехмерные, но программа работающая с биосом
вынуждена указывать ему трёхмерные адреса секторов :(. Но не надо плакать,
современные биосы поддерживают packet адресацию которая позволяет
избавиться от лимита 504M. То есть если вашему биосу меньше 5-7 лет
то он всяко может дотянутся гораздо дальше.

\subsection{Файловая система}
Файловая система, это способ записи информации на носитель, который
позволяет:
\begin{itemize}
        \item именовать связанные куски хранящейся информации
          (файлы) символическим именем;
        \item добавлять новые файлы не затирая старых;
        \item удалять файлы;
        \item создавать файлы специального типа содержащие другие файлы
          (директории, их также обзывают папками или каталогами).
\end{itemize}
Наиболее распространённой файловой системой пожалуй является fat.
Собственно распространённость является единственным
бонусом использования этой fs: я не знаю оси
которая не умела бы общаться с 12-ти и 16-ти битными версиями этой fs,
и все оси с которыми я сталкивался последние лет пять, понимали 32-х
битную версию. Её основным недостатком являются убогие атрибуты файлов.
Из-за этого на неё невозможно поставить полностью функциональную *nix систему.
Вот ещё насколько примеров файловых систем:
\begin{itemize}
  \item ext2 --- native файловая система линукса. Она специально
    ориентирована на работу в линукс, поддерживая все основные
    требования UNIX к файловой системе.
  \item iso9660 --- файловая система, которая используется для
    хранения информации на CD-ROM носителях. Сама по себе очень
    убогая система, ибо при разработке, одним из основных требований
    была совместимость с DOS, то есть 8.3 имена
    (8 символов на имя и три на расширение), и опять же минимум атрибутов
    файлов. Отличием этой файловой системы от других, является
    проблематичность создания новых файлов, так как она ориентирована
    на использование в read режиме. На данный момент существует
    масса расширений этой файловой системы, которые позволяют
    использовать более длинные имена, или снимают ограничение
    на степень вложенности директорий.
  \item tar --- это на самом деле *nix команда, предназначенная
    изначально для сохранения дерева директорий/файлов на магнитную
    ленту. Всё действо tar заключается, по сути, в сериализации
    дерева директорий. Обычно используется вместе с каким-нибудь
    компрессором.
    Сейчас в качестве компрессоров широко используется gzip и bzip2.
  \item виртуальная файловая система. Это на самом деле не
    файловая система которая пишется в файл или раздел. Это
    уровень абстракции оси, который объединяет всякие разные
    файловые системы в нечто единое, сглаживая все различия.
    И, по большому счёту, ей здесь не место, но\dots{} Но я её
    сюда вписал :).
\end{itemize}
Большинство fs очень плохо
относятся к изменению размеров, и подвержены фрагментации. Одни в большей
степени другие в меньшей, но так или иначе все.

\subsection{Таблицы разделов}
Таблица разделов, это способ иметь несколько ``логических'' дисков,
на одном физическом. И такое деление очень часто используется, для
разных целей:
\begin{itemize} 
        \item Для облегчения задач администрирования.
          Например, админ системы может иметь три раздела: на одном основные
          системные файлы, без которых загрузка невозможна, на другом
          всё остальное необходимое для полноценного функционирования
          системы, и на третьем домашние директории пользователей.
          В такой ситуации, если с системой что-то случится (например,
          фс похерится), то больше вероятность что система останется
          бутабельной, и меньше придётся доставать из бэкапа.
        \item Для повышения производительности. Пример: в линуксе
          возможно создать отдельный раздел, со специальной файловой
          системой под названием swap, которая используется
          для сохранения/подгрузки страниц виртуальной памяти, в случае
          нехватки физической оперативки. Здесь специальная файловая
          система позволяет избежать борьбы демона kswapd (ответственного
          за все эти приколы) с кэшированием, которое используется
          для оптимизации обращений к жёсткому диску.
        \item Для установки нескольких осей на один писюк. Это собственно
          то ради чего я всё затеял. Как я уже говорил *nix на
          файловой системе fat --- это кал. Винду вообще невозможно
          поставить на ext2fs. Более того подчастую навозможно
          сосуществование двух осей на одной и той же fs.
        \item Сюда можете вписать ещё два десятка полезностей
          таблицы разделов.
\end{itemize}
Таблиц разделов на самом деле до хрена. Поменьше пожалуй чем
файловых систем, но\dots до хрена. На писюке традиционно используется
таблица разделов доса. Но FreeBSD например использует хоть и похожую
схему, но не полностью совместимую (поправте если наврал где-то, я
бздю в глаза не видел --- позор на мою седую голову). Идея всех
таблиц разделов примерно такая: в начале диска (в первых секторах)
записать всю управляющую инфу про то какие разделы на диске есть,
где они начинаются и где кончаются. Я не буду вдаватся в подробности
того как куда и что надо записать чтобы получить таблицу разделов
(даже для обычного писюка, уж не говорю про Mac'овскую), но немного
про терминологию сказать надо. Я буду говорить про досовую таблицу.
Если кого-либо из любителей фри это задевает, я предлагаю переписать
эту секцию. Хоть целиком. Я с радостью приму вашу помощь.

Раздел\trans{partition}, логический диск\footnote{logical drive},
том\footnote{volume} это всё одно и тоже (просто названия разных
осей, соответственно линукс, дос и виндовс). Разделы бывают трёх типов:
\begin{enumerate}
        \item primary\footnote{что-то я не припомню перевод} --- это
          раздел описанный в таблице разделов (здесь немного
          путаница с терминологией --- в данной ситуации под
          таблицей разделов я понимаю запись о разделах которая
          находится в самом начале диска). Таких разделов не
          может быть больше четырёх.
        \item extended --- это специального вида primary раздел, который
          содержит в себе пачку logical партиций.
        \item logical --- а это раздел, который расположен (и описан)
          в extended партиции. Не путать с логическим диском.
          Логический диск --- это партиция которую видит дос.
\end{enumerate}
В то время как количество primary разделов на харде жёстко ограничено,
количество logical в extended ограничено только лимитами ядра системы,
и размером харда\dots\footnote{нет скорее только лимитами системы :)}.
Поскольку каждая logical партиция предваряется записью в которой она полностью
описывается, и кроме того в этой записи хранится указатель на следующую
logical партицию.


Первый сектор каждого раздела, содержит загрузочную запись.
Загрузочная запись это специальная программа которая может быть
использована для загрузки оси (ну или для того чтобы спрятать вирус).
Есть еще одна загрузочная запись: MBR (Master Boot Record) --- главная
загрузочная запись. Эта запись располагается в самом первом секторе
жесткого диска. И именно её использует тупой биос, который на самом деле
на знает как грузить оси. И я не видел биоса, который умел бы
грузиться с другой загрузочной записи. Еслиб все биосы умели бы это,
я бы не писал этот кал.

Все эти сложности BIOS'овой таблицы вызваны, как всегда историческими
причинами. Изначально таблица разделов поддерживала только четыре
primary партиции, но потом этого показалось мало и были придуманы
extended.

Теперь несколько примеров (я их позаимствовал из документации по лило,
и если вы пользуетесь этим загрузчиком, то скорее всего вы можете
найти их у себя на харде).

\subsubsection{Флоп}
Это даже не пример таблицы разделов. А пример отдельного раздела.
Ибо я не знаю способа (кроме написания злых прог на С,
или ещё каких языках программирования), использовать что-то более сложное
на флопе. Содержимое флопа --- это в действительности пример раздела.
%%beginskip
$$
\begin{tabular}{|c|c|}
  \hline
  \text{Загрузочный сектор} & \hbox to 1.5in{\hfil} \\
  \cline{1-1}
  \multicolumn{2}{|c|}{} \\
  \multicolumn{2}{|c|}{\text{Область данных}} \\
  \multicolumn{2}{|c|}{} \\
  \hline
  \end{tabular}
$$
%%endskip
%:\begin{verbatim}
%;    +---------------------------+
%;    |Загрузочный сектор|        |
%;    |------------------+        |
%;    |                           |
%;    |       Область данных      |
%;    |                           |
%;    |                           |
%;    +---------------------------+
%:\end{verbatim}

Загрузочный сектор флопа выглядит так:
%%beginskip
$$
\begin{tabular}{r|c|}
  \cline{2-2}
  \tt 0x000 & \text{Команда перехода на код загрузчика} \\
  \cline{2-2}
  \tt 0x003 & \\
  & \text{Параметры диска} \\
  & \\
  \cline{2-2}
  \tt 0x02C/0x03E & \\
  & \text{Код загрузчика} \\
  & \\
  & \\
  \cline{2-2}
  \tt 0x1FE & \text{Магическое число} (0xAA55)\\
  \cline{2-2}
\end{tabular}
$$
%%endskip
%:\begin{verbatim}
%;            +----------------------------------+
%;      0x000 |Команда перехода на код загрузчика|
%;            |----------------------------------|
%;      0x003 |                                  |
%;            |         Параметры диска          |
%;            |                                  |
%;            |----------------------------------|
%;0x02C/0x03E |                                  |
%;            |     Код загрузчика               |
%;            |                                  |
%;            |                                  |
%;            |----------------------------------|
%;      0x1FE |     Магическое число (0xAA55)    |
%;            +----------------------------------+
%:\end{verbatim}

Секция с параметрами диска на самом деле не нужна. То есть,
если её нету то загрузка с дискеты возможна, просто дос не будет
при её отсутствии понимать такую дискету. Даже если она
форматирована на стандартные 1440 байт (80 дорожек, 18 секторов на
дорожку).

\subsubsection{Хард}
С хардом всё естественно сложнее. Но не намного.
Таблица разделов может выглядеть так:
%%beginskip
$$
\begin{tabular}{|l|l|l|}
  \hline
  \multicolumn{3}{|l|}{\text{Таблица разделов}\hbox to 2in{\hfil\tt /dev/hda~}} \\
  \cline{2-3}
  & \multicolumn{2}{l|}{\text{Раздел 1}\hfill {\tt /dev/hda1}} \\
  & \multicolumn{2}{l|}{} \\
  \cline{2-3}
  & \multicolumn{2}{l|}{\text{Раздел 2}\hfill {\tt /dev/hda2}} \\
  & \multicolumn{2}{l|}{} \\
  \hline
\end{tabular}
$$
%%endskip
%:\begin{verbatim}
%;+--------------------------------------------+
%;| Таблица разделов                 /dev/hda  |
%;| +------------------------------------------|
%;| | Раздел 1                       /dev/hda1 |
%;| |                                          |
%;| |------------------------------------------|
%;| | Раздел 2                       /dev/hda2 |
%;| |                                          |
%;+--------------------------------------------+
%:\end{verbatim}
Но этого мало! Любой из нарисованных здесь разделов может быть типа extended,
со всеми вытекающими отсюда:
%%beginskip
$$
\begin{tabular}{|l|l|l|}
  \hline
  \multicolumn{3}{|l|}{\text{Таблица разделов}\hbox to 2in{\hfil\tt /dev/hda~}} \\
  \cline{2-3}
  & \multicolumn{2}{l|}{\text{Раздел 1}\hfill {\tt /dev/hda1}} \\
  & \multicolumn{2}{l|}{} \\
  \cline{2-3}
  & \multicolumn{2}{l|}{\text{Раздел 2}\hfill {\tt /dev/hda2}} \\
  & \multicolumn{2}{l|}{} \\
  \cline{2-3}
  & \multicolumn{2}{l|}{\text{Extended раздел}\hfill {\tt /dev/hda3}} \\
  \cline{3-3}
  & & \text{Таблица разделов Extended раздела} \\
  \cline{3-3}
  & & \text{Раздел 3}\hfill {\tt /dev/hda5}\\
  & & \\
  \cline{3-3}
  & & \text{Таблица разделов Extended раздела} \\
  \cline{3-3}
& & \text{Раздел 4} \hfill {\tt /dev/hda6}\\
  & & \\
  \hline
\end{tabular}
$$
%%endskip
%:\begin{verbatim}
%;+--------------------------------------------+
%;| Таблица разделов                 /dev/hda  |
%;| +------------------------------------------|
%;| | Раздел 1                       /dev/hda1 |
%;| |                                          |
%;| |------------------------------------------|
%;| | Раздел 2                       /dev/hda2 |
%;| |                                          |
%;| |------------------------------------------|
%;| | Extended раздел                /dev/hda3 |
%;| | +----------------------------------------|
%;| | | Талица разделов Extended раздела       |
%;| | |----------------------------------------|
%;| | | раздел 3                     /dev/hda5 |
%;| | |                                        |
%;| | |----------------------------------------|
%;| | | Таблица разделов Extended раздела      |
%;| | |----------------------------------------|
%;| | | Раздел 4                     /dev/hda6 |
%;| | |                                        |
%;+--------------------------------------------+
%:\end{verbatim}
Здесь как вы можете видеть третий раздел --- extended, и в нём ещё два раздела.
И напоследок, MBR:
%%beginskip
$$
\begin{tabular}{r|c|}
  \cline{2-2}
  \tt 0x000 & \\
  & \text{Код загрузчика} \\
  & \\
  & \\
  \cline{2-2}
  \tt 0x1BE & \text{Таблица разделов} \\
  & \\
  \cline{2-2}
  \tt 0x1FE & \text{Магическое число} (0xAA55) \\
  \cline{2-2}
\end{tabular}
$$
%%endskip
%:\begin{verbatim}
%;            +-------------------------+
%;      0x000 |                         |
%;            |     Код загрузчика      |
%;            |                         |
%;            |                         |
%;            |-------------------------|
%;      0x1BE |    Таблица разделов     |
%;            |                         |
%;            |-------------------------|
%;      0x1FE |Магическое число (0xAA55)|
%;            +-------------------------+
%:\end{verbatim}

Здесь абсолютно не нужна таблица параметров диска, потому что
биос сам умеет узнавать у харда всю конфигурацию, а дос
узнаёт всё от биоса.

Да, чуть не забыл, магическое число --- это сигнатура, по наличию которой биос судит
о корректности загрузочной записи.


\section{Загрузчики}
\label{loaders}
Теперь после небольшого въезжалова в тему, я разберу несколько
способов грузить оси (linux \& DOS \& windows only :( ). Вообще,
все загрузчики, которые я знаю, поддеживают два способа загрузки
оси (и это должно греть вам душу: не всё ещё потеряно):
\begin{enumerate}
  \item Chain-loading (цепочковая загрузка что ли :)?). Простейший способ:
    загружаем другой бутсектор (другую загрузочную запись), и передаём
    ей управление. Точно также как это делает BIOS. Типа ``я не знаю как
    грузить оси, пускай native загрузчик разбирается''.
    Я уже говорил, что на каждом разделе есть загрузочная запись, но не все
    имеет смысл использовать. Ибо, например, далеко не каждый загрузчик
    может встать в бутсектор логического раздела.
  \item Собственно загрузка оси. То есть копирование ядра оси в оперативку,
    разархивирование если оно пожато, передача параметров в ядро и передача
    управления ядру. Возможна также дополнительная настройка системы,
    например перевод процессора в защищённый режим. Каждое
    ядро хочет чтобы его грузили по своему. Я не спец в разных
    ядрах, но, например, протокол загрузки ядра линукс менялся,
    по-моему где-то в районе 2.0 версии (ломает искать). Ядро валяется
    на диске как обычный файл, но поскольку большинство загрузчиков
    ничего не понимает в файловой системе, то они один раз выясняют
    геометрическое положение ядра на харде и при загрузке исходят из
    этого. Именно поэтому, при компиляции и установке нового ядра (файла)
    наобходимо обновлять загрузчик.
\end{enumerate}


Далее, все загрузчики делятся на две (как минимум) части:
\begin{enumerate}
  \item Пользовательский интерфейс. Программа которая записывает бутсектор.
  \item Собственно загрузочная запись (1 stage).
    Это 512 байт которые записываются в бутсектор.
    Не буду ручатся за все загрузчики, но я знаю точно что,
    например, lilo, GRUB, syslinux, состоят из большего количества частей.
    Вот ещё не перечисленные:
  \item Второй сектор раздела. (1.5 stage) (Или может вторые 512b?).
    Пользуется как продолжение программы загрузчика.
  \item Некий набор секторов (2 stage), которые реально являются кусками файла
    некоторой файловой системы. Так, например, делает GRUB, который
    подгружает эти сектора (для этого естественно при установке
    загрузчика, в него надо вписать адреса этих секторов, и этим
    занимается программа инсталлятор 1) ), и в результате умеет работать с
    файловыми системами.
\end{enumerate}

Размер загрузчика очень ограничен, и поэтому в него сложно
запихать поддержку всего железа с которым ему приходится работать.
Из-за этого загрузчик вынужден использовать прерывания BIOS,
например, для чтения секторов жёсткого диска. Здесь может возникнуть
проблема: если биос старый и не поддерживает больших дисков,
то загрузчик не в состоянии прочитать сектор который очень далеко
от начала диска. Наиболее известные из таких ограничений: биос не
умеет работать с диском на котором больше 1024 цилиндров, биос
не тянет больше одного (или двух, или четырёх) жестких дисков.

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

При дальнейшем описании загрузчиков, я опускаю некоторые детали,
в частности, возможности lilo и GRUB модифицировать таблицу
разделов (устанавливать/сбрасывать флаги партиций, типа hidden,
модифицировать тип партиции). Но, на мой взгляд, там всё очень
просто. Понадобиться прочитаете ;)

\subsection{lilo}
lilo --- это наиболее распространённый загрузчик для linux.
lilo умеет напрямую грузить только линукс, но за счёт технологии
chain-loading, грузит и всё остальное. Основным и единственным
файлом конфигурации лило является файл \verb|/etc/lilo.conf|.
Я не буду вдаваться в подробности конфигурирования, но в директории
\verb|/usr/doc/lilo-<version>/samples| можно найти готовые примеры этого файла.
Более того. В директории \verb|/usr/doc/lilo-<version>/doc| есть файл user.tex
Там есть все примеры, которые я привёл. Есть описалово того как ставить
дос и линукс на один хард. Причём в различных вариантах. И не надо пугаться
слова дос. В данной ситуации оно означает и виндовс тоже (как впрочем это
часто случается в *nix world).
Я до кучи приведу перевод одного кусочка из начала \verb|user.tex|, мне кажется
это в тему здесь.
\begin{quotation}
  Для нетерпеливых: существует скрипт для быстрой установки лило.
  См. раздел 4.1.2. (мануала по лило (rgo))

  Но\dots постойте\dots вот несколько простых правил, которые помогут вам
  избежать большинства проблем с lilo:
  \begin{itemize}
    \item \emphasize{Не паникуйте.} Если что-то не работает, попробуйте
      найти, что неправильно. Постарайтесь проверить свои предположения
      и, только после этого, попытайтесь исправить проблему.
    \item Прочитайте документацию. Особенно если система не соответствует
      тому, чему она должна соответствовать, на ваш взгляд.
    \item Убедитесь, что у вас есть загрузочная дискета, что вы умеете
      ею пользоватся (и в частности запустить \verb|/sbin/lilo| ;) (rgo)), и что
      эта дискета аптудэйт.
    \item Запускайте \verb|/sbin/lilo| \emphasize{всегда}, когда вы меняете
      ядро или файлы конфинурации лило. Если вы сомневаетесь запустите
      лило. Вы не сможете запустить \verb|/sbin/lilo| слишком много раз.
    \item если вы проводите деструктивный апгрейд (это ещё что такое? (rgo)), и/или удаляете
      ваши линуховые партиции de-install lilo \emphasize{до этого},
      если лило стоит в MBR.
    \item Не надо перехерачивать скрипты установки. Всегда перед установкой лило
      проверяйте \verb|/etc/lilo.conf|, который они творят.
    \item Если вы пользуете большой диск. Будьте готовы к проблемам:
      быть может вам понадобиться пользовать опцию \craw{linear}.
  \end{itemize}
\end{quotation}

lilo.conf имеет следующую структуру:
\begin{enumerate}
  \item глобальные опции, которые определяют интерфейс загрузчика (см. описалово
    опции install), общие опции для секций описывающих загрузку конкретных осей.
  \item Описание пунктов меню загрузчика. Каждому пункту должна соответствовать
    одна ось (ну точнее здесь должно быть определено что, и как грузить, и как
    пункт меню должен называться)
\end{enumerate}
Описание пункта меню завершается либо EOF (конец файла для не программеров),
либо началом описаня следующего (``image'' или ``other'' опции)
Приведу также основные опции lilo.conf
\begin{description}
  \item[boot=<boot-device>] --- указывает в какой загрузочный сектор
    писать загрузчик (1 stage). По дефолту лило пишет загрузочный
    сектор раздела смонтированного в корень виртуальной файловой
    системы.
  \item[image=<pathname>] --- такая запись в lilo.conf означает
    начало секции описывающую загрузку линукса. Таких секций может быть
    сколько вам угодно. pathname --- это путь в \emphasize{текущей}
    виртуальной файловой системе к файлу ядра линукса.
  \item[other=<device>] --- это начало секции описывающей начало загрузки
    не-линукса (методом chain-loading). device --- это устройство
    на котором находится бутсектор, который будет грузится.
  \item[lba32, linear] --- это способ обойти исторические
    ограничения биоса на максимальный объём диска. Если один из загрузочных
    секторов которые вы пользуете находится очень далеко от
    начала диска, то добавьте опцию lba32 (linear устарела, но пока работает), и
    может быть всё станет Ок. Но эти опции могут конфликтовать
    с compact, на некоторых системах.
  \item[compact] --- указание загрузчику пытаться грузить в память
    по нескольку секторов за раз, это повышает скорость загрузки.
    Особенно существенно если вы грузитесь в флопа.
  \item[timeout=<time>] --- время в десятых секунды, в течение которого
    лило будет ждать прежде чем грузануть дефолтовую ось.
  \item[label=<name>] --- эта опция может быть использована только в
    описании пункта меню. Она указывает как будет называтся этот
    пункт.
\end{description}

Кроме приведённых есть опции установки пароля, графического интерфейса лило,
модификации таблицы разделов. Но меня ломает всё это переводить.

\subsubsection{Опции специфичные для линуха.}
Большинство этих опций соответствуют параметрам ядра, про которые
вы можете почитать в \verb|kernel-parameters.txt| в документации к ядру.
Вы можете эти опции пользовать как глобально, так и для каждого
ядра в отдельности.
\begin{description}
  \item[root=<device>] --- устройство которое ядро будет монтировать
    в корень виртуальной файловой системы.
  \item[vga=<val>] --- графический режим в котором будет находится
    консоль (скажу на всякий случай: разрешение в котором будет работать
    графическая оболочка X, gnome, kde, icewm никак не связано с этим
    параметром).
    val может принимать следующие значения:
    \begin{itemize}
      \item ask --- при загрузке спросить режим у пользователя,
        полезно для определения какие режимы биос тянет.
      \item normal --- стандартный текстовый режим 80x25,
      \item extended или ext --- текстовый режим 80x50,
      \item число, номер режима, в записи языка C (в десятичной,
        восьмеричной или шестнадцатиричной системе счисления).
        Это пожалуй самая главная опция :).
        Номера можно разделить на две группы, первая это номера
        соответствующие текстовым режимам работы видеокарты, и
        вторые это номера соответствующие графическим режимам видяхи.
        Для графических режимов, необходима поддержка консоли
        на фреймбуфере в ядре. Если вы пользуете дефолтовое ядро,
        то скорее всего оно эту поддежку обеспечивает. Если же ядро ---
        самокомпиль, то\dots всё в ваших руках ;). Если вы не вылезаете
        из иксов, то вас вообще не должна интересовать эта опция,
        хотя лого при загрузке это прикольно. (оффтоп: а вы пробовали
        на несколько-процессорной машине грузить линух с vga=0x319? Нет? Попробуйте.
        Меня такая глупая радость разобрала, что я чуть со стула не упал)
        \begin{description}
          \item[0x0100-0x017f] --- стандартные BIOS VGA режимы, это
            идентификаторы (+ 0x100), которые используются в функции 00
            прерывания биос 0x10. То есть если вы хотите грузануть
            линух в 640x480:16, то если в биосе это 0x12, то
            ядру надо передать vga=0x212.
          \item[0x0200-0x08ff] --- тоже самое с BIOS VESA SVGA режимами.
            Только биосовый номер режима надо увеличить на 0x200.
        \end{description}
        более подробно всё описано в доках ядра:
        \begin{verbatim}
          Documentation/i386/boot.txt|
          Documentation/svga.txt
          Documentation/fb/vesafb.txt
        \end{verbatim}
        Вот до кучи, кину список VESA SVGA режимов (BIOS'вые номера уже
        увеличены на 0x200 для использования с `vga='):

        \begin{tabular}{|c|c|c|c|c|}
          \hline
              & 640x480 & 800x600 & 1024x768 & 1280x1024 \\
          \hline
          256 & 0x301 & 0x303 & 0x305 & 0x307 \\
          32k & 0x310 & 0x313 & 0x316 & 0x319 \\
          64k & 0x311 & 0x314 & 0x317 & 0x31A \\
          16M & 0x312 & 0x315 & 0x318 & 0x31B \\
          \hline
        \end{tabular}
%;\begin{verbatim}
%;      +-----+---------+---------+----------+-----------+
%;      |     | 640x480 | 800x600 | 1024x768 | 1280x1024 |
%;      +-----+---------+---------+----------+-----------+
%;      | 256 |  0x301  |  0x303  |  0x305   |   0x307   |
%;      | 32k |  0x310  |  0x313  |  0x316   |   0x319   |
%;      | 64k |  0x311  |  0x314  |  0x317   |   0x31A   |
%;      | 16M |  0x312  |  0x315  |  0x318   |   0x31B   |
%;      +-----+---------+---------+----------+-----------+
%;\end{verbatim}
    \end{itemize}
    \item[read-only] --- указывает что, корневая файловая система
      должна быть смонтирована read only. Лучше если вы проставите
      эту опцию.
    \item[append=<string>] --- добавить параметры ядра. лило
      не знает всех параметров ядра, и те которые он не знает
      можно указывать здесь. Пример: \verb|append="/dev/hdc=ide-cd console=ttyS1,9600"|.
      \item[$\bullet$] есть ещё опции, и вы их можете найти в \verb|man lilo.conf|
\end{description}
\subsubsection{Другие оси}
Здесь по-моему нет никаких интересных опций.
\subsubsection{Скрипты установки}
Если вы ставите lilo из сорцов, то посмотрите на скрипт \verb|QuickInst|.
Он, интерактивном режиме, пытается найти все разделы с которых можно грузиться и
прописывает файл \verb|/etc/lilo.conf|.
\subsection{GRUB}
FIXME: Я опять забыл скачать доки по груб.
GRUB --- это наиболее мощный загрузчик из тех что я видел.
GRUB понимает файловые системы, и имеет навороченный boot-prompt.
Собственно это всё что я про него помню. По-моему, он в первую
очередь загрузчик фри, но линух он грузит безо всякого chain-loading.
То есть это значит, что вам не надо иметь ещё один загрузчик для
линуха.

GRUB использует свою схему именования устройств и разделов. Имя устройства
выглядит примерно так: ``(hd0)''; имя раздела --- (hd0, 0).
hd --- указывает что это жёсткий диск, возможно использовать также
\begin{description}
  \item[fd] --- флоповод
  \item[hd] --- хард
\end{description}
(hd0) --- это master жёсткий диск висящий на первом ide контроллере,
(hd1) --- slave, там же.
Разделы нумеруются по порядку включая extended, но в отличие от
линуха не с 1, а с 0.

grub.conf выглядит примерно также как и lilo.conf.
Вот основные опции grub.conf:
\begin{description}
  \item[default=<number>] --- номер дефолтового пункта меню
  \item[timeout=<number>] --- время в секундах, ожидания перед
    загрузкой дефолтового пункта
  \item[title] --- имя пункта меню, является знаком, что начинается
    описание нового пункта.
  \item[root <device>] --- работает для линукса (FIXME: и фри?).
  \item[kernel <filename> <options>]. filename --- путь к ядру, либо вида:
    \verb|/boot/vmlinuz-2.6.11|, относительно root, либо
    \verb|(hd0, 2)/boot/vmlinuz-2.6.11|, относительно \verb|/dev/hda3|.
    options --- это опции передающиеся ядру. В отличие от лило,
    здесь надо указывать все опции, ибо (по моему) нет способа
    сказать лилошное-глобальное \verb|vga=0x314|
  \item[rootnoverify <device>] --- аналог root, для не линукс,
  \item[chainloader <device> +1] --- FIXME: что ето?
\end{description}

Груб, на мой взгляд, имеет один дополнительный бонус (по сравнению с лило):
его не надо переустанавливать если ядро поменяно, достаточно присвоить
новому ядру имя старого (уже установленного):
\begin{verbatim}
mv arch/boot/i386/bzImage ${old-kernel}
\end{verbatim}
%$
Есть ещё один бонус --- возможность read-only доступа к файловым системам
fat, ext2, ext3 прямо из командной строки загрузчика. 
То есть, если вы часто переустанавливаете ядро, имеете пару установок DOS/Windows,
и ещё десяток *nix, то груб для вас.
Например, после неудачного
эксперимента система не бутабельна, но вы помните что в какой то доке было написано
как можно всё-таки грузанутся, читаете доку и грузитесь; или просто говорите,
что-нибудь типа:
\begin{verbatim}
  root=(hd0,2)
  kernel (hd1)/kernels/bare.i vga=0x314 init=/bin/bash
  boot
\end{verbatim}
Путь к ядру я написал, из предположения наличия первого диска дистра слаки
в cdrom'е висящем slave'ом на первом ide контроллере (во завернул :) ).
\subsection{loadlin}
loadlin --- досовая программа, которая грузит линух из доса. То есть
запустившись, и считав ядро в память loadlin.exe, кладёт большой член
на дос, и бутит ядро. loadlin ни фига не записывается ни в какой бутсектор,
и поэтому прост до фига. Но надо имет рабочую установку доса. Если у вас
win95, win98, winMe (по моему и winMe тоже), то loadlin почти идеал (зная
как часто надо переустанавливать эти системы, я боюсь вас достанет
устанавливать loadlin, прописывая процедуру загрузки в autoexec.bat
и config.sys). А ежели у вас winXP, то проще попробовать что-нить другое.
(FIXME: loadlin. И эти доки тоже :( )
\subsection{syslinux}
syslinux --- это набор программ позволяющих создавать загрузочные
флопики и CDROM'ы. Его можно использовать и в качестве основного
загрузчика с харда, но это не удобно. Я опишу вкатце как этим
пользоваться. Более подробно можно прочитать в доках по syslinux:
\begin{verbatim}
/usr/share/syslinux/syslinux.doc
/usr/share/syslinux/isolinux.doc
/usr/share/syslinux/pxelinux.doc
\end{verbatim}
\verb|pxelinux.doc| --- рассказывает как syslinux можно применить
к загрузке компа по сети, но поскольку я с этим не сталкивался, то
ничего сказать пока не могу.
\subsubsection{флоп}
Первым делом надо отформатить флопик, создать на нём файловую систему fat,
и записать на неё файлы \verb|bzImage|, \verb|initrd.img|.
Потом в корне флопика создаём файл \verb|SYSLINUX.CFG|,
в котором указываем что и как надо грузить.
Опции файла \verb|SYSLINUX.CFG|:
\begin{description}
  \item[DEFAULT <kernel> <options>] --- дефолтовая загрузка.
  \item[APPEND <options>] --- глобальные опции ядра которые будут передаваться
    любому загружаемому ядру
    в любом случае (ну почти см. \verb|APPEND -|,
    как при ручной загрузке из командной строки, так и
    автоматической.
  \item[LABEL <name>] --- начало описания пункта меню.
  \item[KERNEL <image>] --- имя файла ядра или файла с образом бутсектора
    который надо грузить
  \item[APPEND -] --- при использовании в описании пункта меню отменяет глобальные
    опции установленные \verb|APPEND|.
  \item[TIMEOUT <time>] --- таймаут в десятых секунды
  \item[FONT file.psf] --- загрузить в видяху шрифт из file.psf
  \item[F1 filename]
  \item[F2 filename]
  \item[\dots]
  \item[F9 filename]
  \item[F0 filename] --- позволяет привязать к нажатию одной из
    функциональных клавиш отображения файла на экране. \verb|F0|
    означает \verb|F10|, а \verb|F11| и \verb|F12| использовать
    невозможно.
\end{description}
есть и еще опции, найдёте сами.

Если есть файлик initrd, то надо указать опцию ядра \verb|inird=<file>|, где
\verb|file| --- это файл с пожатым gzip'ом образом файловой системы. 
Если не знаете как такой файлик сделать, ищите в \verb|Bootdisk-HOWTO|

Если надо грузить систему отличную от линукс, делаем следующее:
\begin{quotation}
  в линукс:
  \begin{verbatim}
    dd if=/dev/device of=other.bss bs=512 count=1
  \end{verbatim}
  \verb|/dev/device| --- это девайсина на которой валяется бутсектор интересующей
  нас системы.
\end{quotation}
\begin{quotation}
в досе:
  \begin{verbatim}
    copybs a: a:dos.bss \#FIXME: надо на это посмотреть
  \end{verbatim}
\end{quotation}

Обратите внимание, расширение файла образа бутсектора \verb|bss|. И это важно.
Оно таким и должно быть.

Когда на дискете есть всё что нужно, осталось сказать
\begin{verbatim}
  syslinux [-s] /dev/fd0
\end{verbatim}
или, в досе
\begin{verbatim}
  syslinux [-s] a:
\end{verbatim}
Опция \verb|-s| означает safe, slow and stupid (то есть безопасный, тормозной и
тупой как бревно): syslinux поставит именно такой бутсектор.
Это позволяет избежать проблем с некоторыми биосами.

Все прочие замороки создания загрузочного диска я не включаю в этот
документ. Если я попытаюсь это сделать, то этот howto превратится
в книгу. Книгу про то как устоен линух. Но если вам это интересно
см. \verb|Bootdisk-HOWTO|.

\subsubsection{CD-ROM}
С сидюком, всё не сложнее чем с флопом. Но как сказано в доках
по syslinux: биосы бажные, и здесь могут быть проблемы с загрузкой.
Я опишу процесс создания образа сидюка на примере \verb|mkisofs|.
Как его записать, или как сделать тоже самое, например, в \verb|Nero Burning Rom|
я \emphasize{не знаю}. Эти вопросы не ко мне.
Итак. Создаём дмректорию в которую кидаем всё что должно быть на
уважающем себя сидюке, ну всякие архивы, музыку, и т.п.
Дальше создаём ещё одну директорию, например \verb|isolinux|.
Копирум в \verb|isolinux| файл \verb|isolinux.bin| (в моей системе 
\verb|/usr/share/syslinux/isolinux.bin|), \verb|isolinux.cfg| (создаётся также
как и \verb|SYSLINUX.CFG| для флопа). Копируем туда всякие файлы типа
ядра, initrd, бутскторов. И
\begin{verbatim}
  mkisofs -o <isoimage> \
        -b isolinux/isolinux.bin -c isolinux/boot.cat \
        -no-emul-boot -boot-load-size 4 -boot-info-table \
        <root-of-iso-tree>
\end{verbatim}

Для незнакомых с \verb|mkisofs| поясню. \verb|-b| это файл и el-torito
бут-образом. \verb|-с| --- файл бут-каталога el-torito.
isoimage --- имя файла в который будет сохранён образ полученной
файловой системы. Всё записываем и имеем бутабельный CD-ROM.

\subsection{Booteasy}
В глаза не видел...
\subsection{WinNT загрузчик}
Загрузчик winnt вполне даже загрузчик (я просто когда-то в этом очень сумневался :)).
И его вполне можно пользовать для chain-loading. Но, для
этого, сначала надо выковырять в файл линуховый бутсектор (ну или бутсектор
какой другой оси). Как его выковырять в виндовс, я не знаю (точнее знаю: можно
воспользоваться дос-версией syslinux).
Но поскольку мы предполагаем что вы ставите линух, то проблем
не будет. Итак. Если у вас уже установлен winnt и вы хотите установить
линух, то вам собственно для начала надо поставить линух :). Но,
не надо ставить лило в MBR. Будьте скромнее и поставте его
например в бутсектор корневого раздела линуха. Факт:
линух после этого грузится не будет. Поэтому в процессе установки
вам надо сделать загрузочный диск линуха. После установки,
грузитесь в линух с дискеты, заходите как root и
\begin{verbatim}
# dd if=/dev/hda2 of=/bootsect.lnx bs=512 count=1
\end{verbatim}
вместо \verb|/dev/hda2| надо подставить имя раздела на котором
располагается бутсектор лило. Если вы не помните, можете посмотреть
опцию boot файла \verb|/etc/lilo.conf|.

теперь надо перекинуть файл /bootsect.lnx на c:
проще всего это сделать через дискету:
\begin{verbatim}
# mcopy /bootsect.lnx a:
\end{verbatim}
Все. Можно ребутаться в винду.

В винде, надо открыть блокнотом скрытый системный файл \verb|C:\boot.ini|.
И добавить в конец строку:
\begin{verbatim}
C:/bootsect.lnx=''Linux''
\end{verbatim}
И, конечно, очень важно не забыть скопировать bootsect.lnx в корень
диска C.
Теперь совсем всё.
\subsection{BootMagic}
Это коммерческий загрузчик. Что он из себя представляет я не знаю.
\section{Другие способы}
Есть и другие способы иметь две оси на одном харде. Можно эмулировать
одну ось из другой. Более тормозно чем native, но люди говорят
что можно.
\subsection{VMWare}
это коммерческий эмулятор писюка. Спокойно может запустить линух
из под винды.
\subsection{Wine}
Это попытка (небезуспешная между прочим) реализации win32api в линуксе.
До хрена виндовых приложний запускается из под wine и даже не подозревает
что win32api совсем не native M\$ апи.
\subsection{cygwin}
Это что-то типа wine. Только здесь идея запускать линуксовые приложения
под виндой. На мой взгляд (человека из *nix) если бы не некоторые
особенности виндовс, было бы совсем здорово. Главное отличие от wine
что cygwin-приложения более native в виндовс, чем виндовские в wine.

\section{FAQ}
\question{Я поставил виндовс и мне не загрузится под линуксом}
\answer{} если вас есть аптудэйт загрузочная дискета линукса, то
грузитесь с неё, и вызывайте из командной строки лило:
\begin{verbatim}
lilo
\end{verbatim}

Если загрузочной дискеты нету, но есть диск с дистрибутивом, то надо
загрузится с него, смонтировать корневую файловую систему установки
линукса, где стоит лило (и находится \verb|/etc/lilo.conf|). Некоторые дистрибутивы
это делают за вас (например RedHat9.0). в некоторых надо вручную:
\begin{verbatim}
mount /dev/hda3 /mnt
\end{verbatim}
вместо \verb|/dev/hda3| подставьте имя раздела на который поставлен линух.
Потом:
\begin{verbatim}
chroot /mnt
\end{verbatim}
вместо mnt надо подставить директорию на которую вы (ну или дистр)
смонтировали корневой раздел.
\begin{verbatim}
lilo
\end{verbatim}
Всё.
С GRUB тоже самое, только вместо команды lilo надо выполнить
команду установки груба (FIXME: какую команду?)

\question{Я поставил линух и теперь мне не загрузиться в виндовс}
\answer{} добавьте следующее в /etc/lilo/conf:
\begin{verbatim}
other=/dev/hda1 # вместо /dev/hda1 подставьте имя раздела на крый установлен
                # виндовс
        label=Windoz
\end{verbatim}
и выполните команду:
\begin{verbatim}
lilo
\end{verbatim}


\section{See Also}
\subsection{HOWTOs}
\begin{itemize}
  \item Linux+DOS+Win95+OS2 процесс установки указанных
    систем на один хард
  \item Linux+FreeBSD
  \item Linux+NT-Loader --- как пользоваться winnt загрузчиком
  \item Linux+Solaris
  \item Linux+Win95
  \item Linux+Win9x+Grub-HOWTO
  \item Linux+WinNT
  \item Linux+Windows-HOWTO
  \item Bootdisk-HOWTO --- как создать загрузочный диск линуха.
\end{itemize}
\subsection{Другие доки.}
\begin{itemize}
  \item \verb|/usr/share/doc/lilo-<version>/doc/user.dvi|,
    если вы нашли \verb|user.tex|, но там
    нету \verb|user.dvi|:
    \begin{verbatim}
      su root
      cd /usr/share/doc/lilo-<version>/doc/

      PATH=/usr/share/texmf/bin:$PATH make 
      exit
    \end{verbatim} 
    %$
    для просмотра пользуйте программу xdvi
  \item \verb|man lilo.conf|, \verb|man lilo|.
  \item \verb|info grub|
  \item \verb|/usr/src/linux/Documentation/i386/boot.txt|
  \item \verb|/usr/src/linux/Documentation/svga.txt|
  \item \verb|/usr/src/linux/Documentation/fb/vesafb.txt|
  \item \verb|/usr/share/syslinux/*doc|
\end{itemize}
Те что указаны путями файловой системы, вам может быть
придётся искать самостоятельно, ибо пути могут различатся:
\begin{verbatim}
/usr/share/doc
/usr/doc
/usr/local/doc
/usr/local/share/doc
\end{verbatim}

\end{document}
