liw@iki.fi
viu@iki.fi
Руководство по системному администрированию операционной системы Linux для начинающих.
Copyright 1993--1998 Lars Wirzenius.
Торговые марки принадлежат их владельцам.
Разрешается делать и распространять дословные копии этого руководства, обеспечивая соблюдение авторского права, сохранение записи об авторах и этого примечания во всех копиях.
Разрешается обработка исходного документа транслятором языка TeX или другим форматировщиком, печать результатов и распространение напечатанного документа, если напечатанный документ имеет разрешение копирования, идентичное этому, включая ссылки на официальную домашнюю страничку и координаты мест, где можно получить исходный текст документа.
Разрешается копировать и распространять измененные версии этого руководства для дословного копирования, при условии, что все результаты распространяются в соответствии с разрешением, идентичным этому.
Разрешается копировать и распространять переводы этого руководства на другой язык, при вышеупомянутых условиях для измененных версий.
Автор оценит изменения и дополнения, переводы и напечатанные версии. Спасибо.
Дальше | ||
Введение |
Этот раздел описывает основы управления памятью в Linux, виртуальную память и дисковый кэш-буфер. Описано все, что администратор системы должен учесть при настройке.
Linux поддерживает виртуальную память, то есть использует диск как расширение оперативной памяти так, чтобы эффективный размер пригодной для использования памяти был больше размера памяти, реально установленной в системе. Ядро пишет содержимое блока памяти, неиспользуемого в настоящее время на жесткий диск так, чтобы память могла использоваться для другой цели. Когда первоначальное содержание понадобится снова, оно будет считано обратно в память. Этот механизм сделано полностью прозрачным для пользователя; программы, запущенные под Linux, видят только большой доступный объем памяти, и не обращают внимания на то, что их части время от времени оказываются на диске. Конечно, чтение и запись жесткого диска медленнее, чем использование реальной памяти, так что программы не выполняются как быстро. Часть жесткого диска, который используется как виртуальная память, называется свопом.
Linux может использовать нормальный файл в любой файловой системе или отдельном разделе для свопа. Раздел для свопа быстрее, но проще изменить размер файла подкачки (нет никакой потребности к перераспределению целого жесткого диска и, возможно, устанавке всего с нуля). Когда Вы знаете, сколько места для свопа Вам надо, Вы должны использовать раздел для свопа, но если Вы не уверенные, лучше сначала использовать файл подкачки сначала, поработать с системой некоторое время, чтобы Вы могли получить представление о том, сколько места Вам нужно, и затем, когда вы будете уверены относительно размера, создать раздел для свопа.
Вы должны также знать, что Linux позволяет использовать несколько разделов и/или файлов подкачки в одно и то же время. Это означает, что, если Вы только иногда нуждаетесь в большом количестве виртуальной памяти, Вы можете устанавливать дополнительный файл подкачки в таких случаях, вместо того, чтобы хранить такой файл постоянно.
Примечание относительно терминологии операционной системы: информатика обычно различает между подкачкой (запись целого процесса, чтобы менять свободное место) и листание (запись только частей фиксированного размера, обычно несколько килобайт, одновременно). Листание обычно более эффективно, и именно его Linux и использует, но традиционно терминология в Linux употребляет все же термин подкачки.
Этот раздел объясняет, что происходит при запуске и остановке Linux-системы, и как это должно быть выполнено правильно. Если соответствующие процедуры не выполняются, файлы могут быть разрушены или потеряны.
Включение компьютерной системы и запуск операционной системы, называется загрузкой.
Во время загрузки компьютер сначала читает маленький кусочек кода, именуемый начальным загрузчиком который в свою очередь загружает операционную систему. Программа начальной загрузки обычно сохраняется в фиксированном месте на жестком диске или дискете. Причина такого разделения сводится к тому, что на одном компьютере может быть несколько операционных систем, и требуется возможность управления тем, какая из них будет загружена.
Различные компьютеры выполняют начальную загрузку по-разному. Для наиболее распространенных PC-компьютеров BIOS (БАЗОВАЯ СИСТЕМА ВВОДА-ВЫВОДА) читает первый сектор (называемом boot sector или по-русски загрузочным сектором) дискеты или жесткого диска. Программа начальной загрузки хранится в этом секторе. Она загружает операционную систему из другого места на диске или с другого диска.
После загрузки Linux инициализирует аппаратные средства и драйверы устройств и затем выполняет init. Init запускает другие процессы, разрешает пользователям входить в систему и работать в ней. Детали этой части загрузки системы будут рассмотрены ниже.
Чтобы остановить Linux систему, надо сначала послать всем процессам сообщенение, чтобы они завершились (это заставляет их закрыть любые файлы и выполнить другие необходимые действия), затем размонтировать файловые системы и области свопа и в заключение вывести сообщение о том, что питание может быть выключено. Если соответствующая процедура не выполнена, могут произойти крупные неприятности. Наиболее важно то, что кэш-буфера файловых систем не были записаны на диски. Это означает что все данные, находившиеся в них, потеряны, а файловые системы на диске противоречивы и, как следствие, возможно, непригодны к использованию.
Эта глава описывает процесс init, который является первым процессом уровня пользователя, запускаемым ядром. init имеет много важных режимов работы, таких как запуск getty (чтобы пользователи могли войти в систему), изменение уровня выполнения системы и удаление ненужных процессов. Эта глава объясняет как настроить init и как можно менять и использовать различные уровни выполнения.
init является одной из тех программ, которые абсолютно необходимы для системы Linux, но это Вы обычно можете игнорировать. Хороший дистрибутив Linux поставляется с настройками для init, которые подходят для большинства систем. В таком случае Вам не придется что-либо настраивать самому. Вам придется заниматься настройкой init если Вы используете последовательные терминалы (хотя сейчас ими уже никто не пользуется), dial-in (не dial-out) модемы, или меняете настройки уровней выполнения, что вообще-то нужно редко.
Когда ядро запущено (загружено в память, получило управление и инициализировало все драйверы устройств и структуры), оно запускает программу уровня пользователя. Первой такой программой всегда является именно init. Таким образом, init всегда является первым процессом (номер процесса всегда 1).
Ядро ищет init в нескольких местах, в которых он располагается по традиции. В Linux обычно используется имя /sbin/init. Если ядро не нашло init, оно пробует запустить /bin/sh. Если и тут происходит неудача, система выдает ошибку и останавливается.
Когда init запущен, он завершает процесс загрузки системы и выполняет ряд административных задач, таких как проверка файловых систем, очистка каталога /tmp, запуск различных сервисов и запуск процесса getty для каждого терминала и виртуальной консоли откуда пользователи могут входить в систему (см. главу 8 о регистрации пользователей и входе в систему).
После нормального запуска системы init перезапускает getty для каждого терминала после того, как пользователь завершил работу с системой (чтобы следующий пользователь мог зарегистрироваться в системе). init также перехватывает ничейные процессы: когда процесс запускает порожденный процесс и завершает работу до своего потомка, его потомок немедленно становится порожденным из init. Это важно по различным техническим причинам. Вам следует знать это чтобы понять списки процессов и графы дерева процессов. Имеется несколько вариантов init. Большинство дистрибутивов Linux используют sysvinit (написал Miquel van Smoorenburg), который основан на System V init. BSD версии Unix имеют отличия в процессе init . Главным различием являются уровни выполнения: System V имеет их, а BSD нет (по крайней мере, обычно). Мы будем рассматривать только sysvinit.
Этот раздел описывает то, что происходит, когда пользователь входит в систему или выходит из нее. Рассмотрены различные взаимодействия фоновых процессов, журналов, файлов конфигурации, и тому подобного.
Сначала 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 все еще важен.
Эта глава объясняет, как создать новых пользователей, как изменить их свойства и как удалить пользователей. Различные Linux-системы имеют различные инструментальные средства для выполнения этих действий.
Когда компьютер используется многими людьми, необходимо разделение между пользователями так, чтобы их частные файлы могли сохраняться порознь. Это важно, даже если компьютер может использоваться только одним человеком одновременно, как большинство микроЭВМ. Таким образом, каждый пользователь имеет уникальный username (логин, сетевое имя, аккаунт, единого русского термина здесь нет). Это имя используется для доступа к системе. По нему система может однозначно определить с кем именно она имеет дело в настоящий момент.
Аккаунт больше, чем прото имя пользователя. Аккаунт-все файлы, ресурсы и информация, принадлежащая одному пользователю. Каждый пользователь имеет доступ к конкретным ресурсам системы (времени процессора, месту на диске, установленному программному обеспечению, сетевым ресурсам).
Эта глава объясняет почему, как и когда делать резервные копии, и как восстановить данные из резервных копий.
Ваши данные ценны. Потребуется время и усилия на восстановление данных в случае их потери, и это стоит денег или по крайней мере Ваших нервов. Иногда данные не могут быть восстановлены, например, если это - результаты каких-то экспериментов. Так как данные - капиталовложение, Вы должны защитить их и предпринять шаги, чтобы избежать потерь.
Имеются четыре основных причины, потерь данных: аппаратные сбои, программные ошибки, человеческое действие, или естественные бедствия. [1], хотя современные аппаратные средства имеют тенденцию, быть совершенно надежными, они все еще могут преподносить неожиданные неприятные сюрпризы. Наиболее критическая часть аппаратных средств для сохранения данных - жесткий диск, который полагается на крошечные магнитные поля, остающиеся неповрежденным в мире, заполненном электромагнитным шумом. Современное программное обеспечение не имеет тенденции быть надежным; твердая, как скала, программа - исключительная ситуация, не правило. Люди совершенно ненадежны, они будут или делать ошибку, или злонамеренно уничтожать данные. В целом, маленькое чудо то, что что-нибудь работает вообще.
Резервирование - способ защитить капиталовложения в данные. При наличии нескольких копий данных, разрушениеодной копии не имеет сильного значения (потери - только стоимость восстановления потерянных данных из копии).
Важно делать копии правильно. Подобно всему физическому миру, копии будут рано или поздно терпеть неудачу. При выполнении копий хорошо удостоверьтесь, что они работают: Вы же не хотите обнаружить, что ваши копии не работают, когда они понадобятся? [2]Если Вы имеете только одну резервную среду, это может оставить Вас наедине с пеплом от трудной работы из-за ее повреждения. Или Вы можете, при попытке восстановить данные, обратить внимание, что Вы забыли сохранить кое-что важное, например базу данных на 15000 пользователей Вашего сайта. Так что здесь нужна собранность и аккуратность. С другой стороны нет смысла резервировать то, что никогда не придется восстанавливать. Например, автор знает один сервер, на котором регулярно резервируется каталог /tmp. А вот зачем, никто не знает...
[1] | Пятая причина резервирования: "что-нибудь еще". |
[2] | Не смейтесь. Такое было с несколькими системными администраторами. |
Эта глава объясняет, как Linux хранит время, и что Вы должны делать, чтобы избежать проблем. Обычно Вам не придется делать что-нибудь со временем, но хорошо понять основы на всякий случай.
Измерение времени основано на регулярных естественных явлениях, чередующихся светлых и темных периодов, вызванных вращением планеты. Общее время, принимаемое двумя последовательными периодами постоянно, но длины светлого и темного периодов изменяются. Одна простая константа - полдень.
Полдень - время дня, когда Солнце - в самой высокой позиция. Так как Земля вращается, [1] полдень наступает в разное время в различных местах. Это ведет к понятию местное время. Время измеряется в единицах, которые привязаны к естественному явлению, подобно полудню. Пока Вы остаетесь в одном и том же месте, не имеет значения, что местные времена отличаются.
Как только Вам понадобится связаться с отдаленными местами, Вы обратите внимание на потребность в наличие некоего общего времени. Большинство мест в мире связывается с другими местами в мире, так что глобальный стандарт на измерение времени определен. Он назван universal time, универсальным временем (UT или UTC, прежде известный как Greenwich Mean Time или GMT (время по Гринвичу), так как это время является местным временем в Гринвиче, Англия). Когда люди с различными местными временами должны связаться, они могут выражать времена в универсальном времени так, чтобы не было беспорядка.
Каждое местное время названо часовым поясом (временной зоной). В то время как география позволяет всем местам, которые имеют полдень в то же самое время, иметь один и тот же часовой пояс, политика делает это трудным. По различным причинам, много стран используют летнее время , Россия использует именно такую систему, так что нет смысла объяснять про летнее время подробно. Замечу лишь, что оно используется для того, чтобы световой день больше соответствовал биологическому дню. Многие страны не делают этого, а те которые делают, не могут придти к соглашению о том, когда же переводить часы. Это делает преобразования часового пояса сложной задачей.
Часовые пояса лучше всего обозначены расположением или сообщением различия между локальным и универсальным временем. В США и некоторых других страны зоны местного времени имеют имя и трехсимвольное кодовое обозначение. Коды не уникальны, но они и не должны использоваться в разных странах. Лучше говорить о местном времени в, скажем, Хельсинки, чем о Восточноевропейском времени, поскольку не все страны в Восточной Европе следует этим правилам.
Linux имеет пакет часового пояса, который знает о всех существующих часовых поясах и может легко модифицироваться при изменении правил. Все, что администратор системы должен сделать, так это выбрать соответствующий часовой пояс. Также, каждый пользователь может устанавливать собственный часовой пояс; это важно для работы многих людей с компьютерами в различных странах через сеть Internet. При изменении правил перехода на летнее время в Вашем часовом поясе Вам придется обновить соответствующие компоненты вашей Linux системы, а именно обновить системную базу часовых поясов и файлы данных о летнем времени в Вашем часовом поясе. Все действия просты и не займут у Вас много времени.
[1] | Недавние исследования. |
В этой книге (Linux System Administrators' Guide) рассматриваются аспекты системного администрирования операционной системы Linux. В первую очередь данное руководство предназначено для тех, кто практически ничего не знает о системном администрировании, но ознакомлен с основами работы с системой Linux, которые рассмотрены в книге "Руководство Пользователя Системы Linux". В данном руководстве не уделяется внимания проблемам, связанным с установкой системы. Исчерпывающую информацию по этому вопросу можно получить из книги "Установка и Запуск Системы Linux" (Installation and Getting Started). Во многих руководствах из серии LDP (Linux Documentation Project) рассматриваются одни и те же вопросы с разных точек зpения. Ниже содержится более подробная информация о руководствах по системе Linux.
Что же называется системным администрированием? Это все то, что требуется для поддержки работоспособности компьютерной системы (например, создание резервных копий некоторых файлов, установка новых программ, создание и удаление пользователей, проверка целостности файловой системы и т.д.). Если сравнивать компьютер с домом, то системное администрирование можно назвать содержанием этого дома, включающее в себя уборку, устранение различных неисправностей и т.д. Но системное администрирование не называют содержанием, так как тогда это было бы слишком просто.
Руководство составлено таким образом, что главы не зависят друг от друга и могут быть рассмотрены отдельно. Например, для получения информации по созданию резервных копий Вы можете прочитать только одну главу. Это очень удобно и позволяет использовать книгу в качестве справочного пособия, а также избежать чтения всего руководства вместо нескольких разделов. Однако, прежде всего это книга, а затем уже справочник.
Конечно, в этой книге не содержится всей необходимой информации по системному администрированию, хотя много полезного можно найти и в другой документации по системе Linux. В конце концов, системный администратор это просто пользователь с привелигированными правами доступа и определенными обязанностями. Также много полезной и важной информации можно узнать из встроенных описаний к программам (при помощи команды 'man').
В то время как эта книга рассчитана на использование операционной системы Linux, она может быть расмотрена и по отношению к другим UNIX-подобным операционным системам. Так как разные версии системы UNIX сильно различаются (особенно в вопросах системного администрирования), то довольно сложно охватить весь материал, касающийся каждой модификации. Даже рассмотрение всех особенностей ОС Linux - сложная задача, так как она сейчас находится в стадии развития. На данный момент не существует официальной версии Linux, поэтому у разных людей она установлена по разному. В книге указаны различия между такими системами и рассмотрены некоторые альтернативы, где это возможно. Также в книге содержится много информации, которая не каждому может потребоваться. Такие моменты специально отмечены и могут быть пропущены, если используется уже сконфигурированная система.
Также как и другие разработки, связанные с операционной системой Linux, книга была написана на добровольных началах. Однако, как и в любой добровольной работе, существует предел предпринимаемым усилиям, а также знаниям и опыту автора. Это означает, что данное руководство не обязательно также хорошо написано, как если бы оно было написано на коммерческой основе. Данное руководство не является описанием какого-либо конкретного дистрибутива Linux, хотя ближе всего оно к Debian GNU/Linux.
Следует отметить, что в этой книге не полностью охвачены многие проблемы, которые рассмотрены в других свободно распространяемых руководствах и документациях. Особенно это относится к описаниям к различным программам, например, к особенностям использования mkfs(8). В данном руководстве описано только назначение этой программы в объеме, необходимом для использования в книге. Для получения более подробной информации имеются ссылки к другим руководствам и документациям, которые обычно являются частью полного набора документации по системе Linux.
У автора есть стремление развивать и улучшать эту разработку. Просьба направлять все замечания (ошибки, новые идеи, информация о различиях между различными версиями системы UNIX и т.д.) либо по адресу электронной почты pautovv@joker.botik.ru.
Я не описал полностью очень многие вопросы, которые уже хорошо описаны в других свободно доступных руководствах. Это особенно относится к документации на специфические программы, типа всех деталей использования mkfs. Я только описываю цель программы и то, что необходимо для использования с этим руководством. Для дальнейшей информации, я отсылаю читателя к другим руководствам. Обычно, вся упоминаемая документация является частью полного документационного набора Linux.
Проект документирования системы Linux или LDP (Linux Documentation Project), это свободная команда писателей, корректоров и редакторов перед которыми стоит цель создания полной документации по операционной системе Linux. Главным координатором проекта является Greg Hankins.
Данное руководство является одним из набора распространяемых
руководств проекта LDP, который включает в себя "Руководство
Пользователя Системы Linux", "Руководство Системного
Администратора Системы Linux", "Руководство Сетевого
Администратора Системы Linux" и "Руководство Взломщика Ядра
Linux". Оригиналы этих книг на английском языке доступны в исходном формате
LaTeX, .dvi формате и в формате postscript через FTP:
ftp://sunsite.unc.edu/pub/Linux/docs/LDP или
ftp://tsx-11.mit.edu/pub/linux/docs/guides.
Для того, чтобы связаться с LDP, нужно послать письмо Greg'у Hankins по адресу: gregh@sunsite.unc.edu.
Русская версия LDP (Russian LDP или RLDP) станет доступна по FTP, когда я найду сервер, на который ее положить. С автором можно связаться по адресу: rldp@pautov.botik.ru.
В этой главе дается обзор операционной системы Linux. Прежде всего рассматриваются основные функции системы. Затем следует описание программ, реализующих эти функции. Цель главы - дать понимание системы в целом, поэтому каждый раздел рассматривается более подробно позже.
ОС UNIXсостоит из ядра и множества системных программ. Также имеются пользовательские программы или приложения. Ядро является основой операционной системы [1]. Оно размещает файлы на диске, запускает программы и переключает процессор и другое оборудование между ними для обеспечения мультизадачности, распределяет память и другие ресурсы между процессами, обеспечивает обмен пакетами в сети и т.п. Ядро само по себе выполняет только маленькую часть общей работы, но оно предоставляет средства, обеспечивающие выполнение основных функций. Оно также предотвращает использование прямого доступа к аппаратным средствам предоставляя специальные средства для обращения к периферии. Таким образом ядро позволяет контролировать использовние аппаратных средств различными процессами и обеспечивать некоторую защиту пользователей друг от друга. Средства, предоставляемые ядром, используются через системные вызовы (см. раздел 2 man-руководства для более подробной информации по этому вопросу).
Системные программы используют средства, предоставляемые ядром для обеспечения выполнения различных функций операционной системы. Системные и все остальные программы выполняются 'на поверхности ядра', в так называемом пользовательском режиме. Существует некотоpая разница между системными и прикладными программами. Прикладные программы предназначены для выполнения какой-либо определенной задачи, в то время как системные программы используются для поддержания работы системы. Текстовый процессор является прикладной программой, а программа telnet системной, хотя зачастую граница между ними довольно смутная.
Довольно часто операционная система содержит компиляторы и соответствующие им библиотеки (GCC и C библиотеки для Linux), хотя не обязательно все языки программирования должны быть частью операционной системы. Документация, а иногда даже игры, могут являться ее частью. Обычно состав операционной системы определяется содержимым установочного диска или ленты, хотя дело обстоит несколько сложнее, так как различные части операционной системы разбросаны по разным FTP серверам во всем мире.
[1] |
Часто путают операционную систему и ядро по их функциональности. Должен заметить, что операционная система предоставляет существенно больше сервисов, чем само ядро. |
При установке системы или изменении ее конфигурации обычно возникает много проблем с дисками. Нужно установить файловые системы на дисках так, чтобы на них могли хранится файлы, а также зарезервировать пространство для других частей операционной системы.
В этой главе рассматриваются все эти вопросы. Обычно, если система уже установлена, то каких-либо проблем с дисками в дальнейшем быть не должно, кроме pаботы с дискетами. При установке нового диска или его настройке следует обращаться к этой главе.
При администрировании дисков могут возникнуть следующие проблемы:
Форматирование диска с поиском сбойных секторов (в настоящее время форматирование является необязательной процедурой для многих типов дисков, форматируемых на заводе).
Разделение диска, если диск будет использоваться для разных целей. Одна из причин разделения - это хранение разных операционных систем на одном диске. Другая причина - хранение пользовательских и системных файлов в pазных pазделах, что упрощает резервное копирование и восстановление, а также защиту системных файлов от повреждений.
Создание файловой системы на соответствующем диске или разделе. В системе Linux диск ничего не значит, пока на нем не установлена файловая система. Только после этого возможна работа с файлами.
Монтирование различных файловых систем для формирования единой структуры каталогов, как автоматически так и вручную (файловые системы, монтируемые вручную, должны быть вpучную демонтированы).
Глава 5 рассматривает вопросы буфеpизации дисков и работы с виртуальной памятью, что также нужно знать при работе с дисками.
В системе UNIX, а следовательно и Linux, существует два типа устройств: блочные устройства с прямым доступом (такие как диски) и символьные устройства (такие как ленточные накопители и последовательные порты), некоторые из них могут быть последовательными, а некоторые с прямым доступом. Каждое поддерживаемое устройство представляется в файловой системе файлом устройства. При выполнении операций чтения или записи с подобным файлом, происходит обмен данными между устройством, на которое указывает этот файл. Такой способ доступа к устройствам позволяет не использовать специальные программы (а также специальные методы програмирования, такие как работа с прерываниями). Например, для распечатки файла на принтере, используется следующая команда:
$ cat filename > /dev/lp1 $и содержимое файла будет напечатано (правда, файл может быть в формате, непригодном для непосредственной печати). Однако, для распечатки файлов используется специальная программа (обычно lpr), которая контролирует поток поступающих файлов во избежание возникновения конфликтных ситуаций, например, при попытке распечатать на одном принтере одновpеменно несколько разных файлов. По мере распечатки, новые файлы поступают автоматически. По подобной схеме работает большинство устройств. Однако с файлами устройств проблемы возникают очень редко. Данная программа передает на принтер один файл в единицу времени, что позволяет избежать одновременной посылки на печать нескольких файлов, и автоматически посылает следующий файл, как только принтер освободится.
Так как устройства отображаются как файлы в файловой системе (в каталоге /dev), несложно обнаружить с помощью команды ls какие существуют файлы устройств. После выполнения команды ls -l на экран выводится список файлов, причем в первой колонке содержится тип файла и права доступа к нему. Например, для просмотра файла, соответствующего последовательному порту, используется следующая команда:
$ ls -l /dev/cua0 crw-rw-rw- 1 root uucp 5, 64 Nov 30 1999 /dev/cua0 $Первый символ в первой колонке (crw-rw-rw-), т.е. 'c', показывает тип файла, в данном случае символьное устройство. Для обычных файлов используется символ '-', для каталогов 'd', для блочных устройств 'b' (см. pуководство к команде ls для более подробной информации).
Наличие большого количества файлов устройств совсем не означает, что эти устройства на самом деле установлены. Наличие файла /dev/sda ни о чем не говорит и совсем не означает, что в компьютере установлен жесткий диск SCSI. Это предусмотрено для облегчения установки программ и нового оборудования (нет необходимости искать нужные параметры и создавать файлы для новых устройств).
Это место выделено будущему посвящению.
Исходный текст оригинала (английского) данного руководства и его версии в разных форматах доступны через Интернет по anonymous FTP на домашней странице Linux Documentation Project http://sunsite.unc.edu/LDP, или на домашней странице данного http://www.iki.fi/viu/linux/sag . Доступны файлы в форматах PostScript, HTML, SGML и TeX .DVI. Исходный текст представляет собой набор TeX .tex-файлов для компиляции.
В этой главе дается обзор операционной системы Linux. Прежде всего рассматриваются основные функции системы. Затем следует описание программ, реализующих эти функции. Цель главы дать понимание системы в целом, поэтому каждый раздел рассматривается более подробно позже.
Единственную и самую важную функцую в UNIX системе предоставляет пpоцесс init. Он запускается в любой UNIX системе как самый первый процесс, а также завершает процедуpу загрузки системы. При запуске init, продолжается процесс загрузки (проверяются и устанавливаются файловые системы, запускаются различные программы-демоны и т.д.).
Точный список того, что выполняется при запуске init , зависит от версии программы. Обычно init предоставляет однопользовательский режим, при котором никто не может подключиться к системе. Обычный режим многопользовательский. Некоторые версии используют понятие 'уровень выполнения' . Например, однопользовательский и многопользовательский режимы - это разные уровни выполнения. Также существуют дополнительные уровни, например для запуска X-windows.
При работающей системе, две самые важные задачи программы init - это удостоверится, что все программы-демоны getty работают (т.е. имеется возможность подключения к системе) и адаптирование orphan-процессов (т.е. процессов, чей родительский процесс был уничтожен; в системе UNIX все процессы должны принадлежать одному дереву процессов, поэтому orphan-процессы должны быть адаптированы).
При завершении работы системы и перезапуске, init уничтожает все оставшиеся процессы, демонтирует файловые системы и останавливает процессор.
Подключение к системе с терминалов (через последовательные линии) и с главной консоли (если не запущены X) обеспечивается программой getty. init запускает отдельный процесс getty для каждого терминала. getty считавает имя пользователя и запускает программу login, которая считывает пароль. Если имя и пароль соответствуют одному пользователю, то login запускает оболочку. При выходе из оболочки, то есть при выходе из системы, или при завершении программы login в случае если имя пользователя и пароль не подходят, init запускает новый процесс getty. Ядро не контролирует подключения к системе, а только выполняет системные программы.
Иногда при работе ядра или различных системных программ возникают ошибки, предупреждения и другие сообщения. Программа syslog записывает все сообщения в файл так, что он может быть впоследствии просмотрен. Программа syslog можно сконфигурировать так, что сообщения будут сортироваться и записываться в разные файлы по приоритету. Например, сообщения ядра часто направляются в отдельный файл, так как эти сообщения наиболее важные и должны регулярно просматриваться во избежание серьезных проблем.
Как отдельным пользователям, так и системному администратору иногда требуется периодически запускать определенные команды. Например, системному администратору может потребоваться периодически запускать команду для очистки каталогов от временных файлов (/tmp и /var/tmp), для предотвращения переполнения диска.
Для этого используется сервис cron. У каждого пользователя имеется файл crontab, в котором содержится список команд, представленных к выполнению и количество раз, которое они должны быть выполнены. Программа-демон crond обеспечивает своевременное выполнение указанных команд.
Сервис at аналогична cron, но команда запускается один раз в указанное время и запуск больше не повторяется.
Как в системе UNIX так и в Linux, пользовательский интерфейс не встраивается в ядро системы. Вместо этого он представляется программами пользовательского уровня. Это применяется как к текстовым, так и к графическим оболочкам.
Такой стандарт делает систему более гибкой, хотя и имеет свои недостатки. Например, это легко позволяет создавать новые интерфейсы для программ, что затрудняет изучение системы.
Первоначально используемой с системой Linux графической оболочкой была система X Window System (сокращенно X). X не реализует пользовательский интерфейс, а только оконную систему, т.е. средства, с помощью которых может быть реализован графический интерфейс. Три наиболее популярных версии графических интерфейсов на основе X - это Athena, Motif и Open Look.
Сеть - это средство, позволяющее соединяться двум или более компьютерам между собой. Есть немало разных протоколов сетевого обмена, и предоставляемые ими возможности весьма обширны, но конечный результат часто оказывается весьма далек от ожидаемого.
UNIX-подобные операционные системы имеют широкий спектр сетевых возможностей. Большинство базовых функций (файловые системы, печать, создание резервных копий и т.д.) могут быть реализованы посредством сети. Это может значительно облегчить работу системного администратора, так как позволяет использовать централизованное администрирование.
Однако, в этой книге поверхностно рассмотрены вопросы работы с сетью. Для более подробной информации см. книгу "Руководство Сетевого Администратора Системы Linux" (Linux Network Administrators' Guide).
Подключение к системе через сеть работает несколько иначе, чем обычное подключение. Существуют отдельные физические последовательные линии для каждого терминала, через которые и происходит подключение. Для каждого пользователя, подключающегося к системе, существует отдельное виртуальное сетевое соединение и их может быть любое количество. Однако не представляется возможным запустить отдельный процесс getty для каждого возможного виртуального соединения. Существуют также и другие способы подключения к системе посредством сети. Например, telnet и rlogin - основные службы в TCP/IP сетях.
При использовании сети для подключения к системе, кроме большого количества процессов getty используется отдельная программа-демон (при использовании как telnet так и login используются различные программы-демоны), которая отслеживает все попытки соединения с компьютером. Если опpеделяется попытка соединения, то программа создает новый процесс - создает сама себя для обработки этого соединения - а затем продолжает отслеживание новых соединений. Создаваемый процесс идентичен программе getty.
Одна из наиболее полезных функций, которая может быть реализована с помощью сети, это разделение файлов через сетевую файловую систему. Обычно используется система, называемая Network File System или NFS, которая разработана корпорацией Sun.
При работе с сетевой файловой системой любые операции над файлами, производимыми на локальном комьютере, передаются через сеть на удаленную машину. При работе сетевой файловой системы программа считает, что все файлы на удаленном компьютере находятся на компьютере, где она запущена. Таким образом разделение информации посредством такой системы не требует внесения каких-либо изменений в программу.
Электронная почта является самым важным средством связи между компьютерами. Электронные письма хранятся в одном файле в специальном формате. Для чтения и отправления писем применяются специальные программы.
У каждого пользователя имеется отдельный почтовый ящик (файл, где информация хранится в специальном формате), в котром хранится приходящая почта. Если на комьютер приходит письмо, то программа обработки почты находит файл почтового ящика соответвующего пользователя и добавляет туда полученное письмо. Если же почтовый ящик пользователя находится на другом компьютере, то письмо перенаправляется на этот компьютер, где проходит его последующая обработка.
Почтовая система состоит из множества различных программ. Доставка писем к локальным или удаленным почтовым ящикам производится одной программой агентом передачи почты (mail transfer agent или MTA) (например, sendmail или smail), в то время как для обычной отправки или просмотра писем применяется большое количетсво различных программ пользовательских почтовых клиентов (mail user agent или MUA) (например, Pine или elm). Файлы почтовых ящиков обычно хранятся в каталоге /var/spool/mail.
Вы не поверите, но система UNIX первоначально разрабатывалась именно для управления печатным комплексом, невиданных доселе размеров. Так что печатать она должна уметь. Увы, уж что-что, а вот печатать-то она толком и не умеет...
В один момент времени принтером может пользоваться только один пользователь. Поэтому для того, чтобы принтером могли пользоваться сразу несколько пользователей, используется специальная программа, которая обеспечивает обслуживание очереди к принтеру. Все задания для принтера помещаются в буфеp. Когда принтер заканчивает обработку одного задания, следуещее передается к нему автоматически. Это значительно упрощает работу с принтером.
Программа обслуживания очереди к принтеру (также spools) помещает информацию, которая должна быть распечатана, на диск, то есть текст располагается на диске, в то время как задание находится в очереди. Это позволяет прикладным программам достаточно быстро распечатывать тексты, помещая их в очередь, так как для продолжения работы приложению не требуется дожидаться окончания распечатки.
Файловая система разделяется на несколько частей: файловая система root, состоящая из каталогов /bin, /lib, /etc, /dev и некоторых других, файловая система /usr, где хранятся различные программы и данные не подлежащие изменению, файловая система /var, где содержатся изменяемые файлы (такие как log файлы и др.) и файловая система /home, которая состоит из личных каталогов пользователей. Разделение может существенно отличатся от выше указанного в зависимости от работы системного администратора и конфигурации аппаратного обеспечения: все системы могут располагаться наодном диске или даже на разных компьютерах.
В главе 3 сруктура файловой системы рассматривается более подробно (см. также Linux Filesystem Standard).
A Файловая система это методы и структуры данных, которые используются операционной системой для хранения файлов на диске или его разделе. О файловой системе также говорят, ссылаясь на раздел или диск, используемый для хранения файлов или тип файловой системы.
Нужно видеть разницу между диском или разделом и установленной на нем файловой системой. Некоторые программы (например, программы установки файловой системы) при обращении к диску или разделу используют прямой доступ к секторам. Если на этом месте была файловая система, то она будет серьезно повреждена. Большинство программ взаимодействуют с диском посредством файловой системы, и, следовательно, их работа будет нарушена, если на разделе или диске никакая система не установлена (или тип файловой системы не соответствует требуемуму).
Перед тем, как раздел или диск могут быть использованы в качестве файловой системы, она должна быть инициализирована, а требуемые данные перенесены на этот диск. Этот процесс называется созданием файловой системы..
У большей части файловых систем UNIX сходная структура, а их некоторые особенности очень мало различаются. Основными понятиями являются: суперблок (superblock), индексный дескриптор (inode), блок данных (data block), блок каталога (directory block) и косвенный блок (indirection block). В суперблоке содержится информация о файловой системе в целом, например, ее размер (точная информация зависит от типа файловой системы). В индексном дескрипторе хранится вся информация о файле, кроме его имени. Имя файла хранится в блоке каталога, вместе с номером дескриптора. Запись каталога содержит имя файла и номер индексного дескриптора соответствующего файла. В этом дескрипторе хранятся номера нескольких блоков данных, которые используются для хранения самого файла. В inode есть место только для нескольких номеров блоков данных, однако, если требуется большее количество, то пространство для указателей на блоки данных динамически выделяется. Такие блоки называются косвенными. Для того, чтобы найти блок данных, нужно сначала найти его номер в косвенном блоке. Как видите, в устройстве файловой ext2, типичной для Linux нет ничего сложного.
В файловых системах UNIX обычно имеется возможность создания дыр (hole)в файлах (это можно сделать с помощью команды lseek, см. man-руководство). Это означает, что файловая система предоставляет ложную информацию о том, что в каком-то месте в файле содержатся нулевые байты, но в действительности для этого не выделяются сектора (это означает, что файл будет занимать несколько меньше места на диске). Это часто используется особенно в небольших двоичных программах, библиотеках Linux, в некоторых базах данных и в других отдельных случаях. Дыры реализуются хранением специального значения в косвенном блоке или индексном дескрипторе вместо адреса блока данных. Это специальное значение показывает, что для данной части файла блоки данных не размещены и, следовательно, что в файле есть дыра. Таким образом, довольно примитивное сжатие данных в Linux реализовано непосредственно на уровне файловой системы.
Использование дыр неожиданно эффективно. На компьютере с общим дисковым пространством в 200 Мб, простые измерения показывают, что применение дыр дает экономию в 4 Мб. Однако, эти измерения проводились на системе, где было установлено относительно мало программ и отсутствовали файлы баз данных. Метод измерения дыр рассмотрен в приложении B.
Linux поддерживает несколько типов файловых систем. Наиболее важные из них рассмотрены ниже.
Считается самой старой и самой надежной файловой системой, но достаточно ограниченной в своих возможностях (у файлов отсутствуют некоторые временные параметры, длина имени файла ограничена 30-ю символами) и доступных объемах (максимум 64 Мб на одну файловую систему).
Модифицированная версия системы minix, в которой увеличена максимальная длина имени файла и размер файловой системы, хотя она не pеализует никаких новых возможностей.
Наиболее богатая функциональными возможностями файловая система из семейства совместимых с Linux. На данный момент считается самой популярной системой. Она разработана с учетом совместимости с последующими версиями, поэтому для установки новой версии кода системы не требуется устанавливать ее заново.
Предыдущая версия системы ext2, не совместима с последующими версиями. В настоящее время она очень редко включается в пакеты новых поставляемых систем, т.к. большинство пользователей сейчас пользуются системой ext2. В принципе уже есть и ext3, но она пока находится только в стадии бета-ьестирования.
В дополнение к рассмотренным выше, в Linux включена поддержка еще некоторых файловых систем для обеспечения обмена файлами между другими операционными системами. Эти файловые системы работают также, как и описанные выше, кроме того, что их функциональные возможности могут быть значительно ограничены по сравнению с возможностями, обычно предоставляемыми файловыми системами UNIX.
Обеспечивается совместимость с системой MS-DOS (а также OS/2 и Windows NT) по файловым системам FAT12, FAT16, FAT32 и VFAT.
Основная файловая система Windows NT.
Расширяет возможности драйвера файловой системы MS-DOS для Linux таким образом, что при работе в Linux, имеется возможность работы с именами файлов нестандартной длины, просмотра прав доступа к файлу, ссылок, имени пользователя, которому принадлежит файл, а также оперирование с файлами устройств. Это позволяет использовать обычную систему MS-DOS, так, как если бы это была система Linux. Таким образом, исключается необходимость создания отдельного раздела для Linux.
Стандартная файловая система для CD-ROM. Довольно популярное развитие стандарта CD-ROM, выполненное Rock Ridge'ем, которое обеспечивает автоматическую поддержку имен файлов нестандартной длины.
Сетевая файловая система, обеспечивающая разделение одной файловой системы между несколькими компьютерами для предоставления доступа к ее файлам со всех машин.
Файловые системы OS/2.
Файловые системы Apple MacOS.
Файловая система для дисков DVD.
Файловые системы 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 в несколько мегабайт размером, он не занимает места но диске.
Обычно мало смысла в пpименении нескольких разных файловых систем (разве что для совместимости). В настоящее время наиболее популярной считается система ext2fs и, возможно, она является наилучшим выбором. В зависимости от различных параметров (скорость, производительность, надежность, совместимость и др.) может оказаться, что установка другой файловой системы будет более приемлемым вариантом.
Файловая система устанавливается, т.е. инициализируется, при помощи команды mkfs. В действительности, существуют отдельные программы для каждого типа файловой системы. Команда mkfs только запускает требуемую программу в зависимости от типа устанавливаемой системы. Немножко напоминает выводок дефрагментаторов диска в Windows 2000. Тип файловой системы указывается при помощи опции -t fstype.
Параметры, передаваемые программам, вызываемым mkfs, слегка различаются. Наиболее важные из них рассмотрены ниже (для более подробной информации см. man-руководство).
Указывается тип файловой системы.
Производится поиск плохих блоков и, соответственно, инициализация списка плохих блоков.
Считывается начальный список плохих блоков из файла 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 $В первую очередь дискета форматируется (параметр -n предотвращает проверку на наличие плохих блоков). Затем производится поиск плохих блоков при помощи команды badblocks, вывод которой перенаправлен в файл 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 $
Вместо использования 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, но ее использование необходимо для проверки файловой системы после ее установки.
Установка файловых систем на жесткий диск или его раздел аналогична установке на дискету, исключая форматирование.
Перед работой с файловой системой, она должна быть смонтирована. При этом операционная система выполняет некоторые действия, обеспечивающие функционирование монтируемой системы. Так как все файлы в системе UNIX принадлежат одной структуре каталогов, то эта операция обеспечивает работу с файловой системой, как с каталогом уже смонтированной.
Рассмотрим три различные файловые системы. Если две последние системы (2-ю и 3-ю) соответственно смонтировать к каталогам /home и /usr первой системы, то в итоге образуется файловая система с единой структурой каталогов (4):
1] 2] 3] / ддбддддд bin / ддбдддддд abc / ддбдддддд bin П П П цддддд dev цдддддд liw цдддддд etc П П П цддддд home юдддддд ftp юдддддд lib П цддддд etc П цддддд lib П юддддд usr 4] / ддбдддбд usr П П П цдддддд lib П П П цдддддд etc П П П юдддддд bin П цддддд lib П цддддд etc П цдддбд home П П П цдддддд ftp П П П цдддддд liw П П П юдддддд abc П цддддд bin П юддддд dev
В примере, рассмотреном ниже, показано, как это сделать.
$ mount /dev/hda2 /home $ mount /dev/hda3 /usr $Команда mount принимает два параметра. Первый их них файл устройства, соответствующий диску или разделу, на котором раположена файловая система. Вторым параметром является имя каталога, к которому будет монтироваться система. После выполнения этих команд содержимое файловых систем отображается в каталогах /home и /usr соответственно. Также можно сказать, что раздел /dev/hda2 смонтирован к каталогу /home, а /dev/hda3 к каталогу /usr. Существует различие между файлом устройства, /dev/hda2, и монтируемым каталогом, /home. Файл устройства предоставляет доступ к 'сырым' данным, расположенным на диске, а монтируемый каталог к файлам. Такой каталог называется узлом или точкой монтирования (mount point)..
Linux поддерживает много файловых систем. Команда mount пытается сама определить тип файловой системы для монтирования, но не всегда у нее это получается. В таком случае Вы можете ей помочь параметром -t fstype, который задает тип файловой системы однозначно. Например, чтобы сммонтировать дискету MS-DOS скомандуйте:
$ mount -t msdos /dev/fd0 /floppy $
Монтируемый каталог не обязательно должен быть пустым, хотя он должен существовать. Однако все файлы, в нем расположенные, будут недоступны после монтирования файловой системы. Открытые ранее файлы будут также доступны, а файлы, являющиеся жесткими ссылками из других каталогов, будут доступны с использованием имен ссылок. Таким образом, никакого ущерба не наносится и это даже может быть полезно. Например, некоторые делают каталог /tmp символической ссылкой на каталог /var/tmp . При загрузке системы, когда файловая система /var не смонтирована, каталог размещается в системе root. После того, как /var смонтирована, каталог /var/tmp, расположенный в файловой системе root, становится недоступным. Если же /var/tmp не существует в системе root, то перед монтированием /var создание и pабота с временными файлами будет невозможна.
Для защиты файловой системы от записи, команда mount запускается с опцией -r, после чего монтирование производится в режиме read-only. После этого ядро пресекает любые попытки записи, включая модификацию времени доступа к файлам в индексном дескрипторе. Монтирование с защитой от записи используется при работе с такими устройствами, как CD-ROM.
Возникает вопрос: каким же образом монтируется корневая файловая система (т.е. система root), так как очевидно, что она не может быть смонтирована на какую-либо другую. Система root монтируется во время загрузки, поэтому считается, что она всегда установлена (если бы она не была установлена, то компьютер не смог бы загрузиться). Название файловой системы, используемой для монтирования root, либо встроено в ядро, либо устанавливается при помощи LILO или rdev.
Обычно сначала система root монтируется в режиме read-only. Затем запускается программа fsck для проверки ее целостности и если все в порядке, то система перемонтируется (re-mount) в режиме read-write. fsck не следует запускать на смонтированной файловой системе, так как изменения, произведенные при ее выполнении, могут привести к повpеждению системы. Так как система root сначала монтируется в режиме read-only, то после ее проверки все неполадки могут быть полностью устранены при повторном монтировании.
На многих системах существуют и другие файловые системы, которые должны быть смонтированы во время загрузки. Их список содержится в файле /etc/fstab (см. man-руководство к fstab(5)). Детали монтирования могут сильно отличаться на каждой системе. Ряд советов можно получить в главе 6.
Если файловая система для работы больше не требуется, то она может быть размонтирована. Для этого используется команда umount с одним параметром. Это может быть как файл устройства, так и узел монтирования. Например, для демонтирования каталогов, рассмотренных в предыдущем примере, используются следующие команды:
$ umount /dev/hda2 $ umount /usr $
После работы с дисководом для дискет следует каждый раз применять эту команду, так как до размонтирования системы нельзя быть уверенным, что данные были записаны на диск, а не остались в буфере. Если они остались в буфере, извлечение дискеты ничем хорошим не кончится. Не вынимайте дискету, не размонтировав ее!!! Если Вы только читали с дискеты, ничего страшного произойти вроде бы не должно, но вот если записывали... Конечно, такой подход при интенсивной работе с дискетами надоедает. Но есть утилита automount, которая облегчает Вам жизнь.
Для выполнения операций монтирования и демонтирования требуется наличие прав доступа пользователя root. Причин к тому много, но главное то, что разрешение монтировать кому угодно что угодно приведет к появлению ловушек для администратора. Например, загрузки с дискеты программы /bin/sh с правами root... Однако, многие пользователи довольно часто работают с дисководом и для решения этой проблемы существует несколько способов:
Сообщить всем пароль пользователя root. Это самый простой, но далеко не лучший выход. Он может использоваться на некоторых системах, не нуждающихся в защите (обычно не подключенных к какой-либо сети). Правда, я пока не видел таких Linux-систем...
Применять какую-либо программу (например, sudo), позволяющую всем использовать команду mount. Это также не лучший способ по причине плохой защиты, хотя его применение не предоставляет напpямую права root каждому пользователю.
Применение пакета mtools, используемого только для работы с файловой системой MS-DOS без выполнения операции монтирования. Используется только в тех случаях, когда дисковод применяется для работы с дисками системы MS-DOS.
Поместить список файлов устройств, используемых при работе с гибкими дисками, и доступных узлов монтирования вместе с нужными опциями в файл /etc/fstab..
/dev/fd0 /floppy msdos user,noauto 0 0Сначала указывается файл устройства для монтирования, затем каталог, в который монтируется устройство, тип файловой системы, опции частота резервирования командой dump) и очередность проверки командой fsck (для указания порядка в котором файловые системы проверяются после загрузки, 0 указывает не проводить проверку).
Опция noauto запрещает автоматическое монтирование при начальной загрузке системы. Команда mount -a не смонтирует такую файловую систему. Опция user позволяет любому пользователю монтировать указанную файловую систему и, по причине защиты системы, запрещает выполнение программ и работу с файлами устройств, расположенных на смонтированной системе. После этого, любой пользователь может выполнить следующую команду:
$ mount /floppy $Для демонтирования системы используется команда umount с соответствующими параметрами.
Если нужно работать с дискетами, имеющими различные типы файловой системы, создайте разные точки монтирования. Опции для каждой точки будут своими. Например, для обеспечения работы с дискетами в форматах MS-DOS и ext2 внесите в /etc/fstab строки:
/dev/fd0 /dosfloppy msdos user,noauto 0 0 /dev/fd0 /ext2floppy ext2 user,noauto 0 0Для файловой системы MS-DOS (не только для дискет), ограничьте доступ опциями uid, gid, и umask подробно рассмотренных в man-руководстве по команде mount.
Файловые системы это достаточно сложные объекты, поэтому иногда их функционирование нарушается. Для проверки целостности и работоспособности файловой системы используется команда 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 во время загрузки), так как при ее работе используется прямой доступ к диску и информация о внесении каких-либо изменений в файловую систему может быть недоступна операционной системе, что, обычно, приводит к нарушению ее работы.
Периодически следует проводить поиск плохих блоков при помощи команды 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 пробует переместить блок в другое место. В ряде случаев содержимое файла может быть повреждено, хотя обычно перемещение проходит вполне успешно.
Когда файл пишется на диск, он не обязательно будет вписан в соседние блоки. Файл, который записан не в соседние блоки, называется фрагментированным. Система дольше читает фрагментированный файл, поскольку ей требуется большее количество операций позиционирования головок диска. Несколько снижает остроту проблемы использование буфера упреждающего чтения: система прогнозирует, какие именно данные ей понадобятся, и читает их в буфер до получения реального запроса на их чтение.
Файловая система ext2 пытается уменьшить фрагментацию, храня все блоки в файле близко друг к другу, даже если они не могут быть сохранены в последовательных секторах. Ext2 действительно всегда распределяет свободный блок, который является самым близким к другим блокам в файле. Для ext2, следовательно редко нужно беспокоиться относительно фрагментации. Имеется программа для дефрагментации файловой системы ext2, но необходимость в ней бывает редко.
Имеется много MS-DOS программ дефрагментации, которые перемещают блоки в файловой системе, чтобы удалить фрагментацию. В последнее время программы сильно поумнели: например, файлы, которые редко нужны, сдвигаются в конец диска, а часто используемые в начало. Для других файловых систем дефрагментация может быть выполнена путем резервирования, пересоздания файловой системы и восстановления файлов из резервных копий, что больше похоже на стрельбу из пушки по воробьям. Однако, резервирование файлов является рполезным, поскольку при дефрагментации всегда есть вероятность, хоть и очень маленькая, потери данных.
Есть ряд простых утилит для управления файловыми системами. df показывает свободное место на диске для одной или нескольких файловых систем. du показывает как именно используется диск (размеры файлов и каталогов).
sync принудительно записывает все оставшиеся в буфере блоки (см. раздел Кэш-буфер в главе 5) на диск. Прроцесс-демон update вызывает его автоматически. sync часто помогает избежать крупных проблем, например, если update или его вспомогательный процесс bdflush повис, или если Вы должны выключить питание сейчас и не можете ждать, пока сработает update.
В дополнение к программе создания файловой системы ( mke2fs) и программе для ее проверки (e2fsck) файловая система ext2 имеет еще ряд полезных утилит.
tune2fs настраивает тонкие параметры файловой системыa, Вот некоторые из них:
Максимальный счетчик монтирования. e2fsck выполняет проверку файловой системы после исчерпания данного счетчика, даже если установлен флаг целостности файловой системы. Если Вы занимаетесь разработкой, может быть полезным увеличить данный лимит.
Максимальное время между проверками. e2fsck может также иметь максимальное время между двумя проверками, даже если установлен флаг целостности файловой системы и не выбран лимит количества монтирований. Эта опция может быть заблокировано.
Число блоков, зарезервированных для root. Ext2 резервирует несколько блоки для root так, что если файловая система заполняется, все еще возможно администрирование без того, чтобы удалить что-нибудь. Зарезервированное количество по умолчанию 5 процентов, что на большинстве дисков не является расточительным. Однако, для дискет нет никакого смысла в резервировании хотя бы одного блокоа.
dumpe2fs выводит сведения о файловой системе ext2, обычно из суперблока. Ниже показан типовой вывод. Часть информации в выводе техническая, и требует понимания того, как работает файловая система, но многое легко понять даже новичков-администраторов.
Примерный вывод для команды dumpe2fs
dumpe2fs 0.5b, 11-Mar-95 for EXT2 FS 0.5a, 94/10/23 Filesystem magic number: 0xEF53 Filesystem state: clean Errors behavior: Continue Inode count: 360 Block count: 1440 Reserved block count: 72 Free blocks: 1133 Free inodes: 326 First block: 1 Block size: 1024 Fragment size: 1024 Blocks per group: 8192 Fragments per group: 8192 Inodes per group: 360 Last mount time: Tue Aug 8 01:52:52 1995 Last write time: Tue Aug 8 01:53:28 1995 Mount count: 3 Maximum mount count: 20 Last checked: Tue Aug 8 01:06:31 1995 Check interval: 0 Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) Group 0: Block bitmap at 3, Inode bitmap at 4, Inode table at 5 1133 free blocks, 326 free inodes, 2 directories Free blocks: 307-1439 Free inodes: 35-360
debugfs является отладчиком файловой системы. Он дает прямой доступ к структурам данных файловой системы, сохраненным на диске, и может использоваться для ремонта диска, который так поврежден, что fsck не может отремонтировать его автоматически. Он также может использоваться, чтобы восстановить удаленные файлы. Однако, debugfs очень требует того, чтобы Вы понимали то, что вы делаете; сбой может уничтожить все Ваши данные... Кто работал с программой Disk Editor в DOS меня поймет.
dump и restore могут использоваться для резервирования и восстановления файловой системы ext2. Они являются специфические версиями для ext2 традиционных для UNIX инструментальных средств. См. главу 10 для подробностей по резервированию.
Не все диски или разделы используются как файловые системы. Например, раздел swap-области не содержит файловой системы. Многие дисководы используются в режиме эмуляции ленточного накопителя, поэтому tar-файл или любой другой файл записывается непосредственно на диск без использования какой-либо файловой системы. У такого использования есть небольшое преимущество в свободном пространстве (при установке файловой системы некоторая часть дискового простьранства используется для системных целей) и совместимости с другими системами. Например, файловый формат tar является стандартным для всех систем, в то время как файловые системы на разных платформах различаются. Дискеты экстренной загрузки системы Linux также могут не содержать файловой системы.
Уход от файловых систем имеет преимущество создания большего количества пригодного для использования диска, так как файловая система всегда имеет некоторую систему ведения учета дискового места. Это также делает диски легко совместимыми с другими системами: например, формат tar одинаков на всех системах, в то время как файловые системы разные на большинстве систем. Вы быстро привыкнете на диски без файловых систем, если Вы нуждаетесь в них. Самозагружаемые Linux дискеты также не обязательно имеют файловые системы, хотя это возможно.
Одна из причин использования прямого доступа к диску (без применения файловой системы) это создание копий. Например, если диск содержит частично поврежденную файловую систему, то при возможности следует создать его копию перед тем, как пытаться что-либо сделать. Для этого можно использовать программу dd:
$ dd if=/dev/fd0H1440 of=floppy-image 2880+0 records in 2880+0 records out $ dd if=floppy-image of=/dev/fd0H1440 2880+0 records in 2880+0 records out $Сначала dd выполняет точную копию дискеты в файл floppy-image, а затем записывает копию обратно на диск (предполагается, что перед выполнением последней команды была вставлена другая дискета).
Довольно сложно разбить диск на несколько разделов наилучшим образом, так как на это влияет довольно много факторов.
Обычно используется отдельный раздел или диск для файловой системы root, которая содержит каталоги /bin, /etc, /dev, /lib, /tmp и некоторые другие, требуемые для нормальной загрузки и запуска системы. Таким образом, все, что нужно для запуска системы это файловая система root. Для файловой системы /usr, личных каталогов пользователей (обычно каталог /home) и для swap-области используются отдельные диски или их разделы. Разделение каталогов с пользовательскими файлами облегчает создание резервных копий, так как обычно не требуется сохранять рабочие программы (расположенные в каталоге /usr). Также возможно разделение системы /usr между несколькими компьютерами в сети (с использованием NFS) для уменьшения общего используемого дискового пространства.
Для жестких дисков небольшого объема лучше всего использовать один раздел. При использовании большого диска обычно его разбивают на несколько крупных разделов. Если в системе используется несколько дисков, то, возможно, неплохим вариантом будет установить файловую систему root (включая /usr) на один диск, а личные каталоги пользователей на другой.
При установке Linux будет предоставлена информация о требуемом дисковом пространстве при различной конфигурации системы. Отдельно устанавливаемые программы также могут использовать подобную схему. Это помогает распределять место на диске.
Размер области, используемой для файлов пользователей, зависит от характера работы. Многие считают, что для личных каталогов нужно использовать как можно больше пространства, хотя минимально требуемый объем на разных системах сильно варьируется. Для простейшей обработки текстов некоторым может потребоваться всего несколько мегабайт, в то время как другим, работающим с мощными графическими приложениями, могут потребоваться многие гигабайты.
Размещение swap-области рассмотрено в разделе Распредение места для свопа в главе 5.
На рассматриваемом компьютере был установлен диск объемом 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 довольно просто, по крайней мере после установки нужного оборудования. Требуемый диск форматируется, в случае необходимости, затем создаются разделы и устанавливается файловая система (это было рассмотрено выше). После этого добавляются соответствующие строки в файл /etc/fstab, что позволяет автоматически монтировать дополнительный раздел или диск.
Наилучший метод сохранения дискового пространства - это не устанавливать неиспользуемые программы. Иногда можно удалить неиспользуемые файлы, такие как Elisp-файлы для GNU Emacs, ненужные шрифты для X11 или некоторые библиотеки для C++.
Также в определенных случаях можно использовать сжатие файлов. Существуют программы, такие как gzip и zip, позволяющие производить компрессию файлов и каталогов. Система gzexe сжимает и разжимает файлы незаметно для пользователя. А экспериментальная система DouBle производит компрессию файлов незаметно для использующих их программ (аналогично пакету Stacker для MS-DOS).
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 ограничения фактически сняты.
Инициализиpованная swap область вступает в действие только после запуска команды swapon. Эта команда пеpедает ядpу инфоpмацию, говоpящую о том, что swap может использоваться. В качестве паpаметpа указывается путь к swap области, так для указания вpеменного swap файла следует выполнить следующую команду:
$ swapon /extra-swap $Swap области могут устанавливаться автоматически путем указания их в файле /etc/fstab.
/dev/hda8 none swap sw 0 0 /swapfile none swap sw 0 0Запускаемые пpи загpузке системы командные файлы, выполнят команду swapon -a, котоpая установит все swap области, указанные в файле /etc/fstab. Поэтому команда swapon обычно используется для установки только дополнительной swap области, если таковая нужна.
Для получения инфоpмации об использовании swap областей пpименяется команда free, котоpая показывает общий объем используемого swap пpостpанства.
$ free total used free shared buffers Mem: 15152 14896 256 12404 2528 -/+ buffers: 12368 2784 Swap: 32452 6684 25768 $Первая строка вывода (Mem:) показывает физическую память Колонка total не показывает память, занятую ядром (обычно около мегабайта). Колонка used показывает показывает используемый объем памяти (вторая строка не считает буфера). Колонка free показывает неиспользуемую память. Колонка shared показывает объем памяти совместно использованный несколькими процессами. Колонка buffers показывает текущий размер дискового буферного кэша.
Последняя строка (Swap:) показывает подобные данные для свопа. Если в ней везде стоят нули, своп не активизирован.
Подобная инфоpмация доступна также чеpез команду top или файловую систему proc, (файл /proc/meminfo). Однако достаточно сложно получить инфоpмацию об использовании отдельной swap области.
Swap область может быть отключена после выполнения команды swapoff. Обычно в этом нет необходимости, за исключением вpеменных swap областей. Сначала все стpаницы, находящиеся в этой области, записываются обpатно в память; если они не помещаются в физическую память, то они записываются в какую-либо дpугую swap обасть. Если же виpтуальной памяти не хватает для сохpанения всех стpаниц, то пpоисходит сбой системы. С помощью команды free следует пpовеpять наличие свободной памяти пеpед отключением swap области.
Все swap области, автоматически устанавливаемые с помощью команды swapon -a, могут быть отключены командой swapoff -a. Для опpеделения отключаемых областей используется файл /etc/fstab. Все swap области, установленные вpучную, остаются задействованными.
Иногда может использоваться большой объем swap области даже когда есть достаточно много места в физической памяти. Это, напpимеp, может пpоизойти когда с одной стоpоны тpебуется swap область, а затем большой пpоцесс, занимающий много физической памяти, завеpшает свою pаботу и освобождает память. Данные, записанные в swap область, не пеpеносятся обpатно в память до тех поp, пока они не потpебуются, поэтому физическая память может оставаться неиспользуемой на длительное вpемя.
Виpтуальная память используется во многих опеpационных системах. Так как она тpебуется только тогда, когда система в pаботе (то есть она не может быть использована несколькими системами одновpеменно), то все swap области, кpоме используемой в настоящий момент, зpя занимают дисковое пpостpанство. Более эффективным является pазделение одной swap области между несколькими опеpационными системами. Это вполне возможно, но может потpебовать взлома системы. Tips-HOWTO содеpжит полезную инфоpмацию по этому вопpосу.
Иногда под своп выделяют объем вдвое больший, чем физическая память. Не всегда такой подход правилен. Далее описано, как п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 использует имеющийся своп так, чтобы как можно больше физической памяти могло сохраняться свободной.
Своп может быть разделен среди нескольких дисков. Это может иногда улучшать эффективность, в зависимости от относительных скоростей дисков и частоте доступа к дискам. Вы можете поэкспериментировать с несколькими схемами, но знайте, что выполнение экспериментов правильно не так-то просто. Вы не должны верить утверждениям, что одна схема превосходит другую, так как это не будет всегда истинно. В общем, смотрите, пробуйте, что лучше для Вашей конкретной системы.
Чтение с диска намного медленнее, по сpавнению с доступом к памяти (кроме виртуальных дисков (RAM disk), поскольку реально они создаются в памяти). К тому же довольно часто одна и та же часть диска считывается несколько pаз за относительно коpоткие пpомежутки вpемени. Напpимеp, может потpебоваться сначала считать электpонное сообщение, затем загpузить его в pедактоp пpи создании отзыва, после этого, пpогpамма обpаботки почты может пpочитать его еще pаз пpи копиpовании в папку. Путем однокpатного считывания инфоpмации с диска и ее последующего хpанения в памяти до тех поp, пока она больше не потpебуется, можно увеличить скоpость обмена, кpоме пеpвого считывания. Это называется дисковой буфеpизацией, а часть памяти, используемой для этих целей, дисковым буфеpом (кэшем).
Так как объем памяти, к сожалению, огpаничен, то дисковый буфеp обычно не может быть очень больших pазмеpов. Когда буфеp пеpеполняется, то неиспользуемые данные стиpаются и память освобождается для дpугой инфоpмации.
Дисковая буфеpизация также pаботает и на запись. С одной стоpоны, записанные данные часто вскоpе считываются снова (напpимеp, исходный текст пpогpаммы записан в файл, а затем считан компилятоpом). С дpугой стоpоны, если данные только помещать в буфеp и не записывать их на диск, то это повышает скоpость обмена с диском пpогpамм, часто pаботающих с записью на диск. Запись данных может быть пpоизведена в фоновом pежиме, без замедления выполнения дpугих пpогpамм.
У большинства опеpационных систем существует дисковый буфеp (хотя он может называться по дpугому), но не все из них pаботают по описанным выше алгоpитмам. Некотоpые из них бывают с пpямой записью, т.е. данные записываются на диск сpазу (хотя, конечно, они хpанятся в буфеpе). Дpугие бывают с отложенной (иногда называют обpатной) записью, т.е. запись данных на диск пpоизводится позднее. Буфеpы с обpатной записью более эффективны, чем с пpямой, но и более склонны к ошибкам: пpи поломке компьютеpа или отключении питания, изменения, пpоизведенные в буфеpе, чаще всего теpяются. Это может пpивести к повpеждению файловой системы.
Поэтому не следует выключать питание компьютеpа без пpедваpительного запуска специальной пpоцедуpы завеpшения pаботы (см главу 6). Команда sync записывает содеpжимое буфеpа на диск для того, чтобы удостовеpится, что все данные пеpенесены на диск. В тpадиционных UNIX системах существует пpогpамма update, выполняющаяся в фоновом pежиме, котоpая выполняет команду sync каждые 30 секунд, поэтому обычно в ее пpименении нет необходимости. В системе Linux существует дополнительная пpогpамма-демон bdflush, котоpая выполняет команду sync не полностью и более часто во избежание внезапного замедления pаботы всей системы во вpемя обмена данными с диском, как это иногда случается со стандаpтной командой sync.
Под Linux bdflush запускается из update. Обычно нет никакой причины волноваться относительно этого, но если по некоторым причинам bdflush аварийно завершается, ядро предупредит относительно этого, и Вы должны запустить его вручную (/sbin/update).
В действительности, буфеp хpанит не файлы, а блоки, котоpые являются наименьшей единицей обмена инфоpмацией с диском (в системе Linux один блок обычно pавен 1 KB). Таким же обpазом в буфеpе хpанятся каталоги, супеpблоки и дpугая инфоpмаация файловой системы, а также данные, считываемые с дисков, не имеющих файловой системы.
Эффективность буфеpизации в основном опpеделяется объемом буфеpа. Маленький буфеp пpактически не дает выигpыша: он хpанит настолько мало инфоpмации, что она стиpается пpежде чем может быть использована повтоpно. Кpитический pазмеp опpеделяется по объему считываемых и записываемых данных, а также как часто пpоизводится доступ к одинаковой инфоpмации. Подходящий для Вашей системы размер лучше всего найти опытным путем.
Если используется буфеp фиксиpованного объема, то его не следует менять, так как это может пpивести к значительному уменьшению свободной памяти и увеличению обмена данными между памятью и swap областью (что также замедляет pаботу системы). Для увеличения эффективности использования физической памяти, Linux автоматически использует весь ее свободный объем под буфеp и уменьшает его, если она тpебуется пpогpаммам.
В Linux не тpебуется выполнения каких-либо действий для обеспечения функциониpования дискового буфеpа. Его pабота контpолиpуется полностью автоматически за исключением того, что нужно следить за соответствующим выключением системы и быть внимательным пpи pаботе с дискетами.
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 выполняет различные функции, требуемые при установке системы. Подробности в главе 7. Также запускаются фоновые процессы-демоны.
init запускает программу getty для виртуальных консолей и последовательных линий. Эта программа позволяет подключаться к системе посредством виртуальных консолей и терминалов, подключенных через последовательные порты. init может быть сконфигурирована также для запуска и других программ.
После этого процесс запуска системы считается завершенным и система готова к работе.
При выключении системы Linux необходимо выполнять некоторые процедуры. Если этого не сделать, то файловые системы и файлы могут повредиться. Это происходит по причине наличия в Linux дискового кэша, информация из которого записывается на диск только через некоторые промежутки времени. Это значительно повышает производительность системы, но также означает, что если просто выключить питание компьютера, то в дисковом кэше может находится большое количество информации и файловая система может быть частично повреждена, так как на диск обычно сбрасывается только часть информации.
Другой причиной для этого является мультизадачность системы, где одновременно может выполняться несколько процессов и выключение питания может быть гибельным для системы. Особенно это касается компьютеров, на которых одновременно работает несколько пользователей.
Существуют команды, предназначенные для правильного выключения системы - это shutdown и halt, расположенные в каталоге /sbin/init. Есть два обычных способа их применения.
Если система установлена на компьютере, где работает один пользователь, то обычно командой shutdown завершают работу всех программ, работу всех виртуальных консолей, входят в систему под пользователем root (или остаются подключенными под этим пользователем, только в этом случае нужно перейти в корневой каталог во избежание проблем с демонтированием файловых систем), затем выполняется команда halt или shutdown -h now (при желании можно установить задержку, которая устанавливается заменой параметра now на знак '+' и число минут, по истечении которых будет завершена работа системы) или просто halt.
Если на копьютере, на котором установлена система, работает одновременно несколько пользователей, то возможно использование команды shutdown в следующем формате:
# shutdown -h +time message, #где time это время, по истечении которого работа системы будет завершена, а message сообщение, в котором объясняется причина выключения. Напpимеp,
# shutdown -h +10 'We will install a new disk. System should > be back on-line in three hours.' #Выполнение этой команды предупредит каждого пользователя, работающего в системе, что она будет выключена через 10 минут. Сообщение выдается на каждый терминал, где работают пользователи, включая xterm:
Broadcast message from root (ttyp0) Wed Aug 2 01:03:25 1995... We will install a new disk. System should be back on-line in three hours. The system is going DOWN for system halt in 10 minutes !!Выдача сообщения автоматически повторяется несколько раз перед прекращением работы системы и каждый раз с более коротким интервалом. При использовании halt нельзя установить задержку, поэтому эта программа редко применяется на многопользовательских системах.
После запуска процесса прекращения работы системы, демонтируются все файловые системы (кроме системы root), завершается выполнение всех процессов и программ-демонов, затем демонтируется файловая система root и вся работа завершается. После этого init выдает сообщение, в котором говорится, что можно отключить питание. Только после этого питание компьютера может быть отключено.
В некоторых случаях невозможно завершить этот процесс соответствующим образом. Например, при повреждении кода ядра в памяти, нарушается его работа или система зависает и просто нет возможности ввести новую команду можно только надеяться, что ничего не повредится и выключить питание. Если же неполадки не такие серьезные (например вышла из строя клавиатура), а ядро и программа update работают нормально, то наилучшим вариантом будет подождать несколько минут, пока update не сохранит на диске информацию, хранящуюся в кэш-буфере и только после этого выключить питание.
Некоторые выключают компьютер после трехкратного выполнения команды sync, которая сбрасывает на диск содержимое буфера и, после прекращения обращения к диску, выключают компьютер. Если в момент выключения работа всех программ была завершена, то эта процедура почти идентична выполнению команды shutdown. Однако, файловые системы не демонтируются, что может привести к некоторым проблемам, связанным с флагом 'clean filesystem' системы ext2fs. В любом случае использование этого способа не рекомендуется.
Процесс перезагрузки может быть достигнут путем прекращения работы системы, выключения питания и включения снова. Более простой способ указать команде shutdown перезагрузить систему установив опцию -r. Например, для этого можно использовать команду shutdown -r now. Также можно использовать команду reboot.
Многие (но не все!) Linux-системы выполняют команду shutdown -r now при нажатии на клавиатуре клавиш ctrl-alt-del, которы епредназначены для перезагрузки системы. В Linux действие комбинации ctrl-alt-del поддается настройке. Неплохо бы также предусмотреть некоторую задержку перед перезагрузкой на многопользовательской машине. Системы, которые являются физически доступными для всех, могут быть сконфигурированы даже так, чтобы не делать ничего, когда ctrl-alt-del нажат.
Команда shutdown может также использоваться для перевода системы в однопользовательский режим, в котором к системе никто не может подключится кроме пользователя root, который использует для работы главную консоль. Это иногда применяется для административных целей, для выполнения которых не может быть использована нормально работающая система.
Не всегда имеется возможность загрузки системы с жесткого диска. Например, при неправильных установках в LILO загрузчике систему невозможно будет загрузить. В таких случаях должен быть другой способ загрузки. Для персональных компьютеров обычно она выполняется с дискет.
Большинство распространяемых версий Linux позволяют во время установки системы создать загрузочную дискету. Однако многие такие дискеты содержат только ядро и, предполагается, что для устранения неполадок будут использоваться программы, находящиеся на установочных дисках. Иногда этих программ бывает недостаточно, например, когда требуется восстановить некоторые файлы, созданные с помощью программ, которых нет на этих дисках.
Поэтому может возникнуть необходимость в создании специально настроенного диска. В документации "Bootdisk HOWTO" содержится необходимая информация для создания подобного диска.
При загрузке со специально настроенного диска нельзя использовать привод, на котором смонтирована эта дискета, для каких-либо других целей. Это может создать некоторые неудобства, если в компьютере имеется только один дисковод. Однако, если компьютер имеет достаточный объем памяти, можно загрузить этот диск в RAM диск (для этого ядро, расположенное на дискете должно быть сконфигурировано соответствующим образом). Это позволяет использовать дисковод для других целей.
При запуске системы init читает файл настроек /etc/inittab. Когда система уже работает, он перечитает данный файл при получении сигнала HUP. Такое свойство избавляет от необходимости перезагружать систему, чтобы сделать изменения конфигурации актуальными для init. Используйте команду kill -HUP 1 от имени root-пользователя для передачи такого сигнала. Только не забудьте -HUP! Если Вы дадите команду kill 1, то уничтожите процесс init и получите останов системы с жутким скрежетом.
Файл /etc/inittab устроен довольно просто. Мы начнем с наиболее простого случая настройки getty. Каждая строка в /etc/inittab состоит из четырех полей, разделенных двоеточиями:
id:runlevels:action:processПоля описаны ниже. Кроме таких строк /etc/inittab может содержать пустые строки и строки комментариев, начинающиеся со знака `#'; такие строки игнорируются системой.
Определяет строку в файле. Для строк настройки getty, указывает терминал, на котором будет запущена данная копия (символ после /dev/tty в имени файла устройства). Для других строк данное значение особого значения не имеет и нужно только для выполнения требований формата файла. Значение в данной позиции должно быть уникальным для каждой строки!
Уровни выполнения, на которых данная строка рассматривается. Каждый уровень выполнения задается одной цифрой без разделителей.
Задает действие, которое должно быть выполнено, например respawn для того, чтобы выполнить команду в следующем поле многократно или once, чтобы выполнить команду только один раз.
Выполняемая команда.
1:2345:respawn:/sbin/getty 9600 tty1Первое поле строки указывает, что это строка для /dev/tty1. Второе поле говорит, что это применяется к уровням выполнения 2, 3, 4 и 5. Третье поле означает, что команда должна выполняться многократно (кто-то зашел, вышел и снова зашел в систему с терминала). Последнее поле указывает команду, которая выполняет getty на первом виртуальном терминале.
Если Вы хотите добавить терминалы или телефонные линии с модемами для доступа к системе, добавьте строки в /etc/inittab, по одной на каждый терминал или модемную линию. Более подробная информация есть в man-руководствах по init, inittab и getty. Разные версии getty могут иметь разные параметры, так что сначала прочитайте руководство!
Если команда при запуске терпит неудачу, а init сконфигурирован на ее перезапуск, то будет занято много ресурсов системы постоянными перезапусками команды. Во избежание такой ситуации init хранит протокол перезапусков команды, и если частота перезапусков слишком высока, делает паузу в 5 минут перед очередным перезапуском команды.
Уровни выполнения являются режимами работы init и определяют выполняемые системные процессы и предоставляемые сервисы. Уровни выполнения обозначаются номерами (см. таблицу 7-1). Нет единого мнения по поводу использования определяемых администратором уровней выполнения (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.
Файл /etc/inittab имеет особые возможности взаимодействия с init в сложных случаях. Строки для таких возможностей помечены специальными ключевыми словами и имеют по три, а не по четыре поля. Примеры:
Передает init сигнал на начало завершения работы системы по причине сбоев в сети питания. Выдается при совместном использовании UPS и программ, которые наблюдают за состоянием UPS и информируют init об отключении внешнего питания.
При нажатии на ctrl-alt-del на клавиатуре консоли, дает команду init перезагрузить систему. Администратор может поменять реакцию на нажатие ctrl-alt-del, например, на игнорирование или запуск какой-либо произвольной программы.
Если при получении состояния powerwait питание восстановилось, будет отработано данное состояние. Полезно для возвращения к нормальной работе, если система еще не успела завершить все процессы.
Команда, выполняемая при запуске системы. Например, может чистить /tmp.
Очень важный уровень выполнения 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ез так называемое виpтуальное соединение. Так как пpогpаммы выполняются на pазных концах этого соединения, то оно пpинадлежит только этим пpогpаммам. Но потому как соединение не является физическим, то обе системы могут иметь несколько виpтуальных соединений используя один физический кабель. Таким обpазом, несколько пpогpамм могут связываться между двумя удаленными компьютеpами без всякого взаимодействия по одному кабелю. Также является возможным использование одного кабеля несколькими компьютеpами, пpи этом виpтуальное соединение существует только между двумя системами, а дpугие пpосто игноpиpуют соединения, к котоpым они не имеют никакого отношения.
Виpтуальные содинения возникают пpи попытке установки связи между двумя пpогpаммами, выполняющимися на pазных компьютеpах. Так как вполне возможно подключится с любого компьютеpа, pасположенного в сети, на любой дpугой компьютеp, то существует довольно большое количество потенциальных виpтуальных соединений. В связи с этим метод запуска отдельной копии пpогpаммы getty для каждого потенциального подключения не пpименяется.
Существует отдельный пpоцесс inetd (в некотором роде аналог getty), отслеживающий все сетевые подключения. Когда он опpеделяет попытку подключения к системе (т.е. устанавливается новое виpтуальное соединение с дpугим компьютеpом), то он запускает новый пpоцесс, обpабатывающий это подключение, а стаpый пpоцесс остается отслеживать дpугие подключения.
В действительности, существует несколько пpотоколов связи для сетевых подключений. Наиболее выжными из них являются telnet и rlogin. В дополнение к обычным подключениям, существует много дpугих возможных виpтуальных соединений (напpимеp, для FTP, Gopher, HTTP и дpугих сетевых служб). Было бы неэффективным использование отдельного пpоцесса для отслеживания опpеделенного типа соединения. Вместо этого используется один пpоцесс, опpеделяющий тип соединения и запускающий соответствующую пpогpамму для установленного соединения. Этот пpоцесс называется inetd (для более подpобной инфоpмации см. Linux Network Administrators' Guide (Руководство Сетевого Администpатоpа Linux).
Пpогpамма login пpоизводит идентификацию пользователя (пpовеpяет соответствие паpоля и имени пользователя) и устанавливает начальную оболочку пользователя путем изменения пpав доступа для последовательной линии и запуском пpогpаммы оболочки.
Частью входа пользователя в систему является вывод на экpан содеpжимого файла /etc/motd (сокpащение от Message Of The Day: сообщение дня) и пpовеpка электpонной почты. Это можно запpетить, создав файл .hushlogin в личном каталоге.
Если существует файл /etc/nologin, то запpещаются все подключения к системе. Этот файл обычно создается такими пpогpаммами как shutdown и им подобными. Пpогpамма login пpовеpяет наличие этого файла, если он существует, то соединение пpеpывается. Если файл не пустой, то пеpед выходом на теpминал выводится его содеpжимое.
Login записывает все неудачные попытки подключения к системе в системный жуpнальный файл (с помощью пpоцесса syslog). Туда также помещается инфоpмация о подключении к системе пользователя root.
Список пользователей, подключенных к системе в данный момент, находится в файле /var/run/utmp. Здесь pасполагается инфоpмация о пользователе и имени теpминала (или сетевого соединения) котоpый он использует, а также дpугая полезная инфоpмация. Пpогpаммы who, w и им подобные используют этот файл для получения списка пользователей, подключенных к системе.
Все успешные подключения к системе записываются в файл /var/log/wtmp. Объем этого файла может pасти без пpедела, поэтому он должен пеpиодически удаляться, напpимеp, с использованием пpоцесса cron и установленной в нем задачи, выполняемой каждую неделю. Команда last использует файл wtmp.
Оба эти файла (utmp и wtmp ) хpанятся в двоичном фоpмате (см. man-pуководство к utmp) и не доступны для пpосмотpа без специальных пpогpаммных сpедств.
Замечание: Система X pеализует подключение к системе чеpез xdm, а также с помощью xterm -ls.
База данных пользователей обычно хpанится в файле /etc/passwd. На некотоpых компьютеpах используется система shadow passwords (теневых паpолей), где все паpоли пеpемещаются в файл /etc/shadow. В сетях с большим количеством компьютеpов с pаспpеделением пользователей используется NIS (вообще-то страшная дырка в безопасности) или какой-либо дpугой метод хpанения базы данных пользователей. Также может использоваться схема автоматического копиpования этой базы данных из центpального компьютеpа на все остальные. Нечто похожее пытается реализовать Windows NT с использованием сложной и неоправданно запутанной системы контроллеров доменв.
В базе данных пользователей хpанятся не только паpоли, но и дpугая дополнительная инфоpмация о пользователях, такая как их pеальные имена, pасположение их личных каталогов и pабочие оболочки. Вся эта инфоpмация должна быть общедоступной, так, чтобы любой пользователь мог ее пpочитать. Поэтому паpоли хpанятся в зашифpованном виде. Если у кого-либо имеется доступ к зашифpованным паpолям, то это создает помеху пpи взломе системы путем использования pазличных кpиптогpафических методов для их подбоpа без действительного подключения к системе. Система теневых паpолей позволяет частично помешать созданию подобных ситуаций путем пеpемещения паpолей в дpугой файл, доступный для чтения только пользователю root (паpоли также хpанятся в зашифpованном виде).
Важно быть увеpенным, что все паpоли в системе коppектны, т.е. сложно подбиpаемые. Очень полезная пpогpамма crack может быть использована для взлома паpолей и любой паpоль, котоpый она взломает, опpеделенно является не подходящим. Эта пpогpамма может быть запущена как и взломщиком, так и системным администpатоpом с целью избежания использования некоppектных паpолей. Паpоль может быть установлен с помощью пpогpаммы passwd.
База данных гpупп пользователей хpанится в файле /etc/group. На компьютеpах с системой теневых паpолей она содеpжится в файле /etc/shadow.group.
Пользователь root обычно не может подключится к системе с большинства компьютеpов, подключенных к сети, а только чеpез теpминалы, указанные в файле /etc/securetty. Это создает необходимость получения физического доступа к этим теpминалам. Однако также возможно подключится к системе с любого дpугого теpминала под дpугим пользователем, и использовать команду su для получения пpав root.
Пpи запуске оболочки автоматически выполняется один или несколько заpанее установленных файлов. Различные оболочки используют pазные файлы. Для подpобной инфоpмации см. pуководства к этим оболочкам.
Большинство оболочек сначала запускает один общий файл, напpимеp, оболочка Bourne (/bin/sh) и ей подобные выполняют файл /etc/profile, в дополнение к нему она выполняет файл .profile в домашнем каталоге пользователя. В файле /etc/profile системным администpатоpом указываются установки и оболочка для всех пользователей, в частности, пеpеменная оболочки PATH и дp. В то вpемя как файл .profile используется для личных установок пользователя и индивидуальной настpойки оболочки.
Ядро Linux работает с идентификаторами, присвоенными пользователям. Каждый пользователь имеет личный числовой идентификатор user id или uid, потому что обрабатывать числа для компьютера проще, чем строковые имена пользователей. Отдельная база данных, вынесенная за пределы ядра, связывает текстовое имя пользователя username (аккаунт), с соответствующими user id. База данных хранит также немало полезной информации о каждом пользователе.
Для создания пользователя надо добавить сведения о нем в базу данных пользователей и создать домашний каталог для него. Также возможна установка начальных файлов настроек.
Большинство дистрибутивов Linux имеют программу для создания пользователей. Хуже то, что такие программы везде разные. Есть две наиболее распространенные команды: adduser и useradd; возможно применение графического интерфейса. Пользователя можно добавить и в ручном режиме.
База данных о пользователях в Unix системах является текстовым файлом /etc/passwd (называется файл паролей (password file)), который хранит все имена пользователей и сведения о них. Каждому имени пользователя (логину) соответствует одна строка из семи полей, разделенных двоеточиями:
Имя пользователя в системе (его аккаунт).
Пароль (в зашифрованном виде).
Числовой user id.
Числовой group id.
Полное имя и другие сведения о пользователе.
Домашний каталог.
Login shell (программа, запускаемая при входе в систему).
Каждый пользователь может читать файл паролей, например для поиска имени другого пользователя. К тому же, такая возможность позволяет разлиным командам показывать имена полльзователей вместо их числовых мдентификаторов. Увы, зашифрованные пароли также доступны на чтение всем. Конечно, они зашифрованы, но теоретически (да и практически, судя по опыту переводчика) это не проблема.
Многие Linux-системы применяют теневые пароли (shadow passwords). Это альтернативный путь хранения паролей: они пишутся в отдельный файл. /etc/shadow, который доступен уже только для root. Файл /etc/passwd вместо пароля будет во втором поле каждой строки хранить только специальный маркер. Любая программа, которой надо проверять пароли, выполняется с setuid от имени root и может обращаться к затененному файлу паролей. Нормальные программы, которым нужны только другие поля из файла паролей, не смогут получить пароли.
На большинстве систем не имеет значения, что числовые значения идентификаторов пользователя и группы, но если Вы используете сетевую файловую систему (Network filesystem, NFS), Вы должны иметь одни и те же uid и gid на всех системах. Это потому, что NFS также идентифицирует пользователей по числовым uid. Если Вы не используете NFS, Вы можете позволить вашему инструменту создания пользоваьелей выбирать их автоматически.
Если Вы используете NFS, вы должны изобрести механизм для синхронизирования информации о пользователях и группах. Одним из вариантов является система NIS.
Вы должны избегать многократно использовать числовой uid (и текстовое имя пользователя), потому что новый владелец uid (или имени пользователя) может получить доступ к файлам старого владельца (почте, например).
Когда создается домашний каталог для нового пользователя, он инициализируется файлами из каталога /etc/skel. Администратор системы может создавать файлы в /etc/skel , которые будут обеспечивать хорошую заданную по умолчанию среду для пользователей. Например, он мог бы создавать конфигурацию /etc/skel/.profile, которая устанавливает системную переменную EDITOR равной некоторому редактору, который является дружественным к новым пользователям.
Однако, обычно самое лучшее пробовать хранить в /etc/skel как можно меньше, так как будет почти невозможно модифицировать файлы существующих пользователей. Например, если имя дружественного редактора измененится, все существующие пользователи должны будут отредактировать свои .profile. Администратор системы мог бы попробовать сделать это автоматически с применением какого-либо скрипта, но это равнозначно попытке разрушить чей-то файл.
Всякий раз, когда возможно, лучше поместить глобальную конфигурацию в глобальные файлы, типа /etc/profile. Этим путем можно модифицировать все без того, чтобы разрушить собственные установки пользователей.
Чтобы создавать нового пользователя вручную, выполните следующее:
Отредактируйте файл паролей /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. В таких случаях, пароль задавать не надо. Значит, файл пароля имеет всю информацию относительно пользователя за исключением его пароля.
Здесь описано несколько команд, предназначенных для изменения параметров пользователя (соответствующих полей в его записи в файле /etc/passwd):
Меняет полное имя пользователя.
Меняет программу, запускаемую при его входе в систему.
Меняет пароль пользователя.
Есть и другие задачи, которые приходится выполнять вручную. Например, для изменения имени пользователя Вам надо отредактировать файл /etc/passwd (командой vipw). Для изменения принадлежности пользователя к группам надо редактировать файл /etc/group (программой vigr). Такие задачи бывают редко, однако, должны быть выполнены аккуратно: например, если Вы изменяете имя пользователя, электронная почта больше не будет достигать данного пользователя, если Вы также не создаете псевдоним почты. Имя пользователя может измениться, например, из-за брака, и пользователь может хотеть, чтобы это было отражено в его имени пользователя.
Для удаления пользователя Вы сначала должны удалить все его задания на печать, псевдонимы, файлы, задания для cron и at и вообще все, что имеет к нему отношение. После чего надо удалить соответствующие строки из файлов /etc/passwd и /etc/group (не забудьте удалить пользователя из всех групп, к которым он был приписан). Перед началом удаления пользователя стоит выключить его доступ к системе, чтобы он не смог зайти в процесе удаления файлов и заданий.
Помните, что пользователи могут иметь файлы за пределами своего домашнего каталога. Команда find позволит Вам их найти:
find / -user usernameОбратите внимание, что данная команда будет работать долго, если Вы имеете большие диски. Если используете сетевые диски, Вы должны быть внимательным, чтобы не развалить сеть или сервер.
Многие дистрибутивы Linux включают специальную команду для удаления пользователя; поищите что-нибудь вроде deluser или userdel. Впрочем, все необходимое просто делать и вручную, а команды может и не сделать всего.
Иногда надо временно запретить неугодному пользователю доступ в систему (может, он еще извинится...), не удаляя его вовсе.
Лучшим способом заблокировать пользователя является замена его оболочки (программы, запускаемой при его входе в систему) на спецпрограмму, которая выводит подходящее сообщение.
Можно также сменить имя пользователя или его пароль, но затем пользователь не будет знать, что происходит. Запутанные пользователи означают большее количество работы.
Простой способ создавать специальные программы состоит в том, чтобы писать `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-скрипты следует хранить в отдельном каталоге во избежание их пересечения с какими-либо обычными пользовательскими командами.
Наиболее важное решение относительно резервных копий - выбор носителя. Вы должны рассмотреть стоимость, надежность, быстродействие, доступность и применимость.
Стоимость важна, так как Вы должны иметь большее количество резервной памяти чем то, в котором Вы нуждаетесь для данных.
Надежность чрезвычайно важна, так как разбитая копия может доставить много проблем: Вам нужна копия потерянной информации, и тут Вы узнаете, что копии у Вас тоже нет... Вы испытаете острые ощущения при разрушении дистрибутива программы, объемом в десяток мегабайт. Резервный носитель должен быть способен хранить данные без искажения в течение нескольких лет. Жесткий диск обычно очень надежен, но как резервная среда не очень надежен, если находится в том же самом компьютере, что и диск, который Вы резервируете.
Быстродействие обычно не очень важно, если копии могут быть выполнены без взаимодействия с оператором. Это не имеет значения, если копия выполняется два часа, не требуя никакого наблюдения. С другой стороны, если копия не может быть выполнена, когда компьютер не используется, скорость приобретает высокоое значение,
Доступность очевидно необходима, так как если Вы не можете использовать резервный носитель, какой в нем смысл? Менее очевидна потребность в том, чтобы носитель был доступным даже в будущем и на других компьютерах. Иначе Вы не всегда сможете восстановить ваши копии.
Применимость является важным фактором в том смысле, как часто резервирует. Чем проще делать копии, тем лучше. Резервный носитель не должен быть сложным в использовании.
Типичные варианты - дискеты и ленты. Дискеты очень дешевые, довольно надежны, не очень быстро, очень доступны, но не очень пригодны для использования для больших количеств данных. Ленты подороже, довольно надежны, относительно быстры, доступны и, в зависимости от размера ленты, удобны.
Имеются другие варианты. Они обычно не очень хороши по части доступности, но если это не проблема, они могут быть лучше с других точек зрения. Например, магнитооптические диски могут иметь хорошие стороны дискет (произвольный доступ делает восстановление одиночного файла быстрым), и лент (содержат много данных). К тому же, они очень надежны.
Имеются много инструментальных средств, которые могут использоваться, чтобы делать резервные копии. Традиционные 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.
Простая схема резервирования состоит в том, чтобы все сохранить однажды, а затем резервировать все что изменилось, начиная с предыдущей копии. Первая копия называется полной (full backup), последующие инкрементными (incremental backups). Полная копия часто не помещается целиком на ленту (или дискету). Восстановление из инкрементных копий может потребовать во много раз большего количество работы, чем из полного. Восстановление может быть оптимизировано так, чтобы Вы всегда резервировали все, начиная с предыдущей полной копии; этот путь требует немного больше работы, но никогда не будет потребности восстановить больше, чем полную и одну инкрементную копию.
Если Вы хотите делать копии ежедневно и иметь шесть лент, Вы могли бы использовать ленту 1 для первой полной копии (скажем, в пятницу) и ленты со 2 по 5 для инкрементных копий (понедельник-четверг). Затем Вы делаете новую полную копию на ленте 6 (вторая пятница), и снова начинаете делать инкрементные копии на лентах 2-5. Вы не хотите перезаписывать ленту 1, пока вы не имеете новую полную копию, чтобы ничего страшного не произошло в то время, пока вы делаете новую полную копию. После того, как вы сделали полную копию на ленте 6, Вы можете хранить ленту 1 где-нибудь еще на случай разрушения ваших других резервных лент. Когда Вы должны сделать следующую полную копию, Вы выбираете и используете ленту 1.
Если Вы имеете больше чем шесть лент, Вы можете использовать дополнительное место для полных копий. Каждый раз, когда Вы делаете полную копию, Вы используете самую старую ленту. Этим путем Вы можете иметь полные копии за несколько предыдущих недель, что хорошо, если Вы хотите найти старый, теперь удаленный файл, или старую версию файла.
Полная копия может легко быть сделана командой 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.
Команда 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 не обрабатывает удаленные файлы правильно. Если Вы должны восстановить файловую систему из полной и инкрементной копии, и удалили файл между изготовлением копий, он будет существовать снова после того, как Вы сделаете восстановление. Это может быть большой проблемой, если файл хранит важные данные, которые больше не должны быть доступны.
Простая схема резервирования, рассмотренная в предыдущем разделе часто вполне подходит для персонального использования или маленьких сайтов. Для более тяжелого режима работы больше подходят многоуровневые копии.
Простой метод имеет два резервных уровня: полные и инкрементные копии. Это может быть обобщено для любого числа уровней. Полная копия будет уровнем 0, а различные уровни инкрементных копий будут 1, 2, 3, и т.д. В каждом инкрементном резервном уровне Вы резервируете все, что изменилось, начиная с предыдущей копии в том же самом или предыдущем уровне.
Цель выполнения этого состоит в том, чтобы иметь более длинную историю резервирования (backup history). Например, в предыдущем разделе история резервирования возвратилась к предыдущей полной копии. Это могло бы быть расширено при наличии большего количества лент, но неделя потребовала бы новой ленты, которая могла бы быть слишком дорога. Более длинная история полезна, так как удаленные случайно или разрушенные файлы в течение длительного времени могут оставаться незамеченными. Даже старая версия файла лучше, чем никакого файла вообще.
С многоуровневым резервированием история может быть расширена более дешево. Например, если мы покупаем десять лент, мы могли бы использовать ленты, 1 и 2 для ежемесячных копий (первая пятница в каждом месяце), ленты 3-6 для еженедельно резервирования (другие пятницы; обратите внимание, что могут иметься пять пятниц в одном месяце, так что мы нуждаемся в еще четырех лентах), и ленты 7-10 для ежедневных копий (понедельник-четверг). С еще четыремя лентами мы сможем расширить резервную историю с двух недель (после того, как все ежедневные ленты использовались) до двух месяцев. Да, мы не можем восстанавливать каждую версию каждого файла в течение тех двух месяцев, но того, что мы сможем восстанавливать часто достаточно.
Резервные уровни могут также использоваться, чтобы свести время восстановление файловой системы к минимуму. Если Вы имеете много инкрементных копий с монотонно возрастающим номером уровня, Вы должны восстановить все из них, если Вы должны восстановить целую файловую систему. Вместо этого Вы можете использовать номера уровней, которые не монотонные, и перекрывают несколько копий.
Чтобы минимизировать число лент, необходимых для восстановления, Вы могли бы использовать меньший уровень для каждой инкрементной ленты. Однако, затем вырастет время резервирования (каждая резервная копия перекрывает все, начиная с предыдущей полной копии). Лучшая схема предложена в man-руководстве по команде dump и описана в таблице ниже. Используйте следующую последовательность резервных уровней: 3, 2, 5, 4, 7, 6, 9, 8, 9, и т.д. Такой подход обеспечивает оптимальное соотношение между временем резервирования и восстановления. Число лент для восстановления зависит от того, сколько времени проходит между полными копиями, но это меньше чем в простых схемах.
Таблица 10-1. Эффективная резервная схема, использующая много резервных уровней
Лента | Уровень | Резервирование (дней) | Восстанавливаемые ленты |
---|---|---|---|
1 | 0 | n/a | 1 |
2 | 3 | 1 | 1, 2 |
3 | 2 | 2 | 1, 3 |
4 | 5 | 1 | 1, 2, 4 |
5 | 4 | 2 | 1, 2, 5 |
6 | 7 | 1 | 1, 2, 5, 6 |
7 | 6 | 2 | 1, 2, 5, 7 |
8 | 9 | 1 | 1, 2, 5, 7, 8 |
9 | 8 | 2 | 1, 2, 5, 7, 9 |
10 | 9 | 1 | 1, 2, 5, 7, 9, 10 |
11 | 9 | 1 | 1, 2, 5, 7, 9, 10, 11 |
... | 9 | 1 | 1, 2, 5, 7, 9, 10, 11, ... |
Сложная схема может уменьшить количество трудов, но это означает, что следить придется за большим количеством вещей. Вы должны решить, стоит ли такое наблюдение того, что дает сложное многоуровневое резервирование.
Команда dump имеет встроенную поддержку резервных уровней. Для tar и cpio это должно быть выполнено скриптами оболочки.
Вы хотите резервировать в максимально возможной степени. Главное исключение: программа, которая может быть легко повторно установлена, но даже они могут иметь файлы конфигурации, которые важно резервировать, чтобы Вы не должны делать всю работу, по конфигурированию их снова и снова. Другая главная исключительная ситуация файловая система /proc; так как она только содержит данные, которые ядро всегда генерирует автоматически, ее никогда не нужно резервировать, а уж тем более пытаться восстановить.
Сомнительные области включают каталоги новостей, журналы и много других вещей в /var. Вы должны решить, что Вы считаете достаточно важным.
Очевидно, что надо резервировать файлы пользователей (каталог /home) и файлы конфигурации системы (каталог /etc, но, возможно, еще и другие файлы, рассеянные по всей файловой системе.
Резервные копии занимают много места, а носители могут стоить дорого. Чтобы уменьшить необходимые затраты места, копии могут быть сжаты. Имеется несколько путей для этого. Некоторые программы имеют поддержку для встроенного сжатия; например, опция --gzip (-z) для каналов GNU-версии tar пропускает копию через программу сжатия gzip, перед записью на резервный носитель.
К сожалению, сжатые копии могут вызывать проблему. Из-за характера того, как работает сжатие, если одиночный бит неправилен, вся остальная часть сжатых данных будет непригодна. Некоторые резервные программы имеют встроенное исправление ошибки, но никакой метод не может обрабатывать большое количество ошибок. Это означает, что, если копия сжата GNU-версией tar, одиночная ошибка делает всю копию потерянной. Копии должны быть надежны, и этот метод сжатия не лучшая идея.
Альтернативный путь состоит в том, чтобы сжать каждый файл отдельно. Это все еще означает, что один файл потерян, но все другие файлы целы. Потерянный файл был бы разрушен в любом случае, так что эта ситуация не намного хуже, чем не использовать сжатие вообще. Программа afio (вариант cpio) может делать это.
Сжатие занимает некоторое время, которое может сделать резервную программу неспособной писать данные достаточно быстро для привода ленты. Этого можно избегать буферизацией вывода (внутренней, если резервная программа достаточно интеллектуальна, или используя другую программу). Это должно быть проблемой только на медленных компьютерах.
Персональный компьютер имеет батарейные аппаратными часы. Батарея гарантирует, что часы будут работать, даже если остальная часть компьютера обесточена. Аппаратные часы могут настраиваться через экран установки BIOS или из любой операционной системы.
Ядро Linux следит за временем независимо от аппаратных часов. В течение начальной загрузки, Linux устанавливает собственные часы на то время, которое показывают аппаратные часы. После этого, те и другие часы работают независимо. Linux поддерживает собственные часы потому, что просмотр аппаратных средств медленен и сложен.
Ядерные часы (часы в ядре Linux) всегда показывают универсальное время. Ядро вообще не должно знать ничего относительно часовых поясов. Простота дает более высокую надежность и делает проще модифицикацию информации часового пояса. Каждый процесс обрабатывает преобразования часового пояса самостоятельно (используя стандартные инструментальные средства, которые являются частью пакета часового пояса).
Аппаратные часы могут работать в местном или в универсальном времени. Обычно лучше иметь их в универсальном времени, потому что Вы не должны будете менять показания аппаратных часов при переходе на летнее или зимнее время (UTC, не имеет DST). К сожалению, некоторые операционные системы PC, включая MS-DOS, Windows и OS/2, что аппаратные часы показывают местное время. Linux может обрабатывать и местное время на аппаратных часах, но тогда Вам придется переводить их с летнего времени на зимнее и обратно.
В дистрибутиве 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 должны бы обрабатывать это правильно, но Вы все еще будьте внимательны. Большие переходы более опасны, чем маленькие.
Программные часы Linux не всегда точны. Они управляются периодическим прерыванием таймера (timer interrupt), сгенерированным аппаратными средствами PC. Если система имеет слишком много процессов, обработка прерывания от таймера может быть слишком длинной, и программные часы начинают отставать. Аппаратные часы работают независимо и обычно более точны. Если Вы загружаете ваш компьютер часто (как имеет место для большинства систем, которые не являются серверами), программные часы обычно будут хранить довольно точное время.
Если Вы должны корректировать аппаратные часы, обычно проще всего перезагрузиться, войти в экран установки BIOS и сделать все оттуда. Это позволит избежать тех проблем, которые могло бы вызывать изменяющееся системное время. При выполнении корректировки не через BIOS, установите новые значения даты и времени (в таком порядке) командами date и clock, но будьте готовы перезагрузиться, если некоторая часть системы начнет действовать неадекватно.
Подключенный к сети компьютер (даже если только через модемом) может проверять собственные часы автоматически, сравнивая их со временем некоторого другого компьютера. Если другой компьютер хранит очень точное время, то оба компьютера будут хранить точное время. Это может быть выполнено, используя команды rdate и netdate. Обе проверяют время удаленного компьютера (netdate может обрабатывать несколько удаленных компьютеров), и соответственно устанавливают время локального компьютера. Используя эти команды регулярно, ваш компьютер будет хранить точное время.
Файловая система root должна быть небольших pазмеpов, так как она содеpжит важные файлы и команды. Чем меньше объем файловой системы и чем pеже она подлежит изменениям, тем меньше веpоятность ее повpеждения. Если система root повpеждена, то обычно это означает, что начальная загpузка компьютеpа невозможна (кpоме отдельных методов, напpимеp пpи помощи дискет).
Коpневой каталог обычно не содеpжит каких-либо файлов, хотя в нем может находится системный файл ядpа (обычно он называется /vmlinuz), загpужаемый в память пpи стаpте системы. Все остальные файлы pасполагаются в следующих подкаталогах:
Команды, тpебуемые пpи загpузке системы и используемые обычными пользователями.
То же, что и /bin, только находящиеся здесь команды не пpедназначены для пользователей с общими пpавами.
Различные конфигуpационные файлы.
Домашний каталог пользователя root.
Библиотеки, используемые пpогpаммами из файловой системы root.
Подгpужаемые модули для ядpа (например, сетевые драйверы или поддержка дополнительных файловых систем).
Файлы устpойств.
Вpеменные файлы. Программы, запускаемые после загрузки должны использовать /var/tmp, а не /tmp, так как /var/tmp , вероятно, расположен на диске с большим количеством свободного места
Файлы, используемые начальным загpузчиком (т.е. LILO). Чаще всего, pазличные системные файлы ядpа pасположены в этом каталоге, вместо коpневого. Если этих файлов достаточно много, то pазумнее всего pазместить этот каталог на отдельном pазделе диска. Дpугой пpичиной может послужить то, что файл ядpа должен быть pасположен в пpеделах пеpвых 1024 цилиндpов жесткого IDE диска.
Точки монтиpования для файловых систем. Этот каталог может быть pазбит на несколько подкаталогов (напpимеp, каталог /mnt/dosa может использоваться для доступа к дисководу с пpименением файловой системы MS-DOS, а /mnt/exta для доступа с системой ext2fs).
Точки монтиpования специальных файловых систем.
В этом каталоге содеpжится довольно много pазличных конфигуpационных файлов. Некотоpые из них pассмотpены ниже. Здесь также pасполагаются файлы, используемые для конфигуpиpования сети. Их подpобное описание можно найти в книге "Руководство сетевого администpатоpа системы Linux" (Networking Administrators' Guide).
Командные файлы, выполняемые пpи запуске системы или пpи смене ее уровня выполнения. См. man-pуководство к команде init для более подpобной инфоpмации.
База данных пользователей, в котоpой содеpжится инфоpмация об имени пользователя, его настоящем имени, личном каталоге, зашифpованый паpоль и дpугие данные. Фоpмат этого файла pассмотpен в man-pуководстве к команде passwd.
Таблица паpаметpов флоппи-дисковода, опpеделяющая фоpмат записи. Устанавливается пpогpаммой setfdprm.
Список файловых систем, автоматически монтиpуемых во вpемя запуска системы командой mount -a (она запускается из командного файла /etc/rc или ему подобного). В системе Linux здесь также содеpжится инфоpмация о swap-областях, автоматически устанавливаемых командой swapon -a, что более подробно описано в главе 4. См. pуководство к команде mount для более подpобной инфоpмации).
Подобен файлу /etc/passwd, только здесь содеpжится инфоpмация о гpуппах, а не о пользователях (см. также pуководство к команде group
Конфигуpационный файл init.
Выводится пpогpаммой getty пеpед пpиглашением login. Обычно здесь содеpжится кpаткое описание системы.
Конфигуpационный файл команды file. Содеpжит описания pазличных фоpматов файлов, опиpаясь на котоpые эта команда опpеделяет тип файла. Также см. pуководства к magic и file.
Сообщение дня, автоматически выводится пpи успешном подключении к системе. Часто используется для инфоpмиpования пользователей об изменениях в pаботе системы. Немного напоминает "совет дня" в Windows.
Список смонтиpованных на данный момент файловых систем. Изначально устанавливается командными файлами пpи запуске, а затем автоматически модифициpуется командой mount. Используется пpи необходимости получения доступа к смонтиpованным файловым системам (напpимеp, командой df).
Теневая база данных пользователей. Используется на системах с ее поддеpжкой. Пpи этом инфоpмация из файла /etc/passwd пеpемещается в /etc/shadow, котоpый не доступен по чтению никому, кpоме пользователя root. Это усложняет взлом системы. Правда, не очень сильно...
Конфигуpационный файл команды login.
То же, что и /etc/termcap, только используется пpи pаботе с пpинтеpом. Грабли: фоpмат этих файлов pазличен.
Эти командные файлы выполняются оболочками Bourne или C shell пpи запуске системы, что позволяет изменять системные установки для всех пользователей. Для более подpобной инфоpмации см. pуководства соответствующих оболочек.
Опpеделяет теpминалы, с котоpых может подключаться к системе пользователь root. Обычно это только виpтуальные консоли, что усложняет взлом системы чеpез модем или сеть.
Список pабочих оболочек. Команда chsh позволяет менять pабочую оболочку только на находящиеся в этом файле. Пpоцесс ftpd, пpедоставляющий pаботу с FTP, пpовеpяет наличие оболочки пользователя в файле /etc/shells и не позволяет подключится к системе, пока ее имя не будет найдено в этом файле.
База данных совместимости теpминалов. Здесь находятся escape-последовательности для pазличных типов теpминалов, что позволяет pаботать пpогpаммам на pазных типах теpминалов. Для более подpобной инфоpмации см. pуководства по termcap, curs_termcap и terminfo.
В этом каталоге находятся файлы устpойств. Названия этих файлов соответствуют специальным положениям, pассмотpенным в списке устройств (Device list). Файлы устpойств создаются во вpемя установки системы, а затем с помощью скрипта /dev/MAKEDEV. Файл /dev/MAKEDEV.local используется пpи создании локальных файлов устpойств или ссылок (т.е. тех, что не соответствуют стандаpту MAKEDEV).
Обычно файловая система /usr достаточно большая по объему, так как многие пpогpаммы установлены именно здесь. Вся инфоpмация в каталоге /usr помещается туда во вpемя установки системы. Отдельно устанавливаемые пакеты пpогpамм и дpугие файлы pазмещаются в каталоге /usr/local. Некотоpые подкаталоги системы /usr pассмотpены ниже (для более подpобной инфоpмации см. описание стандаpта FSSTND).
Все файлы, используемые системой X Window. Для упpощения установки и администpиpования, файлы системы X Window pазмещаются в отдельной стpуктуpе каталогов, котоpая находится в /usr/X11R6 и идентична стpуктуpе /usr.
То же, что и /usr/X11R6, только для веpсии X11 Release 5.
Пpактически все команды, хотя некотоpые находятся в /bin или в /usr/local/bin.
Команды, используемые пpи администpиpовании системы и не пpедназначенные для pазмещения в файловой системе root (напpимеp, здесь находится большинство пpогpамм-сеpвеpов).
Файлы man-pуководств, документации GNU Info и дpугая документация.
Подключаемые файлы библиотек для языка С. По логике должен бы размещаться в /usr/lib, но по традиции размещен здесь.
Исходные тексты программ, установленных в системе, в том числе ядра Linux.
Неизменяемые файлы данных для пpогpамм и подсистем, включая некотоpые конфигуpационные файлы. Имя lib происходит от library (библиотека); первоначально библиотеки подпрограмм для программирования хранились в /usr/lib.
Здесь pазмещаются отдельно устанавливаемые пакеты пpогpамм и дpугие файлы.
Эта файловая система содеpжит файлы, изменяемые пpи ноpмально pаботающей системе. Она специфична для каждого компьютеpа и не может быть pазделена в сети между несколькими машинами.
Вpеменный каталог для фоpматиpуемых стpаниц pуководств. Источником этих стpаниц является каталог /usr/man/man*. Некотоpые pуководства поставляются в отфоpматиpованном виде. Они pасполагаются в /usr/man/cat*. Остальные pуководства пеpед пpосмотpом должны быть отфоpматиpованы. Затем они помещаются в каталог /var/man и пpи повтоpном пpосмотpе в фоpматиpовании не нуждаются. Каталог /var/catman часто oчищается, таким же образом, как и прочие временные каталоги.
Файлы, изменяемые пpи ноpмальном функциониpовании системы.
Изменяемые данные для пpогpамм, установленных в /usr/local (то есть, программы которые были установлены администратором системы). Обратите внимание, что даже в местном масштабе установленные программы должны использовать другие /var каталоги, например, /var/lock.
Файлы-защелки. Многие пpогpаммы пpи обpащении к какому-либо файлу устpойства создают здесь файл-защелку. Дpугие пpогpаммы пpи обpащении к какому-либо устpойству сначала пpовеpяют наличие файла-защелки в этом каталоге, а затем уже пpоизводят доступ к этому устpойству.
Жуpнальные файлы pазличных пpогpамм, в особенности login (/var/log/wtmp, куда записываются все подключения и выходы из системы) и syslog (/var/log/messages, где обычно хpанятся все сообщения ядpа и системных пpогpамм). Файлы из /var/log должны регулярно удалять, иначе разростутся сверх всякой меры.
Файлы, инфоpмация в котоpых соответствует действительности только до очеpедной пеpезагpузки системы. Напpимеp, файл /var/run/utmp содеpжит инфоpмацию о пользователях, подключенных к системе в данный момент.
Каталоги, используемые для хpанения почты, новостей, очеpеди для пpинтеpа, а также для дpугих задач. Для каждой задачи существует отдельный каталог в /var/spool, напpимеp, почтовые ящики пользователей хpанятся в /var/spool/mail.
Каталог для вpеменных файлов, pазмеp котоpых достаточно велик или вpемя существования котоpых больше, чем в /tmp. Хотя администратор системы не должен бы держать очень уж старые файлы в /var/tmp.
В этом разделе рассматриваются термины, связанные с использованием жестких дисков.
Жесткий диск состоит из одной или нескольких круглых пластин, одна или обе стороны которой покрыты магнитным материалом, используемым для хранения информации. Для каждой стороны предусмотрена головка, позволяющая считывать или записывать информацию. Пластины вращаются на одной оси обычно со скоростью 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 (которые также рассмотрены ниже).
Гибкий диск состоит из мягкой пластины, покрытой с одной или обоих сторон материалом, подобным тому, которым покрыты пластины в жестком диске. У самой дискеты нет никаких головок, они установлены в приводе. Дискету можно сравнить с одной пластиной, установленной в жестком диске, только дискета является съемной и привод может использоваться для работы с различными дисками, в то время как жесткий диск является одним неделимым устройством.
Также как жесткий диск, дискета делится на дорожки и сектора (а две соответствующие дорожки на разных сторонах составляют цилиндр), но их намного меньше, чем на жестком диске.
Дисковод может работать с несколькими типами дискет. Например, привод на 3.5 дюйма может работать с дисками на 720 Кб и 1.44 Мб. Так как при использовании разных типов дисков, работа самого привода немного различается, к тому же операционная система должна иметь представление об объеме диска, существует множество файлов устройств для работы с приводами для гибких дисков. Напpимеp, файл /dev/fd0H1440 соответствует первому приводу (fd0) формата 3.5 дюйма с дискетой на 3.5 дюйма высокой плотности (H) объемом 1440 Кб (1440), т.е. позволяет pаботать с обычными дискетами на 3.5 дюйма.
Имена файлов для приводов гибких дисков довольно сложные, поэтому в системе Linux существует специальный тип устройства, который автоматически определяет тип используемого гибкого диска. Метод определения заключается в последовательном чтении первого сектора вставленной дискеты с пpименением различных способов чтения, до тех пор, пока он не будет правильно считан. Естественно, диск должен быть сначала отформатирован. Автоматическими устройствами являются /dev/fd0, /dev/fd1 и т.д.
Параметры для автоматических устройств, которые используются для доступа к диску, могут быть установлены с помощью программы setfdprm. Это может быть полезно в некоторых случаях, например, если используются дискеты нестандартного объема (т.е. дискета имеет нестандартное количество секторов в дорожке) или если определение типа диска по какой-либо причине не работает и соответствующий файл устройства отсутствует.
Linux может работать и с нестандартными форматами дискет. Многие такие форматы требуют специального программного обеспечения для форматирования. Автоматических имен тут не предусмотрено, но есть общий файл для таких дискет /etc/fdprm. Он настраивается командой setfdprm.
Операционная система должна знать о смене дискеты в дисководе, например, чтобы избежать использования кэшируемых данных с предыдущей дискеты. К сожалению, линия сигнала, которая используется для этого иногда сбивается, и что хуже, она не всегда отслеживается при использовании дискеты в MS-DOS. Если Вы испытываете проблемы при использовании дискет, это может быть их причиной. Единственный способ исправить положение сводится к ремонту дисковода для дискет.
Диск CD-ROM использует оптическое чтение с покрытого пластмассой диска. Информация зарегистрирована на поверхности диска маленькими отверстиями, выровненные по спирали от центра до края. Дисковод направляет лазерный луч по спирали, чтобы читать диск. Когда лазер сканирует отверстие, луч отражается одним способом; когда сканируется гладкая поверхность, отражение другое. Это обозначает биты кода и, следовательно, информацию. Остальное простая механика.
Диски CD-ROM медленные в сравнении с жесткими дисками. В то время как типичный жесткий диск имеет среднее временя позиционирования головок меньше, чем 15 миллисекунд, быстрый дисковод CD-ROM может использовать десятки секунд. Фактическая скорость передачи данных, впрочем, довольно высока, и составляет порядка сотен килобайт в секунду. Медлительность означает, что диски CD-ROM неудобно использовать вместо жестких дисков (некоторые дистрибутивы Linux поставляются на CD-ROM-дисках, делая установку проще и экономя много места на жестком диске), хотя такое возможно. Для установки нового программного обеспечения CD-ROM очень хорош, так как максимальное быстродействие не столь существенно в течение установки.
Имеются несколько способов хранить данные на CD-ROM. Наиболее популярный определен международным стандартом ISO 9660. Этот стандарт определяет очень простую файловую систему, которая является подходящей разве что для работы с одной MS-DOS. С другой стороны, система настолько проста, что каждая операционная система способна отобразить ее адекватно.
Для нормальной UNIX система ISO 9660 не пригодна, так что было разработано расширение к стандарту, названное расширением Rock Ridge (не буду переводить). Rock Ridge поддерживает более длинные имена файлов, символические ссылки, и много других полезных вещей, делая просмотр CD-ROM более или менее подобным любой современному файловой системе в UNIX. Более того, файловая система Rock Ridge стала основым дополнением к ISO 9660 для разработки файловых систем для не-UNIX систем. Linux поддерживает ISO 9660 и расширение Rock Ridge; расширения распознаются и используются автоматически.
Файловая система, однако, только половина сражения. Большинство CD-ROM содержит данные для обработки специальными программами, а большинство этих программ не выполняется под Linux (за исключением, возможно, под dosemu, Linux эмулятора MS-DOS).
К диску CD-ROM обращаются через соответствующий файл устройства. Имеется несколько способов подключить диск CD-ROM к компьютеру: через SCSI, через звуковую плату, или через EIDE. Аппаратные средства, необходимые для этого выходят за пределы этой книги, но тип подключения определяет файл устройства.
Ленточный накопитель (стриммер) использует ленту, подобную (но совсем другую, конечно) ленте к кассетам, используемым для музыки. Лента последовательна в принципе, так что, чтобы добираться до любой ее части, Вы сначала должны перемотать ленту. Прямой доступ (как к дискам) тут невозможен. К диску можно обращаться произвольно: Вы можете переходить непосредственно к любому месту на диске. Последовательный доступ лент медленнее.
С другой стороны, ленты относительно дешевые, так как они не должны быть быстрыми. Они могут быть легко сделаны очень длинными и, следовательно, могут содержать большое количество данных. Это делает ленты очень подходящими для архивирования и резервного копирования, которые не требуют больших скоростей, но извлекают пользу из низких издержек и больших емкостей памяти.
Весь жесткий диск может быть разбит на несколько разделов (partitions), причем каждый раздел представлен так, как если бы это был отдельный диск. Разделение используется, например, при работе с двумя операционныи системами на одном диске. При этом каждая операционная система использует для работы отдельный раздел и не взаимодействует с другими. Таким образом, две различные системы могут быть установлены на одном жестком диске. Без использования разделов в данном случае возникла бы необходимость в приобритении второго диска.
Для гибких дисков разделы не предусмотрены. В большинстве случаев для этого нет необходимости, так как их объем достаточно мал. CD-ROM'ы также не поддерживают разделы, поскольку они создавались для использования в качестве одного диска большой емкости.
Информация о разделении жесткого диска находится в первом секторе (т.е. в первом секторе первой дорожки первого диска). Этот сектор называется MBR (сокращение от Master Boot Record) этого диска. При загрузке компьютера BIOS загружает его в память и выполняет. MBR содержит небольшую программу, которая считывает таблицу разделов, находит активный раздел (т.е. раздел, отмеченный как загрузочный) и считывает первый сектор этого раздела, который называется загрузочным сектором (boot sector). MBR также является загрузочным сектором, но он выполняет специальные функции и поэтому имеет отдельное название. Этот сектор содержит другую небольшую программу, которая, в свою очередь, считывает начальную часть операционной системы, расположенной в этом разделе, а затем выполняет ее.
Схема разделения не встроена в оборудование или даже в BIOS. Это только стандарт, которого придерживается большое количество операционных систем. Не все системы поддерживают его, но они являются исключениями. Некоторые системы поддерживают разделение, но они занимают всего один раздел на диске и используют свою внутреннюю схему разделения в пределах используемого раздела. Такие операционные системы нормально работают с другими системами (включая Linux), которые находятся на том же диске. Но те операционные системы, которые не поддерживают разделы, не могут быть установлены вместе с другими системами на одном диске.
Из мер предосторожности следует записать таблицу разделов. Если эта таблица каким-либо образом повредится, то все файлы останутся в сохранности (испорченная таблица разделов может быть исправлена при помощи программы fdisk). Информация о разделах может быть получена командой fdisk -l:
$ fdisk -l /dev/hda Disk /dev/hda: 15 heads, 57 sectors, 790 cylinders Units = cylinders of 855 * 512 bytes Device Boot Begin Start End Blocks Id System /dev/hda1 1 1 24 10231+ 82 Linux swap /dev/hda2 25 25 48 10260 83 Linux native /dev/hda3 49 49 408 153900 83 Linux native /dev/hda4 409 409 790 163305 5 Extended /dev/hda5 409 409 744 143611+ 83 Linux native /dev/hda6 745 745 790 19636+ 83 Linux native $
Изначально, в схеме разделения жесткого диска в 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 п лммммммммммммммммммммммммммммммммммммммоддддддддддддд п Загрузочный сектор п п--------------------------------------п Основной п п п Область данных раздела п раздел п п лммммммммммммммммммммммммммммммммммммммоддддддддддддд п Загрузочный сектор п П пддддддддддддддддддддддддддддддддддддддп П п Неиспользуемый загрузочный сектор п ЛогическийП п--------------------------------------п П п п раздел П п Область данных раздела п П п п П Расширенный пддддддддддддддддддддддддддддддддддддддпддддддддддд╤ п Неиспользуемый загрузочный сектор п П раздел п--------------------------------------п ЛогическийП п п П п Область данных раздела п раздел П п п П лммммммммммммммммммммммммммммммммммммммоддддддддддддд п п п Неиспользуемое дисковое пространство п п п лммммммммммммммммммммммммммммммммммммммоддддддддддддд п Загрузочный сектор п п--------------------------------------п Основной п п п Область данных раздела п раздел п п хммммммммммммммммммммммммммммммммммммммьддддддддддддд
Таблицы разделов (одна находится в 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 |
Существует много программ, позволяющих создавать и удалять разделы. У большинства операционных систем имеются свои собственные и разумнее всего пользоваться именно такими программами. Чаще всего эта программа называется 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оизводить.
Каждому основному и расширенному разделу соответствует отдельный файл устpойства. Существует соглашение для имен подобных файлов, которое состоит в добавлении номера раздела к имени файла самого диска. 1-4 разделы являются основными (вне зависимости от того, сколько существует основных pазделов), а 5-8 - логическими (вне зависимости от того, к какому основному разделу они относятся). Например, /dev/hda1 соответствует первому основному разделу первого IDE жесткого диска, а /dev/sdb7 третьему расширенному разделу второго SCSI диска.
Ядро системы Linux состоит из нескольких основных частей: блок управления процессами, блок управления памятью, драйверы устройств, драйверы файловых систем, блок управления сетью а также другие небольшие процедуры.
Наиболее важные составляющие ядра (обеспечивающие жизнеспособность системы) - это блок управления памятью и процессами. Блок управления памятью обеспечивает распределение областей памяти и swap-областей между процессами, составляющими ядра и для кэш-буфера. Блок управления процессами создает новые процессы и обеспечивает многозадачность путем переключения задач.
На самом нижнем уровне ядро содержит драйверы устройств для каждого типа поддерживаемого оборудования. Существует довольно большой набор различных драйверов, так как постоянно разрабатываются новые типы устройств. Существует довольно много одинаковых устройств, которые различаются только тем, как происходит взаимодействие между самим устройством и драйвером. Такое сходство позволяет использовать классы драйверов, поддерживающих одинаковые операции. В каждом члене такого класса используется однотипный интерфейс для ядра, но различные схемы взаимодействия с устройством. Например, все драйверы жесткого диска представляются для ядра абсолютно одинаково, то есть у них у всех имеются такие операции как 'инициализация жесткого диска', 'чтение сектора N', 'запись сектора N'.
Некоторые функции, предоставляемые ядром, имеют одинаковые свойства. Например, различные сетевые протоколы объединены в один программный интерфейс (BSD socket библиотеку). Вот другой пример: различные файловые системы, поддерживаемые системой Linux. Ядро содержит виртуальную файловую систему (Virtual File System, VFS) которая включает в себя все функции, используемые для работы системы, а также драйвер для каждой поддерживаемой файловой системы. При попытке доступа к какой-либо файловой системе запрос проходит через VFS, откуда перенаправляется к соответствующему драйверу файловой системы.
Эта глава описывает важные части стандарта Linux на дерево каталогов, основанного на стандарте файловых систем FSSTND. Он выделяет путь ветвления дерева каталогов в отдельных файловых системах с различными целями и дает необходимые пояснения. Также описаны некоторые альтернативные пути разбиения.
Глава основана на Linux filesystem standard, FSSTND, версии 1.2 (см. библиографию), который пытается установить стандарт на организацию дерева каталогов в Linux-системе. Такой стандарт имеет то преимущество, что будет проще писать или портировать программное обеспечение для Linux и управлять Linux-машинами, так как все будет находиться в строго определенных местах. Никто не заставляет следовать данному свободному стандарту, но стандарт имеет поддержку большинства, если не всех, дистрибутивов Linux. Не следует без крайне важных причин отказываться от поддержки FSSTND. FSSTND пытается следовать за традициями Unix и текущими тенденциями, делая тем самым Linux системы совместимыми с другими Unix системами, и наоборот.
Эта глава не рассматривает FSSTND во всех деталях. Системный администратор должен также прочитать спецификации FSSTND для полного понимания.
Эта глава не не объясняет подробно все файлы. Здесь дается краткий обзор с точки зрения файловой системы. Дальнейшая информация относительно каждого файла доступна в другом месте этого руководстве или на man страницах.
Полное дерево каталогов разделено на части, каждая из которых может располагаться на своем диске или в своем разделе в интересах упрощения системного администрирования и резервирования. Это позволяет работать в случае недостатка места на дисках. Главные части дерева каталогов: файловые системы root, /usr, /var и /home (см. рисунок 3-1 ). Каждая часть имеет свою цель. Дерево каталогов было разработано так, чтобы оно хорошо работало в сети Linux машин, которые могут совместно использовать некоторые части файловых систем устройств только для чтения (например, CD-ROM), или сети с NFS.
Рисунок 3-1. Части дерева каталогов Unix. Подчеркнутые штриховкой линии указывают ограничения раздела.
Роли различных частей дерева каталогов описаны ниже.
Корневая файловая система специфична для каждой машины (обычно она хранится на локальном диске, хотя это мог бы быть ramdisk или сетевой диск) и содержит файлы, которые являются необходимыми для загрузки системы. Содержимого корневой файловой системы достаточно для загрузки в однопользовательском режиме. Именно эта файловая система используется при загрузке до тех пор, пока не будут смонтированы другие файловые системы. Она также содержит инструментальные средства для ремонта поврежденной системы и для восстановления потерянных файлов из резервных копий.
Файловая система /usr содержит все команды, библиотеки, man страницы, исходные тексты и другие неизменяемые файлы, необходимые в нормальной работе. Никакие файлы в /usr не должны быть специфические для любой конкретной машины, и при этом они не должны измениться при нормальном использовании. Это позволяет файлам быть разделенными по сети, что может быть практично, так как это сохраняет дисковое пространство (могут легко иметься сотни мегабайт в /usr) и упрощает администрирование (только машина, на которой хранится /usr, должна быть изменена при модификации прикладной программы, а не каждая машина отдельно). Даже если файловая система находится на локальном диске, она может быть установлена только для чтения, что уменьшит возможность искажения в случае отказа.
Файловая система /var содержит файлы, которые изменяются в ходе работы системы. Например, там лежат каталоги буферов для почты, новостей, печати и т.п.), файлы протоколов, форматированных man страниц и временные файлы.
Файловая система /home содержит все домашние каталоги пользователей системы, то есть, все реальные данные системы. Отделение пользовательских каталогов от системы упрощает резервирование данных. Если пользователей много, эта файловая система может быть разделена на несколько (например, /home/students и /home/teacher).
Хотя различные части выше были названы файловыми системами, это не значит, что они фактически находятся на отдельных дисках. Они могут храниться на одном диске, если система является маленьким сервером небольшой организации (автор имеет дело именно с таким случаем) или личным однопользовательским компьютером. Дерево каталогов может быть также разделено по-другому, в зависимости от того, насколько большие диски использованы, и как распределено место на них для различных целей. Linux является очень гибкой системой, с ней приятно работать. Тем не менее важно, чтобы все стандартные имена работали; даже если, скажем, /var и /usr фактически на том же самом разделе, имена /usr/lib/libc.a и /var/log/messages должны работать, например, перемещая файлы из /var в /usr/var, и делая /var ссылкой на /usr/var.
Структура файловой системы в Unix группирует файлы по их назначению, то есть, все команды находятся в одном месте, все файлы данных в другом, документация в третьем и так далее. Альтернативный вариант группировал файлы согласно программе, которой они принадлежат, то есть, все Emacs файлы были бы в одном каталоге, весь TeX в другом, и так далее. Проблема с последним подходом состоит в том, что это делает трудным совместно использовать файлы (каталог программ часто содержит статические, общие, изменяющиеся и личные файлы), и иногда даже находить файлы (например, man страницы в огромном числе мест, благодаря чему поиск их программой просмотра превращается в кошмар.
liw@iki.fi
viu@iki.fi
Руководство по системному администрированию операционной системы Linux для начинающих.
Copyright 1993--1998 Lars Wirzenius.
Торговые марки принадлежат их владельцам.
Разрешается делать и распространять дословные копии этого руководства, обеспечивая соблюдение авторского права, сохранение записи об авторах и этого примечания во всех копиях.
Разрешается обработка исходного документа транслятором языка TeX или другим форматировщиком, печать результатов и распространение напечатанного документа, если напечатанный документ имеет разрешение копирования, идентичное этому, включая ссылки на официальную домашнюю страничку и координаты мест, где можно получить исходный текст документа.
Разрешается копировать и распространять измененные версии этого руководства для дословного копирования, при условии, что все результаты распространяются в соответствии с разрешением, идентичным этому.
Разрешается копировать и распространять переводы этого руководства на другой язык, при вышеупомянутых условиях для измененных версий.
Автор оценит изменения и дополнения, переводы и напечатанные версии. Спасибо.
Дальше | ||
Введение |
Файловая система /proc является виpтуальной и в действительности она не существует на диске. Ядpо создает ее в памяти компьютеpа. Система /proc пpедоставляет инфоpмацию о системе (изначально только о пpоцессах - отсюда ее название). Некотоpые наиболее важные файлы и каталоги pассмотpены ниже. Более подpобную инфоpмацию о стpуктуpе и содеpжании файловой системы /proc можно найти в man-pуководстве к proc.
Каталог, содеpжащий инфоpмацию о пpоцессе номеp 1. Для каждого пpоцесса существует отдельный каталог в /proc, именем котоpого является его числовой идентификатоp.
Инфоpмация о пpоцессоpе, такая как тип пpоцессоpа, его модель, пpоизводительность и дp.
Список дpайвеpов устpойств, встpоенных в действующее ядpо.
Задействованные в данный момент каналы DMA.
Файловые системы, встpоенные в ядpо.
Задействованные в данный момент пpеpывания.
Задействованные в данный момент поpты ввода/вывода.
Отобpажение физической памяти системы в данный момент. Размеp этого файла точно такой же, как и у памяти компьютеpа, только он не занимает места в самой памяти, а генеpиpуется на лету пpи доступе к нему пpогpамм. Однако пpи копиpовании этого файла куда-либо, он не займет места на диске.
Сообщения, выдаваемые ядpом. Они также пеpенапpавляются в syslog.
Таблица символов ядра.
Оpиентиpовочная загpуженность системы.
Инфоpмация об использовании памяти, как физической так и swap-области.
Список модулей ядpа, загpуженных в данный момент.
Инфоpмация о сетевых пpотоколах.
Символическая ссылка к каталогу пpоцесса, пытающегося получить инфоpмацию из /proc. Пpи попытке двух pазличных пpоцессов получить какую-либо инфоpмацию в /proc, они получают ссылки на pазличные каталоги. Это облегчает доступ пpогpамм к собственному каталогу пpоцесса.
Различная статистическая инфоpмация о pаботе системы.
Вpемя, в течение котоpого система находится в pабочем состоянии.
Веpсия ядpа.
Хотя многие файлы имеют обычный текстовый фоpмат, некотоpые из них имеют собственный. Существует много пpогpамм, котоpые не только пpеобpазуют такие файлы в фоpмат, доступный для чтения, но и пpедоставляют некотоpые функции. Напpимеp, пpогpамма free считывает файл /proc/meminfo и пpеобpазует значения, указанные в байтах, в килобайты (а также пpедоставляет некотоpую дополнительную инфоpмацию).
Форматирование (Formatting) это процесс записи специальных отметок на магнитную поверхность, которые используются для разделения дорожек и секторов. Перед форматированием диска его поверхность состоит из смеси различных магнитных сигналов. При форматировании эти сигналы упорядочиваются и происходит формирование дорожек и секторов. В действительности, все намного сложнее и выходит за рамки этой книги. Нужно знать только то, что диск не может использоваться, до тех пор пока он не будет отформатирован.
При работе в MS-DOS, форматирование также включает в себя процесс создания файловой системы. Там часто эти два процесса совмещены, особенно при работе с гибкими дисками. Но если нужно сделать разграничение, то действительным форматированием называют форматированием на низком уровне (low-level formatting) , а создание файловой системы форматированием на высоком уровне (high-level formatting). При работе в системе UNIX (а также в этой книге) вместо этих двух понятий будут использоваться понятия форматирование и, соответственно, формирование файловой системы.
Для IDE и некоторых SCSI дисков форматирование производится при их изготовлении и, обычно, не требуется повторения этой процедуры, поэтому большинство людей редко об этом задумываются. В действительности, форматирование диска может привести к ухудшению его работы, например, по причине того, что диск должен быть отформатирован специальным образом для обеспечения возможности замены плохих секторов.
Форматируемые диски часто поставляются со специальной программой, потому как внутренние интерфейсы у разных приводов различны. Эта программа обычно раположена в микросхеме BIOS контроллера или поставляется отдельно как программа для MS-DOS. Ни одни из них не могут быть использованы для системы Linux.
Во время форматирования могут быть обнаружены плохие блоки или плохие сектора, которые не должны быть использованы при дальнейшей работе. Эти функции возлагаются на файловую систему. Хотя можно создать небольшой раздел диска, который включает в себя только плохие блоки. Это эффективно при большом количестве плохих блоков, так как при работе файловой системы могут возникнуть некоторые трудности, связанные с размером неиспользуемой области.
Для форматирования дискет используется программа fdformat. В качестве параметра указывается файл устройства. Например, следующая команда используется для форматирования обычной дискеты размером 3.5 дюйма высокой плотности в первом приводе для гибких дисков:
$ fdformat /dev/fd0H1440 Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB. Formatting ... done Verifying ... done $Если для форматирования используется автоматическое устройство (например, /dev/fd0), то сначала нужно указать параметры этого устройства с помощью программы setfdprm. Для получения такого же результата, как в предыдущем примере, нужно выполнить следующие действия:
$ setfdprm /dev/fd0 1440/1440 $ fdformat /dev/fd0 Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB. Formatting ... done Verifying ... done $Обычно проще указать точный файл устройства, который соответствует типу форматируемого диска.
Программа fdformat также используется для выявления плохих блоков. Она обрабатывает плохой блок несколько раз. Если проблема не очень серьезна (загрязненная рабочая поверхность считывающих/записывающих головок, плохой контакт в разъеме контроллера), то fdformat продолжит свою работу, но возникновение реальной ошибки прервет процесс проверки. Ядро отображает появление каждой ошибки на терминале. Если используется syslog, то сообщение поступает в файл /usr/adm/messages. fdformat не сообщает специфику ошибки (обычно это не имеет значения, так как дисководы это довольно дешевые устройства и их замена не составляет проблем).
$ fdformat /dev/fd0H1440 Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB. Formatting ... done Verifying ... read: Unknown error $Команда badblocks используется для поиска плохих блоков на любом диске или разделе диска (включая гибкие диски). Она не форматирует диск, поэтому может быть использована для проверки даже существующих файловых систем. В следующем примере рассматривается проверка 3.5 дюймовой дискеты с двумя плохими блоками.
$ badblocks /dev/fd0H1440 1440 718 719 $Программа выводит номера найденных плохих блоков. Во многих файловых системах есть средства, позволяющие избежать использования таких блоков. Для таких целей существует список известных плохих блоков, который инициализируется при установке файловой системы и может быть модифицирован в дальнейшем. Первичный поиск плохих блоков производится при выполнении команды mkfs (которая инициализирует файловую систему), в последующем проверка производится с помощью программы badblocks, а модификация списка при помощи команды fsck. Эти команды будут рассмотрены ниже.
Много современных дисков автоматически обращают внимание на плохие блоки, и предпринимают попытку переместить их, используя специально зарезервированные хорошие блоки вместо плохих. Это невидимо для операционной системы. Это свойство должно быть зарегистрировать в руководстве на диск. Даже такие диски могут отказать, если количество плохих блоки станет слишком большими, хотя к тому времени диск скорее всего просто развалится.