The Linux Bootdisk HOWTO, v3.6, Январь 2000 г.

Этот документ описывает, как создать ваши собственные загрузочные дискеты для Linux. Эти дискеты могут использоваться как спасательные диски или для проверки новых компонент системы. Если Вы не читали Linux FAQ и связанные документы, такие как Linux Installation HOWTO и Linux Install Guide, Вы не должны пробовать создавать загрузочные дискеты.

[Tom Fawcett, перевод: Максим Дзюманенко]

1. Предисловие.

Обратите внимание: Этот документ возможно устарел. Если дата на титульном листе - больше чем шесть месяцев назад, пожалуйста проверьте существует ли более современная версия на домашней странице Linux Documentation Project (Проект Документации Linux) http://linuxdoc.org/HOWTO/Bootdisk-HOWTO.html.

Хотя этот документ должен быть разборчив в этой текстовой форме, он выглядит намного лучше в Postscript (.ps) или HTML из-за используемой типографской записи. Мы советуем Вам выбирать одну из этих форм. Info версия, также может быть получена, но конвертируется с ошибками, поэтому не используется.

1.1 Заметки о версии.

Graham Chapman (grahamc@zeta.org.au) написал оригинал Bootdisk-HOWTO, и поддерживал до версии 3.1. Tom Fawcett (fawcett@croftj.net) добавил много материала для ядра 2.0, и он - поддерживает документ начиная с версии 3.2. Многое из содержания оригинала Чапмана остается.

Этот документ предназначен для ядра 2.0 Linux и выше. Если у Вас старое ядро (1.2.xx или ранее), пожалуйста консультируйтесь с предыдущими версиями Bootdisk-HOWTO, сархивированными на homepage Грэма Чапмана.

Эта информация предназначена для Linux на платформе Intel. Многое может быть применимо к Linux на других платформах, но у нас нет никакого непосредственного опыта или информации относительно этого. Если у кото-то есть опыт работы с загрузочными дисками на других платформах, пожалуйста свяжитесь с нами.

1.2 Пока в разработке.

Есть добровольцы?

  1. Описать (или сослаться на документ, который описывает) как создать другие подобные загрузочным дискам вещи, такие как CDROM-ы, ZIP диски и LS110 диски.
  2. Описать как работать с большими libc.so динамическими библиотеками. Базовые варианты - зять старые, маленькие библиотеки или обрезать существующие библиотеки.
  3. Проанализировать загрузочные диски дистрибутивов. Обновить "Как это делают Pros" секцию.
  4. Удалить секцию, которая описывает как обновить существующие загрузочные диски дистрибутивов. Это обычно создает больше проблем, чем имеет достоинств.
  5. Переписать/переработать секцию Поиск неисправностей.

1.3 Отзывы и благодарности.

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

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

Высылайте комментарии, коррекции и вопросы автору по адресу email указанному выше. Я не буду пытаться ответить на все вопросы, пожалуйста, читайте сначала секцию Поиск неисправностей.

1.4 Правила распространения.

Copyright © 1995,1996,1997,1998 by Tom Fawcett and Graham Chapman. Этот документ может быть распределен под условиями, изложенными в лицензии Linux Documentation Project на http://linuxdoc.org/copyright.html. Пожалуйста свяжитесь с авторами, если Вы неспособны получить лицензию.

Это - бесплатная документация. Она распространяется в надежде, что будет полезна, но без любой гарантии; без даже неявной гарантии пригодности к продаже или пригодности для конкретного применения.

2. Введение.

Загрузочные диски Linux полезны в ряде случаев, типа:

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

Есть несколько способов получения загрузочных дисков:

  • Использовать диск из дистрибутива типа Slackware. Это по крайней мере позволит Вам загружаться.
  • Использовать пакет rescue для создания спасательного диска.
  • Узнать, что требуется для работы каждому типу диска, затем создать ваш собственный.

Некоторые люди выбирают последний вариант т.к. они могут справиться сами. Т.о., если что - нибудь ломается, они могут выработать меры по устранению неполадок. Достоинство этого пути - лучший способ понять, как работает система Linux.

Этот документ предполагает некоторое базовое знакомство с концепциями администрирования Linux системы. Например, Вы должны знать о каталогах, файловых системах и гибких дисках. Вы должны знать, как использовать mount и df. Вы должны знать файлы /etc/passwd и fstab и на что они похожи. Вы должны знать,что большинство команд в этом HOWTO должен выполнять пользователь root.

Построение вашего собственного загрузочного диска с самого начала может быть запутано. Если Вы не читали Linux FAQ и связанные с ним документы, типа Linux Installation HOWTO и Linux Install Guide, Вы не должны пробовать создавать загрузочные дискеты. Если Вам нужен рабочий загрузочный диск для аварийных ситуаций, намного проще загрузить предварительно созданный. См. Приложение Pre-made загрузочные диски ниже.

3. Загрузочные диски и процесс начальной загрузки.

Загрузочный диск - в основном миниатюрная, отдельная Linux система на дискете. Она должна выполнять многие из тех же самых функций, которые выполняет полная полноразмерная Linux система. Перед попыткой создания Вы должны понять основы процесса начальной загрузки Linux. Мы представляем здесь основы, которые являются достаточными для понимания остальной части этого документа. Много подробностей и альтернативные опции были опущены.

3.1 Процесс начальной загрузки.

Все системы PC начинают процесс начальной загрузки, выполняя код в ROM (обозначаемый BIOS), для загрузки сектора 0, цилиндра 0 загрузочного устройства. Загрузочное устройство - обычно первый дисковод для гибких дискет (обозначается A: в DOS и /dev/fd0 в Linux). BIOS затем пробует выполнить этот сектор. На большинстве загрузочных дисков, сектор 0, цилиндр 0 содержит либо:

  • код загрузчика - типа LILO, который находит, загружает и выполняет ядро, начиная соответствующую начальную загрузку.
  • начало ядра операционной системы, типа Linux.

Если Linux ядро было скопировано необработанным (raw) на дискету, первый сектор диска - является первым сектором ядра Linux. Этот первый сектор продолжит процесс начальной загрузки, загружая остальную часть ядра из устройства начальной загрузки.

Как только ядро полностью загружено, оно производит некоторую базовую инициализацию устройств. Затем пробует загрузить и монтировать корневую (root) файловую систему из некоторого устройства. Корневая файловая система - просто файловая система, которая монтируются как ``/''. Ядру нужно сообщать, где искать корневую файловую систему; если оно не может найти загрузочный образ, оно останавливается.

В некоторых ситуациях --- часто при загрузке с дискеты --- корневая файловая система загружена в ramdisk, который является оперативной памятью (RAM), к которой обращается система, как будто это был диск. Для этого есть две причины. Во-первых, RAM - на несколько порядков быстрее, чем дискета, так что операции системы выполняются быстро; и второй - ядро может загрузить сжатую файловую систему с дискеты и распаковать ее на ramdisk, позволяя поместить на дискете намного больше файлов.

Как только корневая файловая система загружена и примонтирована, Вы видите сообщение:

        VFS: Mounted root (ext2 filesystem) readonly.

В этой точке система находит init программу на корневой файловой системе (в /bin или /sbin) и выполняет ее. init читает конфигурационный файл /etc/inittab, ищет строку, обозначенную sysinit, и выполняет именованный скрипт. Скрипт sysinit - обычно что-то вроде /etc/rc или /etc/init.d/boot. Этот скрипт - набор команд оболочки, которые выполняют базовые действия системы, типа:

  • Запуск fsck на всех дисках,
  • Загрузка необходимых модулей ядра,
  • Запуск подкачки (swaping),
  • Инициализация сети,
  • Монтирование дисков, указанных в fstab.

Этот скрипт часто вызывает различные другие скрипты, для инициализации модулей . Например, в общей структуре SysVinit, каталог /etc/rc.d/ содержит комплексную структуру подкаталогов, чьи файлы определяют, как запускать и завершать большинство служб системы. Однако, на загрузочных дисках сценарий sysinit часто очень прост.

Когда сценарий sysinit заканчивается, возвращается управление init, который затем входит в уровень запуска по умолчанию (default runlevel), определенный в inittab ключевым словом initdefault. Runlevel строка обычно определяет программу подобную getty, которая отвечает за связь с консолью и tty. Это - программа getty, которая печатает знакомое приглашение ``login:''. Программа getty в свою очередь вызывает login программу, чтобы проверить доступ на вход в систему и установить сеансы пользователя.

3.2 Типы дисков.

Сделав базовый обзор процесса начальной загрузки, теперь мы можем определять различные типы предполагаемых дисков. Мы классифицируем диски по четырем типам. Здесь и далее в этом документе используется термин ``диск'' как дискета, если не оговорено иначе, хотя большинство обсуждаемого может применяться и для жестких дисков.

Загрузочный (boot)

Диск, содержит ядро, которое может загружаться. Диск может использоваться, для загрузки ядра, которое затем может загрузить корневую файловую систему на другом диске. Ядру на загрузочном диске обычно нужно указать, где найти корневую файловую систему.

Часто загрузочный диск загружает корневую файловую систему с другой дискеты, но вместо этого возможно указать загрузочному диску, загружать корневую файловую систему с жесткого диска. Это обычно делается при испытании нового ядра. (Фактически, ``make zdisk'' создаст такой диск автоматически из исходного текста ядра).

Корневой (root)

Диск с файловой системой, содержащей необходимые файлы для выполнения Linux системы. Такой диск не обязательно содержит или ядро или загрузчик.

Корневой диск может использоваться для выполнения системы независимо от любых других дисков, как только загрузилось ядро. Обычно корневой диск автоматически копируется в ramdisk. Это делает корневой диск намного быстрее, и освобождает дисковод для сервисного диска.

Загрузочный / Корневой (boot/root)

Диск, который содержит, и ядро и корневую файловую систему. Другими словами, он содержит все необходимое для загрузки и выполнения Linux системы без жесткого диска. Преимущество этого типа диска - все требуемое находится на одном диске. Однако, постепенно увеличивающийся размер всего означает, что все более и более трудно поместить все на одной дискете, даже со сжатием.

Сервисный (utility)

Диск, который содержит файловую систему, которая не предназначена, для монтирования как корневая файловая система. Это - дополнительный диск данных. Вы можете использовать диск этого типа, для хранения дополнительных утилит, если у Вас слишком много помещено на вашем корневом диске.

Вообще, когда мы говорим относительно ``создания загрузочного диска'' мы подразумеваем создание обоих boot (ядро) и root (файлы) частей. Они могут быть или одним (одиночный загрузочный/корневой диск) или отдельные (загрузочный + корневой диски). Наиболее гибкий подход для спасательных дискет в использовании отдельно корневой и загрузочной дискет, и одна или более сервисных дискет, чтобы урегулировать превышение.

4. Создание корневой файловой системы.

Создание корневой файловой системы включает выбор файлов, необходимых для запуска системы. В этой секции мы описываем, как создать сжатую корневую файловую систему. Менее распространенный вариант - создать несжатую файловую систему на дискете, которая непосредственно монтируется как корневая; этот вариант описан в секции Не - ramdisk Корневая Файловая система.

4.1 Обзор.

Корневая файловая система должна содержать все необходимое для поддержки полной Linux системы. Для этого диск должен включить минимальные требования для Linux системы:

  • базовая структура файловой системы,
  • Минимальный набор каталогов: /dev, /proc, /bin, /etc, /lib, /usr, /tmp,
  • Базовый набор утилит: sh, ls, cp, mv, и т.д.,
  • Минимальный набор файлов конфигурации: rc, inittab, fstab, и т.д.,
  • Устройства: /dev/hd *, /dev/tty *, /dev/fd0, и т.д.,
  • Библиотеки поддержки, для обеспечения базовых функций, используемых утилит.

Конечно, любая система становится полезной только, когда Вы можете что - нибудь на ней выполнить, и корневая дискета становится полезной, когда Вы можете делать что-то вроде:

  • Проверить файловую систему другого устройства, например проверить корневую файловую систему на жестком диске, у Вас должна быть возможность загрузить Linux с другого устройства- корневой дискеты. Затем Вы можете выполнить fsck на вашем основном корневом диске, в то время как он - не замонтирован.
  • Восстанавливать все или часть вашего основного корневого устройства из архива используя утилиты резервирования типа cpio, tar, gzip и ftape.

