Однопользовательский режим
Команда shutdown может также использоваться для перевода системы в однопользовательский режим, в котором к системе никто не может подключится кроме пользователя root, который использует для работы главную консоль. Это иногда применяется для административных целей, для выполнения которых не может быть использована нормально работающая система.
Основные сервисы в UNIX системе
В этой главе дается обзор операционной системы Linux. Прежде всего рассматриваются основные функции системы. Затем следует описание программ, реализующих эти функции. Цель главы дать понимание системы в целом, поэтому каждый раздел рассматривается более подробно позже.
Печать
Вы не поверите, но система UNIX первоначально разрабатывалась именно для управления печатным комплексом, невиданных доселе размеров. Так что печатать она должна уметь. Увы, уж что-что, а вот печатать-то она толком и не умеет...
В один момент времени принтером может пользоваться только один пользователь. Поэтому для того, чтобы принтером могли пользоваться сразу несколько пользователей, используется специальная программа, которая обеспечивает обслуживание очереди к принтеру. Все задания для принтера помещаются в буфеp. Когда принтер заканчивает обработку одного задания, следуещее передается к нему автоматически. Это значительно упрощает работу с принтером.
Программа обслуживания очереди к принтеру (также spools) помещает информацию, которая должна быть распечатана, на диск, то есть текст располагается на диске, в то время как задание находится в очереди. Это позволяет прикладным программам достаточно быстро распечатывать тексты, помещая их в очередь, так как для продолжения работы приложению не требуется дожидаться окончания распечатки.
Перезагрузка
Процесс перезагрузки может быть достигнут путем прекращения работы системы, выключения питания и включения снова. Более простой способ указать команде shutdown перезагрузить систему установив опцию -r. Например, для этого можно использовать команду shutdown -r now. Также можно использовать команду reboot.
Многие (но не все!) Linux-системы выполняют команду shutdown -r now при нажатии на клавиатуре клавиш ctrl-alt-del, которы епредназначены для перезагрузки системы. В Linux действие комбинации ctrl-alt-del поддается настройке. Неплохо бы также предусмотреть некоторую задержку перед перезагрузкой на многопользовательской машине. Системы, которые являются физически доступными для всех, могут быть сконфигурированы даже так, чтобы не делать ничего, когда ctrl-alt-del нажат.
Периодическое выполнение команд:cron и at
Как отдельным пользователям, так и системному администратору иногда требуется периодически запускать определенные команды. Например, системному администратору может потребоваться периодически запускать команду для очистки каталогов от временных файлов (/tmp и /var/tmp), для предотвращения переполнения диска.
Для этого используется сервис cron. У каждого пользователя имеется файл crontab, в котором содержится список команд, представленных к выполнению и количество раз, которое они должны быть выполнены. Программа-демон crond обеспечивает своевременное выполнение указанных команд.
Сервис at аналогична cron, но команда запускается один раз в указанное время и запуск больше не повторяется.
Почему часы идут неправильно
Программные часы Linux не всегда точны. Они управляются периодическим прерыванием таймера (timer interrupt), сгенерированным аппаратными средствами PC. Если система имеет слишком много процессов, обработка прерывания от таймера может быть слишком длинной, и программные часы начинают отставать. Аппаратные часы работают независимо и обычно более точны. Если Вы загружаете ваш компьютер часто (как имеет место для большинства систем, которые не являются серверами), программные часы обычно будут хранить довольно точное время.
Если Вы должны корректировать аппаратные часы, обычно проще всего перезагрузиться, войти в экран установки BIOS и сделать все оттуда. Это позволит избежать тех проблем, которые могло бы вызывать изменяющееся системное время. При выполнении корректировки не через BIOS, установите новые значения даты и времени (в таком порядке) командами date и clock, но будьте готовы перезагрузиться, если некоторая часть системы начнет действовать неадекватно.
Подключенный к сети компьютер (даже если только через модемом) может проверять собственные часы автоматически, сравнивая их со временем некоторого другого компьютера. Если другой компьютер хранит очень точное время, то оба компьютера будут хранить точное время. Это может быть выполнено, используя команды rdate и netdate. Обе проверяют время удаленного компьютера (netdate может обрабатывать несколько удаленных компьютеров), и соответственно устанавливают время локального компьютера. Используя эти команды регулярно, ваш компьютер будет хранить точное время.
Почта
Электронная почта является самым важным средством связи между компьютерами. Электронные письма хранятся в одном файле в специальном формате. Для чтения и отправления писем применяются специальные программы.
У каждого пользователя имеется отдельный почтовый ящик (файл, где информация хранится в специальном формате), в котром хранится приходящая почта. Если на комьютер приходит письмо, то программа обработки почты находит файл почтового ящика соответвующего пользователя и добавляет туда полученное письмо. Если же почтовый ящик пользователя находится на другом компьютере, то письмо перенаправляется на этот компьютер, где проходит его последующая обработка.
Почтовая система состоит из множества различных программ. Доставка писем к локальным или удаленным почтовым ящикам производится одной программой агентом передачи почты (mail transfer agent или MTA) (например, sendmail или smail), в то время как для обычной отправки или просмотра писем применяется большое количетсво различных программ пользовательских почтовых клиентов (mail user agent или MUA) (например, Pine или elm). Файлы почтовых ящиков обычно хранятся в каталоге /var/spool/mail.
Подробнее о процессе начальной загрузки
Linux может быть запущена как с дискет, так и с жесткого диска. В книге "Установка и запуск Linux" (Installation and Getting Started guide) подробно описан запуск системы.
При включении компьютера, сначала BIOS производит тестирование оборудования, а затем запуск операционной системы. Сначала выбирается устройство, с которого будет производится запуск (обычно первый дисковод, если в него вставлена дискета, в противном случае - первый жесткий диск, если он установлен, хотя порядок выбора может быть настроен) и считывается самый первый сектор, который называется загрузочным. На жестких дисках он также называется MBR (Master Boot Record), так как у жесткого диска может быть несколько разделов и у кажодого может быть свой загрузочный сектор.
В загрузочном секторе находится небольшая программа (относительно небольшая чтобы она могла разместится в одном секторе), которая загружает и запускает операционную систему. При загрузке с дискеты, в загрузочном секторе находится код, который обеспечивает только считывание ядра системы в определенную заранее область памяти. Загрузочная дискета для Linux не содержит никаких файловых систем. Ядро записано на дискете как последовательность блоков, так как это значительно упрощает процесс загрузки. Однако, вполне можно загружаться с дискеты, на которой установлена какая-нибудь файловая система, используя загpузчик LILO (LInux LOader). Для систем на машинах Sun LILO называется SILO, и вот как перевести это я уже не знаю...
При загрузке с жесткого диска, код, расположенный в MBR, проверяет таблицу разделов (также расположенную в MBR), определяет активный раздел (раздел, используемый при загрузке), считывает загрузочный сектор этого раздела и запускает считанный код. Код, расположенный в загрузочном секторе активного раздела жесткого диска, выполняет те же функции, что и код, находящийся в загрузочном секторе дискеты: он считывает ядро из выбранного раздела, а затем запускает его. Однако здесь существует много тонкостей, так как использование отдельного раздела диска только для хранения кода ядра неэффективно, поэтому код, расположенный в загрузочном секторе раздела, не просто последовательно считывает информацию с диска, а использует считывание по секторам. Существует несколько способов решения этой проблемы, но наиболее простым из них является использование LILO загрузчика (информацию по установке и настройке LILO см. в документации по LILO).
При загрузке с использованием LILO обычно сразу же загружается и запускается ядро, заданное по умолчанию, однако можно сконфигурировать LILO так, чтобы можно было бы загрузить одно из нескольких возможных ядер или даже другую операционную систему (в добавление к Linux). Также можно указать требуемое ядро или операционную сиситему во время загрузки. При нажатии клавиши ALT, SHIFT или CTRL (после загрузки LILO) будет выдан запрос, где можно указать ядро или систему. Однако при конфигурировании можно установить опцию, при которой LILO будет всегда выдвать такой запрос, а также указать время, по истечении которого загружается ядро, установленное по умолчанию.
Существуют и другие загрузчики, подобные LILO, однако у него есть несколько полезных функций, которых нет в других загрузчиках, так как он был написан специально для Linux. Например, имеется возможность передачи ядру параметров во время загрузки или изменения некоторых опций, встроенных в ядро. Среди подобных загрузчиков (loadlin, bootlin, bootactv и др.) LILO является пожалуй наилучшим выбором.
Загрузка системы как с жесткого диска, так и с дискет имеет свои преимущества, хотя загрузка с жесткого диска считается лучше и быстрее, так как она позволяет избежать неудобства, связанные со сменой дискет. Однако в некоторых случаях загрузка с дискет более удобна. Например, при установке системы или при повреждении файловой системы.
После того, как ядро системы загружено в память (с жесткого диска или с дискет) и запущено, выполняются приблизительно следующие действия:
Так как ядро Linux может быть установлено в запакованном виде, то прежде всего оно само себя распаковывает. Это выполняет небольшая программа, расположенная в самом начале кода.
Если на компьютере установлена видеоплата SVGA, поддерживающая нестандартные текстовые режимы (такие как 100x40), выдается запрос для указания требуемого режима. При компиляции ядра можно сразу указать используемый режим, чтобы он не запрашивался системой во время загрузки. Режим также может быть установлен при помощи LILO или rdev.
Затем ядро тестирует аппаратное обеспечение (жесткие диски, дисководы, сетевые адаптеры и др.) и конфигурирует соответствующие драйверы устройств. Во время этого процесса на экран выдаются подсказывающие сообщения. Вот примерно то, что происходит во время загрузки: LILO boot: Loading linux. Console: colour EGA+ 80x25, 8 virtual consoles Serial driver version 3.94 with no serial options enabled tty00 at 0x03f8 (irq = 4) is a 16450 tty01 at 0x02f8 (irq = 3) is a 16450 lp_init: lp1 exists (0), using polling driver Memory: 7332k/8192k available (300k kernel code, 384k reserved, 176k data) Floppy drive(s): fd0 is 1.44M, fd1 is 1.2M Loopback device init Warning WD8013 board not found at i/o = 280. Math coprocessor using irq13 error reporting. Partition check: hda: hda1 hda2 hda3 VFS: Mounted root (ext filesystem). Linux version 0.99.pl9-1 (root@haven) 05/01/93 14:12:20 Хотя текст сообщений довольно сильно различается на разных системах и зависит от аппаратного обеспечения, версии Linux и конфигурации.
После этого, ядро пытается смонтиpовать файловую систему root. Место, куда она будет смонтирована, устанавливается во время компиляции или с помощью rdev или LILO. Тип файловой системы определяется автоматически. Если система root не монтиpуется, например по причине того, что ядро не содержит драйвер соответствующей файловой системы, то система зависает.
Файловая система root обычно монтиpуется в режиме read-only (это устанавливается таким же образом как и узел монтиpования). Это делает возможным проверку файловой системы в то время как она смонтиpована, хотя проверка файловой системы, установленной в режиме read-write не рекомедуется.
Затем ядро запускает программу init в фоновом режиме (она расположена в /sbin/init) которая становится главным процессом. init выполняет различные функции, требуемые при установке системы. Подробности в . Также запускаются фоновые процессы-демоны.
init запускает программу getty для виртуальных консолей и последовательных линий. Эта программа позволяет подключаться к системе посредством виртуальных консолей и терминалов, подключенных через последовательные порты. init может быть сконфигурирована также для запуска и других программ.
После этого процесс запуска системы считается завершенным и система готова к работе.
Поиск дисковых ошибок (бадов) командой badblocks
Периодически следует проводить поиск плохих блоков при помощи команды badblocks. При ее выполнении выводится список номеров найденных плохих блоков. Этот список может быть использован программой fsck для внесения изменений в структуру файловой системы во избежание использования этих блоков для хранения информации. В следующем примере показано как это сделать. $ badblocks /dev/fd0H1440 1440 > bad-blocks $ fsck -t ext2 -l bad-blocks /dev/fd0H1440 Parallelizing fsck version 0.5a (5-Apr-94) e2fsck 0.5a, 5-Apr-94 for EXT2 FS 0.5, 94/03/10 Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Check reference counts. Pass 5: Checking group summary information. /dev/fd0H1440: ***** FILE SYSTEM WAS MODIFIED ***** /dev/fd0H1440: 11/360 files, 63/1440 blocks $ Если badblocks сообщает, что блок который уже использовался плохой, e2fsck пробует переместить блок в другое место. В ряде случаев содержимое файла может быть повреждено, хотя обычно перемещение проходит вполне успешно.
и ядро по их функциональности.
[1] | Часто путают операционную систему и ядро по их функциональности. Должен заметить, что операционная система предоставляет существенно больше сервисов, чем само ядро. |
Примечания
[1] | Пятая причина резервирования: "что-нибудь еще". |
[2] | Не смейтесь. Такое было с несколькими системными администраторами. |
Примеры распределения жесткого диска
На рассматриваемом компьютере был установлен диск объемом 109 Мб. Сейчас на нем используется диск объемом 330 Мб. Ниже рассматривается как и почему эти диски были разбиты.
Первый диск (109 Мб) был разбит следующим образом. На компьютере были установлены системы MS-DOS и Linux. При этом, для DOS использовался раздел объемом 20 Мб, 10-ти Мб раздел был предназначен для swap-области и оставшиеся 79 Мб были отданы под отдельный раздел, где хранились все файлы, необходимые для работы Linux. Проводились опыты по различному размещению разделов для root, /usr и /home, но создание одного раздела было признано наиболее оптимальным.
Другой диск размером 330 Мб был разбит следующим образом:
5 MB | Файловая система root |
10 MB | Место для свопа |
180 MB | /usr |
120 MB | /home |
15 MB | Дополнительный раздел |
Дополнительный раздел используется для различных опытов: сравнения разных дистрибутивов Linux или скорости разных файловых систем. Когда такие опыты не проводятся, раздел используется под своп.
Процесс init запускается первым
init является одной из тех программ, которые абсолютно необходимы для системы Linux, но это Вы обычно можете игнорировать. Хороший дистрибутив Linux поставляется с настройками для init, которые подходят для большинства систем. В таком случае Вам не придется что-либо настраивать самому. Вам придется заниматься настройкой init если Вы используете последовательные терминалы (хотя сейчас ими уже никто не пользуется), dial-in (не dial-out) модемы, или меняете настройки уровней выполнения, что вообще-то нужно редко.
Когда ядро запущено (загружено в память, получило управление и инициализировало все драйверы устройств и структуры), оно запускает программу уровня пользователя. Первой такой программой всегда является именно init. Таким образом, init всегда является первым процессом (номер процесса всегда 1).
Ядро ищет init в нескольких местах, в которых он располагается по традиции. В Linux обычно используется имя /sbin/init. Если ядро не нашло init, оно пробует запустить /bin/sh. Если и тут происходит неудача, система выдает ошибку и останавливается.
Когда init запущен, он завершает процесс загрузки системы и выполняет ряд административных задач, таких как проверка файловых систем, очистка каталога /tmp, запуск различных сервисов и запуск процесса getty для каждого терминала и виртуальной консоли откуда пользователи могут входить в систему (см. о регистрации пользователей и входе в систему).
После нормального запуска системы init перезапускает getty для каждого терминала после того, как пользователь завершил работу с системой (чтобы следующий пользователь мог зарегистрироваться в системе). init также перехватывает ничейные процессы: когда процесс запускает порожденный процесс и завершает работу до своего потомка, его потомок немедленно становится порожденным из init. Это важно по различным техническим причинам. Вам следует знать это чтобы понять списки процессов и графы дерева процессов. Имеется несколько вариантов init. Большинство дистрибутивов Linux используют sysvinit (написал Miquel van Smoorenburg), который основан на System V init. BSD версии Unix имеют отличия в процессе init . Главным различием являются уровни выполнения: System V имеет их, а BSD нет (по крайней мере, обычно). Мы будем рассматривать только sysvinit.
Простое резервирование
Простая схема резервирования состоит в том, чтобы все сохранить однажды, а затем резервировать все что изменилось, начиная с предыдущей копии. Первая копия называется полной (full backup), последующие инкрементными (incremental backups). Полная копия часто не помещается целиком на ленту (или дискету). Восстановление из инкрементных копий может потребовать во много раз большего количество работы, чем из полного. Восстановление может быть оптимизировано так, чтобы Вы всегда резервировали все, начиная с предыдущей полной копии; этот путь требует немного больше работы, но никогда не будет потребности восстановить больше, чем полную и одну инкрементную копию.
Если Вы хотите делать копии ежедневно и иметь шесть лент, Вы могли бы использовать ленту 1 для первой полной копии (скажем, в пятницу) и ленты со 2 по 5 для инкрементных копий (понедельник-четверг). Затем Вы делаете новую полную копию на ленте 6 (вторая пятница), и снова начинаете делать инкрементные копии на лентах 2-5. Вы не хотите перезаписывать ленту 1, пока вы не имеете новую полную копию, чтобы ничего страшного не произошло в то время, пока вы делаете новую полную копию. После того, как вы сделали полную копию на ленте 6, Вы можете хранить ленту 1 где-нибудь еще на случай разрушения ваших других резервных лент. Когда Вы должны сделать следующую полную копию, Вы выбираете и используете ленту 1.
Если Вы имеете больше чем шесть лент, Вы можете использовать дополнительное место для полных копий. Каждый раз, когда Вы делаете полную копию, Вы используете самую старую ленту. Этим путем Вы можете иметь полные копии за несколько предыдущих недель, что хорошо, если Вы хотите найти старый, теперь удаленный файл, или старую версию файла.
Проверка целостности с применением fsck
Файловые системы это достаточно сложные объекты, поэтому иногда их функционирование нарушается. Для проверки целостности и работоспособности файловой системы используется команда fsck. Наиболее часто возникающие тpудности связаны с перебоями в питании, неполадках в оборудовании или ошибках оператора (например, некорректное выключение системы).
Большинство систем сконфигурировано таким образом, что команда fsck запускается автоматически при загрузке системы, поэтому возможные неполадки будут обнаружены (и, возможно, исправлены) перед тем, как система будет использоваться. Работа с поврежденной файловой системой может привести к потерям данных и другим нарушениям ее функционирования. Однако, если файловая система довольно большая по объему, то ее проверка может занять некоторое время, а так как неполадки случаются очень редко, то если система была выключена корректно, пpименяются определенные методы для избежания проверки файловой системы. Первый из них связан с тем, что если существует файл /etc/fastboot, то никаких проверок не производится. Второй метод заключается в том, что в файловой системе ext2 существует специальный флаг, раположенный в суперблоке, который используется для выявления коppектности демонтирования системы пpи последнем выключении системы. Эта возможность используется в программе e2fsck (версия команды fsck для файловой системы ext2fs) для избежания излишней проверки файловой системы, если флаг ее целостности установлен (то есть система была коppектно демонтирована). Фунционирование метода, используещего файл /etc/fastboot, зависит от файлов, запускаемых при загрузке системы, в то время как применение команды e2fsck работает в любом случае (см. man-руководство по e2fsck для более подробной информации о такой проверке).
Автоматическая проверка используется только для файловых систем, устанавливаемых во время загрузки. Для проверки других систем команда fsck должна выполняться отдельно.
Если fsck находит неисправность, не подлежащую восстановлению, то могут потребоваться глубокие знания и понимание работы файловых систем и их типов. Также могут потребоваться резервные копии. Некоторую информацию по тем или иным вопросам можно найти через телеконференции, связанные с системой Linux. Также может потpебоваться программа debugfs, созданная Theodore T. Впрочем, как показывает практика, такое бывает редко.
Команда fsck должна использоваться только для демонтированных систем (за исключением системы root, смонтированной в режиме read-only во время загрузки), так как при ее работе используется прямой доступ к диску и информация о внесении каких-либо изменений в файловую систему может быть недоступна операционной системе, что, обычно, приводит к нарушению ее работы.
Распределение места для свопа
Иногда под своп выделяют объем вдвое больший, чем физическая память. Не всегда такой подход правилен. Далее описано, как пpавильно выделить место под своп:
Следует оценить общие тpебования к памяти. Это наибольший объем памяти, котоpый может потpебоваться в отдельный момент вpемени, то есть суммаpные затpаты памяти для всех пpогpамм, котоpые могут быть одновpеменно запущены.
Напpимеp, если установлена система X, то следует pазместить около 8 Мб swap области; gcc необходимо еще несколько мегабайт (некотоpым файлам тpебуется очень много памяти, вплоть до нескольких десятков мегабайт, хотя обычно хватает четыpех мегабайт) и т.д. Ядpо само по себе использует около мегабайта и обычные оболочки вместе с дpугими небольшими утилитами могут потpебовать несколько сотен килобайт (можно посчитать, что около мегабайта). Не следует пытаться вычислять точный объем, вполне подойдет гpубая оценка.
Если в системе одновpеменно pаботает несколько пользователей, то могут возникнуть дополнительные затpаты памяти. Однако, если два пользователя запускают одну пpогpамму в одно и то же вpемя, то общие затpаты памяти обычно не удваиваются, так как код пpогpаммы и pаспpеделенные библиотеки не дублиpуются. Команды free и ps могут пpигодиться для вычисления тpебований к памяти.
Для повышения надежности вычислений, пpоделанных в пpедыдущем пункте (оценка pазмеpов пpогpамм может быть ошибочной, потому как обычно упускают из вида некотоpые нужные пpогpаммы), нужно удостовеpится в наличии дополнительного пpостpанства. Для этого можно добавить еще паpу мегабайт. Лучше pазместить слишком много, чем слишком мало места для swap области, но нет необходимости в пpеувеличении и pазмещении всего диска под swap область, так как неиспользуемое пpостpанство пpиводит к потеpе дискового объема и эффективности pазмещения. См. далее об увеличении swap области. Также полученное значение можно окpуглить в большую стоpону до следующего мегабайта.
Опиpаясь на вычисления, пpоведенные в пpедыдущих пунктах, можно сказать, сколько всего потpебуется памяти. Для pазмещения swap области следует вычесть pазмеp физческой памяти из полученного объема тpебуемой памяти. Полученный pезультат и будет тpебуемый pазмеp swap области. В некотоpых веpсиях UNIX также тpебуется pазмещать и физическую память, поэтому значение, полученное во втоpом пункте, является конечным и вычитание пpоизводить не нужно.
Если полученный объем swap области намного больше, чем объем физической памяти (в несколько pаз), то, скоpее всего, следует увеличить ее pазмеp, иначе пpоизводительность будет слишком низкой.
Хорошая идея иметь по крайней мере немного места для свопа, даже если Ваши вычисления указывают, что Вы не нуждаетесь в нем. Linux использует имеющийся своп так, чтобы как можно больше физической памяти могло сохраняться свободной.
Своп может быть разделен среди нескольких дисков. Это может иногда улучшать эффективность, в зависимости от относительных скоростей дисков и частоте доступа к дискам. Вы можете поэкспериментировать с несколькими схемами, но знайте, что выполнение экспериментов правильно не так-то просто. Вы не должны верить утверждениям, что одна схема превосходит другую, так как это не будет всегда истинно. В общем, смотрите, пробуйте, что лучше для Вашей конкретной системы.
Расширенные и логические разделы
Изначально, в схеме разделения жесткого диска в PC допускалось использование только четырех разделов. Но вскоре этого оказалось недостаточно, частично по причине того, что многим для работы требуется более четырех операционных систем (например, Linux, MS-DOS, OS/2, Minix, FreeBSD, NetBSD, Windows/NT и т.д.), но в основном из-за того, что одной системой используется несколько разделов. Например, в системе Linux swap-область чаще всего размещается в отдельном разделе (а не в основном разделе Linux) для повышения скорости обмена (см. ниже).
Для решения этой проблемы была разработана схема, использующая расширенные разделы (extended partitions). Она позволяет разбивать основной раздел (primary partition) на подразделы. Основной раздел, разбитый таким образом, называется расширенным разделом (extended partition), а подразделы называются логическими разделами (logical partitions). Они функционируют так же, как и основные разделы, различие состоит в схеме их создания.
Ниже дан пpимеp pазбиения жеского диска на pазделы. Весь диск разбит на три основных раздела, второй из которых разбит на два логических. Часть диска не используется вообще. Весь диск, как целое, и каждый основной раздел имеют свой загрузочный сектор. иммммммммммммммммммммммммммммммммммммммй п MBR п лммммммммммммммммммммммммммммммммммммммоддддддддддддд п Загрузочный сектор п п--------------------------------------п Основной п п п Область данных раздела п раздел п п лммммммммммммммммммммммммммммммммммммммоддддддддддддд п Загрузочный сектор п П пддддддддддддддддддддддддддддддддддддддп П п Неиспользуемый загрузочный сектор п ЛогическийП п--------------------------------------п П п п раздел П п Область данных раздела п П п п П Расширенный пддддддддддддддддддддддддддддддддддддддпдддддддддддT п Неиспользуемый загрузочный сектор п П раздел п--------------------------------------п ЛогическийП п п П п Область данных раздела п раздел П п п П лммммммммммммммммммммммммммммммммммммммоддддддддддддд п п п Неиспользуемое дисковое пространство п п п лммммммммммммммммммммммммммммммммммммммоддддддддддддд п Загрузочный сектор п п--------------------------------------п Основной п п п Область данных раздела п раздел п п хммммммммммммммммммммммммммммммммммммммьддддддддддддд
Разделение свопа с другими операционными системами
Виpтуальная память используется во многих опеpационных системах. Так как она тpебуется только тогда, когда система в pаботе (то есть она не может быть использована несколькими системами одновpеменно), то все swap области, кpоме используемой в настоящий момент, зpя занимают дисковое пpостpанство. Более эффективным является pазделение одной swap области между несколькими опеpационными системами. Это вполне возможно, но может потpебовать взлома системы. Tips-HOWTO содеpжит полезную инфоpмацию по этому вопpосу.
Разделение жесткого диска на разделы
Существует много программ, позволяющих создавать и удалять разделы. У большинства операционных систем имеются свои собственные и разумнее всего пользоваться именно такими программами. Чаще всего эта программа называется fdisk (как и в случае Linux). Особенности работы с ней рассмотрены в ее руководстве. Команда cfdisk подобна fdisk, только в первой используется полноэкранный интерфейс.
При pаботе с IDE дисками, загрузочный раздел (раздел, в котором находятся файлы, используемые при загрузке и само ядро) должен полностью располагаться в пределах первых 1024 цилиндров, потому как во время загрузки работа с диском происходит через BIOS (перед переходом системы в защищенный режим), а BIOS не может оперировать с цилиндрами, номер которых больше, чем 1024. Иногда представляется возможным использование загрузочного раздела, лишь частично расположенного в пределах первых 1024 цилиндров. Данный метод работает до тех пор, пока все файлы, считываемые посредством BIOS, находятся в пределах 1024 цилиндров. Так как это сделать довольно сложно, то пpименение этого метода не рекомедуется. Сложно предугадать, когда после дефрагментации или сбрасывании содержимого буфера на диск система перестанет загружаться. Поэтому следует удостовериться в том, что загрузочный раздел расположен в пределах первых 1024 цилиндров.
Некоторые последние версии BIOS и недавние модели IDE дисков в действительности позволяют pаботать с цилиндрами, номер которых превышает 1024.
Каждый раздел должен содержать четное количество секторов, так как в системе Linux используются блоки размером в 1 Кб, т.е. два сектора. Нечетное количество секторов приведет к тому, что последний из них будет неиспользован. Это ни на что не влияет, но пpи запуске fdisk будет выдано пpедупpеждение.
При изменении размера раздела обычно требуется сначала сделать резервную копию всей необходимой информации, удалить раздел, создать новый раздел, а затем восстановить всю сохраненную информацию на новый раздел. Хотя существует программа для MS-DOS под названием fips, которая позволяет изменять объем раздела без резервного копирования, но для других файловых систем эту опеpацию необходимо пpоизводить.
Разделы
Весь жесткий диск может быть разбит на несколько разделов (partitions), причем каждый раздел представлен так, как если бы это был отдельный диск. Разделение используется, например, при работе с двумя операционныи системами на одном диске. При этом каждая операционная система использует для работы отдельный раздел и не взаимодействует с другими. Таким образом, две различные системы могут быть установлены на одном жестком диске. Без использования разделов в данном случае возникла бы необходимость в приобритении второго диска.
Для гибких дисков разделы не предусмотрены. В большинстве случаев для этого нет необходимости, так как их объем достаточно мал. CD-ROM'ы также не поддерживают разделы, поскольку они создавались для использования в качестве одного диска большой емкости.
Различные части операционной системы
ОС UNIXсостоит из ядра и множества системных программ. Также имеются пользовательские программы или приложения. Ядро является основой операционной системы [1]. Оно размещает файлы на диске, запускает программы и переключает процессор и другое оборудование между ними для обеспечения мультизадачности, распределяет память и другие ресурсы между процессами, обеспечивает обмен пакетами в сети и т.п. Ядро само по себе выполняет только маленькую часть общей работы, но оно предоставляет средства, обеспечивающие выполнение основных функций. Оно также предотвращает использование прямого доступа к аппаратным средствам предоставляя специальные средства для обращения к периферии. Таким образом ядро позволяет контролировать использовние аппаратных средств различными процессами и обеспечивать некоторую защиту пользователей друг от друга. Средства, предоставляемые ядром, используются через системные вызовы (см. раздел 2 man-руководства для более подробной информации по этому вопросу).
Системные программы используют средства, предоставляемые ядром для обеспечения выполнения различных функций операционной системы. Системные и все остальные программы выполняются 'на поверхности ядра', в так называемом пользовательском режиме. Существует некотоpая разница между системными и прикладными программами. Прикладные программы предназначены для выполнения какой-либо определенной задачи, в то время как системные программы используются для поддержания работы системы. Текстовый процессор является прикладной программой, а программа telnet системной, хотя зачастую граница между ними довольно смутная.
Довольно часто операционная система содержит компиляторы и соответствующие им библиотеки (GCC и C библиотеки для Linux), хотя не обязательно все языки программирования должны быть частью операционной системы. Документация, а иногда даже игры, могут являться ее частью. Обычно состав операционной системы определяется содержимым установочного диска или ленты, хотя дело обстоит несколько сложнее, так как различные части операционной системы разбросаны по разным FTP серверам во всем мире.
Различные файловые системы
Linux поддерживает несколько типов файловых систем. Наиболее важные из них рассмотрены ниже. minix
Считается самой старой и самой надежной файловой системой, но достаточно ограниченной в своих возможностях (у файлов отсутствуют некоторые временные параметры, длина имени файла ограничена 30-ю символами) и доступных объемах (максимум 64 Мб на одну файловую систему).
xia
Модифицированная версия системы minix, в которой увеличена максимальная длина имени файла и размер файловой системы, хотя она не pеализует никаких новых возможностей.
ext2
Наиболее богатая функциональными возможностями файловая система из семейства совместимых с Linux. На данный момент считается самой популярной системой. Она разработана с учетом совместимости с последующими версиями, поэтому для установки новой версии кода системы не требуется устанавливать ее заново.
ext
Предыдущая версия системы ext2, не совместима с последующими версиями. В настоящее время она очень редко включается в пакеты новых поставляемых систем, т.к. большинство пользователей сейчас пользуются системой ext2. В принципе уже есть и ext3, но она пока находится только в стадии бета-ьестирования.
В дополнение к рассмотренным выше, в Linux включена поддержка еще некоторых файловых систем для обеспечения обмена файлами между другими операционными системами. Эти файловые системы работают также, как и описанные выше, кроме того, что их функциональные возможности могут быть значительно ограничены по сравнению с возможностями, обычно предоставляемыми файловыми системами UNIX. msdos
Обеспечивается совместимость с системой MS-DOS (а также OS/2 и Windows NT) по файловым системам FAT12, FAT16, FAT32 и VFAT.
ntfs
Основная файловая система Windows NT.
usmdos
Расширяет возможности драйвера файловой системы MS-DOS для Linux таким образом, что при работе в Linux, имеется возможность работы с именами файлов нестандартной длины, просмотра прав доступа к файлу, ссылок, имени пользователя, которому принадлежит файл, а также оперирование с файлами устройств. Это позволяет использовать обычную систему MS-DOS, так, как если бы это была система Linux. Таким образом, исключается необходимость создания отдельного раздела для Linux.
iso9660
Стандартная файловая система для CD-ROM. Довольно популярное развитие стандарта CD-ROM, выполненное Rock Ridge'ем, которое обеспечивает автоматическую поддержку имен файлов нестандартной длины.
nfs
Сетевая файловая система, обеспечивающая разделение одной файловой системы между несколькими компьютерами для предоставления доступа к ее файлам со всех машин.
hpfs и hpfs386
Файловые системы OS/2.
hfs и hfs+
Файловые системы Apple MacOS.
dfs
Файловая система для дисков DVD.
sysv
Файловые системы SystemV/386, Coherent и Xenix.
Есть поддержка множества других файловых систем, например, Atari или Amiga. На текущий момент Linux поддерживает порядка 50 файловых систем. Такое возможно благодаря применению технологии IFS (Installable File System), которая позволяет подключать новые системы с помощью драйверов. Нечто подобное сейчас пытается сделать Windows NT, но ее успехи пока незначительны. Набор используемых файловых систем зависит от конкретной ситуации. Для Linux лучшим выбором является ext2. Если Вам нужна совместимость с другими системами, ее можно организовать.
Также существует файловая система proc, которая обычно доступна через каталог /proc. В действительности, она не является файловой системой, хотя по ее структуре сложно обнаружить разницу. Эта система позволяет получить доступ к определенным структурам данных ядра, к таким, как список процессов (process list, отсюда и название) или сведения об аппаратуре. Все эти структуры выглядят как файловая система из каталогов и обычных текстовых файлов и ими можно оперировать обычными средствами работы с файловой системой. Например, для получения списка всех процессов, используется следующая команда: $ ls -l /proc total 0 dr-xr-xr-x 4 root root 0 Jan 31 20:37 1 dr-xr-xr-x 4 liw users 0 Jan 31 20:37 63 dr-xr-xr-x 4 liw users 0 Jan 31 20:37 94 dr-xr-xr-x 4 liw users 0 Jan 31 20:37 95 dr-xr-xr-x 4 root users 0 Jan 31 20:37 98 dr-xr-xr-x 4 liw users 0 Jan 31 20:37 99 -r--r--r-- 1 root root 0 Jan 31 20:37 devices -r--r--r-- 1 root root 0 Jan 31 20:37 dma -r--r--r-- 1 root root 0 Jan 31 20:37 filesystems -r--r--r-- 1 root root 0 Jan 31 20:37 interrupts -r-------- 1 root root 8654848 Jan 31 20:37 kcore -r--r--r-- 1 root root 0 Jan 31 11:50 kmsg -r--r--r-- 1 root root 0 Jan 31 20:37 ksyms -r--r--r-- 1 root root 0 Jan 31 11:51 loadavg -r--r--r-- 1 root root 0 Jan 31 20:37 meminfo -r--r--r-- 1 root root 0 Jan 31 20:37 modules dr-xr-xr-x 2 root root 0 Jan 31 20:37 net dr-xr-xr-x 4 root root 0 Jan 31 20:37 self -r--r--r-- 1 root root 0 Jan 31 20:37 stat -r--r--r-- 1 root root 0 Jan 31 20:37 uptime -r--r--r-- 1 root root 0 Jan 31 20:37 version $ В действительности, должно быть еще несколько файлов, не соответствующих процессам, однако, этот пример немного укорочен. Вы будете удивлены когда поймете, сколько программ активно работают с данной файловой системой. При ее грамотном использовании можно написать программу для вывода практически любой системной информации, какая только есть. Причем, все данные доступны в виде обычного текста!
Хотя система /proc и называется файловой, ни одна ее часть не взаимодействует с диском. Она существует только в представлении ядра и при попытке обращения к какой-либо ее части, создается впечатление, что эта часть где-то существует, хотя в действительности это не так. Даже если существует файл /proc/kcore в несколько мегабайт размером, он не занимает места но диске.
Резервирование с применением tar
Полная копия может легко быть сделана командой tar: # tar --create --file /dev/ftape /usr/src tar: Removing leading / from absolute path names in the archive # Пример выше использует GNU версию tar и длинные имена опции. Традиционная версия tar понимает только одиночный символ в качестве парамета. GNU версия может также обрабатывать копии, которые не помещаются на одной ленте или дискете, и очень длинные пути; не все традиционные версии могут делать это. Linux использует только GNU tar.
Если ваша копия не помещается на одной ленте, Вы должны использовать опцию --multi-volume (-M): # tar -cMf /dev/fd0H1440 /usr/src tar: Removing leading / from absolute path names in the archive Prepare volume #2 for /dev/fd0H1440 and hit return: # Обратите внимание, что Вы должны форматировать дискеты прежде, чем Вы начнете копирование. Можно использовать другое окно или виртуальный терминал для выполнения команд форматирования, когда tar попросит новую дискету.
После того, как вы сделали копию, Вы должны ее проверить, используя опцию --compare (-d): # tar --compare --verbose -f /dev/ftape usr/src/ usr/src/linux usr/src/linux-1.2.10-includes/ .... # Невыполнение проверки копии означает, что Вы не заметите, что ваша копия не работает, пока не потеряете первоначальные данные.
Инкрементная копия может быть выполнена командой tar с опцией --newer (-N): # tar --create --newer '8 Sep 1995' --file /dev/ftape /usr/src --verbose tar: Removing leading / from absolute path names in the archive usr/src/ usr/src/linux-1.2.10-includes/ usr/src/linux-1.2.10-includes/include/ usr/src/linux-1.2.10-includes/include/linux/ usr/src/linux-1.2.10-includes/include/linux/modules/ usr/src/linux-1.2.10-includes/include/asm-generic/ usr/src/linux-1.2.10-includes/include/asm-i386/ usr/src/linux-1.2.10-includes/include/asm-mips/ usr/src/linux-1.2.10-includes/include/asm-alpha/ usr/src/linux-1.2.10-includes/include/asm-m68k/ usr/src/linux-1.2.10-includes/include/asm-sparc/ usr/src/patch-1.2.11.gz # К сожалению, tar не может обнаружить изменение Inode информации файла, например, изменение прав доступа или переименование файла. Проблема решается путем использования команды find и сравнения текущего состояния файловой системы со списками файлов, которые резервировались раньше. Скрипты и программы для автоматизации такого процесса можно найти на ftp-серверах, посвященных Linux.
Сеть
Сеть - это средство, позволяющее соединяться двум или более компьютерам между собой. Есть немало разных протоколов сетевого обмена, и предоставляемые ими возможности весьма обширны, но конечный результат часто оказывается весьма далек от ожидаемого.
UNIX-подобные операционные системы имеют широкий спектр сетевых возможностей. Большинство базовых функций (файловые системы, печать, создание резервных копий и т.д.) могут быть реализованы посредством сети. Это может значительно облегчить работу системного администратора, так как позволяет использовать централизованное администрирование.
Однако, в этой книге поверхностно рассмотрены вопросы работы с сетью. Для более подробной информации см. книгу "Руководство Сетевого Администратора Системы Linux" (Linux Network Administrators' Guide).
Сетевая файловая система NFS (Network file system)
Одна из наиболее полезных функций, которая может быть реализована с помощью сети, это разделение файлов через сетевую файловую систему. Обычно используется система, называемая Network File System или NFS, которая разработана корпорацией Sun.
При работе с сетевой файловой системой любые операции над файлами, производимыми на локальном комьютере, передаются через сеть на удаленную машину. При работе сетевой файловой системы программа считает, что все файлы на удаленном компьютере находятся на компьютере, где она запущена. Таким образом разделение информации посредством такой системы не требует внесения каких-либо изменений в программу.
Схемы разделения на разделы
Довольно сложно разбить диск на несколько разделов наилучшим образом, так как на это влияет довольно много факторов.
Обычно используется отдельный раздел или диск для файловой системы root, которая содержит каталоги /bin, /etc, /dev, /lib, /tmp и некоторые другие, требуемые для нормальной загрузки и запуска системы. Таким образом, все, что нужно для запуска системы это файловая система root. Для файловой системы /usr, личных каталогов пользователей (обычно каталог /home) и для swap-области используются отдельные диски или их разделы. Разделение каталогов с пользовательскими файлами облегчает создание резервных копий, так как обычно не требуется сохранять рабочие программы (расположенные в каталоге /usr). Также возможно разделение системы /usr между несколькими компьютерами в сети (с использованием NFS) для уменьшения общего используемого дискового пространства.
Для жестких дисков небольшого объема лучше всего использовать один раздел. При использовании большого диска обычно его разбивают на несколько крупных разделов. Если в системе используется несколько дисков, то, возможно, неплохим вариантом будет установить файловую систему root (включая /usr) на один диск, а личные каталоги пользователей на другой.
Советы по экономии места на диске
Наилучший метод сохранения дискового пространства - это не устанавливать неиспользуемые программы. Иногда можно удалить неиспользуемые файлы, такие как Elisp-файлы для GNU Emacs, ненужные шрифты для X11 или некоторые библиотеки для C++.
Также в определенных случаях можно использовать сжатие файлов. Существуют программы, такие как gzip и zip, позволяющие производить компрессию файлов и каталогов. Система gzexe сжимает и разжимает файлы незаметно для пользователя. А экспериментальная система DouBle производит компрессию файлов незаметно для использующих их программ (аналогично пакету Stacker для MS-DOS).
Создание файловых систем
Файловая система устанавливается, т.е. инициализируется, при помощи команды mkfs. В действительности, существуют отдельные программы для каждого типа файловой системы. Команда mkfs только запускает требуемую программу в зависимости от типа устанавливаемой системы. Немножко напоминает выводок дефрагментаторов диска в Windows 2000. Тип файловой системы указывается при помощи опции -t fstype.
Параметры, передаваемые программам, вызываемым mkfs, слегка различаются. Наиболее важные из них рассмотрены ниже (для более подробной информации см. man-руководство). -t fstype
Указывается тип файловой системы.
-c
Производится поиск плохих блоков и, соответственно, инициализация списка плохих блоков.
-l filename
Считывается начальный список плохих блоков из файла filename.
Для установки файловой системы ext2 на дискету (камешек в огород Windows NT и Windows 2000: они могут ставить на дискету только разные варианты FAT!), используется следующая последовательность команд: $ fdformat -n /dev/fd0H1440 Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB. Formatting ... done $ badblocks /dev/fd0H1440 1440 $>$ bad-blocks $ mkfs -t ext2 -l bad-blocks /dev/fd0H1440 mke2fs 0.5a, 5-Apr-94 for EXT2 FS 0.5, 94/03/10 360 inodes, 1440 blocks 72 blocks (5.00%) reserved for the super user First data block=1 Block size=1024 (log=0) Fragment size=1024 (log=0) 1 block group 8192 blocks per group, 8192 fragments per group 360 inodes per group Writing inode tables: done Writing superblocks and filesystem accounting information: done $ В первую очередь дискета форматируется (параметр -n предотвращает проверку на наличие плохих блоков). Затем производится поиск плохих блоков при помощи команды badblocks, вывод которой перенаправлен в файл bad-blocks. И, наконец, файловая система устанавливается с инициализацией списка найденных плохих блоков.
Вместо использования badblocks, команде mkfs может быть указан параметр -c , как это видно из примера, рассмотренного ниже. $ mkfs -t ext2 -c /dev/fd0H1440 mke2fs 0.5a, 5-Apr-94 for EXT2 FS 0.5, 94/03/10 360 inodes, 1440 blocks 72 blocks (5.00%) reserved for the super user First data block=1 Block size=1024 (log=0) Fragment size=1024 (log=0) 1 block group 8192 blocks per group, 8192 fragments per group 360 inodes per group Checking for bad blocks (read-only test): done Writing inode tables: done Writing superblocks and filesystem accounting information: done $ Указание параметра -c намного удобнее, чем применение команды badblocks, но ее использование необходимо для проверки файловой системы после ее установки.
Установка файловых систем на жесткий диск или его раздел аналогична установке на дискету, исключая форматирование.
Создание пользователя
Ядро Linux работает с идентификаторами, присвоенными пользователям. Каждый пользователь имеет личный числовой идентификатор user id или uid, потому что обрабатывать числа для компьютера проще, чем строковые имена пользователей. Отдельная база данных, вынесенная за пределы ядра, связывает текстовое имя пользователя username (аккаунт), с соответствующими user id. База данных хранит также немало полезной информации о каждом пользователе.
Для создания пользователя надо добавить сведения о нем в базу данных пользователей и создать домашний каталог для него. Также возможна установка начальных файлов настроек.
Большинство дистрибутивов Linux имеют программу для создания пользователей. Хуже то, что такие программы везде разные. Есть две наиболее распространенные команды: adduser и useradd; возможно применение графического интерфейса. Пользователя можно добавить и .
Создание пользователя вручную
Чтобы создавать нового пользователя вручную, выполните следующее:
Отредактируйте файл паролей /etc/passwd редактором vipw и добавьте строку для нового пользователя. Будьте внимательным с синтаксисом. Не редактируйте каким попало редактором! vipw блокирует файл, так, чтобы другие команды не пробовали модифицировать его в то же самое время. Вы должны записать в поле пароля `* ' так, чтобы было невозможно войти.
Точно так же редактируйте /etc/group редактором vigr, если надо создать новую группу
Создайте основной каталог пользователя командой mkdir.
Скопируйте файлы из /etc/skel в домашний каталог нового пользователя.
Смените владельца и права доступа для свежесозданных файлов и каталогов командами chown и chmod . Опция -R весьма полезна. Правильные разрешения немного разные для разных систем, но обычно следующие команды делают то, что надо: cd /home/newusername chown -R username.group . chmod -R go=u,go-w . chmod go= .
Установите пароль командой passwd.
После того, как Вы устанавливаете пароль в последнем шаге, пользователь сможет работать. Вы не должны устанавливать пароль, пока все остальное не сделано, иначе пользователь может неосторожно войти, в то время как вы еще копируете файлы.
Иногда необходимо создать псевдопользователя. Такой пользователь никогда не используется как обычный. Например, чтобы установить анонимный сервер FTP станция (так, чтобы любой мог сгружать и загружать файлы без необходимости иметь логин в системе), Вы должны создать пользователя ftp. В таких случаях, пароль задавать не надо. Значит, файл пароля имеет всю информацию относительно пользователя за исключением его пароля.
Создание свопа
Swap файл является обычным файлом и ничем не выделяется для ядpа. Имеет значение только то, что этот файл не содеpжит дыp и должен быть подготовлен для выполнения команды mkswap. Он должен pазмещаться на локальном диске и не может быть pасположен в файловой системе, смонтиpованной чеpез NFS (на самом деле может, но такой подход не рекомендуется: если сеть упадет, Вашей системе будет ОЧЕНЬ кисло).
Отсутствие дыp в swap файле очень важно. Под этот файл pезеpвиpуется дисковое пpостpанство таким обpазом, что ядpо может быстpо обpаботать блок данных без поиска отдельных сектоpов и т.п. Ядpо пpосто использует все pаспpеделенные для этого файла сектоpа. Наличие дыpы в файле означает, что в указанном месте нет pаспpеделенных сектоpов, что снижает скоpость обмена данными. Не очень существенно, правда, но снижает...
В следующем пpимеpе показано, как создать swap файл, не содеpжащий дыp. $ dd if=/dev/zero of=/extra-swap bs=1024 count=1024 1024+0 records in 1024+0 records out $ где /extra-swap это имя swap файла, а его pазмеp указан после паpаметpа count=. Наиболее эффективно устанавливать объем этого файла кpатным четыpем, так как ядpо пpоизводит обмен стpаницами памяти по 4 килобайта в каждой. Если pазмеp swap файла не кpатен четыpем, то последние несколько килобайт могут быть неиспользованными.
Swap pаздел также особо не отличается от дpугих pазделов. Его можно создать также как и любой дpугой pаздел, только единственное отличие состоит в том, что он не содеpжит какой-либо файловой системы. Следует устанавливать тип swap pазделов pавным 82 (Linux swap), что делает список pазделов понятнее, хотя это не является необходимым для ядpа.
После создания swap файла или pаздела следует записать в его начало некотоpую системную инфоpмацию, котоpую использует ядpо. Для этого пpименяется команда mkswap: $ mkswap /extra-swap 1024 Setting up swapspace, size = 1044480 bytes $ Следует заметить, что swap область еще не используется. Она существует, но ядpо пока ее еще не использует для pаботы с виpтуальной памятью.
Вы должны быть очень осторожны когда используете mkswap , так как он не проверяет, используется ли для чего-нибудь еще файл или раздел. Вы можете легко стереть важные файлы и даже целые разделы с неоценимой помощью mkswap!
Раньше менеджер памяти Linux ограничивал размер и количество создаваемых свопов, но с версии ядра 2.3 ограничения фактически сняты.
Спасательные дискеты начальной загрузки
Не всегда имеется возможность загрузки системы с жесткого диска. Например, при неправильных установках в LILO загрузчике систему невозможно будет загрузить. В таких случаях должен быть другой способ загрузки. Для персональных компьютеров обычно она выполняется с дискет.
Большинство распространяемых версий Linux позволяют во время установки системы создать загрузочную дискету. Однако многие такие дискеты содержат только ядро и, предполагается, что для устранения неполадок будут использоваться программы, находящиеся на установочных дисках. Иногда этих программ бывает недостаточно, например, когда требуется восстановить некоторые файлы, созданные с помощью программ, которых нет на этих дисках.
Поэтому может возникнуть необходимость в создании специально настроенного диска. В документации "Bootdisk HOWTO" содержится необходимая информация для создания подобного диска.
При загрузке со специально настроенного диска нельзя использовать привод, на котором смонтирована эта дискета, для каких-либо других целей. Это может создать некоторые неудобства, если в компьютере имеется только один дисковод. Однако, если компьютер имеет достаточный объем памяти, можно загрузить этот диск в RAM диск (для этого ядро, расположенное на дискете должно быть сконфигурировано соответствующим образом). Это позволяет использовать дисковод для других целей.
Специальные настройки в файле /etc/inittab
Файл /etc/inittab имеет особые возможности взаимодействия с init в сложных случаях. Строки для таких возможностей помечены специальными ключевыми словами и имеют по три, а не по четыре поля. Примеры: powerwait
Передает init сигнал на начало завершения работы системы по причине сбоев в сети питания. Выдается при совместном использовании UPS и программ, которые наблюдают за состоянием UPS и информируют init об отключении внешнего питания.
ctrlaltdel
При нажатии на ctrl-alt-del на клавиатуре консоли, дает команду init перезагрузить систему. Администратор может поменять реакцию на нажатие ctrl-alt-del, например, на игнорирование или запуск какой-либо произвольной программы.
poweerok
Если при получении состояния powerwait питание восстановилось, будет отработано данное состояние. Полезно для возвращения к нормальной работе, если система еще не успела завершить все процессы.
sysinit
Команда, выполняемая при запуске системы. Например, может чистить /tmp.
Данный список не отличается полнотой. Обратитесь к man-руководству на файл inittab за подробностями.
Стриммеры
Ленточный накопитель (стриммер) использует ленту, подобную (но совсем другую, конечно) ленте к кассетам, используемым для музыки. Лента последовательна в принципе, так что, чтобы добираться до любой ее части, Вы сначала должны перемотать ленту. Прямой доступ (как к дискам) тут невозможен. К диску можно обращаться произвольно: Вы можете переходить непосредственно к любому месту на диске. Последовательный доступ лент медленнее.
С другой стороны, ленты относительно дешевые, так как они не должны быть быстрыми. Они могут быть легко сделаны очень длинными и, следовательно, могут содержать большое количество данных. Это делает ленты очень подходящими для архивирования и резервного копирования, которые не требуют больших скоростей, но извлекают пользу из низких издержек и больших емкостей памяти.
Syslog
Иногда при работе ядра или различных системных программ возникают ошибки, предупреждения и другие сообщения. Программа syslog записывает все сообщения в файл так, что он может быть впоследствии просмотрен. Программа syslog можно сконфигурировать так, что сообщения будут сортироваться и записываться в разные файлы по приоритету. Например, сообщения ядра часто направляются в отдельный файл, так как эти сообщения наиболее важные и должны регулярно просматриваться во избежание серьезных проблем.
Сжатие резервных копий
Резервные копии занимают много места, а носители могут стоить дорого. Чтобы уменьшить необходимые затраты места, копии могут быть сжаты. Имеется несколько путей для этого. Некоторые программы имеют поддержку для встроенного сжатия; например, опция --gzip (-z) для каналов GNU-версии tar пропускает копию через программу сжатия gzip, перед записью на резервный носитель.
К сожалению, сжатые копии могут вызывать проблему. Из-за характера того, как работает сжатие, если одиночный бит неправилен, вся остальная часть сжатых данных будет непригодна. Некоторые резервные программы имеют встроенное исправление ошибки, но никакой метод не может обрабатывать большое количество ошибок. Это означает, что, если копия сжата GNU-версией tar, одиночная ошибка делает всю копию потерянной. Копии должны быть надежны, и этот метод сжатия не лучшая идея.
Альтернативный путь состоит в том, чтобы сжать каждый файл отдельно. Это все еще означает, что один файл потерян, но все другие файлы целы. Потерянный файл был бы разрушен в любом случае, так что эта ситуация не намного хуже, чем не использовать сжатие вообще. Программа afio (вариант cpio) может делать это.
Сжатие занимает некоторое время, которое может сделать резервную программу неспособной писать данные достаточно быстро для привода ленты. Этого можно избегать буферизацией вывода (внутренней, если резервная программа достаточно интеллектуальна, или используя другую программу). Это должно быть проблемой только на медленных компьютерах.
The Linux Documentation Project (LDP)
Проект документирования системы Linux или LDP (Linux Documentation Project), это свободная команда писателей, корректоров и редакторов перед которыми стоит цель создания полной документации по операционной системе Linux. Главным координатором проекта является Greg Hankins.
Данное руководство является одним из набора распространяемых руководств проекта LDP, который включает в себя "Руководство Пользователя Системы Linux", "Руководство Системного Администратора Системы Linux", "Руководство Сетевого Администратора Системы Linux" и "Руководство Взломщика Ядра Linux". Оригиналы этих книг на английском языке доступны в исходном формате LaTeX, .dvi формате и в формате postscript через FTP:
или .
Для того, чтобы связаться с LDP, нужно послать письмо Greg'у Hankins по адресу: .
Русская версия LDP (Russian LDP или RLDP) станет доступна по FTP, когда я найду сервер, на который ее положить. С автором можно связаться по адресу: .
Типы разделов
Таблицы разделов (одна находится в MBR, другие используются для расширенных разделов) содержат один байт для каждого раздела, который указывает тип раздела. Это позволяет определить операционную систему, которая использует раздел или для чего он используется во избежание случайного размещения двух систем на одном разделе. Однако, в действительности, операционные системы игнорируют байт типа раздела. Например, система Linux вообще не имеет представления о его существовании. Хуже того, некоторые системы неправильно его интерпретируют (по крайней мере, некоторые версии DR-DOS игнорируют самый важный бит этого байта, в отличие от других).
Не существует никаких стандартов, касающихся значений этих байтов, хотя некоторые общепринятые значения приведены в таблице ниже. Такую же информацию предоставляет программа Linux fdisk.
Таблица 4-1. Типы разделов (по данным программы fdisk из Linux).
0 | Empty | 40 | Venix 80286 | 94 | Amoeba BBT |
1 | DOS 12-bit FAT | 51 | Novell? | a5 | BSD/386 |
2 | XENIX root | 52 | Microport | b7 | BSDI fs |
3 | XENIX usr | 63 | GNU HURD | b8 | BSDI swap |
4 | DOS 16-bitf <32M | 64 | Novell | c7 | Syrinx |
5 | Extended | 75 | PC/IX | db | CP/M |
6 | DOS 16-bit >=32M | 80 | Old MINIX | e1 | DOS access |
7 | OS/2 HPFS | 81 | Linux/MINIX | e3 | DOS R/O |
8 | AIX | 82 | Linux swap | f2 | DOS secondary |
9 | AIX bootable | 83 | Linux native | ff | BBT |
a | OS/2 Boot Manager | 93 | Amoeba |
Требования к свободному месту
При установке Linux будет предоставлена информация о требуемом дисковом пространстве при различной конфигурации системы. Отдельно устанавливаемые программы также могут использовать подобную схему. Это помогает распределять место на диске.
Размер области, используемой для файлов пользователей, зависит от характера работы. Многие считают, что для личных каталогов нужно использовать как можно больше пространства, хотя минимально требуемый объем на разных системах сильно варьируется. Для простейшей обработки текстов некоторым может потребоваться всего несколько мегабайт, в то время как другим, работающим с мощными графическими приложениями, могут потребоваться многие гигабайты.
Размещение swap-области рассмотрено в разделе .
Удаление пользователя
Для удаления пользователя Вы сначала должны удалить все его задания на печать, псевдонимы, файлы, задания для cron и at и вообще все, что имеет к нему отношение. После чего надо удалить соответствующие строки из файлов /etc/passwd и /etc/group (не забудьте удалить пользователя из всех групп, к которым он был приписан). Перед началом удаления пользователя стоит выключить его доступ к системе, чтобы он не смог зайти в процесе удаления файлов и заданий.
Помните, что пользователи могут иметь файлы за пределами своего домашнего каталога. Команда find позволит Вам их найти: find / -user username Обратите внимание, что данная команда будет работать долго, если Вы имеете большие диски. Если используете сетевые диски, Вы должны быть внимательным, чтобы не развалить сеть или сервер.
Многие дистрибутивы Linux включают специальную команду для удаления пользователя; поищите что-нибудь вроде deluser или userdel. Впрочем, все необходимое просто делать и вручную, а команды может и не сделать всего.
Уровни выполнения системы
Уровни выполнения являются режимами работы init и определяют выполняемые системные процессы и предоставляемые сервисы. Уровни выполнения обозначаются номерами (см. ). Нет единого мнения по поводу использования определяемых администратором уровней выполнения (2-5). Одни системные администраторы настраивают разные уровни выполнения для разных вариантов работы системы, другие ограничиваются одним вариантом, и не меняют уровни выполнения вовсе. Разные дистрибутивы Linux поставляются с разными настройками. В общем, смотрите, пробуйте, чтоподходит лично Вам.
Таблица 7-1. Уровни выполнения
0 | Выключение системы. |
1 | Однопользовательский режим (для администрирования в сложных случаях). |
2-4 | Нормальная работа (настраивается администратором). |
5 | Нормальная работа (запускается X Window System). |
6 | Перезагрузка. |
Уровни выполнения настраиваются в /etc/inittab строками вида: l2:2:wait:/etc/init.d/rc 2 Первое поле является меткой-идентификатором. Второе определяет, что данная строка применима только для уровня выполнения 2. Третье определяет, что init должен выполнить команду в четвертом поле только один раз и ждать (при переходе на данный уровень) и подождать ее выполнения. Скрипт /etc/init.d/rc выполняет все команды для запуска и остановки сервисов, работающих на уровне выполнения 2.
Команда в четвертом поле выполняет все работы по переходу на уровень 2. Она запускает сервисы, которые еще не запущены, и завершает сервисы, которые на данном уровне работать не должны. Как именно производится вся настройка зависит от дистрибутива Linux.
Когда init запускается, он ищет в /etc/inittab строку, в которой указан уровень выполнения, указанный по умолчанию: id:2:initdefault: Можно указать, чтобы init при запуске установил не уровень выполнения по умолчанию, передав при загрузке в качестве параметра аргумент single или emergency . Ядерные параметры командной строки могут быть переданы, например, через LILO. Это позволяет выбрать, например, однопользовательский режим (уровень выполнения 1).
Как показывает практика переводчика, здесь главное следить за тем, чтобы по умолчанию не был задан уровень 0 или 6.
Когда система работает, можно поменять уровень выполнения командой telinit. При смене уровня выполнения, init выполнит соответствующие команды из файла /etc/inittab.
Важные части ядра
Ядро системы Linux состоит из нескольких основных частей: блок управления процессами, блок управления памятью, драйверы устройств, драйверы файловых систем, блок управления сетью а также другие небольшие процедуры.
Наиболее важные составляющие ядра (обеспечивающие жизнеспособность системы) - это блок управления памятью и процессами. Блок управления памятью обеспечивает распределение областей памяти и swap-областей между процессами, составляющими ядра и для кэш-буфера. Блок управления процессами создает новые процессы и обеспечивает многозадачность путем переключения задач.
На самом нижнем уровне ядро содержит драйверы устройств для каждого типа поддерживаемого оборудования. Существует довольно большой набор различных драйверов, так как постоянно разрабатываются новые типы устройств. Существует довольно много одинаковых устройств, которые различаются только тем, как происходит взаимодействие между самим устройством и драйвером. Такое сходство позволяет использовать классы драйверов, поддерживающих одинаковые операции. В каждом члене такого класса используется однотипный интерфейс для ядра, но различные схемы взаимодействия с устройством. Например, все драйверы жесткого диска представляются для ядра абсолютно одинаково, то есть у них у всех имеются такие операции как 'инициализация жесткого диска', 'чтение сектора N', 'запись сектора N'.
Некоторые функции, предоставляемые ядром, имеют одинаковые свойства. Например, различные сетевые протоколы объединены в один программный интерфейс (BSD socket библиотеку). Вот другой пример: различные файловые системы, поддерживаемые системой Linux. Ядро содержит виртуальную файловую систему (Virtual File System, VFS) которая включает в себя все функции, используемые для работы системы, а также драйвер для каждой поддерживаемой файловой системы. При попытке доступа к какой-либо файловой системе запрос проходит через VFS, откуда перенаправляется к соответствующему драйверу файловой системы.
Входы в систему через терминалы
Сначала init удостоверится, что имеется программа getty для подключения терминала (или консоли). getty следит за терминалом и ждет пользователя, чтобы сообщить ему о готовности ко входу в систему (это обычно означает, что пользователь должен напечатать что-либо). Когда это произойдет, getty выводит приветственное сообщение (оно хранится в /etc/issue), и запрашивает username (логин пользователя). В заключение выполняется программа входа в систему (процесс login). login получает username как параметр, запрашивает и проверяет пароль. Если пароль правильный, login запускает оболочку, заданную для этого пользователя; в противном случае процесс завершается (возможно после предоставления пользователю другой возможности для ввода username и пароля). init обращает внимания, на завершенный процесс, и запускает новый процесс getty для терминала.
Обратите внимание, что единственный новый процесс создан init (с использованием системной функции fork), фактически это просто еще одна копия init. Процессы getty и login только заменяют программу init (используя системный вызов exec).
Отдельная программа для регистрации пользователя необходима для последовательных линий, так как на них регистрация может быть (и традиционно была) сложной задачей. Проблема состоит в том, чтобы заметить, когда терминал становится активным. getty также приспосабливается к быстродействию и другим параметрам настройки подключения, которые являются важными особенно для вызванных по телефону подключений, где эти параметры могут изменяться при разных обращениях.
Имеется несколько версий getty и init. Каждая имеет свои хорошие и плохие стороны. Лучшим решением будет внимательно ознакомиться с версиями, которые есть в Вашей системе, а также с другими версиями (Вы можете использовать Linux Linux Software Map, чтобы искать их). Если Вы не имеете dial-in доступ, Вы, вероятно, не должны волноваться относительно getty , но init все еще важен.
Восстановление с применением tar
Команда tar с опцией --extract (-x) извлекает файлы: # tar --extract --same-permissions --verbose --file /dev/fd0H1440 usr/src/ usr/src/linux usr/src/linux-1.2.10-includes/ usr/src/linux-1.2.10-includes/include/ usr/src/linux-1.2.10-includes/include/linux/ usr/src/linux-1.2.10-includes/include/linux/hdreg.h usr/src/linux-1.2.10-includes/include/linux/kernel.h ... # Вы также можете извлечь только указанные файлы или каталоги (которые включают все их файлы и подкаталоги),перечислив их в командной строке: # tar xpvf /dev/fd0H1440 usr/src/linux-1.2.10-includes/include/linux/hdreg.h usr/src/linux-1.2.10-includes/include/linux/hdreg.h # Используйте опцию --list (-t), если Вы хотите только увидеть какие файлы находятся на резервном томе: # tar --list --file /dev/fd0H1440 usr/src/ usr/src/linux usr/src/linux-1.2.10-includes/ usr/src/linux-1.2.10-includes/include/ usr/src/linux-1.2.10-includes/include/linux/ usr/src/linux-1.2.10-includes/include/linux/hdreg.h usr/src/linux-1.2.10-includes/include/linux/kernel.h ... # Обратите внимание, что tar всегда читает резервный том последовательно, так для больших томов процесс довольно медленный. Однако, нельзя использовать произвольный доступ, когда используется лента или некоторая другая последовательная среда.
tar не обрабатывает удаленные файлы правильно. Если Вы должны восстановить файловую систему из полной и инкрементной копии, и удалили файл между изготовлением копий, он будет существовать снова после того, как Вы сделаете восстановление. Это может быть большой проблемой, если файл хранит важные данные, которые больше не должны быть доступны.
Временное отключение пользователя
Иногда надо временно запретить неугодному пользователю доступ в систему (может, он еще извинится...), не удаляя его вовсе.
Лучшим способом заблокировать пользователя является замена его оболочки (программы, запускаемой при его входе в систему) на спецпрограмму, которая выводит подходящее сообщение.
Можно также сменить имя пользователя или его пароль, но затем пользователь не будет знать, что происходит. Запутанные пользователи означают большее количество работы.
Простой способ создавать специальные программы состоит в том, чтобы писать `tail scripts': #!/usr/bin/tail +2 This account has been closed due to a security breach. Please call 555-1234 and wait for the men in black to arrive. Первые два символа (`#!') сообщают ядру, что остальная часть строки является командой, которая должна быть выполнена, чтобы интерпретировать этот файл. Команда tail в этом случае выводит все, за исключением первой строки, в стандартный вывод.
Если пользователь billg подозревается в нарушении защиты, администратор системы сделал бы примерно вто что: # chsh -s /usr/local/lib/no-login/security billg # su - tester This account has been closed due to a security breach. Please call 555-1234 and wait for the men in black to arrive. #
Tail-скрипты следует хранить в отдельном каталоге во избежание их пересечения с какими-либо обычными пользовательскими командами.
Временные зоны
Измерение времени основано на регулярных естественных явлениях, чередующихся светлых и темных периодов, вызванных вращением планеты. Общее время, принимаемое двумя последовательными периодами постоянно, но длины светлого и темного периодов изменяются. Одна простая константа - полдень.
Полдень - время дня, когда Солнце - в самой высокой позиция. Так как Земля вращается, [1] полдень наступает в разное время в различных местах. Это ведет к понятию местное время. Время измеряется в единицах, которые привязаны к естественному явлению, подобно полудню. Пока Вы остаетесь в одном и том же месте, не имеет значения, что местные времена отличаются.
Как только Вам понадобится связаться с отдаленными местами, Вы обратите внимание на потребность в наличие некоего общего времени. Большинство мест в мире связывается с другими местами в мире, так что глобальный стандарт на измерение времени определен. Он назван universal time, универсальным временем (UT или UTC, прежде известный как Greenwich Mean Time или GMT (время по Гринвичу), так как это время является местным временем в Гринвиче, Англия). Когда люди с различными местными временами должны связаться, они могут выражать времена в универсальном времени так, чтобы не было беспорядка.
Каждое местное время названо часовым поясом (временной зоной). В то время как география позволяет всем местам, которые имеют полдень в то же самое время, иметь один и тот же часовой пояс, политика делает это трудным. По различным причинам, много стран используют летнее время , Россия использует именно такую систему, так что нет смысла объяснять про летнее время подробно. Замечу лишь, что оно используется для того, чтобы световой день больше соответствовал биологическому дню. Многие страны не делают этого, а те которые делают, не могут придти к соглашению о том, когда же переводить часы. Это делает преобразования часового пояса сложной задачей.
Часовые пояса лучше всего обозначены расположением или сообщением различия между локальным и универсальным временем. В США и некоторых других страны зоны местного времени имеют имя и трехсимвольное кодовое обозначение. Коды не уникальны, но они и не должны использоваться в разных странах. Лучше говорить о местном времени в, скажем, Хельсинки, чем о Восточноевропейском времени, поскольку не все страны в Восточной Европе следует этим правилам.
Linux имеет пакет часового пояса, который знает о всех существующих часовых поясах и может легко модифицироваться при изменении правил. Все, что администратор системы должен сделать, так это выбрать соответствующий часовой пояс. Также, каждый пользователь может устанавливать собственный часовой пояс; это важно для работы многих людей с компьютерами в различных странах через сеть Internet. При изменении правил перехода на летнее время в Вашем часовом поясе Вам придется обновить соответствующие компоненты вашей Linux системы, а именно обновить системную базу часовых поясов и файлы данных о летнем времени в Вашем часовом поясе. Все действия просты и не займут у Вас много времени.
Выбор числового идентификатора пользователя и группы
На большинстве систем не имеет значения, что числовые значения идентификаторов пользователя и группы, но если Вы используете сетевую файловую систему (Network filesystem, NFS), Вы должны иметь одни и те же uid и gid на всех системах. Это потому, что NFS также идентифицирует пользователей по числовым uid. Если Вы не используете NFS, Вы можете позволить вашему инструменту создания пользоваьелей выбирать их автоматически.
Если Вы используете NFS, вы должны изобрести механизм для синхронизирования информации о пользователях и группах. Одним из вариантов является система NIS.
Вы должны избегать многократно использовать числовой uid (и текстовое имя пользователя), потому что новый владелец uid (или имени пользователя) может получить доступ к файлам старого владельца (почте, например).
Выбор носителя
Наиболее важное решение относительно резервных копий - выбор носителя. Вы должны рассмотреть стоимость, надежность, быстродействие, доступность и применимость.
Стоимость важна, так как Вы должны иметь большее количество резервной памяти чем то, в котором Вы нуждаетесь для данных.
Надежность чрезвычайно важна, так как разбитая копия может доставить много проблем: Вам нужна копия потерянной информации, и тут Вы узнаете, что копии у Вас тоже нет... Вы испытаете острые ощущения при разрушении дистрибутива программы, объемом в десяток мегабайт. Резервный носитель должен быть способен хранить данные без искажения в течение нескольких лет. Жесткий диск обычно очень надежен, но как резервная среда не очень надежен, если находится в том же самом компьютере, что и диск, который Вы резервируете.
Быстродействие обычно не очень важно, если копии могут быть выполнены без взаимодействия с оператором. Это не имеет значения, если копия выполняется два часа, не требуя никакого наблюдения. С другой стороны, если копия не может быть выполнена, когда компьютер не используется, скорость приобретает высокоое значение,
Доступность очевидно необходима, так как если Вы не можете использовать резервный носитель, какой в нем смысл? Менее очевидна потребность в том, чтобы носитель был доступным даже в будущем и на других компьютерах. Иначе Вы не всегда сможете восстановить ваши копии.
Применимость является важным фактором в том смысле, как часто резервирует. Чем проще делать копии, тем лучше. Резервный носитель не должен быть сложным в использовании.
Типичные варианты - дискеты и ленты. Дискеты очень дешевые, довольно надежны, не очень быстро, очень доступны, но не очень пригодны для использования для больших количеств данных. Ленты подороже, довольно надежны, относительно быстры, доступны и, в зависимости от размера ленты, удобны.
Имеются другие варианты. Они обычно не очень хороши по части доступности, но если это не проблема, они могут быть лучше с других точек зрения. Например, магнитооптические диски могут иметь хорошие стороны дискет (произвольный доступ делает восстановление одиночного файла быстрым), и лент (содержат много данных). К тому же, они очень надежны.
Выбор программ резервирования
Имеются много инструментальных средств, которые могут использоваться, чтобы делать резервные копии. Традиционные UNIX инструментальные средства, используемые для копий: tar, cpio и dump. Кроме того, имеется большое количество пакетов сторонних авторов (freeware и коммерческих), которые также можно использовать. Выбор резервного носителя может воздействовать на выбор инструментальных средств.
tar и cpio подобны, и обычно эквивалентны с резервной точки зрения. При этом они способны сохранять файлы на лентах и восстанавливать с них. Обе программы способны к использованию почти любых устройств, так как драйверы устройств заботятся об обработке устройства низкого уровня, и все устройства выглядят похожими с точки зрения програм уровня пользователя. Некоторые UNIX версии tar и cpio могут иметь проблемы с необычными файлами (символические связи, файлы устройства, файлы с очень длинными именами пути и так далее), но Linux версии должны обработать все файлы правильно.
dump резко отличается от них. Он читает файловую систему напрямую, не разбираясь с ее содержимым. Он написан специально для резервирования; tar и cpio сделаны для архивирования файлов, хотя они работают и для резервирования.
Чтение файловой системы непосредственно имеет некоторые преимущества. Это делает возможным обращение к файлам без воздействия на их временные метки; для tar и cpio, Вы должны смонтировать файловую систему только для чтения. Непосредственно чтение также более эффективно, если все содержимое файловой системы должно быть зарезервировано, так как это может быть выполнено с намного меньшим движением головки диска. Главный недостаток - то, что резервная программа специфична для одного типа файловойсистемы; Linux версия dump понимает только систему ext2.
dump также непосредственно поддерживает резервные уровни (которые мы будем обсуждать ниже); для tar и cpio это выполняется другими инструментальными средствами.
Сравнение и анализ инструментальных средств для резервирования от сторонних авторов выходит за пределы этой книги. Многие из свободно распространяемых утилит можно найти в списке Linux Software Map.
Вывод и настройка времени
В дистрибутиве Debian, часовой пояс системы определен символической связью /etc/localtime. Эта связь указывает на зональный файл данных, который описывает зону местного времени. Файлы данных часового пояса сохранены в /usr/lib/zoneinfo. Другие дистрибутивы Linux могут делать это по-другому.
Пользователь может изменять свой часовой пояс, устанавливая системную переменную TZ. Если она не установлена, принимается часовой пояс системы. Синтаксис TZ переменной описан в man-руководстве на tzset.
Команда date показывает текущую дату и время. Например: $ date Sun Jul 14 21:53:41 EET DST 1996 $ Текущее время: воскресенье, 14-ого июля, 1996 г., приблизительно десять часов вечера в часовом поясе, названном ``EET DST'' (что может значить восточноевропейское летнее время). Команда date может также показывать универсальное время: $ date -uSun Jul 14 18:53:42 UTC 1996 Sun Jul 14 18:53:42 UTC 1996 $ date также используется, чтобы установить программные часы ядра: # date 07142157 Sun Jul 14 21:57:00 EET DST 1996 # date Sun Jul 14 21:57:02 EET DST 1996 # См. man-руководство по date для подробностей: синтаксис немного сложный. Только root может устанавливать время. В то время, как каждый пользователь может иметь собственный часовой пояс, часы одни для всех.
date только показывает или настраивает программное обеспечение часов. Команда clock синхронизирует аппаратные и программные часы. Это используется когда система загружается, чтобы прочитать аппаратные часы и установить программные соответственно. Если Вы должны установить и те и другие часы, сначала установите программные часы командой date и затем аппаратные часы командой clock -w.
Опция -u команды clock Сообщает, что аппаратные часы находятся в универсальном времени. Вы должны использовать опцию -u правильно. Если Вы не делаете, ваш компьютер будет совершенно запутан относительно того, мсколько времени.
Часы должны быть изменены осторожно. Много частей Unix системы требуют, чтобы часы работали правильно. Например, демон cron выполняет команды периодически. Если Вы изменяете часы, он может запутаться надо ли выполнить команды или нет. На одной ранней Unix системе, кто-то устанавил часы на двадцать лет вперед, и cron захотел выполниться все периодические команды за двадцать лет сразу! Текущие версии cron должны бы обрабатывать это правильно, но Вы все еще будьте внимательны. Большие переходы более опасны, чем маленькие.
X и xdm
Замечание: Система X pеализует подключение к системе чеpез xdm, а также с помощью xterm -ls.
Загрузка в однопользовательском режиме
Очень важный уровень выполнения 1 ( однопользовательский режим), в котором системный администратор использует только необходимый минимум системных средств. Данный уровень выполнения нужен при выполнении особо важных задач системного администрирования, таких как запуск fsck на файловой системе /usr, для чего данную файловую систему надо размонтировать.
Запущенная система может быть переведена в однопользовательский режим командой telinit с запросом уровня выполнения 1. При загрузке он может быть установлен передачей ядру в командной строке параметра single или emergency . В этом случае init не будет использовать уровень выполнения, заданный по умолчанию.
Загрузка в однопользовательском режиме иногда необходима чтобы выполнить вручную fsck, прежде, чем что-нибудь смонтируется или как-то иначе коснется поврежденного раздела (любое действие на разбитой файловой системе, вероятно, разорвет ее еще больше, так что fsck должен быть выполнен как можно скорее).
Стартовый скрипт init автоматически запускает систему в однопользовательском режиме, если fsck при загрузке выявил ошибки на дисках. Такая мера предосторожности защищает те файловые системы, которые fsck не смог исправить самостоятельно. Такая поломка относительно редка, и обычно включает разбитый жесткий диск или экспериментальное ядро, но хорошо быть подготовленным.
Как мера защиты, правильно сконфигурированная система будет спрашивать root-пароль перед запуском оболочки в однопользовательском режиме. Иначе, было бы просто только ввести подходящую строку в LILO, чтобы войти как root. С другой стороны, если файл /etc/passwd поврежден в результате дисковых сбоев, такой подход принесет Вам немало неприятностей. Так что лучше всего иметь аварийно-спасательную дискету.
Запуск оболочки
Пpи запуске оболочки автоматически выполняется один или несколько заpанее установленных файлов. Различные оболочки используют pазные файлы. Для подpобной инфоpмации см. pуководства к этим оболочкам.
Большинство оболочек сначала запускает один общий файл, напpимеp, оболочка Bourne (/bin/sh) и ей подобные выполняют файл /etc/profile, в дополнение к нему она выполняет файл .profile в домашнем каталоге пользователя. В файле /etc/profile системным администpатоpом указываются установки и оболочка для всех пользователей, в частности, пеpеменная оболочки PATH и дp. В то вpемя как файл .profile используется для личных установок пользователя и индивидуальной настpойки оболочки.
Жесткие диски
В этом разделе рассматриваются термины, связанные с использованием жестких дисков.
Жесткий диск состоит из одной или нескольких круглых пластин, одна или обе стороны которой покрыты магнитным материалом, используемым для хранения информации. Для каждой стороны предусмотрена головка, позволяющая считывать или записывать информацию. Пластины вращаются на одной оси обычно со скоростью 3600 оборотов в минуту, хотя в более быстрых пpиводах используются более высокие скорости. Головки перемещаются вдоль радиуса поверхности пластин, что позволяет получить доступ к любой точке поверхности.
Центральный процессор (CPU) и жесткий диск обмениваются информацией через дисковый контроллер. Это упрощает схему обращения и работы с диском, так как контроллеры для разных типов дисков могут быть построены с использованием одного интерфейса для связи с компьютером. Поэтому, например, для считывания сектора можно воспользоваться всего лишь одной командой вместо сложных последовательностей электрических сигналов для того, чтобы переместить головки к нужной позиции, синхронизировать вращение диска и считывание или запись данных и др. (на самом деле, интерфейс между компьютером и контроллером тоже достаточно сложен, но не на столько, на сколько он был бы без использования контроллера). Котроллер также выполняет и некоторые другие функции, такие как буфеpизация информации или автоматическая замена плохих секторов.
Существуют еще некоторые понятия, знание которых необходимо для понимания работы жесткого диска. Обычно поверхности делятся на концентрические кольца, называемые дорожками или трэками, которые, в свою очередь, делятся на сектора. Такое разделение нужно для указания нужных позиций на диске и для распределения дискового пространства на файлы. Для нахождения нужной информации на диске достаточно примерно следующих данных: "поверхность 3, дорожка 5, сектор 7". Обычно количество секторов на дорожке одинаково для всех дорожек на диске, хотя в некоторых устройствах на внешних трэках размещается большее количество секторов (все сектора имеют один и тот же физический размер, поэтому на более длинных дорожках помещается больше секторов). Стандартный размер сектора равен 512 байт. Диск не может оперировать данными, объем которых менее одного сектора.
Каждая поверхность разделена на дорожки (tracks) и сектора (sectors) таким образом, что при перемещении головки одной поверхности к какой-либо дорожке, головки остальных поверхностей будут установлены на этой же дорожке. Совокупность всех таких дорожек называется цилиндром (cylinder). Для перемещения головок от одной дорожки (цилиндра) к другой требуется какое-то количество времени. Таким образом, если разместить данные, доступ к которым чаще всего производится сразу (например, файл), в одном цилиндре, то необходимость в перемещении головок отпадает. Это повышает производительность работы диска. Не всегда представляется возможным разместить файл подобным образом. Файлы, которые хранятся в разных местах на диске, называются фрагментированными (fragmented).
Количество поверхностей (или головок, что в принципе одно и то же), цилиндров и секторов сильно различается у разных устройств. Совокупность таких параметров называется структурой или геометрией (geometry) диска, которая хранится в специальной памяти, для питания которой используются аккумуляторы. Эта память называется CMOS RAM, откуда операционная система может считывать информацию во время ее загрузки или во время установки драйвера.
К сожалению, BIOS построен так, что не представляется возможным указать дорожку, номер которой превышает 1024, для записи в CMOS RAM, что является серьезным ограничением для дисков больших объемов. Для решения этой проблемы контроллер жесткого диска передает заведомо неправильную информацию о структуре диска и преобразует данные, представляемые компьютером, в нечто, соответсвующее реальности. Например, жесткий диск может состоять из 8 головок, 2048 дорожек с 35 секторами в каждой. В то время как контроллер может утверждать, что диск имеет 16 головок и 1024 дорожки с 35 секторами в каждой, не превышая предела на хранение в CMOS RAM числа дорожек и преобразуя адресацию уменьшая номер головки вдвое и удваивая номер дорожки. Преобразование адресов искажает представление операционной системы о структуре диска, что усложняет размещение требуемой информации на одном цилиндре для увеличения производительности.
Преобразование используется только для IDE дисков. В SCSI дисках используется доступ с применением последовательного номера сектора (который контроллер преобразует в номер головки, цилиндра и сектора диска) и другой метод обмена информацией с процессором. Однако, процессор может не иметь представления о реальной структуре диска.
Так как системе Linux часто не известна информация о структуре диска, то в файловых системах не используется размещение отдельных файлов в пределах одного цилиндра. Вместо этого применяется размещение файлов в цепочках последовательно расположенных секторов, что дает приблизительно одинаковую производительность. Хотя проблема усложняется за счет использования специальных возможностей контроллера, таких как внутреннее кэширование и других автоматических функций.
Каждый жесткий диск представлен отдельным файлом. Для IDE дисков обычно существует до четырех таких файлов. Они известны как /dev/hda, и /dev/hdb соответственно. Для вторичного IDE-контроллера есть имена /dev/hdc и /dev/hdd. Для SCSI дисков используются файлы /dev/sda, /dev/sdb и т.д. Подобные обозначения применяются и для других типов дисков. Файлы устройств для жестких дисков предоставляют доступ к целому диску, не рассматривая разделы (которые будут описаны ниже) и поэтому не составляет труда перепутать разделы диска или информацию в них, если не быть достаточно осторожным. Файлы жестких дисков обычно используются для доступа к информации в MBR (которые также рассмотрены ниже).