Модернизация ядра - это
просто надо взять исходные тексты и
самому их откомпилировать. Вы
должны компилировать ядро сами,
поскольку вам решать, какие
свойства включать и не включать,
как и убедиться, что ядро будет
оптимизировано применительно к
вашей машине. Процесс вполне
безболезненный. (прим. переводчика:
Настоящие парашютисты сами
укладывают свой парашют).
Исходные тексты ядра
можно раздобыть на любом Linux-овском
FTP-сервере (список смотрите в
Разделе C). На sunsite.unc.edu
,
например, исходники ядро находятся
в pub/Linux/kernel/. Версии ядра нумеруются
с использованием номера версии
ядра (kernel) и уровня исправления
(patchlevel). Например, kernel version 0.99 patchlevel 11
обычно записывается как 0.99.pl11
,
или еще проще 0.99.11
.
Исходники ядра
распространяются в виде
зазипованных tar-файлов. ( Часто
patch-файлы ("заплаты")
выпускаются для текущей версии
ядра, которая позволяет
модернизировать исходники вашего
действующего ядра на основе
последнего уровня исправлений,
используя программу patch. В
большинстве случаев, между тем,
обычно проще инсталлировать
целиком новую версию ядра.
Например, файл, содержащий
исходники ядра 0.99.pl11 - linux-0.99.11.tar.gz
.
( прим. переводчика: На момент
перевода книги существуют
следующие серии ядер: 0.1-0.99, 1.0.1-1.0.9,
1.1.1-1.1.95, 1.2.1-1.2.13, 1.3.1-1.3.83. Ядра,
принадлежащие серии с четной 2-й
цифрой (1.0, 1.2), являются стабильными
(то есть не включают никаких
экспериментальных кодов). Ядра
серии (1.1, 1.3) включают
экспериментальные коды (такие как
Mobile IP, IP-masquarading и т. п. в серии 1.3).
Переводчик, исходя из
декларированного автором принципа
"от добра добра не ищут",
работает в версии 1.2.13 и с
нетерпением ждет появления версии
1.4.1 или 2.0.)
Распакуйте этот файл из
каталога /usr/src
; он создаст
каталог /usr/src/linux
, который
содержит исходники ядра. Вам
следует удалить или переименовать
существующий /usr/src/linux
перед
распаковкой новой версии.
Когда исходники
распакованы, вам необходимо
убедиться, что две символические
связи в /usr/include
корректны.
Для создания этих связей
используйте команды
# ln -sf /usr/src/linux/include/linux /usr/include/linux
# ln -sf /usr/src/linux/include/asm /usr/include/asm
Если вы однажды создали
эти связи, нет причины создавать их
снова, когда вы
инсталлируете следующую версию
ядра. (Смотрите Раздел 3.10 по поводу
символических связей).
Обратите внимание, что
для компиляции ядра у вас в системе
должны быть инсталлированы
компиляторы gcc
и g++
C и
C++. Если вы нуждаетесь в более
свежих версиях этих компиляторов,
смотрите ниже Раздел 4.7.3.
Для компиляции ядра
прежде всего выполните cd
в /usr/src/linux
.
Выполните команду make config
.
Эта команда запросит у вас
несколько настроечных опций, таких
как "Какой тип файловой системы
вы желаете включить в новое
ядро". Затем, отредактируйте /usr/src/linux/Makefile
.
Убедитесь, что определение для ROOT_DEV
корректно - оно определяет
устройство, используемое в
качестве корневой файловой системы
во время загрузки. Обычное
определение имеет вид:
ROOT_DEV = CURRENT
Менять это нет смысла,
кроме случая, когда вы меняете
устройство для вашей корневой
файловой системы.
Затем выполните команду
make dep
для отслеживания всех
взаимосвязей исходных текстов. Это
очень важный этап.
И наконец, вы готовы
компилировать ядро. Команда make
Image
скомпилирует ядро и оставит
образ нового ядра в файле /usr/src/linux/Image
.
(прим. переводчика: Начиная с ядер
серии 1.2 собранное ядро
записывается в каталог /usr/src/linux/arch/i386/boot/Image
(если конечно вы собирали ядро для
процессоров серии intel, а не alpha, mips
или sparc.) А команда make zImage
скомпилирует скомпрессировнный
образ ядра, который
раскомпрессирует сам себя во время
загрузки, а так занимает на диске
меньше места.
После компиляции ядра
вы должны либо скопировать его на
загрузочную дискету (командой
вроде ``cp Image /dev/fd0
''), либо
инсталлировать его, используя LILO
для загрузки с вашего жесткого
диска. Дополнительную информацию
можно найти в Разделе 4.2.2 .
Как говорилось ранее,
большинство программ системы
компилировалось для использования
разделяемых библиотек содержащих
общие подпрограммы, которыми
пользуются различные прикладные
программы.
Если вы увидите
сообщение
Incompatible library version
(Несовместимая версия библиотеки)
При попытке выполнить
программу, вам необходимо
модернизировать версию ваших
библиотек, которые использует
программа. Библиотеки совместимы в
обратном направлении, то есть
программа, откомпилированная для
использования с более ранней
версией библиотек, должна работать
с новой версией библиотек. А
обратное не справедливо.
Самая последняя версия
библиотек может быть найдена
FTP-серверах Linux. На sunsite.unc.edu
они расположены в /pub/Linux/GCC
.
Файлы "версии" (``release'') должны
описывать, какие файлы вам
необходимо скачать, и как их
инсталлировать. Кратко, вы должны
иметь файлы image-version.tar.gz
и inc-version.tar.gz
,
где версия указывает версию
инсталлируемых библиотек, например
4.4.1. (прим. переводчика: На момент
перевода книги последняя версия
была 5.3.9.) Это зазипованные tar-файлы.
Файлы образов содержат образы
инсталлируемых библиотек в /lib
and /usr/lib
. Файл inc
содержит include-файлы для инсталляции
в /usr/include
.
Файл release-
version.tar.gz
об'ясняет инсталляционную
процедуру в деталях (конкретные
инструкции для конкретных версий
отличаются). В общем случае вы
должны инсталлировать
библиотечные .a
и .sa
файлы в /usr/lib
. Эти библиотеки
используются на этапе компиляции.
Дополнительно,
разделяемая библиотека образов
файлов libc.so.
version
инсталлируется в /lib
. Это
разделяемые библиотеки образов
загружаются во время выполнения
использующими их программами.
Каждая библиотека имеет
символическую связь, использующую
старшее число версии библиотеки в /lib
.
Например, библиотека libc
версия 4.4.1 имеет старшую цифру
версии 4. Файл, содержащий
библиотеку - libc.so.4.4.1
.
Символическая связь с именем libc.so.4
,
указывающая на этот файл, также в /lib
.
Вы должны изменить эту
символическую связь, когда
модифицируете библиотеки.
Например, когда идет смена версий,
вы должны изменить символическую
связь файла libc.so.4
на новую
версию.
Важное замечание!
Надо менять символическую связь за
один шаг, как показано ниже. Если вы
каким-то образом удалили
символическую связь libc.so.4
тогда программы, которые зависят от
этой связи (включая базовые утилиты
вроде ls
и cat
)
перестанут работать. Используйте
следующую команду для обновления
символической связи libc.so.4
,
чтобы она указывала на файл libc.so.4.4.1
:
# ln -sf /lib/libc.so.4.4.1 /lib/libc.so.4
Вы должны также
изменить символическую связь libm.so.
version
таким же манером. Если вы
переходите на отличную (от прежней)
версию библиотек, замените имена
вышеупомянутых файлов. Пояснения к
версии библиотеки должны прояснить
детали. (Дополнительную информацию
про символические связи смотрите в
Разделе 3.10).
Компиляторы gcc
C и
C++ используются для компиляции
программ вашей системы, в первую
голову - ядра. Новейшую версию gcc
можно найти на FTP-серверах Linux. На sunsite.unc.edu
его можно найти в каталоге /pub/Linux/GCC
(вместе с библиотеками). Должен
существовать файл версии для
дистрибуции gcc, детализирующий,
какие файлы вы должны переписать и
как их инсталлировать.
Модернизация других
программ, это в основном проблема
добычи соответствующих файлов и их
инсталляции. Большинство программ
для Linux распространяются как
зазипованные tar-файлы, включая как
исходные, так и выполняемые, или те
и другие. Если выполняемые файлы не
включены в версию, вам может
потребоваться самостоятельно их
откомпилировать. Обычно это
означает запуск make в каталоге, где
находятся исходники.
Чтение группы новостей
USENET comp.os.linux.announce
- простейший
путь, чтобы выловить информацию о
новых программах. Так что самый
простой способ отыскать какие-то
программы, это побродить по
FTP-серверам, поскачивать с серверов
(ls-lR
) индексные файлы и,
используя grep
, найти желаемые
файлы. Если вам доступен архив, это
также может помочь. Детали смотрите
в Приложении А. (Если у вас нет
архива, вы можете по telnet
выйти на архивный сервер вроде archie.rutgers.edu
,
войти как ``archie
'' и
воспользоваться командой ``help
'').
Детали смотрите в Приложении А.
Один из удобных
источников программ Linux - дисковый
образ Slackware. Каждый диск содержит
ряд файлов .tgz
, просто
зазипованных tar
-файлов.
Вместо переписывания диска вы
можете переписать желаемые .tgz
файлы из каталогов Slackware на
FTP-сервере и прямо их
инсталлировать. Если вы
используете дистрибутив Slackware,
команда setup
может
автоматически загрузить и
инсталлировать полный набор
дисков.
И еще раз, обычно не
самое умное дело заниматься
модернизацией путем
переинсталляции новейшей версии
Slackware или другого дистрибутива.
Если вы таким образом
реинсталлируете, вы обязательно
уничтожите ваш сегодняшний
вариант, включая каталоги
пользователей и ваши стандартные
настройки. Лучше заниматься
модернизацией по частям, то есть,
если нашлась программа, которую вы
часто используете и которая имеет
новую версию, модернизируйте ее. А
иначе не волнуйте себя по пустякам.
Правило усталого ветерана: "Если
само не ломается - не трогай".
Если ваша система работает - нет
достаточных оснований для
модернизации.
Другая задача системного
администратора - забота о файловой
системе. Большая часть этой работы
состоит в проверке файловой
системы на наличие поврежденных
или испорченных файлов; многие
системы делают такие проверки во
время загрузки.
Сначала несколько
концепций, связанных с файловыми
системами. Прежде, чем файловая
система будет принята вашей
системой, она должна быть примонтирована
к какому-то каталогу. Например, если
у вас файловая система на дискете,
то вы должны примонтировать ее в
каталог, скажем /mnt
, для того,
чтобы обеспечить доступ к ее файлам
(смотрите Раздел 4.6.2). После
монтирования файловой системы все
файлы этой системы появляются в
этом каталоге (и ниже). После
размонтирования файловой системы
каталог (в нашем случае /mnt
)
будет пуст, то же самое справедливо
для файловой системы на жестком
диске. (Прим. переводчика: Каталог /mnt
будет пуст, если он был пуст до
монтирования, иначе наоборот,
станут видными файлы каталога /mnt
(основной системы), которые
становятся "невидимыми", когда
к этому каталогу монтируется
файловая система). Система
автоматически монтирует файловые
системы на ваш жесткий диск во
время загрузки. Так называемая
"корневая файловая система"
монтируется к каталогу /
.
Если у вас отдельные файловые
системы, например, для /usr
-
она монтируется на /usr
. Если у
вас только корневая файловая
система, то все файлы, включая
содержимое /usr
, существуют в
этой файловой системе.
Команда mount
используется для монтирования
файловой системы.
mount -av
Выполняется из файла /etc/rc
(файла системной инициализации во
время загрузки, смотрите Раздел
4.10.1). Команда ount -av
получает
информацию о файловых системах и
монтирует в соответствии с файлом /etc/fstab
.
Пример файла fstab
показан
ниже.
# device directory type options
/dev/hda2 / ext2 defaults
/dev/hda3 /usr ext2 defaults
/dev/hda4 none swap sw
/proc /proc proc none
Первое поле - это
устройство (имя монтируемого
раздела). Второе поле - точка
монтирования. Третье поле - тип
файловой системы (например, ext2
для системы типа ext2fs или minix
для Minix filesystems). Таблица 4.1
перечисляет различные типы
файловых систем, доступных в Linux.
Эта таблица для ядра
версии 1.1.37.
Файловая система Имя типа Комментарий
Second Extended Filesystem ext2 Наиболее распространенная для Linux
Extended Filesystem ext Вытеснена системой ext2
Minix Filesystem minix Файловая система Minix; редко
используется
Xia Filesystem xia Похожа на ext2; редко используется
UMSDOS Filesystem umsdos Для инсталляции Linux на разделы
MS-DOS
MS-DOS Filesystem msdos Для доступа к файлам MS-DOS
/proc Filesystem proc Дает информацию о процессах для
ps и т.п.
ISO 9660 Filesystem iso9660 Используется большинством CD-ROM
Xenix Filesystem xenix Для доступа к файлам из Xenix.
System V Filesystem sysv Для доступа к файлам из System V
вариант для x86.
Coherent Filesystem coherent Для доступа из Coherent
HPFS Filesystem hpfs Доступ только на чтение
для разделов HPFS (DoubleSpace).
Таблица 4.1. Типы Файловых систем Linux
Не все эти типы могут
быть доступны на вашей системе;
ваше ядро должно иметь
соответствующую откомпилированную
поддержку. О компиляции ядра
смотрите в Разделе 4.7.
Последнее поле файла fstab
(options) это было перед Таблицей 4.1
содержит опции монтирования,
обычно они устанавливаются в ``defaults
''.
Вы можете видеть, что
разделы своппинга также включены в /etc/fstab
.
Они имеют каталог монтирования
"tt/none/", и тип "swap
".
Команда swapon -a
выполняемая из
/etc/rc
используется для
обеспечения своппинга на все
устройства, перечисленные в /etc/fstab
.
Файл fstab
содержит
одну специальную запись для
файловой системы /proc
. Как
говорилось в Разделе 3.11.1, файловая
система /proc
используется для
хранения информации о системных
процессах, доступной памяти и т.п.
Если /proc
не примонтирован,
такие команды, как ps не будут
работать.
Внимание! Команда mount
может использоваться только root
.
Это для обеспечения безопасности
системы. Вам не захочется, чтобы
монтирование и размонтирование
файловых систем зависело от
прихоти рядовых пользователей.
Есть несколько программных
пакетов, которые дают возможность
тем самым рядовым пользователям
монтировать и размонтировать
файловые системы (особенно на
дискетах) не затрагивая
безопасности системы.
Команда mount -av
фактически монтирует все файловые
системы, кроме корневой файловой
системы (в ранее приведенной
таблице - /dev/hda2
). Корневая
файловая система автоматически
монтируется ядром во время
загрузки.
Вместо использования mount
-av
вы можете примонтировать
файловую систему вручную. Команда
# mount -t ext2 /dev/hda3 /usr
эквивалентна
монтированию файловой системы на /dev/hda3
в примере fstab
, рассмотренном
ранее.
Вам никогда не следует
монтировать и размонтировать
файловые системы вручную. Команда mount
-av
в /etc/rc
позаботится о
монтировании файловых систем во
время загрузки. Файловые системы
автоматически размонтируются
командами shutdown
или halt
перед выключением системы.
Бывает полезно почаще
проверять вашу файловую систему на
наличие поврежденных и испорченных
файлов. Некоторые системы
автоматически проверяют свои
файловые системы во время загрузки
(с помощью соответствующих команд
из /etc/rc
).
Для проверки файловых
систем используются команды,
зависящие от типа файловой системы.
Для файловой системы ext2fs
(самый широко используемый тип),
такой командой служит e2fsck
.
Например, команда
# e2fsck -av /dev/hda2
проверит файловую
систему ext2fs
на /dev/hda2
и
автоматически исправит ошибки.
Обычно бывает полезно
размонтировать файловую систему
перед
ее проверкой. Например
команда
# umount /dev/hda2
Размонтирует файловую
систему на /dev/hda2
, после чего
вы можете ее проверить. Есть одно
исключение, вы не можете
размонтировать корневую файловую
систему. Для того, чтобы проверить
размонтировнную корневую файловую
систему вам следует использовать
специальную boot/root дискету (смотрите
Раздел 4.11.1). Вы также не можете
размонтировать файловую систему,
если хотя бы один из ее файлов
"занят" (``busy''), т.е.
используется действующим
процессом. Например, вы не можете
размонтировать файловую систему,
если хотя бы один из текущих
рабочих каталогов пользователя
находится на этой файловой системе.
Вы получите сообщение ``Device busy
'',
если вы попытаетесь размонтировать
используемую файловую систему.
Другая файловая система
использует различные формы команды
e2fsck
, такие как efsck
и xfsck
.
На некоторых системах вы можете
просто использовать команду fsck
,
которая определит тип файловой
системы и выполнит соответствующую
команду.
Внимание!
Необходимо немедленно
перезагрузить операционную
систему после проверки
монтированной файловой системы,
если были внесены какие-то
изменения в файловую систему. (Хотя
в общем случае проверять
неразмонтированную файловую
систему). Например, если e2fsck
сообщает, что она исправила хотя бы
одну ошибку в файловой системе, вам
следует немедленно выполнить shutdown
-r
, чтобы перезагрузить систему.
Это позволить системе
"ресинхронизировать"
информацию о файловой системе,
после модификации ее с помощью e2fsck
.
(прим. переводчика: То есть сново
согласовать содержимое буферов
памяти с соответствующими
фрагментами файловой системы на
диске).
Файловая система /proc
никогда не нуждается в проверках
такого рода. /proc
- это
файловая система памяти,
управляемая непосредственно ядром.
Вместо того, чтобы
резервировать специальные разделы
для области своппинга, вы можете
использовать файл. Однако, чтобы
это сделать, вы должны
инсталлировать программы Linux и
предварительно сделать все, что
необходимо для создания файлов
своппинга.
Если у вас есть
инсталлированная система Linux, вы
можете использовать следующие
команды для создания файла
своппинга. Ниже мы собираемся
создать файл своппинга размером в
8208 блоков (около 8 Мбайт).
# dd if=/dev/zero of=/swap bs=1024 count=8208
Эта команда создает файл
своппинга. Замените ``count=
''
размером файла своппинга в блоках.
# mkswap /swap 8208
Эта команда
инициализирует swap
-файл;
вновь замените имя и размер
своп-файла соответствующими
значениями.
# /etc/sync
# swapon /swap
Теперь в своппинге будет
задействован файл /swap
,
который мы создали, после
синхронизации, которая
гарантирует, что файл был записан
на диск.
Главная неприятность,
связанная с использованием swap
-файлов,
состоит в том, что доступ к ним
происходит через файловую систему.
Это означает, что блоки,
составляющие swap-файл могут быть не
смежными на диске. То есть скорость
своппинга при использовании
swap-файла ниже, чем при
использовании swap-раздела, для
которой блоки всегда смежны
(последовательны) и запросы на
ввод/вывод происходят прямо к
устройству.
Другая проблема,
связанная с использованием swap
-файла,
это возможность испортить
информацию в файловой системе - при
использовании больших файлов
своппинга существует шанс, что вы
попортите систему, если что-то
происходит неправильно. Имея
раздел своппинга отдельно от
файловой системы вы страхуетесь от
таких неприятностей.
Использование файла
своппинга может быть очень
полезным, если у вас есть временная
потребность в дополнительном
пространстве для своппинга.
Например, если вы компилируете
большую программу и хотите
ускорить дело, вы можете временно
создать файл своппинга и
использовать его в дополнение к
имеющейся области своппинга.
Для того, чтобы
избавиться от файла своппинга,
вначале используйте swapoff
# swapoff /swap
А теперь вы можете смело
удалить файл.
# rm /swap
Помните, что каждый файл
своппинга (или раздел) может быть
размером до 16 Мбайт, но вы можете
использовать до 8 файлов своппинга
или разделов на своей системе.
Хотите верьте, хотите -
нет, но существует ряд
хозяйственных задач, входящих в
функции системного администратора,
которые не попадают ни в одну из
основных категорий.
При загрузке системы
некоторые сценарии автоматически
выполняются системой до входа в нее
пользователей. Далее следует
описание того, что в это
безвременье происходит. Во время
загрузки ядро запускает процесс /etc/init
.
init
- это программа, которая
читает свои настроечные файлы (/etc/inittab
)
и запускает другие процессы,
базирующиеся на содержании этих
файлов. Один из важных процессов
запускается из inittab
- это /etc/getty
, он стартует для каждой
виртуальной консоли. Процесс getty
захватывает ВК (Виртуальную
Консоль) и запускает на ней процесс login
.
Это позволяет вам входить на каждой
ВК. Если /etc/inittab
не содержит
процессов getty
для конкретной
ВК, на эту ВК вы не войдете.
Другой процесс,
выполняемый из /etc/inittab
- это /etc/rc
,
главный системный файл
инициализации (прим. переводчика:
или главный файл инициализации
системы - что тоже верно). Этот файл
представляет из себя shell-сценарий,
который выполняет любые
необходимые команды инициализации
во время загрузки, такие например,
как монтирование файловых систем
(смотрите Раздел 4.8) и инициализации
области своппинга.
Ваша система может
также выполнять и другие сценарии,
например /etc/rc.local
. /etc/rc.local
обычно содержит команды
инициализации, специфичные для
вашей системы, такие как установка
хост-имени (смотрите следующий
раздел ). rc.local
может
запускаться из /etc/rc
или
прямо из /etc/inittab
.
В сетевой среде хост-имя
используется для однозначной
идентификации конкретной машины, в
то время как отдельно стоящей
машине хост-имя придает чувство
собственного достоинства и шарма.
Это, как дать имя вашей собаке: вы
можете обращаться к собаке просто
``The dog'' (прим. переводчика: это
просто "собака" (с
определенным артиклем - поскольку
конкретная) , но значительно
интереснее приписать собаке имя,
вроде Spot или Woofie (или Шарик и Бобик).
Хост-имя элементарно
устанавливается командой hostname
.
Если вы в сети, ваше хост-имя должно
быть полным хост-именем вашей
машины, таким как goober.norelco.com
.
Если вы не в сети, вы можете выбрать
произвольные имена для хоста и
домена, например loomer.vpizza.com
, shoop.nowhere.edu
или floof.org
.
При установке
хост-имени оно должно быть занесено
в файл /etc/hosts
, который
приписывает IP адрес каждому хосту.
Даже если ваша машина не в сети, вам
следует включить ваше хост-имя в /etc/hosts
.
Например, если вы не имеете выхода в
сеть по TCP/IP и ваше хост-имя floof.org
,
просто включите следующую запись в /etc/hosts
:
127.0.0.1 floof.org localhost
Это припишет ваше
хост-имя floof.org
к локальному
IP-интерфейсу (loopback address) 127.0.0.1
(используемому, даже если вы не в
сети). Синоним localhost
также
приписывается этому адресу.
Если вы подключены к
сети по TCP/IP, ваши действительные IP
адрес и хост-имя должны появиться в /etc/hosts
.
Например, если ваше хост-имя goober.norelco.com
,
и ваш IP адрес 128.253.154.32, добавьте
следующую строку в /etc/hosts
:
128.253.154.32 goober.norelco.com
Если вашего хост-имени
не будет в /etc/hosts
, вы не
сможете его установить. Для
установки хост-имени просто
используйте команду hostname
.
Например, команда
# hostname -S goober.norelco.com
устанавливает хост-имя goober.norelco.com
.
Во многих случаях команда hostname
выполняется из из одного из
системных установочных файлов,
таких как /etc/rc
или /etc/rc.local
.
Отредактируйте эти два файла и
измените находящуюся там команду hostname
,
установив хост-имя своей машины;
после перезагрузки машины хост-имя
будет иметь новое значение.
В некоторых случаях
администратор системы будет
сталкиваться с проблемой
выкарабкивания из абсолютной
катастрофы, такой например, как
забытие пароля root
или крах
файловой системы. Лучший совет - без
паники! Все делают глупые ошибки
- это лучший способ освоить
системное администрирование, хотя
и патологический.
Linux не является
нестабильной (прим. переводчика:
так в оригинале) версией UNIX.
Действительно, у меня было
значительно меньше проблем с
зависанием системы, чем с
коммерческими версиями UNIX на
многих платформах. Linux также
выигрывает от большого
расположения к нему крутых
программистов, которые могут
помочь выпутаться из сложной
ситуации.
Первый шаг в
исследовании любой проблемы - это
попытаться справиться с ней
самостоятельно. Потыкайтесь
там-сям и посмотрите, что из этого
будет получаться. Слишком много
времени системные администраторы
тратят на рассылку во все стороны
отчаянных воплей о помощи, прежде,
чем вникнуть в проблему. В большем
числе случаев вы обнаружите, что вы
сами легко можете решить проблему.
А это уже ваш прямой путь в мэтры.
Очень редки случаи,
когда после краха системы
требуется переинсталляция. Многие
начинающие пользователи случайно
удаляют некоторые важные системные
файлы и немедленно бегут за
инсталляционным диском. Это не
"Боже мой"! Прежде чем
применять такие отвратительные
меры, исследуйте проблему и
попросите других помочь ее решить.
В большинстве случаев вы можете
восстановить систему с дискеты
сопровождения (maintenance diskette).
Одно незаменимое
средство для администратора
системы - это так называемый ``boot/root
disk'' - дискета, которая может
загрузить полный Linux, вне
зависимости от вашего жесткого
диска. Boot/root disks в действительности
очень прост - вы создаете корневую
файловую систему на дискете,
помещая на нее все необходимые
утилиты, инсталлируя на дискете LILO
и загружаемое ядро. Другой способ,
это использовать одну дискету для
ядра и другую для корневой файловой
системы. В любом случае результат
одинаков: Вы запускаете Linux
полностью с дискет.
Канонический пример
boot/root disk - это загрузочный диск
Slackware. (Смотрите Раздел 2.1.1
относительно информации по
перекачке его по Internet. Для этого вам
не надо скачивать полностью -
только boot
и root
дискеты). Эти дискеты содержат
загрузочную таблицу и корневую
файловую систему. Предполагается,
что они используются при
инсталляции дистрибутивов Slackware, но
бывают очень полезны для
сопровождения системы.
boot/root disk, созданный H.J Lu,
который можно взять в /pub/Linux/GCC/rootdisk
на sunsite.unc.edu
- другой пример
такого рода диска сопровождения.
Или, если вы достаточно
амбициозны, можете создать свой.
Хотя, в большинстве случаев,
использовать готовый boot/root disk -
значительно легче и надежнее.
Использовать boot/root disk
очень легко. Просто загрузите диск
на вашей системе и войдите под root
(обычно без пароля). Чтобы получить
доступ к файлам вашего жесткого
диска, необходимо примонтировать
ваши файловые системы вручную.
Например, команда
# mount -t ext2 /dev/hda2 /mnt
примонтирует файловую
систему ext2fs на /dev/hda2
под /mnt
.
Помните, что /
теперь
находится на boot/root disk; вам
необходимо примонтировать
файловую систему вашего жесткого
диска под каким-то каталогом, чтобы
получить доступ к файлам. Так что /etc/passwd
вашего жесткого диска теперь в /mnt/etc/passwd
,
если вы примонтировали вашу
корневую файловую систему на /mnt
.
Если вы забыли пароль
вашего root
- нет проблем.
Просто загрузитесь с boot/root disk,
примонтируйте вашу корневую
файловую систему под /mnt
и
сотрите поле пароля для root
в /mnt/etc/passwd
,
как например:
root::0:0:root:/:/bin/sh
Теперь root
без
пароля; когда вы перезагрузитесь с
жесткого диска, вы сможете войти
как root
и снова установить
пароль, используя команду passwd
.
Не правда ли, вы счастливы, что
научились работать с vi
? На
вашей boot/root disk, редакторов, вроде Emacs
наверняка нет, а vi
должен
быть. (прим. переводчика:
администратор должен отдавать себе
отчет, что процедуру снятия пароля
root умеет запросто выполнять не он
один).
Если у вас каким-то
образом грохнулась файловая
система, вы можете использовать e2fsck
(это в случае, если вы используете
файловую систему типа ext2fs) для
исправления попорченых данных
файловой системы с дискет. Другие
файловые системы используют другие
формы команды fsck
; детали
смотрите в Разделе 4.8.
Когда вы проверяете
вашу файловую систему с дискеты,
лучше всего, чтобы файловая система
не была примонтирована.
Частая причина
неисправности файловой системы -
порча суперблока. Суперблок, это
"голова" (``header')'файловой
системы, которая содержит
информацию о статусе файловой
системы, размере, свободных блоках
и т.д. Если вы попортили ваш
суперблок (например, случайно прямо
в него записали какие-то данные)
операционная система может вообще
не распознать файловую систему. Все
попытки примонтировать файловую
систему потерпят неудачу, и e2fsck
не поможет решить проблему.
К счастью, файловая
система типа ext2fs сохраняет копии
суперблока в границах "группы
блоков" (``block group'') на диске,
обычно через каждые 8K блоков. Для
того, чтобы приказать e2fsck
использовать копию суперблока, вы
можете использовать команду
# e2fsck -b 8193 <partition>
где <partition>
-
это раздел, на которой
располагается файловая система.
Опция -b 8193
приказывает e2fsck
использовать копию суперблока,
хранящуюся в блоке 8193 файловой
системы.
Если вы случайно
удалили важные файлы, нет способа
их "разудалить" обратно.
Однако, вы можете скопировать
соответствующие файлы с дискеты
себе на жесткий диск. Например, если
вы удалите /bin/login
в своей
системе (который обеспечивает вход
в систему), просто загрузите boot/root
дискету, примонтируйте корневую
файловую систему на /mnt
и
используйте команду
# cp -a /bin/login /mnt/bin/login
Опция -a
приказывает cp
сохранить
права доступа копируемых файлов.
Разумеется, если удаленные файлы не
столь существенны, что они не были
удостоены копирования на дискету
boot/root floppy, значит вам не повезло.
Если вы создавали резервные копии,
вы можете скопировать файлы оттуда.
Если вы случайно
потеряли свои библиотеки или
символические связи в /lib
,
скорее всего команды, которые
зависят от этих библиотек, больше
не будут выполняться (смотрите
Раздел 4.7.2). Простейшее решение -
загрузиться с дискеты boot/root,
примонтировать вашу корневую
файловую систему и восстановить
библиотеки в /mnt/lib
.
Предыдущая
глава | Содержание |
Следующая глава