Мы опишем, как создать сжатую файловую систему, называемую так, потому она что сжата на диске и, когда загружается, распаковывается на ramdisk. Со сжатой файловой системой Вы можете разместить много файлов (приблизительно два мегабайта) на стандартную дискету 1440КБ. Так как файловая система намного больше чем дискета, она не может поместиться на дискете. Мы должны создать ее в другом месте, сжать и затем скопировать на дискету.

4.2 Создание файловой системы.

Чтобы создать такую корневую файловую систему, Вам нужно достаточно большое запасное устройство, чтобы содержать все файлы перед сжатием. Вам необходимо устройство, способное хранить приблизительно четыре мегабайта. Есть несколько вариантов:

  • Использовать ramdisk (DEVICE = /dev/ram0). В этом случае используется память , чтобы имитировать дисковод. Ramdisk должен быть достаточно большой, чтобы содержать файловую систему соответствующего размера. Если Вы используете LILO, проверьте в вашем файле конфигурации (/etc/lilo.conf) строчку:
            RAMDISK_SIZE = nnn
    
    Которая определяет, сколько оперативной памяти будет выделено. Значение по умолчанию 4096КБ, которое должно быть достаточным. Вы не должны пытаться пробовать использовать такой ramdisk на машине с объемом памяти менее 8МБ. Удостоверьтесь что существует устройство /dev/ram0, /dev/ram или /dev/ramdisk. Если необходимо, создайте /dev/ram0 с mknod (major номер 1, minor 0).
  • Если у Вас есть достаточно большой (несколько мегабайт) неиспользуемый раздел жесткого диска, это - хорошее решение.
  • Использовать петлевое (loopback) устройство, которое позволяет работать с файлом на диске как с устройством. При использовании петлевого устройства Вы можете создать трех мегабайтный файл на вашем жестком диске и сформировать на нем файловую систему. Наберите man losetup для инструкций о использовании петлевых устройств. Если у Вас нет losetup, Вы можете получить это с совместимыми версиями mount и unmount с util-linux в каталоге ftp://ftp.win.tue.nl/pub/linux/utils/util-linux/.

    Если на вашей системе нет loop устройства (/dev/loop0,/dev/loop1, и т.д.), Вы должны создать их - ``mknod /dev/loop0 b 7 0''. Как только вы установили специальные mount и umount, создайте временный файл на жестком диске с достаточной емкостью (eg, /tmp/fsfile). Вы можете использовать команду:

    dd if=/dev/zero of=/tmp/fsfile bs=1k count=nnn
    для создания nnn-блокового файла.

    Используйте имя файла вместо DEVICE ниже. Когда Вы даете команду монтирования, Вы должны включить опцию ``-o loop'' чтобы mount использовала петлевое устройство. Например:

            mount -o loop -t ext2 /tmp/fsfile /mnt
    

    примонтирует /tmp/fsfile (через петлевое устройство) в точке монтирования /mnt. Команда df должна подтвердить это.

После того, как вы выбрали одну из этих опций, подготовьте DEVICE:

        dd if=/dev/zero of=DEVICE bs=1k count=3000

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

Затем, создайте файловую систему. Linux ядро распознает два типа файловой системы для корневых дисков, которые автоматически копируются на ramdisk. Это - minix и ext2, из которых ext2 является привилегированной файловой системой. При использовании ext2, Вы можете использовать -i опцию, чтобы определить большее количество inodes чем значение по умолчанию; -i 2000 предложен так, чтобы Вы не исчерпали inodes. В качестве альтернативы, Вы можете сберечь inodes, удаляя большинство ненужных /dev файлов. mke2fs по умолчанию создаст 360 inodes на дискете 1.44МБ. Я считаю, что 120 inodes вполне достаточно для моей текущей спасательной корневой дискеты, но если Вы включаете все устройства в /dev каталог, Вы легко превысите 360. Использование сжатой корневой файловой системы позволяет иметь большую файловую систему, и следовательно большее количество inodes по умолчанию, но Вы должны либо уменьшить число файлов,либо увеличивать число inodes.

Так что Ваша команда выглядит так:

mke2fs -m 0 -i 2000 DEVICE

( Если вы используете петлевое устройство, вместо DEVICE должно быть подставлено имя используемого дискового файла. mke2fs спросит, действительно ли Вы хотите сделать это; говорите да.)

mke2fs команда автоматически обнаружит доступное пространство и соответственно сконфигурируется. -m 0 параметр предотвращает от резервирования пространства для корня, и следовательно, обеспечивает больше используемого пространства на диске.

Затем, примонтируйте устройство:

        mount -t ext2 DEVICE /mnt

( Вы должны создать каталог монтирования /mnt, если он не существует.) В следующих секциях, все имена каталогов назначения полагаются отностительно /mnt.

4.3 Заполнение файловой системы.

Существует разумный минимальный набор каталогов для вашей корневой файловой системы:

  • /dev -- Устройства, требуемые для ввода/вывода
  • /proc -- каталог-заглушка, необходимый для proc файловой системы
  • /etc -- системные файлы конфигурации
  • /sbin -- критичные системные бинарники
  • /bin -- базовые бинарники, часть предполагаемой системы
  • /lib -- общие библиотеки, для обеспечения средств динамической поддержки (run-time)
  • /mnt -- точка монтирования для поддержки других дисков
  • /usr -- дополнительные утилиты и приложения

( Представленная здесь структура каталогов - только для использования в корневой дискете. Реальные Linux системы имеют более полный и четкий набор правил размещения файлов, называемый Стандарт Файловой Иерархии (File Hierarchy Standard).)

Три из этих каталогов должны быть пусты на корневой файловой системе, т.о. что они должны быть только созданы mkdir. Каталог /proc - просто заглушка, в которой помещается файловая система proc. Каталоги /mnt и /usr - только точки монтирования для использования после того, как загрузочная/корневая система будет запущена. Следовательно, эти каталоги должны быть только созданы.

Оставшиеся четыре каталога описаны в следующих секциях.

/dev

/dev каталог содержит специальные файлы для всех устройств, которые обязательно используются в любой Linux системе. Сам каталог - обычный каталог, и может быть создан mkdir обычным способом. Однако специальные файлы устройств, должны быть созданы специальным способом, используя команду mknod.

Есть более короткий путь - копировать содержимое вашего существующего каталога /dev , и удалить те устройства, которые Вам не нужны. Единственное требование - чтобы Вы, копируя специальные файлы устройств, использовали -R опцию. Это приведет к копированию каталога без попытки копировать содержимое файлов. Убедитесь, что Вы использовали верхний регистр R. Если Вы укажете опцию со строчной буквы -r, Вы вероятно скопируете все содержимое всех ваших жестких дисков - или по крайней мере столько, сколько поместится на дискете! Следовательно, соблюдайте осторожность, и используйте команду:

        cp -dpR /dev /mnt

предполагается, что дискета примонтирована в /mnt. Опции dp гарантируют, что символические ссылки будут копироваться как ссылки, а не как содержимое файла, и что первоначальные атрибуты файла сохранятся, таким образом сохранится информация о владельце файла.

Если Вы хотите сделать это трудным способом, используйте ls -l, чтобы отобразить главные(major) и малые (minor) числа устройств для нужных вам устройств, и создайте их на дискете, используя mknod.

Как только устройства скопированы, стоит проверить, что все требуемые специальные устройства помещены на спасательную дискету. Например, ftape используется для ленточных устройств, так что Вам надо скопировать все их, если Вы предполагаете обращаться к вашим ленточным устройствам из загрузочной дискеты.

Обратите внимание, что для каждого файла устройства требуется один inode, и inodes может быть дефицитным ресурсом, особенно на файловой системе дискеты. Следовательно имеет смысл удалить любые файлы устройств в /dev каталоге дискеты, которые Вам не нужны. Много устройств очевидно не нужно на специфических системах. Например, если у Вас нет SCSI дисков, Вы можете свободно удалить все файлы устройств начинающиеся с sd. Точно так же, если Вы не предполагаете использовать последовательный порт, все файлы устройств начинающиеся с cua можно удалить.

Убедитесь, что включили следующие файлы в этот каталог: console, kmem, mem, null, ram, tty1.

/etc

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

  1. Требуемые всегда, например, e.g. rc, fstab, passwd.
  2. Которые могут потребоваться, но не обязательно.
  3. Всякий хлам.

Файлы, которые не необходимы, могут быть идентифицированы с командой:

        ls -ltru

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

На моих корневых дискетах число конфигурационных файлов до 15. Это уменьшает мою работу разделив на три набора файлов:

  1. Те, которые я должен конфигурировать для загрузочной системы
    1. rc.d/* -- скрипты запуска системы и изменения уровня выполнения
    2. fstab -- список монтируемых файловых систем
    3. inittab -- параметры для процесса init первого процесса запускаемого во время начальной загрузки.
  2. Те, которые я должен привести в порядок для загрузочной системы:
    1. passwd -- список пользователей, домашних каталогов, и т.д.
    2. group -- группы пользователей.
    3. shadow -- пароли пользователей. У Вас может его не быть.
    4. termcap -- база данных свойств терминала.
    Если безопасность важна, passwd, и shadow должны быть сокращены, чтобы избежать копирования паролей пользователей вне системы, и так, чтобы, когда Вы загрузились с дискеты, нежелательные входы в систему отвергались. Убедитесь, что passwd содержит по крайней мере root. Если Вы допускаете других пользователей ко входу в систему, убедитесь, их домашние каталоги и оболочки (shells) существуют. termcap, база данных терминалов, обычно несколько килобайт. Версия вашей загрузочной дискеты должна быть сокращена, до содержимого используемого Вами терминала(ов), обычно это только запись для linux-console.
  3. Остальные. Они работают в данный момент, так что я оставляю их.

Помимо этого, я действительно должен конфигурировать только два файла, и то, что они должны содержать, удивительно мало.

  • rc должен содержать:
            #!/bin/sh       
            /bin/mount -av
            /bin/hostname Kangaroo
    
    Убедитесь, что каталоги правильны. В действительности Вы не должны выполнять hostname - это только выглядит лучше, если Вы это сделаете.
  • fstab должен содержать по крайней мере:
            /dev/ram0       /               ext2    defaults
            /dev/fd0        /               ext2    defaults
            /proc           /proc           proc    defaults
    
    Вы можете копировать записи из вашего существующего fstab, но Вы должны не автоматически монтировать все ваши разделы жесткого диска; используйте noauto ключевое слово с ними. Ваш жесткий диск может быть поврежден или мертв, когда используется загрузочная дискета.

Ваш inittab должен быть изменен так, чтобы sysinit строка выполнила rc, или любой базовый сценарий начальной загрузки, который будет использоваться. Также, если Вы хотите запретить пользователям на последовательных портах входить в систему, закоментируйте все записи для getty, которые включают устройства ttys или ttyS в конце строки. Оставьте tty порты, чтобы Вы могли входить в систему с консоли.

Минимальный inittab файл выглядит так:

        id:2:initdefault:
        si::sysinit:/etc/rc
        1:2345:respawn:/sbin/getty 9600 tty1
        2:23:respawn:/sbin/getty 9600 tty2

inittab файл определяет то, что система будет запускаться в различных режимах включая запуск, переход в многопользовательский режим, и т.д. Тщательно проверьте, команды указанные в inittab; Если init не может найти упомянутую программу, загрузочный диск будет зависать, и Вы не всегда получите сообщение об ошибке.

Обратите внимание, что некоторые программы не могут быть размещены в другом месте, потому что другие программы жестко связаны с их расположением. Например на моей системе, /etc/shutdown имеет жестко связан с /etc/reboot. Если я перемещаю reboot в /bin/reboot, и затем выдаю команду shutdown, она не выполнится, потому что не сможет найти reboot файл.

Для остальных, просто скопируйте все текстовые файлы в вашем /etc каталоге, плюс все исполняемые программы в вашем /etc каталоге, в которых Вы не уверены, что они Вам не понадобятся. Как инструкцией, руководствуйтесь примером, в секции Пример каталога корневого диска. Вероятно достаточно скопировать только эти файлы, но системы значительно отличаются, так что Вы не можете быть уверены, что тот же самый набор файлов на вашей системе эквивалентен файлам в списке. Единственный верный метод - начать с inittab и выбрать то, что требуется.

Большинство систем теперь использует /etc/rc.d/ каталог, содержащий сценарии оболочки для различных уровней выполнения. Минимум - одиночный rc скрипт, но может быть проще скопировать inittab и /etc/rc.d каталог из вашей существующей системы, и сокращать сценарии оболочки в rc.d каталоге, чтобы удалить обработку не относящуюся к окружению системной дискеты.

/bin и /sbin

Каталог /bin - удобное место для дополнительных утилит, которые должны выполнять базовые операции, утилиты типа ls, mv, cat и dd. См. приложение Пример каталога корневого диска для примерного списка файлов, которые входят в /bin и /sbin каталоги. Он не включает никакие утилиты восстановления из резервных копий, типа cpio, tar и gzip. Это потому, что я помещаю их на отдельную сервисную дискету, сохраняя пространство для загрузочной дискеты. Как только загрузочная дискета загружается, она копируется на ramdisk, оставляя дисковод свободным для монтирования другой дискеты - сервисной дискеты. Я обычно монтирую ее в /usr.

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

Удостоверьтесь, что Вы включили следующие программы: init, getty или эквивалентные, login, mount какую-либо оболочку , способную выполнять ваши rc скрипты, ссылку от sh к оболочке.

/lib

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

Почти каждая программа требует по крайней мере libc библиотеки, libc.so.N, где N - текущий номер версии. Проверьте ваш /lib каталог. libc.so.N - обычно symlink к имени файла с полным номером версии:

% ls -l /lib/libc*
-rwxr-xr-x   1 root     root      4016683 Apr 16 18:48 libc-2.1.1.so*
lrwxrwxrwx   1 root     root           13 Apr 10 12:25 libc.so.6 -> libc-2.1.1.so*

В этом случае Вам надо libc-2.1.1.so. Чтобы найти другие библиотеки, Вы должны пройти все бинарники, которые Вы планируете включить и проверить их зависимости ldd командой. Например:

        % ldd /sbin/mke2fs
        libext2fs.so.2 => /lib/libext2fs.so.2 (0x40014000)
        libcom_err.so.2 => /lib/libcom_err.so.2 (0x40026000)
        libuuid.so.1 => /lib/libuuid.so.1 (0x40028000)
        libc.so.6 => /lib/libc.so.6 (0x4002c000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

Каждый файл справа - нужен. Имейте в виду, что перечисленные библиотеки могут быть символическими ссылками.

Заметьте, что некоторые файлы очень большие и не будут просто помещаться на корневой файловой системе. Например, libc.so указанный выше около 4Мб. Вы должны очистить библиотеки когда копируете их на корневую файловую систему. См. секцию Сокращение размера корневой файловой системы для инструкций.

В /lib Вы должны также включить загрузчик для библиотек. Загрузчик может быть либо ld.so (для a.out библиотек), либо ld-linux.so (для ELF библиотек). Новейшие версии ldd точно говорят какой загрузчик нужен, как в примере ниже, но старые версии могу не сказать. Если Вы не уверены какой Вам нужен, запустите команду file на библиотеке. Например:

        % file/lib/libc.so.4.7.2 /lib/libc.so.5.4.33 /lib/libc-2.1.1.so
        /lib/libc.so.4.7.2: Linux/i386 demand-paged executable (QMAGIC), stripped
        /lib/libc.so.5.4.33: ELF 32-bit LSB shared object, Intel 80386, version 1, stripped
        /lib/libc-2.1.1.so: ELF 32-bit LSB shared object, Intel 80386, version 1, not stripped

QMAGIC указывает, что 4.7.2 - для a.out библиотек, и ELF указывает, что 5.4.33 и 2.1.1 - для ELF.

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

4.4 Обеспечение для PAM и NSS.

Ваша система может требовать некоторые динамически загружаемые библиотеки, которые не видны ldd.

PAM (Pluggable Authentication Modules).

Если ваша система использует PAM (Pluggable Authentication Modules) Вы должны принять некоторые меры, иначе Вы будете не способны войти в систему. PAM - изощренный модульный метод, для опознавания пользователей и их доступа к службам. Простой путь проверки использования вашей системой PAM состоит в проверке каталога /etc на вашем диске на наличие файла pam.conf или каталога pam.d; если они существуют - вы должны обеспечить минимальную поддержку PAM.(В качестве альтернативы запустите ldd для вашего исполняемого файла login; если выдаваемая информация включает libpam.so вам нужен PAM).

К счаcтью, безопасность не имеет значения для загрузочных дисков, т.к. если кто-то имеет физический доступ к машине он может сделать все, что захочет. Следовательно, по существу вы можете запретить PAM создав в вашей корневой файловой системе простой /etc/pam.conf:


OTHER   auth       optional     /lib/security/pam_permit.so
OTHER   account    optional     /lib/security/pam_permit.so
OTHER   password   optional     /lib/security/pam_permit.so
OTHER   session    optional     /lib/security/pam_permit.so

Также скопируйте файл /lib/security/pam_permit.so в вашу корневую файловую систему. Эта библиотека приблизительно 8Кб, т.о. она налагает минимальные расходы.

Заметьте, что эта конфигурация разрешает любому полный доступ к файлам и службам на вашей машине. Если по некоторым причинам Вы заботитесь о безопасности вашего загрузочного диска, Вы должны скопировать некоторые или все установки PAM на вашу корневую файловую систему. Прочтите внимательно документацию на PAM и скопируйте необходимые библиотеки в /lib/security на вашей корневой файловой системе.

Вы также должны включить /lib/libpam.so на ваш загрузочный диск. Но Вы уже об этом знаете, т.к. запускали ldd для /bin/login, который показал эту зависимость.

NSS (Name Service Switch).

Если Вы используете glibc (или libc6) Вы должны обеспечить name services или вы не сможете войти в систему. Файл /etc/nsswitch.conf управляет поиском по базе данных для различных служб. Если вы не планируете доступ к сетевым службам (таким как DNS, NIS поиск). Вы должны подготовить простой nsswitch.conf файл который выглядит так:


     passwd:     files 
     shadow:     files 
     group:      files 
     hosts:      files
     services:   files
     networks:   files
     protocols:  files
     rpc:        files
     ethers:     files
     netmasks:   files     
     bootparams: files
     automount:  files 
     aliases:    files
     netgroup:   files
     publickey:  files

Это указывает, что каждая служба будет иметь доступ только к локальным файлам. Вы также должны включить /lib/libnss_files.so.1, которая загружается динамически для работы с обзором файлов.

Если вы планируете доступ к сети с вашего загрузочного диска, вы должны создать более замысловатый файл nsswitch.conf. Для подробностей смотрите man страницу nsswitch. Запомните, что Вы должны включить файл /lib/libnss_service.so.1 для каждой указанной службы.

4.5 Модули.

Если у Вас модульное ядро, Вы должны обдумать, какие модули Вы хотите загружать с вашего загрузочного диска после загрузки. Возможно Вы захотите включить ftape и zftape модули, если у Вас есть устройства резервирования на гибкой ленте, модули для SCSI устройств, если они у Вас есть, и, возможно, модули PPP или SLIP, если Вы хотите иметь доступ к сети при аварии.

Эти модули могут быть помещены в /lib/modules. Вы должны также включить insmod, rmmod and lsmod. В зависимости от того, хотите ли Вы загружать модули автоматически, Вы можете также включать modprobe, depmod и swapout. Если Вы используете kerneld, включаете его наряду с /etc/conf.modules.

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

Обратите внимание, чтобы загрузить сжатую ext2 файловую систему, Вы должны иметь встроенную поддержку ramdisk и ext2. Они не могут быть в модульном исполнении.

4.6 Некоторые заключительные подробности.

Некоторые системные программы, типа login, жалуются, если файл /var/run/utmp и каталог /var/log не существует. . Так что:

        mkdir -p /mnt/var/{log,run}
        touch /mnt/var/run/utmp

В заключение, после того, как Вы установили все библиотеки, Вам необходимо, выполнить ldconfig, чтобы пересоздать /etc/ld.so.cache на корневой файловой системе. Кэш сообщает загрузчику, где найти библиотеки. Чтобы пересоздать ld.so.cache, выдайте следующие команды:

        chdir /mnt; chroot /mnt /sbin/ldconfig

chroot необходим, потому что ldconfig всегда пересоздает кэш для корневой файловой системы.

4.7 Перенос.

Как только Вы закончили создание корневой файловой системы, размонтируйте ее, скопируйте ее в файл, и сожмите:

        umount /mnt
        dd if=DEVICE bs=1k | gzip -v9 > rootfs.gz

После окончания у Вас будет файл rootfs.gz , который и есть ваша сжатая корневая файловая система. Вы должны проверить размер, чтобы удостовериться, что она поместиться на дискете; если не помещается вы должны вернуться и удалить некоторые файлы. Некоторые подсказки содержатся в секции Уменьшение размера корневой файловой системы.

5. Выбор ядра.

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

Одна причина - размер. Если Вы формируете одиночную загрузочную дискету, ядро будет одним из самых больших файлов на дискете, так что Вы должны максимально уменьшить размер ядра. Если Вы формируете двух-дисковую загрузочную + корневую дискету, это не так важно, так как ядро будет запускаться с отдельного диска. Чтобы уменьшить размер ядра, создайте его с минимальным набором средств, необходимых для поддержки желаемой cистемы. Это означает пропускать все, что Вам не нужно. Работа с сетями - хорошая вещь, чтобы ее исключить, также как поддержка для любых дисководов и других устройств, которые Вам не нужны при выполнении вашей загрузочной системы. Как указано ранее, ваше ядро должно иметь встроенную поддержку ramdisk, и ext2.

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

Главное - любая поддержка ввода - вывода в ядре для поддержки резервирования, должна также быть добавлена в ваше загрузочное ядро.

Процедура для фактического создания ядра описана в документации, поставляемой с ядром. Это очень просто сделать, начните с просмотра /usr/src/linux. Если создание ядра - проблема для Вас, то Вы, вероятно, не должны пытаться создавать загрузочную систему. Не забудьте сжать ядро ``make zImage''.

6. Совмещение их вместе: Создание диска (ов).

Теперь у Вас есть ядро и сжатая корневая файловая система. Если Вы создаете загрузочный/корневой диск, проверьте их размеры, чтобы убедиться, что они оба поместятся на одном диске. Если Вы делаете две дискеты загрузочную + корневую, проверьте помещается ли корневая файловая система на одной дискете.

Вы должны решить, использовать LILO для загрузки или bootdisk ядро. Альтернатива - копировать ядро непосредственно на дискету и загружаться без LILO. Преимущество использования LILO - возможность указать некоторые параметры ядра, которые могут быть необходимы для инициализации аппаратных средств (проверьте файл /etc/lilo.conf в вашей системе. Если он существует и имеет строку ``append=...'', Вам вероятно нужно это свойство. Неудобство использования LILO - усложнение создания загрузочного диска, и немного большее количество пространства. Вы должны установить маленькую отдельную файловую систему, которую мы назовем файловой системой ядра, куда Вы перенесете ядро и несколько других файлов необходимых LILO.

Если Вы собираетесь использовать LILO - читайте; если Вы собираетесь перемещать ядро непосредственно, пропустите до секции Без использования LILO.

6.1 Перенос ядра с LILO .

Первым делом - создайте маленький файл конфигурации LILO. Он должен выглядеть так:


        boot      =/dev/fd0
        install   =/boot/boot.b
        map       =/boot/map
        read-write
        backup    =/dev/null
        compact
        image     = KERNEL
        label     = Bootdisk
        root      =/dev/fd0

Для объяснения этих параметров, см. документацию пользователя LILO. Вы, вероятно, захотите добавить append=... строку к этому файлу с /etc/lilo.conf файла на вашем жестком диске.

Сохраните этот файл как bdlilo.conf.

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

Сначала, выясните насколько большой должна быть файловая система. Возьмите размер вашего ядра в блоках (размер, показанный ``ls -l KERNEL'' разделенный 1024 и округлите вверх) и добавьте 50. Пятьдесят блоков - приблизительное пространство, необходимое для inodes плюс другие файлы. Вы можете вычислить это число точно, если Вы хотите, или используете 50. Если вы создаете двух-дисковый набор, Вы можете также переоценить пространство, т.к первый диск используется только для ядра. Назовите это число KERNEL_BLOCKS.

Поместите дискету в привод (для простоты, которую мы примем /dev/fd0) и создайте ext2 файловую систему ядра на ней:

        mke2fs -i 8192 -m 0 /dev/fd0 KERNEL_BLOCKS

``-i 8192'' означает, что мы хотим один inode на 8192 байта. Затем, примонтируйте файловую систему, удалите lost+found каталог, и создайте dev и boot каталоги для LILO:

        mount /dev/fd0 /mnt
        rm -rf /mnt/lost+found
        mkdir /mnt/{boot,dev}

Затем, создайте устройства /dev/null и /dev/fd0. Вместо того, чтобы искать числа устройства, Вы можете просто скопировать их с вашего жесткого диска используя -R:

        cp -R /dev/{null,fd0} /mnt/dev

LILO нужна копия загрузчика начальной загрузки, boot.b, которую Вы можете взять с вашего жесткого диска. Она обычно сохраняется в /boot каталоге.

        cp /boot/boot.b /mnt/boot

В заключение, скопируйте конфигурационный файл LILO , который Вы создали в последней секции, вместе с вашим ядром. Оба могут быть помещены в корневой каталог:

        cp bdlilo.conf KERNEL /mnt

Все, что нужно LILO теперь на файловой системе ядра, так что Вы готовы запустить ее. Флажок LILO -r используется для установки загрузчика начальной загрузки в другом корне:

        lilo -v -C bdlilo.conf -r /mnt

LILO должна выполниться без ошибок, после чего файловая система ядра должна выглядеть так:


total 361
  1 -rw-r--r--   1 root     root          176 Jan 10 07:22 bdlilo.conf
  1 drwxr-xr-x   2 root     root         1024 Jan 10 07:23 boot/
  1 drwxr-xr-x   2 root     root         1024 Jan 10 07:22 dev/
358 -rw-r--r--   1 root     root       362707 Jan 10 07:23 vmlinuz
boot:
total 8
  4 -rw-r--r--   1 root     root         3708 Jan 10 07:22 boot.b
  4 -rw-------   1 root     root         3584 Jan 10 07:23 map
dev:
total 0
  0 brw-r-----   1 root     root       2,   0 Jan 10 07:22 fd0
  0 crw-r--r--   1 root     root       1,   3 Jan 10 07:22 null           

Не волнуйтесь, если размеры ваших файлов отличаются.

Теперь оставьте диск в приводе, и идите к секции Установка ramdisk слова.

6.2 Перенос ядра без LILO.

Если Вы не используете LILO, перенесите ядро на загрузочный диск dd командой:

        % dd if=KERNEL of=/dev/fd0 bs=1k
        353+1 records in
        353+1 records out

В этом примере, dd записала 353 полных записи + 1 частичную запись, так что ядро занимает первые 354 блока дискеты. Назовите это число KERNEL_BLOCKS, и запомните его, для использования в следующей секции.

В заключение, установите дискету как корневое устройство, затем установите загрузку корня на чтение - запись:

        rdev /dev/fd0 /dev/fd0
        rdev -R /dev/fd0 0

Будьте внимательным - используйте прописную букву -R во второй rdev команде.

6.3 Установка ramdisk слова.

Внутри образа ядра есть ramdisk слово, которое наряду с другими опциями указывает, где должна быть найдена корневая файловая система. Слово может быть доступно посредством команды rdev и интерпретируется следующим образом:

        bits  0-10:     Смещение начала ramdisk, в 1024 байтовых блоках
        bits 11-13:     не используется
        bit     14:     Флаг указывающий, что ramdisk будет загружаться
        bit     15:     Флаг указывающий запрос подтверждения перед загрузкой корневой файловой системы

Если бит 15 установлен, в процессе загрузки у Вас запросят поместить новую гибкую дискету в привод. Это необходимо для двух-дискового загрузочного набора.

Есть два случая, в зависимости от того, создается ли Вы одиночная загрузочная дискета или набор из двух дискет ``загрузочная + корневая''.

  1. Если Вы создаете один диск, сжатая корневая файловая система должна быть помещена сразу после ядра, так что смещением будет первый свободный блок (который должен быть такой-же как KERNEL_BLOCKS). Бит 14 должен быть 1, и бит 15 должен быть 0. Например, Вы создаете одиночный диск и корневая файловая система будет начинаться с блока 253 (десятичное число). Значение слова ramdisk должно быть 253 (десятичное) с битом 14 установленным в 1 и битом 15 установленным в 0. Для вычисления значения Вы можете просто сложить десятичные значения. 253 + (2^14) = 253 + 16384 = 16637. Если Вы не совсем поняли откуда взялось это число, вставьте го в инженерный калькулятор и преобразуйте в двоичное.
  2. Если Вы формируете двух-дисковый набор, корневая файловая система начинается в блоке 0 на втором диске, так что смещение будет нулевое. Бит 14 должен быть 1, и бит 15 должен быть 1.

После тщательно вычисления значения ramdisk слова, установите его rdev -r. Используйте десятичное значение. Если Вы использовали LILO, аргументом rdev должен быть - примонтированый путь ядра, например /mnt/vmlinuz; если Вы скопировали ядро с dd, взамен используйте имя флоппи-устройства (например, /dev/fd0).

        rdev -r KERNEL_OR_FLOPPY_DRIVE  VALUE

Если Вы использовали LILO, размонтируйте дискету сейчас.

6.4 Перенос корневой файловой системы.

Последний шаг - перенос корневой файловой системы.

  • если корневая файловая система будет помещена в диск с ядром, перенесите ее, используя dd с опцией seek, которая определяет сколько проскочить блоков:
            dd if=rootfs.gz of=/dev/fd0 bs=1k seek=KERNEL_BLOCKS
    
  • если корневая файловая система будет помещена на второй диск, удалите первую дискету, вставьте вторую, затем перенесите корневую файловую систему:
            dd if=rootfs.gz of=/dev/fd0 bs=1k
    

Поздравляю, Вы сделали это! Вы должны всегда проверять загрузочный диск перед откладыванием его в сторону до критической ситуации! Если он не загружается - читайте.

7. Поиск неисправностей, или Агония Поражения.

При создании загрузочных дискет, первые немногие попытки часто не будут загружаться. Общий подход к созданию корневого диска - собрать компоненты из вашей существующей системы, и пробовать и получить основанную на дискете систему, когда она начнет показывает сообщения на консоли. Как только она начинает говорить с Вами, половина сражения выиграна, потому что Вы можете видеть, на что она жалуется, и Вы можете устранять индивидуальные проблемы, пока система не заработает гладко. Если система только зависает без объяснений, найти причину весьма трудно. Чтобы получить систему загружающуюся до состояния, когда она будет разговаривать с Вами, требуется присутствие нескольких компонентов и правильная конфигурация. Рекомендуемая процедура для исследования проблемы, когда система не разговаривает с Вами, следующая:

  • Вы можете увидеть сообщение, подобное этому:
    Kernel panic: VFS: Unable to mount root fs on XX:YY
    
    Это частая проблема и может иметь несколько причин. Первая, проверьте устройство XX:YY по списку кодов устройства; это правильное корневое устройство? Если нет, Вы возможно не сделали rdev -R, или сделали это с неправильным образом файловой системы. Если код устройства правильный, тогда тщательно проверьте скомпилирован ли драйвер вашего устройства встроенным. Убедитесь, что поддержка дискеты, ramdisk и ext2 файловой системы встроенная.
  • Проверьте, что корневой диск фактически содержит каталоги, которые Вы думаете. Достаточно просто скопировать неправильно, чтобы Вы получили что-то вроде /rootdisk/bin вместо /bin на вашей корневой дискете.
  • Проверьте наличие /lib/libc.so так с той же самой ссылкой, как и в вашем /lib каталоге на жестком диске.
  • Проверьте, что любые символические ссылки в вашем /dev каталоге в вашей существующей системе также существуют на вашей корневой файловой системе дискеты, и что эти ссылки к устройствам, которые Вы включили в вашу корневую дискету. В частности /dev/console ссылка необходима во многих случаях.
  • Проверьте, что Вы включили /dev/tty1, /dev/null, /dev/zero, /dev/mem, /dev/ram и /dev/kmem файлы.
  • Проверьте конфигурацию ядра - поддержка всех ресурсов, требуемых до точки входа в систему должна быть встроенная, не модулями. Так поддержка ramdisk и ext2 должна быть встроена.
  • Проверьте правильность установок ядра для вашего корневого устройства и ramdisk.

Если эти общие аспекты были рассмотрены, есть несколько более специфических файлов для проверки:

  1. Удостоверитесь, что init включен как /sbin/init или /bin/init. Удостоверьтесь, что установлен атрибут исполняемый.
  2. Выполните ldd init, чтобы проверить библиотеки init. Обычно это - только libc.so, но проверьте все равно. Удостоверитесь, что Вы включили необходимые библиотеки и загрузчики.
  3. Удостоверитесь, что у Вас правильный загрузчик для ваших библиотек --- ld.so для a.out или ld-linux.so для ELF.
  4. Проверьте в /etc/inittab на вашей загрузочной файловой системе вызовов getty (или некоторой getty-подобной программы, типа agetty, mgetty или getty_ps). Дважды проверьте еще раз inittab на Вашем жестком диске. Проверьте man страницы программы, которую Вы используете, чтобы удостовериться, что они имеют смысл. inittab - возможно хитростная часть, потому что синтаксис и содержание зависит от используемой программы init и характера системы. Единственный способ заняться этим состоит в том, чтобы читать man страницы для init и inittab и понять, что делает ваша существующая система, когда она загружается. Удостоверьтесь, что /etc/inittab содержит запись инициализации системы. Она должна содержать команду, для выполнения сценария инициализации системы, который должен существовать.
  5. Как с init, выполните ldd на вашем getty, чтобы увидеть, что ей требуется, и удостоверьтесь, что необходимые библиотечные файлы и загрузчики были включены в вашу корневую файловую систему.
  6. Убедитесь, что Вы включили программу оболочки (например, bash или ash) способную к выполнению всех ваших rc сценариев.
  7. Если у Вас есть /etc/ld.so.cache файл на вашем спасательном диске, пересоздайте его.

Если init запустился, но Вы получаете сообщения:

        Id xxx respawning too fast: disabled for 5 minutes  

Это исходит от init, обычно указывает, что getty или login умирает, как только начинает выполняться. Проверьте бинарники getty и login и зависимые библиотеки. Удостоверьтесь, ч то содержимое /etc/inittab корректно. Если Вы получаете странные сообщения от getty, это может означать, что форма вызова в /etc/inittab неправильна. Опции программ getty различны; говорят, что даже разные версии agetty имеют различные несовместимые формы вызова.

Если Вы получаете приглашение к входу и вводите правильный login, но система сразу запрашивает у Вас другое имя - проблема может быть с PAM или NSS. Смотри секцию PAM и NSS. Проблема может быть также в использовании вами скрытых паролей, и не скопированном /etc/shadow на ваш загрузочный диск.

Если Вы пытаетесь выполнять некоторые программы, типа df, который находится на вашем спасательном диске, но Вы получаете сообщение: df: not found, проверьте две вещи: ( 1) Удостоверьтесь, что каталог содержащий программу df находится в переменной PATH, и ( 2) удостоверьтесь, что у Вас есть библиотеки (и загрузчики), которые нужны программам.

8. Разнообразные темы.

8.1 Уменьшение размера корневой файловой системы

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

Увеличьте плотность диска

По умолчанию, дискеты форматируются в 1440КБ, но доступны более высокие форматы плотности. fdformat форматирует диски для следующих размеров: 1600, 1680, 1722, 1743, 1760, 1840, и 1920. Большинство приводов 1440КБ поддерживает 1722КБ, и это - то, что я всегда использую для загрузочных дисков. См. fdformat man страницу и /usr/src/linux/Documentation/devices.txt.

Замените вашу оболочку

Некоторые из популярных оболочек для Linux, типа bash и tcsh, большие, и требуют многих библиотек. Существуют легкие альтернативы, типа ash, lsh, kiss и smash, которые намного меньше и требуют немного библиотек. Большинство этих оболочек доступно из http://sunsite.unc.edu/pub/Linux/system/shells/ Убедитесь что оболочка, которую Вы используете, способна выполнять команды во всех rc файлах, которые Вы включаете в ваш загрузочный диск.

Усечение библиотек и бинарников

Многие библиотеки и бинарники обычно включают отладочную информацию. В этом случае запуск 'file' на этих файлах сообщит Вам 'not stripped'. При копировании бинарников в вашу корневую файловую систему, хорошо это использовать:

        objcopy --strip-all FROM TO

При копировании библиотек, используйте:

        objcopy --strip-debug FROM TO

Переместите не-критичные файлы в сервисный диск

Если некоторые из ваших бинарников не необходимы для загрузки или входа в систему, Вы можете переместить их в сервисный диск. Для подробностей см. секцию Создание сервисного диска. Вы можете также обдумать перемещение модулей на сервисный диск.

8.2 Не - ramdisk корневые файловые системы.

Секция Создание корневой файловой системы дает инструкции для создания сжатой корневой файловой системы, которая загружается в ramdisk, когда система загружается. Этот метод имеет много преимуществ, поэтому обычно используется он. Однако, некоторые системы с небольшим объемом памяти не могут предоставить необходимую оперативную память; для таких случаев корневая файловая система может быть создана, как монтируемая непосредственно, вместо копирования на ramdisk.

Такие файловые системы фактически проще создать, чем сжатые корневые файловые системы, потому что они могут быть сформированы на дискете, а не некотором другом устройстве, и они не должны быть сжаты. Мы набросаем структуру процедуры, т.к. она отличается от инструкций, указанных выше. Если Вы выбираете это, имейте в виду, что у Вас будет гораздо меньше доступного пространства.

  1. Вычислите, сколько пространства у Вас будет для корневых файлов. Если Вы формируете одиночный загрузочный диск, Вы должны разместить все блоки ядра плюс все блоки для корневой файловой системы на одном диске.
  2. Используя mke2fs, создайте корневую файловую систему на дискете соответствующего размера.
  3. Заполните файловую систему как описано выше.
  4. Когда это выполнено, размонтируйте файловую систему и переместите ее в файл на диске но не сжимайте ее.
  5. Переместите ядро на дискету, как описано выше. При вычислении ramdisk слова, установите бит 14 в ноль, для указания, что корневая файловая система не должна загружаться в ramdisk. Выполните rdev как описано.
  6. Переместите корневую файловую систему как и прежде.

Есть несколько сокращений, которые Вы можете сделать. Если Вы формируете набор из двух дисков, Вы можете создать полную корневую файловую систему прямо на втором диске, и Вам не надо перемещать ее в файл жесткого диска, а затем обратно. Также, если Вы создаете одиночный загрузочный диск и используете LILO, Вы можете создать одну файловую систему на всем диске, содержащую ядро, LILO файлы и корневые файлы, и просто выполнить LILO как последний шаг.

8.3 Создание сервисного диска.

Создание сервисного диска - относительно просто, просто создайте файловую систему на форматированном диске и скопируйте файлы на него. Чтобы использовать его с загрузочным диском, примонтируйте его вручную после того, как система загрузится.

В командах выше, мы упомянули, что сервисный диск может быть примонтирован в /usr. В этом случае, бинарники могут быть помещены в каталог /bin на вашем сервисном диске, т.о. получается путь /usr/bin для доступа к ним. Дополнительные библиотеки нужные бинарники, помещены в /lib на сервисном диске.

Есть несколько важных моментов, которые нужно иметь в виду при проектировании сервисного диска:

  1. Не помещайте критические бинарники системы или библиотеки на сервисный диск, так как он не будет примонтирован, пока система не загрузилась.
  2. Вы не можете обращаться к дискете и ленточному накопителю одновременно. Это означает,что если у Вас есть ленточный накопитель, Вы будете не способны обратиться к нему, пока ваш сервисный диск примонтирован.
  3. Доступ к файлам на сервисном диске будет медленный.

Приложение Пример каталога сервисного диска показывает пример содержимого сервисного диска. Есть несколько полезный идей: программы для проверки и управления дисками (format, fdisk) и файловых систем (mke2fs, fsck, debugfs, isofs.o), легкий текстовый редактор (elvis, jove), утилиты сжатия и архивации (gzip, tar, cpio, afio), ленточные утилиты (mt, tob, taper), коммуникационные утилиты (ppp.o, slip.o, minicom) и утилиты устройств (setserial, mknod).

9. Как это делают pros.

Обратите внимание, что загрузочные диски, используемые дистрибутивами типа Slackware, RedHat или Debian, кажутся более сложными чем то, что описано в этом документе. Загрузочные диски профессиональных дистрибутивов основаны на принципах, выделенных здесь, но используют различные приемы, потому что их загрузочные диски имеют дополнительные требования. Во-первых, они должны быть способны работать с широким разнообразием аппаратных средств, т.о. они должны быть способны взаимодействовать с пользователем и загружать различные драйвера устройств. Во-вторых, они должны быть подготовлены для работы с многими различными установочными опциями, с различными степенями автоматизации. В заключение, загрузочные диски дистрибутивов обычно объединяют возможности установки и восстановления после сбоя.

Некоторые загрузочные диски используют свойство, называемое initrd (initial ramdisk). Это свойство появилось в 2.0.x и позволяет ядру загружаться в две фазы. Когда ядро сначала загружается, оно загружает образ initial ramdisk с загрузочного диска. Этот initial ramdisk - корневая файловая система, содержащая программу, которая выполняется прежде, чем загрузится реальная корневая файловая система. Эта программа обычно изучает окружение и-или просит, чтобы пользователь выбрал различные опции начальной загрузки, типа устройства, с которого загружать реальный корневой диск. Она обычно загружает дополнительные модули не встроенные в ядро. Когда начальная программа завершается, ядро загружает реальное изображение корневой файловой системы, и загрузка продолжается обычно. Для дальнейшей информации относительно initrd, см. /usr/src/linux/Documentation/initrd.txt и ftp://elserv.ffm.fgan.de/pub/linux/loadlin-1.6/initrd-example.tgz

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

Slackware (v. 3.1) использует прямую LILO загрузку, подобную описанной в секции Перенос ядра с LILO. Загрузочный диск Slackware выводит загрузочное сообщение (``Welcome to the Slackware Linux bootkernel disk!'') используя параметр message в LILO. Это приглашает пользователя ввести строку параметров начальной загрузки в случае необходимости. После загрузки, корневая файловая система загружается с второго диска. Пользователь вызывает setup сценарий , который начинает установку. Вместо использования модульного ядра, Slackware обеспечивает много различных ядер и рассчитывает на выбор пользователя, согласующийся с его или ее аппаратными требованиям.

RedHat (v. 4.0) также использует начальную загрузку LILO. Загружается сжатый ramdisk на первом диске, который выполняет заказную программу init. Эта программа запрашивает драйвера, и загружает дополнительные файлы из дополнительного диска при необходимости.

Debian (v. 1.3) вероятно наиболее сложен из наборов установочных дисков. Он использует SYSLINUX загрузчик, чтобы скомпоновать различные опции загрузки, затем используя изображение initrd ведет пользователя через установку. Это проявляется в использовании заказного init и заказной оболочки.

10. Список часто задаваемых вопросов (FAQ).

Q. Я загружаюсь с моих загрузочных дискет, и ничего не происходит. Что я делаю не так?

См. секцию Поиск неисправностей, выше.

Q. Как работает загрузочный диск Slackware/Debian/RedHat?

См. секцию Как делают это pros, выше.

Q. Как я могу сделать загрузочный диск с XYZ драйвером?

Самый простой способ - получить Slackware ядро с ближайшего Slackware зеркального сайта. Slackware ядра - семейство ядер, в которых пытаются включить драйвера как можно большего количества устройств, так, если у Вас есть SCSI или IDE контроллер, возможно его драйвер включен в Slackware ядро.

Идите в a1 каталог, и выберите либо IDE либо SCSI ядро в зависимости от типа вашего контроллера. Просмотрите xxxxkern.cfg файл для просмотра списка включенных в ядро драйверов. Если нужное устройство находится в списке, то соответствующее ядро должно загрузить ваш компьютер. Выкачайте xxxxkern.tgz файл, и скопируйте его на вашу загрузочную дискету как описано выше в секции при создании загрузочных дисков.

Вы должны затем проверить корневое устройство в ядре, используя rdev команду:

        rdev zImage 

rdev покажет текущее корневое устройство в ядре. Если оно не такое, как Вам нужно - используйте rdev, чтобы изменить его. Например, ядро, которое я пробовал, было установлено на /dev/sda2, но мой корневой SCSI раздел - /dev/sda8. Чтобы использовать корневую дискету, Вы должны использовать команду:

        rdev zImage /dev/fd0

Если Вы также хотите знать, как установить корневой диск Slackware, это - вне области внимания этого HOWTO, так что я предлагаю Вам просмотреть Linux Install Guide или получить дистрибутив Slackware. См. секцию "Ссылки" в этом HOWTO.

Q. Как я могу обновить мою загрузочную дискету новым ядром?

Просто скопируйте ядро на вашу загрузочную дискету, используя dd команду для загрузочной дискеты без файловой системы, или cp команду для загрузочной/корневой дискеты. Обратитесь к секции "Загрузочный(boot)" этом HOWTO, для подробностей относительно создания загрузочного диска. Описание применимо и к модифицированию ядра на загрузочном диске.

Q. Как я могу модифицировать корневую дискету новыми файлами?

Самый простой способ состоит в том, чтобы скопировать файловую систему с rootdisk обратно на DEVICE, которое Вы использовали (из секции Создание файловой системы, выше). Затем примонтируйте файловую систему, и сделайте изменения. Вы должны помнить, где начинается корневая файловая система и сколько блоков занимает:

        dd if=/dev/fd0 bs=1k skip=ROOTBEGIN count=BLOCKS | gunzip > DEVICE
        mount -t ext2 DEVICE /mnt

После внесения изменений, продолжайте как прежде (в Секции Перенос) и перенесите корневую файловую систему обратно на диск. Вам не придется заново переносить ядро или заново вычислять слово ramdisk, если Вы не измените стартовую позицию новой корневой файловой системы.

Q. Как удалить LILO так, чтобы я смог загружаться с DOS снова?

Это не тема Bootdisk, но спрашивается часто. В Linux, Вы можете выполнить:

        /sbin/lilo -u

Вы можете использовать команду dd , для копирования сохраненного LILO сектора начальной загрузки. Обратитесь к LILO документации.

В DOS и Windows Вы можете использовать DOS команду:

        FDISK /MBR

MBR означает Главная Загрузочная Запись, и это заменяет загрузочный сектор на чистый DOS, без воздействия на таблицу разделов. Некоторые пуристы не согласны с этим, но даже автор LILO, Werner Almesberger, предлагает это. Это просто, и работает.

Q. Как я могу загрузиться, если я потерял мое ядро и мой диск первоначальной загрузки?

Если у Вас нет загрузочного диска, вероятно самый простой метод - получить Slackware ядро для вашего типа контроллера диска (IDE или SCSI) как описано выше для ``Как я могу сделать загрузочный диск с XYZ драйвером?". Вы можете загрузить ваш компьютер, используя это ядро, затем ремонтируйте любые имеющиеся повреждения.

Полученное ядро может не быть установлено на необходимый тип диска и раздел. Например, обобщенное SCSI ядро Slackware имеет установку корневого устройства в /dev/sda2, в то время как мой корневой раздел Linux, попал на /dev/sda8. В этом случае корневое устройство в ядре должно быть изменено.

Вы можете изменять корневое устройство и ramdisk установки в ядре, даже если все, что у Вас есть - ядро, и некоторая другая операционная система, типа DOS.

rdev изменяет установки ядра, изменяя величины по фиксированному смещению в файле ядра, так что Вы можете делать тот же самое, если у Вас есть шестнадцатеричный редактор доступный на любых системах, все что Вам нужно выполнить --- например, Norton Utilities Disk Editor под DOS. Вы затем должны проверить и в случае необходимости изменить значения в ядре в следующих смещениях:

HEX     DEC  DESCRIPTION
0x01F8  504  младший байт слова RAMDISK
0x01F9  505  младший байт слова RAMDISK
0x01FC  508  младший номер корневого устройства - см. ниже
0X01FD  509  старший номер корневого устройства - см. ниже

Интерпретация ramdisk слова была описана в Секции Установка слова ramdisk, выше.

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

DEVICE          MAJOR MINOR
/dev/fd0            2     0   первый флоппи-диск
/dev/hda1           3     1   раздел 1 на 1-ом IDE устройстве
/dev/sda1           8     1   раздел 1 на 1-ом SCSI устройстве
/dev/sda8           8     8   раздел 8 на 1-ом SCSI устройстве

Как только Вы установили эти величины,Вы можете записать файл на дискету, используя Norton Utilities Disk Editor, или программу rawrite.exe. Эта программа включена во все дистрибутивы. Это - программа DOS, которая записывает файл прямо на диск, начиная с загрузочного сектора, вместо того, чтобы писать в файловую систему. Если Вы используете Norton Utilities, Вы должны записать файл на физический диск в начало диска.

Q. Как я могу сделать дополнительные копии загрузочных корневых дискет?

Т.к. магнитные носители могут разрушиться через какое-то время, Вы должны хранить несколько копий вашего спасательного диска, в случае, если оригинал невозможно считать.

Самый простой способ создания копий любых дискет, включая загрузочные и сервисные дискеты - использовать dd команду, чтобы копировать содержание первоначальной дискеты в файл на жестком диске, и затем использовать ту же самую команду, чтобы копировать файл обратно на новую дискету. Обратите внимание, что Вам не нужно, и Вы не должны монтировать дискеты, потому что dd использует прямой интерфейс устройства.

Чтобы скопировать оригинал, введите команду:

        dd if=DEVICENAME of=FILENAME
        где     DEVICENAME имя устройства флоппи диска
        и       FILENAME имя файла на жестком диске

Пропуск параметра count заставляет dd копировать целую дискету ( 2880 блоков, для высокоплотной).

Чтобы скопировать полученный файл обратно на новую дискету, вставьте новую дискету, и введите обратную команду:

        dd if=FILENAME of=DEVICENAME

Обратите внимание, что вышеупомянутое обсуждение предполагает, что у Вас только один дисковод. Если у Вас два дисковода одного типа, Вы можете копировать дискеты, используя команду:

        dd if=/dev/fd0 of=/dev/fd1

Q. Как я могу загружаться без того, чтобы печатать в " ahaxxxx = nn,nn,nn " каждый раз?

Где дисковое устройство не может быть автоматически обнаружено, необходимо обеспечить ядро строкой параметра устройства, типа:

        aha152x=0x340,11,3,1
Эта строка параметра может быть применена несколькими способами используя LILO:

  • Вводить ее в командной строке каждый раз, когда система загружается через LILO. Хотя, это нудно.
  • Использовать ключевое слово ``lock'' LILO , для сохранения командной строки как заданной по умолчанию, т.о. LILO использует эти опции, каждый раз при загрузке.
  • Используя append= выражение в файле конфигурации LILO. Обратите внимание, что строка параметра должна быть в кавычках.

Например, типовая командная строка, использующая вышеупомянутую строку параметра должна быть:

        zImage  aha152x=0x340,11,3,1 root=/dev/sda1 lock

Это должно передать строку параметра устройства и также просить, чтобы ядро установило корневое устройство на /dev/sda1 и сохранить всю командную строку и использовать ее для всех будущих загрузок.

Примерное выражение APPEND:

        APPEND = "aha152x=0x340,11,3,1"

Заметьте, что строка параметра не должна быть заключена в кавычки в командной строке, но она ДОЛЖНА быть ЗАКЛЮЧЕНА в кавычки в выражении APPEND.

Заметьте также, что для действующей строки параметра, ядро должно содержать драйвера для данного типа диска. Если это не так, то нет ничего принимающего строку параметра, и Вы должны пересобрать ядро, чтобы включить требуемый драйвер. Для подробностей относительно сборки ядра, войдите в /usr/src/linux и читайте README, и читайте Linux FAQ и Installation HOWTO. В качестве альтернативы Вы могли бы получить обобщенное ядро для дискового типа и установить его.

Читающим строго рекомендуется прочесть LILO документацию перед экспериментами с установкой LILO. Неосторожное использование выражения BOOT может повредить разделы.

Q. Во время начальной загрузки, я получаю ошибку "A: cannot execute B". Почему?

Есть несколько имен программ, являющихся жестко указанными в различных утилитах. Это случается не везде, но это может объяснить, почему исполнимая программа не может быть найдена на вашей системе даже при том, что Вы можете видеть, что она - есть. Вы можете выяснять, имеет ли данная программа жестко указанное имя другой, используя команду strings и конвейерный вывод через grep.

Известные примеры жесткого указания:

  • shutdown в некоторых версиях имеет /etc/reboot жестко указанным, так что reboot должна быть помещена в /etc каталог.
  • init вызвал проблемы для по крайней мере у одного человека, с неспособностью ядра найти init.

Чтобы устранить эти проблемы, или переместите программы в правильный каталог, или измените файлы конфигурации (например inittab) указав правильный каталог. Если сомневаетесь, поместите программы в те же самые каталоги, как и на вашем жестком диске, и используйте тот же самый inittab и /etc/rc.d файлы, как на вашем жестком диске.

Q. Мое ядро имеет ramdisk поддержку, но инициализирует ramdisk-и на 0K

Когда это происходит, во время загрузки должно появиться сообщение ядра подобно такому:

        Ramdisk driver initialized : 16 ramdisks of 0K size

Вероятно, потому что размер был установлен в 0 параметрах ядра во времени загрузки. Возможно из-за лишнего параметра файла конфигурации LILO:

ramdisk= 0

Эта строка была включена в примеры файлов конфигурации LILO в некоторых старых дистрибутивах, и было помещено там, чтобы отменить любую предыдущую установку ядра. Если у Вас есть такая строка, удалите ее.

Обратите внимание, если Вы пытаетесь использовать ramdisk, который был установлен в 0K, поведение может быть непредсказуемо, и может приводить к панике ядра (kernel panics).

11. Ресурсы и указатели..

При получении пакета, всегда получайте последнюю версию, если у Вас нет должных оснований не делать так.

11.1 Pre-made bootdisks.

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

В дополнение к загрузочным дискам дистрибутивов, имеются образы следующих спасательных дискет. Если не указано другое, они доступны в каталоге http://metalab.unc.edu/pub/Linux/system/recovery/!INDEX.html

  • tomsrtbt, by Tom Oehser - один загрузочный/корневой диск, базирующийся на ядре 2.0, с большим списком свойств и служебных программ. Он поддерживает IDE, SCSI, ленточные устройства, сетевые платы, PCMCIA и др. Приблизительно 100 утилит и инструментальных средств включено для исправления и восстановления дисков. Пакет также включает сценарии для дезассемблирования и воссоздания образа, так что в случае необходимости может быть добавлен новый материал.

  • rescue02, by John Comyns - спасательный диске базирующийся на ядре 1.3.84, с поддержкой IDE и Adaptec 1542 и NCR53C7,8XX. Она использует ELF бинарники, но имеет достаточно команд для использования в любой системе. Есть модули, которые могут быть загружены после загрузки для всех других SCSI плат. Она вероятно не будет работать на системах с 4 МБ ОЗУ, так как она использует диск ОЗУ 3 МБ.

  • resque_disk-2.0.22, by Sergei Viznyuk - полно-функциональный загрузочный/корневой диск, базирующийся на ядре 2.0.22 со встроенной поддержкой IDE, многих различных SCSI контроллеров, и ELF/AOUT. Также включает много модулей и полезных утилит для ремонта и восстановления жесткого диска.

  • cramdisk изображения, основанные на ядре 2.0.23 , доступны для машин с 4 Мб и 8 Мб. Они включают эмуляцию мат. сопроцессора, работу с сетями ( PPP и сценарий dialin, NE2000, 3C509), или поддержку ZIP для параллельного порта. Эти образы дискеты способны загружаться на 386 с 4МБ ОЗУ. Поддержка МС-ДОС включена, т.о. Вы можете загружать из сети в раздел DOS.

    http://sunsite.unc.edu/pub/Linux/system/recovery/images

11.2 Спасательные пакеты.

Несколько пакетов для создания спасательных дисков доступны на sunsite.unc.edu. С этими пакетами Вы определяете включаемый набор файлов, и программы автоматизируют (в различной степени) создание загрузочного диска. Для подробной информации смотри http://sunsite.unc.edu/pub/Linux/system/recovery/!INDEX.html Тщательно проверьте даты файла - некоторые из этих пакетов не модифицировались в течение нескольких лет, и не будут поддерживать создание сжатой корневой файловой системы, загружаемой в ramdisk. Самый лучший по нашему мнению, Yard - единственный пакет, который может.

11.3 Сценарии оболочки Грэма Чапмана

Грэм Чапман написал набор скриптов, которые могут быть полезны как примеры того, как создать загрузочные диски. В предыдущих версиях этого HOWTO сценарии были приведены в приложении, но они были удалены из документа и помещены на WEB страницу:

http://www.zeta.org.au/~grahamc/linux.html

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

11.4 LILO -- Linux Linux загрузчик.

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

Доступен по ftp из ftp://tsx-11.mit.edu/pub/linux/packages/lilo/. Также доступен на Sunsite и зеркалах.

11.5 Linux FAQ и HOWTO.

Они доступны из многих источников. Просмотрите группы новостей news.answers и comp.os.linux.announce.

FAQ доступно из http://linuxdoc.org/FAQ/Linux-FAQ.html и HOWTO из http://linuxdoc.org/HOWTO/HOWTO-INDEX.html.

Большинство Linux документации может быть найдено на домашней странице Проекта Документации Linux The Linux Documentation Project homepage.

11.6 Использование Ramdisk.

Превосходное описание работы нового кода ramdisk, можно найти в документации ядра Linux. См. /usr/src/linux/Documentation/ramdisk.txt. Он написан Paul Gortmaker и включает секцию о создании сжатого ramdisk.

11.7 Процесс загрузки Linux.

Для подробностей относительно процесса начальной загрузки Linux, имеются некоторые указатели:

  • Гид Linux Системных Администраторов содержит секцию о загрузке, См. http://linuxdoc/LDP/sag/c1582.html
  • LILO ``Технический обзор'' http://metalab.unc.edu/pub/Linux/system/boot/lilo/lilo-t-21.ps.gz Имеет вполне достаточно подробное техническое описание процесса начальной загрузки, до запуска ядра.
  • исходный код - окончательный источник. Ниже - некоторые файлы ядра, связанные с процессом начальной загрузки. Если у Вас есть исходный код ядра Linux, Вы можете найти их в /usr/src/linux на вашей машине; в качестве альтернативы, у Shigio Yamaguchi (shigio@wafu.netgate.net) очень хороший гипертекстовый просмотрщик ядра http://www.tamacom.com/tour/linux/index.html. Здесь несколько относящихся к делу файлов:

    arch/i386/boot/bootsect.S,setup.S

    Содержит ассемблерный код загрузочного сектора.

    arch/i386/boot/compressed/misc.c

    содержит код декомпрессии ядра.

    arch/i386/kernel/

    Каталог, содержащий код инициализации ядра . setup.c содержит ramdisk слово.

    drivers/block/rd.c

    Содержит ramdisk драйвер. Процедуры rd_load и rd_load_image загружают блоки из устройства в ramdisk. Процедура identify_ramdisk_image определяет тип найденной файловой системы и сжата ли она.

12. LILO коды ошибок при загрузке.

Вопросы о этих ошибках часто спрашивают в Usenet, так что мы включаем их здесь как общественную поддержку. Это резюме - выдержка из Документации Пользователя LILO Вернера Алмсбергера, доступной в http://metalab.unc.edu/pub/Linux/system/boot/lilo/lilo-u-21.ps.gz.

Когда LILO загружается самостоятельно, он показывают слово ``LILO''. Каждый символ печатается прежде или после выполнения некоторого специфического действия. Если LILO сбоит в некоторой точке, напечатанные символы могут использоваться, чтобы найти проблему.

(Ничего)

Никакая из частей LILO не была загружена. Или LILO не установлен, или раздел, на котором размещен сектор начальной загрузки , не активен.

L

Загрузчик первой стадии начальной загрузки был загружен и начат, но не может загрузиться второй этап. Двух-цифровой код ошибки указывает тип проблемы. (См. также секцию ``Коды дисковых ошибок''.) Это состояние обычно указывает повреждение среды(поверхности) или рассогласование геометрии (например плохие дисковые параметры)

LI

Первый загрузчик начальной загрузки загрузил второй загрузчик начальной загрузки, но не сумел выполнять его. Это может быть вызвано либо рассогласованием геометрии либо, отсутствием или перемещенным /boot/boot.b без запуска map installer.

LIL

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

LIL?

Второй загрузчик начальной загрузки каскада был загружен в неправильном адресе. Это обычно вызывается рассогласованием геометрии или перемещением /boot/boot.b без выполнения map installer.

LIL-

Дескрипторная таблица разрушена. Это обычно вызывается рассогласованием геометрии или перемещением /boot/boot.b без выполнения map installer.

LILO

Все части LILO были успешно загружены.

Если BIOS сообщает о ошибке, когда LILO пытается загрузить загрузочный образ, отображается соответствующий код ошибки. Коды располагаются от 0x00 до 0xbb. См. LILO User Guide для их объяснения.

13. Пример каталога корневого диска.

Здесь пример содержимого корневого и сервисного диска.

Root directory:
drwx--x--x   2 root     root         1024 Nov  1 15:39 bin
drwx--x--x   2 root     root         4096 Nov  1 15:39 dev
drwx--x--x   3 root     root         1024 Nov  1 15:39 etc
drwx--x--x   4 root     root         1024 Nov  1 15:39 lib
drwx--x--x   5 root     root         1024 Nov  1 15:39 mnt
drwx--x--x   2 root     root         1024 Nov  1 15:39 proc
drwx--x--x   2 root     root         1024 Nov  1 15:39 root
drwx--x--x   2 root     root         1024 Nov  1 15:39 sbin
drwx--x--x   2 root     root         1024 Nov  1 15:39 tmp
drwx--x--x   7 root     root         1024 Nov  1 15:39 usr
drwx--x--x   5 root     root         1024 Nov  1 15:39 var

/bin:
-rwx--x--x   1 root     root        62660 Nov  1 15:39 ash
-rwx--x--x   1 root     root         9032 Nov  1 15:39 cat
-rwx--x--x   1 root     root        10276 Nov  1 15:39 chmod
-rwx--x--x   1 root     root         9592 Nov  1 15:39 chown
-rwx--x--x   1 root     root        23124 Nov  1 15:39 cp
-rwx--x--x   1 root     root        23028 Nov  1 15:39 date
-rwx--x--x   1 root     root        14052 Nov  1 15:39 dd
-rwx--x--x   1 root     root        14144 Nov  1 15:39 df
-rwx--x--x   1 root     root        69444 Nov  1 15:39 egrep
-rwx--x--x   1 root     root          395 Nov  1 15:39 false
-rwx--x--x   1 root     root        69444 Nov  1 15:39 fgrep
-rwx--x--x   1 root     root        69444 Nov  1 15:39 grep
-rwx--x--x   3 root     root        45436 Nov  1 15:39 gunzip
-rwx--x--x   3 root     root        45436 Nov  1 15:39 gzip
-rwx--x--x   1 root     root         8008 Nov  1 15:39 hostname
-rwx--x--x   1 root     root        12736 Nov  1 15:39 ln
-rws--x--x   1 root     root        15284 Nov  1 15:39 login
-rwx--x--x   1 root     root        29308 Nov  1 15:39 ls
-rwx--x--x   1 root     root         8268 Nov  1 15:39 mkdir
-rwx--x--x   1 root     root         8920 Nov  1 15:39 mknod
-rwx--x--x   1 root     root        24836 Nov  1 15:39 more
-rws--x--x   1 root     root        37640 Nov  1 15:39 mount
-rwx--x--x   1 root     root        12240 Nov  1 15:39 mt
-rwx--x--x   1 root     root        12932 Nov  1 15:39 mv
-r-x--x--x   1 root     root        12324 Nov  1 15:39 ps
-rwx--x--x   1 root     root         5388 Nov  1 15:39 pwd
-rwx--x--x   1 root     root        10092 Nov  1 15:39 rm
lrwxrwxrwx   1 root     root            3 Nov  1 15:39 sh -> ash
-rwx--x--x   1 root     root        25296 Nov  1 15:39 stty
-rws--x--x   1 root     root        12648 Nov  1 15:39 su
-rwx--x--x   1 root     root         4444 Nov  1 15:39 sync
-rwx--x--x   1 root     root       110668 Nov  1 15:39 tar
-rwx--x--x   1 root     root        19712 Nov  1 15:39 touch
-rwx--x--x   1 root     root          395 Nov  1 15:39 true
-rws--x--x   1 root     root        19084 Nov  1 15:39 umount
-rwx--x--x   1 root     root         5368 Nov  1 15:39 uname
-rwx--x--x   3 root     root        45436 Nov  1 15:39 zcat

/dev:
lrwxrwxrwx   1 root     root            6 Nov  1 15:39 cdrom -> cdu31a
brw-rw-r--   1 root     root      15,   0 May  5  1998 cdu31a
crw-------   1 root     root       4,   0 Nov  1 15:29 console
crw-rw-rw-   1 root     uucp       5,  64 Sep  9 19:46 cua0
crw-rw-rw-   1 root     uucp       5,  65 May  5  1998 cua1
crw-rw-rw-   1 root     uucp       5,  66 May  5  1998 cua2
crw-rw-rw-   1 root     uucp       5,  67 May  5  1998 cua3
brw-rw----   1 root     floppy     2,   0 Aug  8 13:54 fd0
brw-rw----   1 root     floppy     2,  36 Aug  8 13:54 fd0CompaQ
brw-rw----   1 root     floppy     2,  84 Aug  8 13:55 fd0D1040
brw-rw----   1 root     floppy     2,  88 Aug  8 13:55 fd0D1120
brw-rw----   1 root     floppy     2,  12 Aug  8 13:54 fd0D360
brw-rw----   1 root     floppy     2,  16 Aug  8 13:54 fd0D720
brw-rw----   1 root     floppy     2, 120 Aug  8 13:55 fd0D800
brw-rw----   1 root     floppy     2,  32 Aug  8 13:54 fd0E2880
brw-rw----   1 root     floppy     2, 104 Aug  8 13:55 fd0E3200
brw-rw----   1 root     floppy     2, 108 Aug  8 13:55 fd0E3520
brw-rw----   1 root     floppy     2, 112 Aug  8 13:55 fd0E3840
brw-rw----   1 root     floppy     2,  28 Aug  8 13:54 fd0H1440
brw-rw----   1 root     floppy     2, 124 Aug  8 13:55 fd0H1600
brw-rw----   1 root     floppy     2,  44 Aug  8 13:55 fd0H1680
brw-rw----   1 root     floppy     2,  60 Aug  8 13:55 fd0H1722
brw-rw----   1 root     floppy     2,  76 Aug  8 13:55 fd0H1743
brw-rw----   1 root     floppy     2,  96 Aug  8 13:55 fd0H1760
brw-rw----   1 root     floppy     2, 116 Aug  8 13:55 fd0H1840
brw-rw----   1 root     floppy     2, 100 Aug  8 13:55 fd0H1920
lrwxrwxrwx   1 root     root            7 Nov  1 15:39 fd0H360 -> fd0D360
lrwxrwxrwx   1 root     root            7 Nov  1 15:39 fd0H720 -> fd0D720
brw-rw----   1 root     floppy     2,  52 Aug  8 13:55 fd0H820
brw-rw----   1 root     floppy     2,  68 Aug  8 13:55 fd0H830
brw-rw----   1 root     floppy     2,   4 Aug  8 13:54 fd0d360
brw-rw----   1 root     floppy     2,   8 Aug  8 13:54 fd0h1200
brw-rw----   1 root     floppy     2,  40 Aug  8 13:54 fd0h1440
brw-rw----   1 root     floppy     2,  56 Aug  8 13:55 fd0h1476
brw-rw----   1 root     floppy     2,  72 Aug  8 13:55 fd0h1494
brw-rw----   1 root     floppy     2,  92 Aug  8 13:55 fd0h1600
brw-rw----   1 root     floppy     2,  20 Aug  8 13:54 fd0h360
brw-rw----   1 root     floppy     2,  48 Aug  8 13:55 fd0h410
brw-rw----   1 root     floppy     2,  64 Aug  8 13:55 fd0h420
brw-rw----   1 root     floppy     2,  24 Aug  8 13:54 fd0h720
brw-rw----   1 root     floppy     2,  80 Aug  8 13:55 fd0h880
brw-rw----   1 root     disk       3,   0 May  5  1998 hda
brw-rw----   1 root     disk       3,   1 May  5  1998 hda1
brw-rw----   1 root     disk       3,   2 May  5  1998 hda2
brw-rw----   1 root     disk       3,   3 May  5  1998 hda3
brw-rw----   1 root     disk       3,   4 May  5  1998 hda4
brw-rw----   1 root     disk       3,   5 May  5  1998 hda5
brw-rw----   1 root     disk       3,   6 May  5  1998 hda6
brw-rw----   1 root     disk       3,  64 May  5  1998 hdb
brw-rw----   1 root     disk       3,  65 May  5  1998 hdb1
brw-rw----   1 root     disk       3,  66 May  5  1998 hdb2
brw-rw----   1 root     disk       3,  67 May  5  1998 hdb3
brw-rw----   1 root     disk       3,  68 May  5  1998 hdb4
brw-rw----   1 root     disk       3,  69 May  5  1998 hdb5
brw-rw----   1 root     disk       3,  70 May  5  1998 hdb6
crw-r-----   1 root     kmem       1,   2 May  5  1998 kmem
crw-r-----   1 root     kmem       1,   1 May  5  1998 mem
lrwxrwxrwx   1 root     root           12 Nov  1 15:39 modem -> ../dev/ttyS1
lrwxrwxrwx   1 root     root           12 Nov  1 15:39 mouse -> ../dev/psaux
crw-rw-rw-   1 root     root       1,   3 May  5  1998 null
crwxrwxrwx   1 root     root      10,   1 Oct  5 20:22 psaux
brw-r-----   1 root     disk       1,   1 May  5  1998 ram
brw-rw----   1 root     disk       1,   0 May  5  1998 ram0
brw-rw----   1 root     disk       1,   1 May  5  1998 ram1
brw-rw----   1 root     disk       1,   2 May  5  1998 ram2
brw-rw----   1 root     disk       1,   3 May  5  1998 ram3
brw-rw----   1 root     disk       1,   4 May  5  1998 ram4
brw-rw----   1 root     disk       1,   5 May  5  1998 ram5
brw-rw----   1 root     disk       1,   6 May  5  1998 ram6
brw-rw----   1 root     disk       1,   7 May  5  1998 ram7
brw-rw----   1 root     disk       1,   8 May  5  1998 ram8
brw-rw----   1 root     disk       1,   9 May  5  1998 ram9
lrwxrwxrwx   1 root     root            4 Nov  1 15:39 ramdisk -> ram0
***  I have only included devices for the IDE partitions I use.
***  If you use SCSI, then use the /dev/sdXX devices instead.
crw-------   1 root     root       4,   0 May  5  1998 tty0
crw--w----   1 root     tty        4,   1 Nov  1 15:39 tty1
crw-------   1 root     root       4,   2 Nov  1 15:29 tty2
crw-------   1 root     root       4,   3 Nov  1 15:29 tty3
crw-------   1 root     root       4,   4 Nov  1 15:29 tty4
crw-------   1 root     root       4,   5 Nov  1 15:29 tty5
crw-------   1 root     root       4,   6 Nov  1 15:29 tty6
crw-------   1 root     root       4,   7 May  5  1998 tty7
crw-------   1 root     tty        4,   8 May  5  1998 tty8
crw-------   1 root     tty        4,   9 May  8 12:57 tty9
crw-rw-rw-   1 root     root       4,  65 Nov  1 12:17 ttyS1
crw-rw-rw-   1 root     root       1,   5 May  5  1998 zero

/etc:
-rw-------   1 root     root          164 Nov  1 15:39 conf.modules
-rw-------   1 root     root          668 Nov  1 15:39 fstab
-rw-------   1 root     root           71 Nov  1 15:39 gettydefs
-rw-------   1 root     root          389 Nov  1 15:39 group
-rw-------   1 root     root          413 Nov  1 15:39 inittab
-rw-------   1 root     root           65 Nov  1 15:39 issue
-rw-r--r--   1 root     root          746 Nov  1 15:39 ld.so.cache
***  ld.so.cache создается ldconfig и кэширует расположения библиотек.
***  Если не отсутствует ld.so.cache, многие вещи прерываются в процессе загрузки.
***  Вы можете либо пересоздать его после создания загрузочного диска, или
***  iвключить ldconfig в загрузочный диск и запускать его из rc.x скрипта
***  для обновления кеша.
-rw-------   1 root     root           32 Nov  1 15:39 motd
-rw-------   1 root     root          949 Nov  1 15:39 nsswitch.conf
drwx--x--x   2 root     root         1024 Nov  1 15:39 pam.d
-rw-------   1 root     root          139 Nov  1 15:39 passwd
-rw-------   1 root     root          516 Nov  1 15:39 profile
-rwx--x--x   1 root     root          387 Nov  1 15:39 rc
-rw-------   1 root     root           55 Nov  1 15:39 shells
-rw-------   1 root     root          774 Nov  1 15:39 termcap
-rw-------   1 root     root           78 Nov  1 15:39 ttytype
lrwxrwxrwx   1 root     root           15 Nov  1 15:39 utmp -> ../var/run/utmp
lrwxrwxrwx   1 root     root           15 Nov  1 15:39 wtmp -> ../var/log/wtmp

/etc/pam.d:
-rw-------   1 root     root          356 Nov  1 15:39 other

/lib:
*** У меня ELF система с glibc, т.о. мне нужен загрузчик ld-2.so.
-rwxr-xr-x   1 root     root        45415 Nov  1 15:39 ld-2.0.7.so
lrwxrwxrwx   1 root     root           11 Nov  1 15:39 ld-linux.so.2 -> ld-2.0.7.so
-rwxr-xr-x   1 root     root       731548 Nov  1 15:39 libc-2.0.7.so
lrwxrwxrwx   1 root     root           13 Nov  1 15:39 libc.so.6 -> libc-2.0.7.so
lrwxrwxrwx   1 root     root           17 Nov  1 15:39 libcom_err.so.2 -> libcom_err.so.2.0
-rwxr-xr-x   1 root     root         6209 Nov  1 15:39 libcom_err.so.2.0
-rwxr-xr-x   1 root     root       153881 Nov  1 15:39 libcrypt-2.0.7.so
lrwxrwxrwx   1 root     root           17 Nov  1 15:39 libcrypt.so.1 -> libcrypt-2.0.7.so
-rwxr-xr-x   1 root     root        12962 Nov  1 15:39 libdl-2.0.7.so
lrwxrwxrwx   1 root     root           14 Nov  1 15:39 libdl.so.2 -> libdl-2.0.7.so
lrwxrwxrwx   1 root     root           16 Nov  1 15:39 libext2fs.so.2 -> libext2fs.so.2.4
-rwxr-xr-x   1 root     root        81382 Nov  1 15:39 libext2fs.so.2.4
-rwxr-xr-x   1 root     root        25222 Nov  1 15:39 libnsl-2.0.7.so
lrwxrwxrwx   1 root     root           15 Nov  1 15:39 libnsl.so.1 -> libnsl-2.0.7.so
-rwx--x--x   1 root     root       178336 Nov  1 15:39 libnss_files-2.0.7.so
lrwxrwxrwx   1 root     root           21 Nov  1 15:39 libnss_files.so.1 -> libnss_files-2.0.7.so
lrwxrwxrwx   1 root     root           14 Nov  1 15:39 libpam.so.0 -> libpam.so.0.64
-rwxr-xr-x   1 root     root        26906 Nov  1 15:39 libpam.so.0.64
lrwxrwxrwx   1 root     root           19 Nov  1 15:39 libpam_misc.so.0 -> libpam_misc.so.0.64
-rwxr-xr-x   1 root     root         7086 Nov  1 15:39 libpam_misc.so.0.64
-r-xr-xr-x   1 root     root        35615 Nov  1 15:39 libproc.so.1.2.6
lrwxrwxrwx   1 root     root           15 Nov  1 15:39 libpwdb.so.0 -> libpwdb.so.0.54
-rw-r--r--   1 root     root       121899 Nov  1 15:39 libpwdb.so.0.54
lrwxrwxrwx   1 root     root           19 Nov  1 15:39 libtermcap.so.2 -> libtermcap.so.2.0.8
-rwxr-xr-x   1 root     root        12041 Nov  1 15:39 libtermcap.so.2.0.8
-rwxr-xr-x   1 root     root        12874 Nov  1 15:39 libutil-2.0.7.so
lrwxrwxrwx   1 root     root           16 Nov  1 15:39 libutil.so.1 -> libutil-2.0.7.so
lrwxrwxrwx   1 root     root           14 Nov  1 15:39 libuuid.so.1 -> libuuid.so.1.1
-rwxr-xr-x   1 root     root         8039 Nov  1 15:39 libuuid.so.1.1
drwx--x--x   3 root     root         1024 Nov  1 15:39 modules
drwx--x--x   2 root     root         1024 Nov  1 15:39 security

/lib/modules:
drwx--x--x   4 root     root         1024 Nov  1 15:39 2.0.35

/lib/modules/2.0.35:
drwx--x--x   2 root     root         1024 Nov  1 15:39 block
drwx--x--x   2 root     root         1024 Nov  1 15:39 cdrom

/lib/modules/2.0.35/block:
-rw-------   1 root     root         7156 Nov  1 15:39 loop.o

/lib/modules/2.0.35/cdrom:
-rw-------   1 root     root        24108 Nov  1 15:39 cdu31a.o

/lib/security:
-rwx--x--x   1 root     root         8771 Nov  1 15:39 pam_permit.so

***  Каталоги-заглушки для монтирования
/mnt:
drwx--x--x   2 root     root         1024 Nov  1 15:39 SparQ
drwx--x--x   2 root     root         1024 Nov  1 15:39 cdrom
drwx--x--x   2 root     root         1024 Nov  1 15:39 floppy

/proc:

/root:
-rw-------   1 root     root          176 Nov  1 15:39 .bashrc
-rw-------   1 root     root          182 Nov  1 15:39 .cshrc
-rw-------   1 root     root           47 Nov  1 15:39 .glintrc
-rwx--x--x   1 root     root          455 Nov  1 15:39 .profile
-rw-------   1 root     root         4014 Nov  1 15:39 .tcshrc

/sbin:
-rwx--x--x   1 root     root        23976 Nov  1 15:39 depmod
-rwx--x--x   2 root     root       274600 Nov  1 15:39 e2fsck
-rwx--x--x   1 root     root        41268 Nov  1 15:39 fdisk
-rwx--x--x   1 root     root         9396 Nov  1 15:39 fsck
-rwx--x--x   2 root     root       274600 Nov  1 15:39 fsck.ext2
-rwx--x--x   1 root     root        29556 Nov  1 15:39 getty
-rwx--x--x   1 root     root         6620 Nov  1 15:39 halt
-rwx--x--x   1 root     root        23116 Nov  1 15:39 init
-rwx--x--x   1 root     root        25612 Nov  1 15:39 insmod
-rwx--x--x   1 root     root        10368 Nov  1 15:39 kerneld
-rwx--x--x   1 root     root       110400 Nov  1 15:39 ldconfig
-rwx--x--x   1 root     root         6108 Nov  1 15:39 lsmod
-rwx--x--x   2 root     root        17400 Nov  1 15:39 mke2fs
-rwx--x--x   1 root     root         4072 Nov  1 15:39 mkfs
-rwx--x--x   2 root     root        17400 Nov  1 15:39 mkfs.ext2
-rwx--x--x   1 root     root         5664 Nov  1 15:39 mkswap
-rwx--x--x   1 root     root        22032 Nov  1 15:39 modprobe
lrwxrwxrwx   1 root     root            4 Nov  1 15:39 reboot -> halt
-rwx--x--x   1 root     root         7492 Nov  1 15:39 rmmod
-rwx--x--x   1 root     root        12932 Nov  1 15:39 shutdown
lrwxrwxrwx   1 root     root            6 Nov  1 15:39 swapoff -> swapon
-rwx--x--x   1 root     root         5124 Nov  1 15:39 swapon
lrwxrwxrwx   1 root     root            4 Nov  1 15:39 telinit -> init
-rwx--x--x   1 root     root         6944 Nov  1 15:39 update

/tmp:

/usr:
drwx--x--x   2 root     root         1024 Nov  1 15:39 bin
drwx--x--x   2 root     root         1024 Nov  1 15:39 lib
drwx--x--x   3 root     root         1024 Nov  1 15:39 man
drwx--x--x   2 root     root         1024 Nov  1 15:39 sbin
drwx--x--x   3 root     root         1024 Nov  1 15:39 share
lrwxrwxrwx   1 root     root           10 Nov  1 15:39 tmp -> ../var/tmp

/usr/bin:
-rwx--x--x   1 root     root        37164 Nov  1 15:39 afio
-rwx--x--x   1 root     root         5044 Nov  1 15:39 chroot
-rwx--x--x   1 root     root        10656 Nov  1 15:39 cut
-rwx--x--x   1 root     root        63652 Nov  1 15:39 diff
-rwx--x--x   1 root     root        12972 Nov  1 15:39 du
-rwx--x--x   1 root     root        56552 Nov  1 15:39 find
-r-x--x--x   1 root     root         6280 Nov  1 15:39 free
-rwx--x--x   1 root     root         7680 Nov  1 15:39 head
-rwx--x--x   1 root     root         8504 Nov  1 15:39 id
-r-sr-xr-x   1 root     bin          4200 Nov  1 15:39 passwd
-rwx--x--x   1 root     root        14856 Nov  1 15:39 tail
-rwx--x--x   1 root     root        19008 Nov  1 15:39 tr
-rwx--x--x   1 root     root         7160 Nov  1 15:39 wc
-rwx--x--x   1 root     root         4412 Nov  1 15:39 whoami

/usr/lib:
lrwxrwxrwx   1 root     root           17 Nov  1 15:39 libncurses.so.4 -> libncurses.so.4.2
-rw-r--r--   1 root     root       260474 Nov  1 15:39 libncurses.so.4.2

/usr/sbin:
-r-x--x--x   1 root     root        13684 Nov  1 15:39 fuser
-rwx--x--x   1 root     root         3876 Nov  1 15:39 mklost+found

/usr/share:
drwx--x--x   4 root     root         1024 Nov  1 15:39 terminfo

/usr/share/terminfo:
drwx--x--x   2 root     root         1024 Nov  1 15:39 l
drwx--x--x   2 root     root         1024 Nov  1 15:39 v

/usr/share/terminfo/l:
-rw-------   1 root     root         1552 Nov  1 15:39 linux
-rw-------   1 root     root         1516 Nov  1 15:39 linux-m
-rw-------   1 root     root         1583 Nov  1 15:39 linux-nic

/usr/share/terminfo/v:
-rw-------   2 root     root         1143 Nov  1 15:39 vt100
-rw-------   2 root     root         1143 Nov  1 15:39 vt100-am

/var:
drwx--x--x   2 root     root         1024 Nov  1 15:39 log
drwx--x--x   2 root     root         1024 Nov  1 15:39 run
drwx--x--x   2 root     root         1024 Nov  1 15:39 tmp

/var/log:
-rw-------   1 root     root            0 Nov  1 15:39 wtmp

/var/run:
-rw-------   1 root     root            0 Nov  1 15:39 utmp

/var/tmp:

14. Пример каталога сервисного диска.

total 579
-rwxr-xr-x   1 root     root        42333 Jul 28 19:05 cpio*
-rwxr-xr-x   1 root     root        32844 Aug 28 19:50 debugfs*
-rwxr-xr-x   1 root     root       103560 Jul 29 21:31 elvis*
-rwxr-xr-x   1 root     root        29536 Jul 28 19:04 fdisk*
-rw-r--r--   1 root     root       128254 Jul 28 19:03 ftape.o
-rwxr-xr-x   1 root     root        17564 Jul 25 03:21 ftmt*
-rwxr-xr-x   1 root     root        64161 Jul 29 20:47 grep*
-rwxr-xr-x   1 root     root        45309 Jul 29 20:48 gzip*
-rwxr-xr-x   1 root     root        23560 Jul 28 19:04 insmod*
-rwxr-xr-x   1 root     root          118 Jul 28 19:04 lsmod*
lrwxrwxrwx   1 root     root            5 Jul 28 19:04 mt -> mt-st*
-rwxr-xr-x   1 root     root         9573 Jul 28 19:03 mt-st*
lrwxrwxrwx   1 root     root            6 Jul 28 19:05 rmmod -> insmod*
-rwxr-xr-x   1 root     root       104085 Jul 28 19:05 tar*
lrwxrwxrwx   1 root     root            5 Jul 29 21:35 vi -> elvis*

[ опубликовано 09/02/2003 ]

Tom Fawcett, перевод: Максим Дзюманенко - The Linux Bootdisk HOWTO, v3.6, Январь 2000 г.   Версия для печати