Источник: The Linux System Administrator's Guide
«Бесконечны только две вещи: Вселенная и человеческая глупость, и насчёт первой я не уверен». — Альберт Эйнштейн
Многие люди помогали мне в работе над этой книгой — прямо или косвенно. Я хотела бы особо поблагодарить Matt Welsh за вдохновение и руководство LDP, Andy Oram — за то, что вернул меня к работе своими чрезвычайно ценными замечаниями, Olaf Kirch — за то, что показал мне, что это выполнимо, а также Adam Richter из Yggdrasil и других — за то, что показали мне, что это может быть интересно и другим людям.
Stephen Tweedie, H. Peter Anvin, Remy Card, Theodore Ts'o и Stephen Tweedie позволили мне позаимствовать их труды (благодаря чему книга стала выглядеть толще и гораздо солиднее): сравнение файловых систем xia и ext2, список устройств и описание файловой системы ext2. Они больше не входят в состав этой книги. Я очень благодарна за это и приношу свои извинения за ранние версии, в которых иногда отсутствовали надлежащие указания авторства.
Кроме того, я хотела бы поблагодарить Mark Komarinski за присланный в 1993 году материал и многочисленные колонки о системном администрировании в Linux Journal. Они весьма информативны и вдохновляющи.
Полезные замечания прислали очень многие люди. Мой архив, напоминающий миниатюрную чёрную дыру, не позволяет мне найти имена их всех, но некоторые из них, в алфавитном порядке: Paul Caprioli, Ales Cepek, Marie-France Declerfayt, Dave Dobson, Olaf Flebbe, Helmut Geyer, Larry Greenfield и его отец, Stephen Harris, Jyrki Havia, Jim Haynes, York Lam, Timothy Andrew Lister, Jim Lynch, Michael J. Micek, Jacob Navia, Dan Poirier, Daniel Quinlan, Jouni K Seppänen, Philippe Steindl, G.B. Stotte. Приношу извинения всем, кого я забыла.
Я хотел бы поблагодарить Lars и Joanna за их большой труд над этим руководством.
В руководстве, подобном этому, почти наверняка найдутся хотя бы некоторые мелкие неточности. И почти определённо будут разделы, которые время от времени будут устаревать. Если вы что-то такое заметите, пожалуйста, сообщите мне об этом по электронной почте: bagpuss@debian.org.NOSPAM. Я приму практически любую форму материалов (diff'ы, просто текст, HTML — что угодно), и я ни в коем случае не выше того, чтобы позволить другим помогать мне поддерживать в порядке такой объёмный текст, как этот :)
Огромное спасибо Helen Topping Shaw за то, что взялась за красную ручку и сделала текст гораздо лучше, чем он был бы без неё. Также спасибо ей просто за то, что она замечательный человек.
Я хотел бы поблагодарить Lars, Joanna и Stephen за всю замечательную работу, которую они проделали над этим документом за эти годы. Мне остаётся лишь надеяться, что мой вклад окажется достойным продолжения начатой ими работы.
Как и предыдущие сопровождающие, я открыто приветствую любые комментарии, предложения, жалобы, исправления или любую другую обратную связь, которая у вас может быть. Этот документ может только выиграть от предложений тех, кто им пользуется.
На моём пути через мир, свободный от Windows, мне помогало множество людей, и больше всего я считаю нужным поблагодарить своего первого настоящего наставника по UN*X — Mike Velasco. Ещё в те времена, когда SCO не было «грязным словом», Mike помогал мне продвигаться по пути tar, cpio и очень, очень многих man-страниц. Спасибо, Mike! Ты — «Sofa King».
«Вначале файл был безвиден и пуст, и пустота была над лицом битов. И персты Автора носились над лицом клавиатуры. И сказал Автор: да будут слова. И стали слова.»
«Руководство системного администратора Linux» (The Linux System Administrator's Guide) описывает вопросы системного администрирования при работе с Linux. Оно предназначено для тех, кто почти ничего не знает о системном администрировании (тех, кто спрашивает: „а что это?“), но уже освоил хотя бы основы обычной работы с системой. Это руководство не рассказывает, как установить Linux; этому посвящён документ «Установка и первые шаги» (Installation and Getting Started). Подробнее о руководствах по Linux смотрите ниже.
Системное администрирование охватывает всё, что необходимо делать, чтобы компьютерная система оставалась в рабочем состоянии. Сюда входят создание резервных копий файлов (и их восстановление при необходимости), установка новых программ, создание учётных записей пользователей (и удаление тех, что больше не нужны), проверка того, что файловая система не повреждена, и так далее. Если бы компьютер был, скажем, домом, системное администрирование называлось бы его обслуживанием и включало бы уборку, ремонт разбитых окон и прочие подобные дела.
Структура этого руководства такова, что многие главы можно читать независимо: если вам, например, нужны сведения о резервном копировании, можно прочитать только соответствующую главу. Тем не менее это руководство — прежде всего учебное пособие, и его можно читать последовательно или целиком.
Это руководство не предназначено для того, чтобы использоваться полностью самостоятельно. Немалая часть остальной документации по Linux также важна для системных администраторов. В конце концов, системный администратор — это просто пользователь с особыми привилегиями и обязанностями. Очень полезным ресурсом являются man-страницы (справочные страницы), к которым следует обращаться всякий раз, когда вы не знакомы с какой-либо командой. Если вы не знаете, какая команда вам нужна, можно воспользоваться командой apropos. Подробнее смотрите её man-страницу.
Хотя это руководство ориентировано на Linux, одним из общих принципов было то, что оно должно быть полезно и для других операционных систем на базе UNIX. К сожалению, поскольку различия между разными версиями UNIX в целом и в системном администрировании в частности очень велики, охватить все варианты практически невозможно. Даже охватить все возможности самого Linux сложно из-за характера его разработки.
Не существует единого официального дистрибутива Linux, поэтому у разных людей разные конфигурации, и многие используют настройки, собранные ими самостоятельно. Эта книга не ориентирована на какой-то один дистрибутив. Дистрибутивы могут и действительно заметно различаться. Там, где это возможно, различия отмечаются и приводятся альтернативы. Список дистрибутивов и некоторые их различия можно найти в сравнении дистрибутивов Linux.
Поскольку здесь описывается, как всё устроено, а не просто перечисляются «пять простых шагов» для каждой задачи, в книге много сведений, которые нужны не каждому; такие места отмечены соответствующим образом, и их можно пропустить, если вы используете заранее настроенную систему. Прочтение всего текста, естественно, углубит ваше понимание системы и сделает работу с ней и её администрирование более продуктивными.
Понимание — ключ к успеху в Linux. Эта книга могла бы просто давать готовые рецепты, но что бы вы стали делать, столкнувшись с проблемой, для которой в книге нет рецепта? Если книга способна дать понимание, рецепты не нужны: ответы будут очевидны сами собой.
Как и вся остальная разработка, связанная с Linux, работа над этим руководством велась на добровольной основе: я взялся за неё, потому что думал, что это может быть интересно, и потому что чувствовал, что это должно быть сделано. Однако, как и в любом добровольном труде, у людей ограничено количество времени, знаний и опыта. Это значит, что руководство не обязательно окажется таким хорошим, каким оно было бы, если бы за его написание щедро заплатили волшебнику и он потратил бы тысячелетия на его совершенствование. Предупреждаю.
Один из конкретных примеров экономии — то, что многое, уже хорошо описанное в других свободно распространяемых руководствах, здесь не всегда рассматривается. Особенно это касается документации по конкретным программам, например всех подробностей использования mkfs. Описывается только назначение программы и ровно столько о её использовании, сколько необходимо для целей данного руководства. За дальнейшей информацией обращайтесь к этим другим руководствам. Обычно вся упоминаемая документация входит в полный набор документации по Linux.
Microsoft, Windows, Windows NT, Windows 2000 и Windows XP являются товарными знаками и/или зарегистрированными товарными знаками корпорации Microsoft.
Red Hat — товарный знак компании Red Hat, Inc. в США и других странах.
SuSE — товарный знак Novell.
Linux — зарегистрированный товарный знак Linus Torvalds.
UNIX — зарегистрированный товарный знак в США и других странах, лицензируемый исключительно через X/Open Company Ltd.
GNU — зарегистрированный товарный знак Free Software Foundation.
Прочие названия продуктов, упомянутые в этом документе, могут быть товарными знаками и/или зарегистрированными товарными знаками соответствующих компаний.
«И увидел Бог всё, что создал, и вот, хорошо весьма». — Библия, перевод короля Иакова. Бытие 1:31.
Эта глава даёт общий обзор системы Linux. Сначала описываются основные службы, предоставляемые операционной системой. Затем, уже без особых подробностей, описываются программы, реализующие эти службы. Цель этой главы — дать понимание системы как единого целого, поэтому каждая её часть подробно описывается в других местах.
Большинство файлов устройств уже созданы и готовы к использованию сразу после установки вашей системы Linux. Если вдруг вам понадобится создать файл устройства, которого нет, сначала следует попробовать воспользоваться скриптом MAKEDEV. Этот скрипт обычно находится в /dev/MAKEDEV, но его копия (или символическая ссылка) может также располагаться в /sbin/MAKEDEV. Если он не окажется в вашем пути поиска, путь к нему придётся указывать явно.
В общем виде команда используется так:
/dev/MAKEDEV -v ttyS0create ttyS0 c 4 64 root:dialout 0660
Эта команда создаст файл устройства /dev/ttyS0 со старшим номером узла 4 и младшим номером узла 64 как символьное устройство с правами доступа 0660, владельцем root и группой dialout.
ttyS0 — это последовательный порт. Старший (major) и младший (minor) номера узлов — это числа, понятные ядру. Ядро обращается к аппаратным устройствам по числам, а запоминать их нам было бы очень трудно, поэтому мы используем имена файлов. Права доступа 0660 означают право чтения и записи для владельца (в данном случае root), право чтения и записи для членов группы (в данном случае dialout) и отсутствие доступа для всех остальных.
MAKEDEV — предпочтительный способ создания отсутствующих файлов устройств. Однако иногда скрипт MAKEDEV не знает о файле устройства, который вы хотите создать. Здесь и приходит на помощь команда mknod. Чтобы воспользоваться mknod, нужно знать старший и младший номера создаваемого устройства. Канонический источник этой информации — файл devices.txt из документации к исходным текстам ядра.
Рассмотрим пример: предположим, что наша версия скрипта MAKEDEV не умеет создавать файл устройства /dev/ttyS0. Тогда его нужно создать с помощью mknod. Из файла devices.txt мы знаем, что это должно быть символьное устройство со старшим номером 4 и младшим номером 64. Теперь нам известно всё необходимое для создания файла:
mknod /dev/ttyS0 c 4 64
chown root.dialout /dev/ttyS0
chmod 0644 /dev/ttyS0
ls -l /dev/ttyS0crw-rw---- 1 root dialout 4, 64 Oct 23 18:23 /dev/ttyS0
Как видите, для создания файла требуется гораздо больше шагов. Впрочем, на этом примере виден сам необходимый процесс. Крайне маловероятно, чтобы файл ttyS0 не предоставлялся скриптом MAKEDEV, но для иллюстрации сути этого вполне достаточно.
lspci
Будет добавлено.
lsdev
Будет добавлено.
lsusb
Будет добавлено.
lsraid
Будет добавлено.
hdparm
Будет добавлено.
Дополнительные сведения о том, какие аппаратные ресурсы использует ядро, можно найти в каталоге /proc. Обратитесь к разделу 3.7 в главе 3.
В этом разделе будут рассмотрены модули ядра.
Будет добавлено.
lsmod
Будет добавлено.
insmod
Будет добавлено.
depmod
Будет добавлено.
rmmod
Будет добавлено.
modprobe
Будет добавлено.
SAN — это выделенная сеть хранения данных, обеспечивающая доступ к LUN на уровне блоков. LUN (logical unit number, логический номер устройства) — это виртуальный диск, предоставляемый SAN. Системный администратор имеет такой же доступ и такие же права на LUN, как если бы это был диск, подключённый непосредственно к компьютеру. Администратор может разбивать диск на разделы и форматировать его любым удобным способом.
Два сетевых протокола, обычно используемых в SAN, — это Fibre Channel и iSCSI. Сеть Fibre Channel очень быстрая и не перегружается остальным трафиком локальной сети (LAN) компании. Однако она очень дорогая. Карты Fibre Channel стоят около 1000 долларов США каждая. Кроме того, они требуют специальных коммутаторов Fibre Channel.
iSCSI — более новая технология, передающая команды SCSI по сети TCP/IP. Хотя этот метод может быть не таким быстрым, как сеть Fibre Channel, он позволяет сэкономить деньги за счёт использования менее дорогого сетевого оборудования.
Больше материала будет добавлено.
Дискета состоит из гибкой мембраны, покрытой с одной или обеих сторон тем же магнитным веществом, что и жёсткий диск. У самой дискеты нет головки чтения-записи — она является частью дисковода. Дискета соответствует одной пластине жёсткого диска, но она съёмная: один дисковод можно использовать для работы с разными дискетами, а одну и ту же дискету могут читать многие дисководы, тогда как жёсткий диск — единое неделимое целое.
Как и жёсткий диск, дискета разделена на дорожки и секторы (причём две соответствующие дорожки на разных сторонах дискеты образуют цилиндр), однако их гораздо меньше, чем на жёстком диске.
Дисковод для дискет обычно может использовать несколько разных типов дисков; например, 3,5-дюймовый дисковод может работать как с дисками 720 КБ, так и с дисками 1,44 МБ. Поскольку дисковод должен работать немного по-разному, а операционная система должна знать размер диска, для дисководов дискет существует множество файлов устройств — по одному на каждое сочетание типа дисковода и типа диска. Так, /dev/fd0H1440 — это первый дисковод для дискет (fd0), который должен быть 3,5-дюймовым, использующий 3,5-дюймовый диск высокой плотности (H) размером 1440 КБ (1440), то есть обычную 3,5-дюймовую дискету HD.
Впрочем, имена для дисководов дискет сложны, поэтому в Linux существует специальный тип дисковода для дискет, который автоматически определяет тип вставленного диска. Он работает так: пытается прочитать первый сектор заново вставленной дискеты, пробуя разные типы дискет, пока не найдёт правильный. Естественно, это требует, чтобы дискета была предварительно отформатирована. Автоматические устройства называются /dev/fd0, /dev/fd1 и так далее.
Параметры, которые автоматическое устройство использует для доступа к диску, можно также задать с помощью программы setfdprm. Это может пригодиться, если вам нужно использовать диски, не соответствующие никаким обычным размерам дискет, — например, если у них необычное количество секторов, либо если автодетектирование по какой-то причине не срабатывает, а нужный файл устройства отсутствует.
Linux может работать со многими нестандартными форматами дискет в дополнение ко всем стандартным. Некоторые из них требуют использования специальных программ форматирования. Пока мы пропустим эти типы дисков, но тем временем вы можете изучить файл /etc/fdprm. В нём перечислены параметры, которые распознаёт setfdprm.
Операционная система должна знать, когда в дисководе была заменена дискета — например, чтобы не использовать кешированные данные с предыдущего диска. К сожалению, используемая для этого сигнальная линия иногда бывает неисправна, и, что хуже, это не всегда заметно при работе с дисководом из MS-DOS. Если у вас возникают странные проблемы с дискетами, причиной может быть именно это. Единственный способ исправить это — отремонтировать дисковод.
Дисковод CD-ROM использует считываемый оптическим способом диск с пластиковым покрытием. Информация записывается на поверхности диска в виде маленьких «дырок», выстроенных вдоль спирали от центра к краю. Дисковод направляет лазерный луч вдоль спирали, чтобы прочитать диск. Когда лазер попадает на «дырку», он отражается одним образом; когда попадает на гладкую поверхность — другим. Это позволяет легко кодировать биты, а значит, и информацию. Всё остальное — простая механика.
Дисководы CD-ROM медленны по сравнению с жёсткими дисками. Если у типичного жёсткого диска среднее время позиционирования составляет менее 15 миллисекунд, то быстрому дисководу CD-ROM на позиционирование может потребоваться несколько десятых долей секунды. Фактическая скорость передачи данных при этом довольно высока — сотни килобайт в секунду. Эта медлительность означает, что дисководы CD-ROM не так приятны в использовании, как жёсткие диски (некоторые дистрибутивы Linux предоставляют «живые» (live) файловые системы на 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 — эмулятора MS-DOS под Linux, или wine — эмулятора Windows).
По иронии судьбы, wine на самом деле расшифровывается как «Wine Is Not an Emulator» («Wine — не эмулятор»). Строго говоря, wine — это замена API (Application Program Interface, интерфейса прикладных программ). Подробнее смотрите документацию wine на http://www.winehq.com.
Существует также VMWare — коммерческий продукт, эмулирующий в программном обеспечении целую машину x86. Подробнее смотрите веб-сайт VMWare: http://www.vmware.com.
Доступ к дисководу CD-ROM осуществляется через соответствующий файл устройства. Есть несколько способов подключения дисковода CD-ROM к компьютеру: через SCSI, через звуковую карту или через EIDE. Необходимые для этого аппаратные ухищрения выходят за рамки этой книги, однако именно тип подключения определяет файл устройства.
Ленточный накопитель использует ленту, похожую на кассеты, применяемые для музыки. Лента по своей природе последовательна: чтобы добраться до любого её места, сначала придётся пройти все промежуточные участки. К диску же возможен произвольный доступ (random access), то есть можно прыгнуть прямо в любое место диска. Последовательный доступ делает ленты медленными.
С другой стороны, ленты относительно дёшевы в производстве, поскольку им не нужно быть быстрыми. Их также легко сделать весьма длинными, поэтому они могут вмещать большой объём данных. Это делает ленты очень подходящими для таких задач, как архивирование и резервное копирование, где не требуются большие скорости, зато важны низкая стоимость и большая ёмкость хранения.
Форматирование (formatting) — это процесс записи на магнитный носитель меток, используемых для обозначения дорожек и секторов. До форматирования магнитная поверхность диска представляет собой полный хаос магнитных сигналов. При форматировании в этот хаос вносится определённый порядок: по сути, проводятся линии, где проходят дорожки и где они делятся на секторы. В действительности всё устроено не совсем так, но это несущественно. Важно то, что диск нельзя использовать, пока он не отформатирован.
Терминология здесь несколько запутанна: в MS-DOS и MS Windows слово «форматирование» используется также для обозначения процесса создания файловой системы (о нём мы поговорим ниже). Там эти два процесса часто объединены, особенно для дискет. Когда различие всё же нужно провести, собственно форматирование называют низкоуровневым форматированием (low-level formatting), а создание файловой системы — высокоуровневым форматированием (high-level formatting). В UNIX-кругах их называют форматированием и созданием файловой системы, так и в этой книге будет использоваться такая терминология.
Для дисков IDE и некоторых SCSI форматирование фактически выполняется на заводе и повторять его не нужно, поэтому большинству людей редко приходится об этом беспокоиться. Более того, форматирование жёсткого диска может привести к тому, что он станет работать хуже, — например, потому что диск может требовать какого-то особого способа форматирования, чтобы работала автоматическая замена плохих секторов.
Диски, которые нужно или можно форматировать, зачастую всё равно требуют специальной программы, поскольку интерфейс к логике форматирования внутри накопителя у разных накопителей различается. Программа форматирования часто находится либо в BIOS контроллера, либо поставляется как программа для MS-DOS; ни то, ни другое нелегко использовать из-под Linux.
При форматировании можно столкнуться с плохими участками диска, называемыми плохими блоками (bad blocks) или плохими секторами (bad sectors). Иногда они обрабатываются самим накопителем, но даже в этом случае, если их становится больше, нужно что-то делать, чтобы не использовать эти части диска. Логика для этого встроена в файловую систему; как добавить эту информацию в файловую систему, описано ниже. Кроме того, можно создать небольшой раздел, охватывающий только плохую часть диска; этот подход может быть неплохой идеей, если плохой участок очень велик, поскольку файловые системы иногда с трудом справляются с очень большими повреждёнными областями.
Дискеты форматируются с помощью fdformat. Файл устройства дисковода передаётся в качестве параметра. Например, следующая команда отформатирует дискету высокой плотности 3,5 дюйма в первом дисководе:
fdformat /dev/fd0H1440Double-sided, 80 tracks, 18 sec/track. Total capacity
1440 kB.
Formatting ... done
Verifying ... done
Обратите внимание: если вы хотите использовать автоопределяющее устройство (например, /dev/fd0), вы обязаны сначала задать параметры устройства с помощью setfdprm. Чтобы достичь того же эффекта, что и выше, нужно сделать следующее:
setfdprm /dev/fd0 1440/1440
fdformat /dev/fd0Double-sided, 80 tracks, 18 sec/track. Total capacity
1440 KB.
Formatting ... done
Verifying ... done
Обычно удобнее выбрать правильный файл устройства, соответствующий типу дискеты. Учтите, что неразумно форматировать дискеты так, чтобы они вмещали больше информации, чем те, для которых они предназначены.
fdformat также проверяет дискету, то есть ищет на ней плохие блоки. Он будет несколько раз пытаться прочитать плохой блок (обычно это слышно — характер шума дисковода заметно меняется). Если дискета лишь слегка плохая (из-за грязи на головке чтения-записи часть ошибок оказывается ложными сигналами), fdformat не пожалуется, но настоящая ошибка прервёт процесс проверки. Ядро печатает в журнал сообщения о каждой обнаруженной ошибке ввода-вывода; они попадают на консоль или, если используется syslog, в файл /var/log/messages. Сам fdformat не сообщит, где именно произошла ошибка (обычно это никого не волнует — дискеты достаточно дёшевы, чтобы плохую просто выбросить).
fdformat /dev/fd0H1440Double-sided, 80 tracks, 18 sec/track. Total capacity
1440 KB.
Formatting ... done
Verifying ... read: Unknown error
Команду badblocks можно использовать для поиска плохих блоков на любом диске или разделе (включая дискету). Она не форматирует диск, поэтому ею можно проверять даже существующие файловые системы. Пример ниже проверяет 3,5-дюймовую дискету с двумя плохими блоками.
badblocks /dev/fd0H1440 1440718
719
badblocks выводит номера найденных плохих блоков. Большинство файловых систем могут обходить такие плохие блоки. Они ведут список известных плохих блоков, который инициализируется при создании файловой системы и может изменяться позже. Первоначальный поиск плохих блоков может выполнить команда mkfs (которая инициализирует файловую систему), но последующие проверки следует делать с помощью badblocks, а новые блоки добавлять с помощью fsck. Мы опишем mkfs и fsck позже.
Многие современные диски сами обнаруживают плохие блоки и пытаются исправить их, используя вместо них специальный зарезервированный исправный блок. Для операционной системы это невидимо. Эта возможность должна быть описана в руководстве к диску, если вам интересно, происходит ли это. Даже такие диски могут выйти из строя, если количество плохих блоков становится слишком большим, хотя к тому моменту диск, скорее всего, уже настолько прогнил, что станет непригоден к использованию.
Жёсткий диск можно разбить на несколько разделов (partitions). Каждый раздел работает так, как если бы он был отдельным жёстким диском. Идея в том, что если у вас один жёсткий диск и вы хотите разместить на нём, скажем, две операционные системы, вы можете разделить диск на два раздела. Каждая операционная система использует свой раздел как ей вздумается и не трогает чужие. Так две операционные системы могут мирно сосуществовать на одном жёстком диске. Без разделов пришлось бы покупать по жёсткому диску для каждой операционной системы.
Дискеты обычно не разбивают на разделы. Технических причин против этого нет, но поскольку они так малы, разделы редко были бы полезны. CD-ROM обычно тоже не разбивают на разделы, поскольку проще использовать их как один большой диск, и редко возникает необходимость держать на одном диске несколько операционных систем.
Информация о том, как был разбит жёсткий диск, хранится в его первом секторе (то есть в первом секторе первой дорожки первой поверхности диска). Первый сектор — это главная загрузочная запись (master boot record, MBR) диска; именно этот сектор BIOS считывает и запускает при первой загрузке машины. Главная загрузочная запись содержит небольшую программу, которая читает таблицу разделов, проверяет, какой раздел является активным (то есть помечен как загрузочный), и читает первый сектор этого раздела — загрузочный сектор (boot sector) раздела (MBR — тоже загрузочный сектор, но он имеет особый статус и потому особое имя). Этот загрузочный сектор содержит другую небольшую программу, которая читает первую часть операционной системы, хранящейся на этом разделе (предполагается, что раздел загрузочный), а затем запускает её.
Схема разбиения на разделы не встроена ни в аппаратуру, ни даже в BIOS. Это всего лишь соглашение, которому следуют многие операционные системы. Следуют ему не все, но они — исключения. Некоторые операционные системы поддерживают разделы, но занимают один раздел жёсткого диска и используют внутри него собственный метод разбиения. Последние мирно уживаются с другими операционными системами (включая Linux) и не требуют никаких особых мер, а вот операционная система, не поддерживающая разделы, не может сосуществовать на одном диске ни с какой другой операционной системой.
Из соображений безопасности хорошей идеей является записать таблицу разделов на бумагу, чтобы в случае её повреждения не потерять все свои файлы. (Плохую таблицу разделов можно исправить с помощью fdisk.) Соответствующую информацию выдаёт команда fdisk -l:
fdisk -l /dev/hdaDisk /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). Они ведут себя как первичные разделы, но создаются иначе. Разницы в скорости между ними нет. Используя расширенный раздел, теперь можно иметь до 15 разделов на диске.
Структура разделов жёсткого диска может выглядеть, как на рисунке 5-2. Диск разделён на три первичных раздела, второй из которых разбит на два логических раздела. Часть диска вообще не разбита на разделы. Диск как целое и каждый первичный раздел имеет загрузочный сектор.
Рисунок 5-2. Пример разбиения жёсткого диска на разделы.
Таблицы разделов (одна в MBR и по одной для расширенных разделов) содержат по одному байту на раздел, идентифицирующему тип этого раздела. Он пытается указать, какая операционная система использует раздел или для чего она его использует. Цель — избежать случайного использования одного раздела двумя операционными системами. В действительности же операционным системам всё равно на байт типа раздела; например, Linux вообще не обращает на него внимания. Хуже того, некоторые используют его неправильно: например, по крайней мере некоторые версии DR-DOS игнорируют старший бит байта, а другие — нет.
Не существует стандартизующей организации, которая бы определяла, что означает каждое значение байта, но что касается Linux, вот список типов разделов из программы fdisk:
0 Empty 1c Hidden Win95 FA 70 DiskSecure Mult bb Boot Wizard hid
1 FAT12 1e Hidden Win95 FA 75 PC/IX be Solaris boot
2 XENIX root 24 NEC DOS 80 Old Minix c1 DRDOS/sec (FAT-
3 XENIX usr 39 Plan 9 81 Minix / old Lin c4 DRDOS/sec (FAT-
4 FAT16 <32M 3c PartitionMagic 82 Linux swap c6 DRDOS/sec (FAT-
5 Extended 40 Venix 80286 83 Linux c7 Syrinx
6 FAT16 41 PPC PReP Boot 84 OS/2 hidden C: da Non-FS data
7 HPFS/NTFS 42 SFS 85 Linux extended db CP/M / CTOS / .
8 AIX 4d QNX4.x 86 NTFS volume set de Dell Utility
9 AIX bootable 4e QNX4.x 2nd part 87 NTFS volume set df BootIt
a OS/2 Boot Manag 4f QNX4.x 3rd part 8e Linux LVM e1 DOS access
b Win95 FAT32 50 OnTrack DM 93 Amoeba e3 DOS R/O
c Win95 FAT32 (LB 51 OnTrack DM6 Aux 94 Amoeba BBT e4 SpeedStor
e Win95 FAT16 (LB 52 CP/M 9f BSD/OS eb BeOS fs
f Win95 Ext'd (LB 53 OnTrack DM6 Aux a0 IBM Thinkpad hi ee EFI GPT
10 OPUS 54 OnTrackDM6 a5 FreeBSD ef EFI (FAT-12/16/
11 Hidden FAT12 55 EZ-Drive a6 OpenBSD f0 Linux/PA-RISC b
12 Compaq diagnost 56 Golden Bow a7 NeXTSTEP f1 SpeedStor
14 Hidden FAT16 <3 5c Priam Edisk a8 Darwin UFS f4 SpeedStor
16 Hidden FAT16 61 SpeedStor a9 NetBSD f2 DOS secondary
17 Hidden HPFS/NTF 63 GNU HURD or Sys ab Darwin boot fd Linux raid auto
18 AST SmartSleep 64 Novell Netware b7 BSDI fs fe LANstep
1b Hidden Win95 FA 65 Novell Netware b8 BSDI swap ff BBT
Существует множество программ для создания и удаления разделов. У большинства операционных систем есть своя, и имеет смысл использовать именно программу самой операционной системы — на случай, если она делает что-то необычное, чего не умеют остальные. Многие из таких программ называются fdisk (включая программу Linux) или как-то похоже. Подробности использования Linux-версии fdisk приведены на её man-странице. Команда cfdisk похожа на fdisk, но имеет более приятный (полноэкранный) пользовательский интерфейс.
При использовании дисков IDE загрузочный раздел (раздел с загрузочными файлами образа ядра) должен полностью находиться в первых 1024 цилиндрах. Это связано с тем, что во время загрузки диск используется через BIOS (до того, как система перейдёт в защищённый режим), а BIOS не может работать с более чем 1024 цилиндрами. Иногда возможно использовать загрузочный раздел, лишь частично находящийся в первых 1024 цилиндрах. Это работает, пока все файлы, читаемые через BIOS, находятся в первых 1024 цилиндрах. Поскольку этого трудно добиться, так делать очень плохая идея: никогда не знаешь, когда обновление ядра или дефрагментация диска приведут систему в незагружаемое состояние. Поэтому следите за тем, чтобы ваш загрузочный раздел полностью находился в первых 1024 цилиндрах.
Впрочем, для более новых версий LILO с поддержкой LBA (Logical Block Addressing, логической адресации блоков) это может уже быть не так. Обратитесь к документации вашего дистрибутива, чтобы узнать, есть ли в нём версия LILO с поддержкой LBA.
Некоторые новые версии BIOS и дисков IDE на самом деле могут работать с дисками, имеющими более 1024 цилиндров. Если у вас такая система, вы можете забыть об этой проблеме; а если не уверены — размещайте раздел в первых 1024 цилиндрах.
У каждого раздела должно быть чётное количество секторов, поскольку файловые системы Linux используют размер блока в 1 килобайт, то есть два сектора. Нечётное количество секторов приведёт к тому, что последний сектор останется неиспользованным. Проблем это не создаст, но некрасиво, и некоторые версии fdisk будут выдавать предупреждение.
Изменение размера раздела обычно требует сначала создать резервные копии всего, что вы хотите сохранить с этого раздела (а лучше — со всего диска, на всякий случай), удалить раздел, создать новый, а затем восстановить всё в новый раздел. Если раздел растёт, может потребоваться также скорректировать размеры (и сделать резервные копии и восстановление) соседних разделов.
Поскольку изменение размеров разделов — болезненная процедура, лучше сразу разбить диск на разделы правильно или иметь эффективную и простую в использовании систему резервного копирования. Если вы устанавливаете систему с носителя, не требующего большого ручного вмешательства (скажем, с CD-ROM, в отличие от дискет), поначалу часто легко экспериментировать с разными конфигурациями. Поскольку резервировать пока нечего, несколько раз поменять размеры разделов не так уж болезненно.
Для MS-DOS существует программа fips, которая изменяет размер раздела MS-DOS без необходимости делать резервные копии и восстановление, но для других файловых систем оно всё ещё требуется.
Программа fips входит в большинство дистрибутивов Linux. Коммерческий менеджер разделов «Partition Magic» имеет аналогичную возможность, но с более приятным интерфейсом. Помните: разбиение диска на разделы — опасная операция. Обязательно удостоверьтесь, что у вас есть свежая резервная копия важных данных, прежде чем пытаться менять размеры разделов «на лету». Программа parted может изменять размеры и других типов разделов, не только MS-DOS, но иногда с ограничениями. Прежде чем её использовать, обратитесь к документации parted — бережёного Бог бережёт.
У каждого раздела и расширенного раздела есть собственный файл устройства. Соглашение об именовании этих файлов таково: номер раздела дописывается после имени всего диска, причём номера 1-4 — это первичные разделы (независимо от того, сколько первичных разделов существует), а номера больше 5 — логические разделы (независимо от того, в каком первичном разделе они находятся). Например, /dev/hda1 — это первый первичный раздел первого жёсткого диска IDE, а /dev/sdb7 — третий раздел в расширенном разделе второго жёсткого диска SCSI.
Файловая система (filesystem) — это методы и структуры данных, которые операционная система использует для отслеживания файлов на диске или разделе; иными словами, способ организации файлов на диске. Это слово также используется для обозначения раздела или диска, используемых для хранения файлов, либо типа файловой системы. Так, можно сказать «у меня две файловые системы», имея в виду, что есть два раздела для хранения файлов, либо сказать «использую расширенную файловую систему», имея в виду тип файловой системы.
Различие между диском или разделом и находящейся на нём файловой системой важно. Несколько программ (включая, что вполне разумно, программы, создающие файловые системы) работают напрямую с «сырыми» секторами диска или раздела; если там уже есть файловая система, она будет уничтожена или серьёзно повреждена. Большинство же программ работают с файловой системой и потому не будут работать с разделом, на котором её нет (или на котором находится файловая система не того типа).
Прежде чем раздел или диск можно будет использовать как файловую систему, его нужно инициализировать, а структуры учётных данных должны быть записаны на диск. Этот процесс называется созданием файловой системы (making a filesystem).
Большинство типов файловых систем UNIX имеют схожую общую структуру, хотя точные детали сильно различаются. Центральные понятия — суперблок (superblock), inode, блок данных (data block), блок каталога (directory block) и блок косвенной адресации (indirection block). Суперблок содержит информацию о файловой системе в целом, например её размер (точные сведения здесь зависят от файловой системы). Inode содержит всю информацию о файле, кроме его имени. Имя хранится в каталоге вместе с номером inode. Элемент каталога состоит из имени файла и номера inode, который представляет этот файл. Inode содержит номера нескольких блоков данных, используемых для хранения данных файла. Однако в inode есть место только для нескольких номеров блоков данных, и если их требуется больше, пространство для указателей на блоки данных выделяется динамически. Эти динамически выделенные блоки называются блоками косвенной адресации; название говорит о том, что для нахождения блока данных сначала нужно найти его номер в блоке косвенной адресации.
Файловые системы UNIX обычно позволяют создать в файле «дыру» (hole) (это делается с помощью системного вызова lseek(); смотрите man-страницу), что означает, что файловая система просто делает вид, что в определённом месте файла находятся нулевые байты, но реальные секторы диска для этого места файла не резервируются (то есть файл займёт немного меньше дискового пространства). Особенно часто это происходит с небольшими исполняемыми файлами, разделяемыми библиотеками Linux, некоторыми базами данных и ещё несколькими особыми случаями. («Дыры» реализуются сохранением специального значения в качестве адреса блока данных в блоке косвенной адресации или inode. Этот специальный адрес означает, что для этой части файла блок данных не выделен — следовательно, в файле есть «дыра».)
Linux поддерживает несколько типов файловых систем. На момент написания этой книги самые важные из них таковы:
minix
Самая старая, предположительно самая надёжная, но весьма ограниченная по возможностям (отсутствуют некоторые временные метки, имена файлов не длиннее 30 символов) и ограниченная по ёмкости (не более 64 МБ на файловую систему).
xia
Модифицированная версия файловой системы minix, снимающая ограничения на длину имён файлов и размеры файловой системы, но не добавляющая других новых возможностей. Она не очень популярна, но, по имеющимся сведениям, работает очень хорошо.
ext3
Файловая система ext3 обладает всеми возможностями файловой системы ext2. Разница в том, что добавлено журналирование (journaling). Это улучшает производительность и сокращает время восстановления после сбоя системы. Она стала популярнее ext2.
ext2
Самая богатая возможностями из «родных» файловых систем Linux. Она спроектирована так, чтобы быть легко совместимой снизу вверх, поэтому новые версии кода файловой системы не требуют пересоздания существующих файловых систем.
ext
Более старая версия ext2, не совместимая вверх. В новых установках уже практически не используется, и большинство людей перешло на ext2.
reiserfs
Более устойчивая файловая система. Используется журналирование, что снижает вероятность потери данных. Журналирование — это механизм, при котором ведётся запись транзакций, которые предстоит выполнить или которые уже выполнены. Это позволяет файловой системе довольно легко восстановить себя после повреждений, вызванных, например, некорректным завершением работы.
jfs
JFS — журналируемая файловая система, разработанная IBM для работы в высокопроизводительных средах.
xfs
XFS была изначально разработана Silicon Graphics как 64-разрядная журналируемая файловая система. XFS также проектировалась с расчётом на сохранение высокой производительности при больших файлах и больших файловых системах.
Кроме того, существует поддержка нескольких «чужих» файловых систем, чтобы облегчить обмен файлами с другими операционными системами. Эти чужие файловые системы работают точно так же, как родные, за исключением того, что в них могут отсутствовать некоторые привычные возможности UNIX, либо они имеют странные ограничения или другие особенности.
msdos
Совместимость с файловыми системами FAT (MS-DOS, а также OS/2 и Windows NT).
umsdos
Расширяет драйвер файловой системы msdos в Linux, добавляя длинные имена файлов, владельцев, права доступа, ссылки и файлы устройств. Это позволяет использовать обычную файловую систему msdos так, как если бы она была файловой системой Linux, и избавляет от необходимости заводить отдельный раздел для Linux.
vfat
Это расширение файловой системы FAT, известное как FAT32. Поддерживает диски большего размера, чем FAT. Диски большинства систем MS Windows — vfat.
iso9660
Стандартная файловая система CD-ROM; популярное расширение Rock Ridge к стандарту CD-ROM, позволяющее длинные имена файлов, поддерживается автоматически.
nfs
Сетевая файловая система, позволяющая совместно использовать одну файловую систему множеству компьютеров для удобного доступа к файлам со всех них.
smbfs
Сетевая файловая система, позволяющая совместно использовать файловую систему с компьютером MS Windows. Совместима с протоколами обмена файлами Windows.
hpfs
Файловая система OS/2.
sysv
Файловые системы SystemV/386, Coherent и Xenix.
NTFS
Самая продвинутая журналируемая файловая система Microsoft, обеспечивающая более быстрый доступ к файлам и большую стабильность по сравнению с предыдущими файловыми системами Microsoft.
Выбор файловой системы зависит от ситуации. Если совместимость или другие причины требуют использовать одну из «чужих» файловых систем, придётся использовать её. Если выбор свободный, то, вероятно, разумнее всего использовать ext3, поскольку она обладает всеми возможностями ext2 и является журналируемой. Подробнее о файловых системах смотрите в разделе 5.10.6. Также вы можете прочитать Filesystems HOWTO, находящийся по адресу http://www.tldp.org/HOWTO/Filesystems-HOWTO.html.
Существует также файловая система proc, обычно доступная как каталог /proc, которая на самом деле вовсе не файловая система, хотя и выглядит таковой. Файловая система proc упрощает доступ к определённым структурам данных ядра, таким как список процессов (отсюда и название). Она представляет эти структуры данных в виде файловой системы, и с этой файловой системой можно работать всеми обычными файловыми инструментами. Например, чтобы получить список всех процессов, можно использовать команду
ls -l /proctotal 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 20:37 kmsg
-r--r--r-- 1 root root 0 Jan 31 20:37 ksyms
-r--r--r-- 1 root root 0 Jan 31 20:37 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, ядро делает так, как будто эта часть где-то существует, хотя это не так. Так что, несмотря на то, что существует файл /proc/kcore размером в много мегабайт, он не занимает никакого места на диске.
Обычно мало смысла использовать много разных файловых систем. Сейчас ext3 — самая популярная файловая система, потому что она журналируемая. На данный момент это, вероятно, самый разумный выбор. Reiserfs — другой популярный выбор, поскольку она также журналируемая. В зависимости от накладных расходов на учётные структуры, скорости, (воспринимаемой) надёжности, совместимости и различных других причин может иметь смысл использовать и другую файловую систему. Это нужно решать в каждом случае отдельно.
Файловая система, использующая журналирование, называется также журналируемой (journaled). Журналируемая файловая система ведёт журнал (лог) того, что происходило в файловой системе. В случае сбоя системы — или если ваш двухлетний сын нажмёт кнопку питания, как любит делать мой, — журналируемая файловая система использует журналы файловой системы, чтобы воссоздать несохранённые и потерянные данные. Это делает потерю данных гораздо менее вероятной и, скорее всего, станет стандартной возможностью файловых систем Linux. Однако не обольщайтесь ложным чувством безопасности. Как и всё остальное, здесь могут возникать ошибки. Всегда обязательно создавайте резервные копии своих данных на случай чрезвычайной ситуации.
Подробнее о возможностях разных типов файловых систем смотрите в разделе 5.10.6.
Файловые системы создаются, то есть инициализируются, командой mkfs. На самом деле для каждого типа файловой системы существует отдельная программа. mkfs — это лишь интерфейсная надстройка, которая запускает подходящую программу в зависимости от нужного типа файловой системы. Тип выбирается опцией -t fstype.
Программы, вызываемые командой mkfs, имеют слегка различающиеся интерфейсы командной строки. Общие и наиболее важные опции перечислены ниже; подробнее см. справочные страницы (man).
-t fstype
Выбирает тип файловой системы.
-c
Выполняет поиск дефектных блоков и соответствующим образом инициализирует список дефектных блоков.
-l filename
Читает начальный список дефектных блоков из файла filename.
Существует также множество программ, написанных для добавления специфических опций при создании конкретной файловой системы. Например, mkfs.ext3 добавляет опцию -b, позволяющую администратору указать, какой размер блока следует использовать. Обязательно выясните, существует ли специальная программа для того типа файловой системы, который вы хотите использовать. Подробнее о том, какой выбрать размер блока, см. раздел 5.10.5.
Чтобы создать файловую систему ext2 на дискете, нужно дать следующие команды:
$ fdformat -n /dev/fd0H1440
$ badblocks /dev/fd0H1440 1440 > bad-blocks
$ mkfs.ext2 -l bad-blocks /dev/fd0H1440Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 KB.
Formatting ... done
mke2fs 0.5a, 5-Apr-94 for EXT2 FS 0.5, 94/03/10
360 inodes, 1440 blocks
72 blocks (5.00%) reserved for the super user
First data block=1
Block size=1024 (log=0)
Fragment size=1024 (log=0)
1 block group
8192 blocks per group, 8192 fragments per group
360 inodes per group
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
Сначала дискета была отформатирована (опция -n отключает верификацию, то есть проверку дефектных блоков). Затем с помощью badblocks был выполнен поиск дефектных блоков, а её вывод перенаправлен в файл bad-blocks. Наконец, была создана файловая система, список дефектных блоков которой инициализирован тем, что нашла программа badblocks.
Вместо badblocks и отдельного файла с командой mkfs можно было использовать опцию -c. Следующий пример делает именно это:
$ mkfs.ext2 -c /dev/fd0H1440mke2fs 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, однако badblocks необходима для проверки после того, как файловая система уже создана.
Процедура подготовки файловых систем на жёстких дисках или разделах такая же, как и для дискет, за исключением того, что форматирование не требуется.
Размер блока задаёт размер, которым файловая система будет читать и записывать данные. Большие размеры блоков помогают повысить производительность дискового ввода-вывода при работе с большими файлами, например базами данных. Это происходит потому, что диск может читать или записывать данные дольше, прежде чем ему придётся искать следующий блок.
Обратная сторона медали: если в такой файловой системе будет много небольших файлов, как в /etc, потенциально возможна значительная потеря дискового пространства.
Например, если вы установите размер блока 4096 байт, то есть 4 КБ, и создадите файл размером 256 байт, он всё равно займёт 4 КБ на жёстком диске. Для одного файла это может показаться пустяком, но когда файловая система содержит сотни или тысячи файлов, потери могут накопиться.
Размер блока может также влиять на максимальный поддерживаемый размер файла в некоторых файловых системах. Это объясняется тем, что многие современные файловые системы ограничены не размером блока или файла, а количеством блоков. Поэтому используется формула «размер блока × макс. число блоков = максимальный размер».
Таблица 5-1. Сравнение возможностей файловых систем
| Название ФС | Год появления | Исходная ОС | Макс. размер файла | Макс. размер ФС | Журналирование |
|---|---|---|---|---|---|
| FAT16 | 1983 | MSDOS V2 | 4 ГБ | от 16 МБ до 8 ГБ | N |
| FAT32 | 1997 | Windows 95 | 4 ГБ | от 8 ГБ до 2 ТБ | N |
| HPFS | 1988 | OS/2 | 4 ГБ | 2 ТБ | N |
| NTFS | 1993 | Windows NT | 16 ЭБ | 16 ЭБ | Y |
| HFS+ | 1998 | Mac OS | 8 ЭБ | ? | N |
| UFS2 | 2002 | FreeBSD | от 512 ГБ до 32 ПБ | 1 ИБ | N |
| ext2 | 1993 | Linux | от 16 ГБ до 2 ТБ | от 2 ТБ до 32 ТБ | N |
| ext3 | 1999 | Linux | от 16 ГБ до 2 ТБ | от 2 ТБ до 32 ТБ | Y |
| ReiserFS3 | 2001 | Linux | 8 ТБ | 16 ТБ | Y |
| ReiserFS4 | 2005 | Linux | ? | ? | Y |
| XFS | 1994 | IRIX | 9 ЭБ | 9 ЭБ | Y |
| JFS | ? | AIX | 8 ЭБ | от 512 ТБ до 4 ПБ | Y |
| VxFS | 1991 | SVR4.0 | 16 ЭБ | ? | Y |
| ZFS | 2004 | Solaris 10 | 1 ИБ | 16 ЭБ | N |
Условные обозначения:
Таблица 5-2. Единицы размера
| Килобайт — КБ | 1024 байта |
|---|---|
| Мегабайт — МБ | 1024 КБ |
| Гигабайт — ГБ | 1024 МБ |
| Терабайт — ТБ | 1024 ГБ |
| Петабайт — ПБ | 1024 ТБ |
| Эксабайт — ЭБ | 1024 ПБ |
| Зеттабайт — ЗБ | 1024 ЭБ |
| Йоттабайт — ИБ | 1024 ЗБ |
Следует отметить, что экса-, зетта- и йоттабайты встречаются крайне редко, если вообще встречаются. По нынешним оценкам, весь печатный материал мира равен 5 эксабайтам. Поэтому многие считают некоторые из этих ограничений файловых систем чисто теоретическими. Тем не менее программное обеспечение файловых систем написано с учётом этих возможностей.
Более подробную информацию можно найти на странице http://en.wikipedia.org/wiki/Comparison_of_file_systems.
Прежде чем можно будет пользоваться файловой системой, её нужно смонтировать. Операционная система при этом выполняет различные служебные действия, чтобы гарантировать корректную работу. Поскольку все файлы в UNIX находятся в едином дереве каталогов, операция монтирования делает так, что содержимое новой файловой системы выглядит как содержимое существующего подкаталога в какой-либо уже смонтированной файловой системе.
Например, рисунок 5-3 показывает три отдельные файловые системы, каждая со своим собственным корневым каталогом. Когда последние две файловые системы смонтированы ниже /home и /usr соответственно, в первой файловой системе, мы получаем единое дерево каталогов, как на рисунке 5-4.
Рисунок 5-3. Три отдельные файловые системы.
Рисунок 5-4. /home и /usr смонтированы.
Монтирование можно выполнить, как в следующем примере:
$ mount /dev/hda2 /home
$ mount /dev/hda3 /usrКоманда mount принимает два аргумента. Первый — файл устройства, соответствующий диску или разделу с файловой системой. Второй — каталог, ниже которого она будет смонтирована. После этих команд содержимое двух файловых систем выглядит точно так же, как содержимое каталогов /home и /usr соответственно. Тогда говорят, что /dev/hda2 смонтирована в /home, и аналогично для /usr. Чтобы посмотреть на любую из файловых систем, нужно посмотреть содержимое каталога, на который она смонтирована, как если бы это был любой другой каталог. Обратите внимание на разницу между файлом устройства /dev/hda2 и каталогом монтирования /home. Файл устройства даёт доступ к «сырому» содержимому диска, а каталог монтирования — доступ к файлам на диске. Каталог монтирования называется точкой монтирования (mount point).
Linux поддерживает множество типов файловых систем. Команда mount пытается угадать тип файловой системы. Можно также использовать опцию -t fstype, чтобы указать тип напрямую; это иногда необходимо, поскольку эвристики, которые использует mount, срабатывают не всегда. Например, чтобы смонтировать дискету MS-DOS, можно использовать следующую команду:
$ mount -t msdos /dev/fd0 /floppyКаталог монтирования не обязан быть пустым, но он должен существовать. Однако любые файлы в нём будут недоступны по имени, пока файловая система смонтирована. (Файлы, которые уже открыты, останутся доступными. Файлы, на которые есть жёсткие ссылки из других каталогов, доступны по этим именам.) Ничего страшного в этом нет, и это даже может быть полезно. Например, некоторые хотят, чтобы /tmp и /var/tmp были синонимами, и делают /tmp символической ссылкой на /var/tmp. При загрузке системы, до монтирования файловой системы /var, используется каталог /var/tmp, находящийся в корневой файловой системе. Когда /var смонтирована, каталог /var/tmp в корневой файловой системе становится недоступным. Если бы /var/tmp не существовало в корневой файловой системе, было бы невозможно пользоваться временными файлами до монтирования /var.
Если вы не собираетесь ничего записывать в файловую систему, используйте ключ -r команды mount для монтирования только для чтения. Это заставит ядро пресекать любые попытки записи в файловую систему, а также запретит ядру обновлять времена доступа к файлам в inode. Монтирование только для чтения необходимо для носителей, доступных лишь для чтения, например CD-ROM.
Внимательный читатель уже заметил небольшую логистическую проблему. Как монтируется первая файловая система (называемая корневой файловой системой, поскольку она содержит корневой каталог), ведь она очевидно не может быть смонтирована в другую файловую систему? Ну, ответ в том, что это происходит по волшебству. Корневая файловая система волшебным образом монтируется во время загрузки, и можно положиться на то, что она всегда смонтирована. Если корневая файловая система не может быть смонтирована, система не загружается. Имя файловой системы, которая магическим образом монтируется как корневая, либо вкомпилировано в ядро, либо задаётся с помощью LILO или rdev.
Дополнительную информацию см. в исходных текстах ядра или в Kernel Hackers' Guide.
Корневая файловая системы обычно сначала монтируется только для чтения. Затем стартовые скрипты запускают fsck для проверки её корректности, и если проблем нет, они перемонтируют её так, чтобы запись также была разрешена. Нельзя запускать fsck на смонтированной файловой системе, поскольку любые изменения файловой системы во время работы fsck непременно приведут к проблемам. Поскольку корневая файловая система смонтирована только для чтения на время проверки, fsck может исправить любые проблемы без опасений: операция перемонтирования сбросит на диск все метаданные, которые файловая система держит в памяти.
На многих системах есть и другие файловые системы, которые также должны монтироваться автоматически во время загрузки. Они перечисляются в файле /etc/fstab; подробности формата см. на справочной странице fstab. Точные детали того, когда монтируются дополнительные файловые системы, зависят от многих факторов и могут быть настроены каждым администратором при необходимости; см. главу 8.
Когда файловая система больше не нужна смонтированной, её можно размонтировать с помощью umount. umount принимает один аргумент: файл устройства или точку монтирования. Например, чтобы размонтировать каталоги из предыдущего примера, можно использовать команды
$ umount /dev/hda2
$ umount /usrДальнейшие инструкции по использованию команды см. на справочной странице. Крайне важно всегда размонтировать смонтированную дискету. Не выдёргивайте дискету из привода просто так! Из-за дискового кэширования данные не обязательно оказываются записанными на дискету до размонтирования, поэтому слишком раннее извлечение дискеты из привода может привести к повреждению содержимого. Если вы только читали с дискеты, это маловероятно, но если вы писали, даже случайно, результат может быть катастрофическим.
Монтирование и размонтирование требует привилегий суперпользователя, то есть это может делать только root. Причина в том, что если бы любой пользователь мог смонтировать дискету в любой каталог, было бы довольно легко создать дискету, скажем, с троянским конём, замаскированным под /bin/sh, или любую другую часто используемую программу. Однако часто необходимо разрешить пользователям пользоваться дискетами, и есть несколько способов сделать это:
-
Дать пользователям пароль root. Это очевидно плохо с точки зрения безопасности, но является простейшим решением. Это хорошо работает, если безопасность в любом случае не нужна, как бывает на многих персональных системах, не подключённых к сети.
-
Использовать программу вроде sudo, чтобы разрешить пользователям использовать mount. Это всё ещё плохо с точки зрения безопасности, но не даёт напрямую привилегии суперпользователя всем подряд. Это требует нескольких секунд напряжённого размышления со стороны пользователей. Более того, sudo можно настроить так, чтобы пользователям разрешалось выполнять только определённые команды. См. справочные страницы sudo(8), sudoers(5) и visudo(8).
-
Заставить пользователей использовать mtools — пакет для работы с файловыми системами MS-DOS без их монтирования. Это хорошо работает, если нужны только дискеты MS-DOS, но в остальном довольно неудобно.
-
Перечислить устройства дискет и допустимые точки монтирования вместе с подходящими опциями в
/etc/fstab.
Последнюю альтернативу можно реализовать, добавив в файл /etc/fstab строку вроде следующей:
/dev/fd0 /floppy msdos user,noauto 0 0
Столбцы: монтируемый файл устройства, каталог для монтирования, тип файловой системы, опции, частота резервного копирования (используется dump) и номер прохода fsck (задаёт порядок проверки файловых систем при загрузке; 0 — не проверять).
Опция noauto запрещает автоматическое монтирование при старте системы (то есть запрещает mount -a монтировать эту файловую систему). Опция user позволяет любому пользователю монтировать файловую систему и по соображениям безопасности запрещает исполнение программ (обычных и setuid) и интерпретацию файлов устройств со смонтированной файловой системы. После этого любой пользователь может смонтировать дискету с файловой системой msdos следующей командой:
$ mount /floppyДискету можно (и конечно же нужно) размонтировать соответствующей командой umount.
Если вы хотите предоставить доступ к нескольким типам дискет, нужно задать несколько точек монтирования. Настройки могут отличаться для каждой точки монтирования. Например, чтобы дать доступ и к дискетам MS-DOS, и к дискетам ext2, можно поместить в /etc/fstab следующие строки:
/dev/fd0 /mnt/dosfloppy msdos user,noauto 0 0
/dev/fd0 /mnt/ext2floppy ext2 user,noauto 0 0
Альтернатива — добавить всего одну строку, подобную следующей:
/dev/fd0 /mnt/floppy auto user,noauto 0 0
Опция «auto» в столбце типа файловой системы позволяет команде mount опросить файловую систему и попытаться самостоятельно определить её тип. Эта опция работает не на всех типах файловых систем, но прекрасно работает на наиболее распространённых.
Для файловых систем MS-DOS (не только дискет) вы, вероятно, захотите ограничить доступ к ним, используя опции файловой системы uid, gid и umask, подробно описанные на справочной странице mount. Если не быть осторожным, монтирование файловой системы MS-DOS даёт каждому как минимум доступ на чтение к файлам в ней, что не есть хорошая идея.
БУДЕТ ДОБАВЛЕНО
Этот раздел опишет опции монтирования и способы их использования в /etc/fstab для обеспечения дополнительной безопасности системы.
Файловые системы — сложные создания, и, как таковые, они склонны к появлению ошибок. Корректность и целостность файловой системы можно проверить командой fsck. Её можно поручить исправить мелкие найденные проблемы и предупредить пользователя, если есть неустранимые проблемы. К счастью, код файловых систем эффективно отлажен, так что проблемы случаются редко и обычно вызваны сбоями питания, отказами оборудования или ошибками оператора; например, неправильным завершением работы системы.
Большинство систем настроено на автоматический запуск fsck во время загрузки, так что любые ошибки обнаруживаются (и, будем надеяться, исправляются) до начала использования системы. Работа с повреждённой файловой системой имеет тенденцию ухудшать положение: если структуры данных перепутаны, использование файловой системы, вероятно, перепутает их ещё больше, что приведёт к дополнительной потере данных. Однако fsck может работать довольно долго на больших файловых системах, и поскольку ошибки почти никогда не возникают, если система была корректно остановлена, используется пара трюков, позволяющих избежать проверки в таких случаях. Первый: если файл /etc/fastboot существует, проверка не выполняется. Второй: файловая система ext2 имеет в своём суперблоке специальный маркер, показывающий, была ли файловая система корректно размонтирована после предыдущего монтирования. Это позволяет e2fsck (версии fsck для файловой системы ext2) пропустить проверку файловой системы, если флаг показывает, что размонтирование было выполнено (предполагается, что корректное размонтирование означает отсутствие проблем). Работает ли трюк с /etc/fastboot на вашей системе, зависит от ваших стартовых скриптов, но трюк с ext2 срабатывает при каждом запуске e2fsck. Чтобы его обойти, нужно явно указать соответствующую опцию e2fsck. (Подробности см. на справочной странице e2fsck.)
Автоматическая проверка работает только для файловых систем, которые автоматически монтируются при загрузке. Другие файловые системы, например дискеты, проверяйте с помощью fsck вручную.
Если fsck находит неустранимые проблемы, вам нужны либо глубокие знания о том, как работают файловые системы вообще и повреждённая файловая система в частности, либо хорошие резервные копии. Последнее устроить легко (хотя порой утомительно), первое иногда можно устроить через друга, группы новостей Linux и списки рассылки или другие источники поддержки, если у вас нет соответствующих знаний самому. Я бы с радостью рассказал об этом подробнее, но недостаток образования и опыта в этой области мне мешает. Полезной может быть программа debugfs Теодора Цо (Theodore Ts'o).
Запускать fsck можно только на размонтированных файловых системах, и никогда — на смонтированных (за исключением корневой, смонтированной только для чтения, во время загрузки). Это связано с тем, что она обращается к «сырому» диску и, следовательно, может модифицировать файловую систему без ведома операционной системы. Если операционная система запутается, проблемы обязательно будут.
Периодическая проверка на дефектные блоки может быть хорошей идеей. Она выполняется командой badblocks. Она выводит список номеров всех дефектных блоков, которые сможет найти. Этот список можно передать fsck, чтобы тот записал его в структуры данных файловой системы, и операционная система не пыталась использовать дефектные блоки для хранения данных. Следующий пример показывает, как это можно сделать:
$ badblocks /dev/fd0H1440 1440 > bad-blocks
$ fsck -t ext2 -l bad-blocks /dev/fd0H1440Parallelizing 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 попытается переместить этот блок в другое место. Если блок действительно плох, а не просто на грани, содержимое файла может быть повреждено.
Когда файл записывается на диск, не всегда его можно записать в последовательные блоки. Файл, не хранящийся в последовательных блоках, называется фрагментированным. Чтение фрагментированного файла занимает больше времени, поскольку головке чтения-записи диска придётся больше двигаться. Фрагментации желательно избегать, хотя в системе с хорошим буферным кэшем с упреждающим чтением она доставляет меньше проблем.
Современные файловые системы Linux держат фрагментацию на минимуме, располагая все блоки файла близко друг к другу, даже если их нельзя разместить в последовательных секторах. Некоторые файловые системы, например ext3, эффективно выделяют свободный блок, ближайший к другим блокам файла. Поэтому в системе Linux о фрагментации беспокоиться не нужно.
В ранние дни файловой системы ext2 существовало беспокойство о фрагментации файлов, которое привело к разработке программы дефрагментации под названием defrag. Её копию всё ещё можно скачать по адресу http://www.go.dlr.de/linux/src/defrag-0.73.tar.gz. Однако КРАЙНЕ рекомендуется её НЕ использовать. Она была разработана для более старой версии ext2 и не обновлялась с 1998 года! Упоминаю её здесь исключительно для справки.
Существует множество программ дефрагментации MS-DOS, которые перемещают блоки в файловой системе, чтобы устранить фрагментацию. Для других файловых систем дефрагментация выполняется путём резервного копирования файловой системы, её повторного создания и восстановления файлов из резервных копий. Резервное копирование файловой системы перед дефрагментацией — хорошая идея для всех файловых систем, поскольку при дефрагментации многое может пойти не так.
Для управления файловыми системами полезны и некоторые другие инструменты. df показывает свободное дисковое пространство на одной или нескольких файловых системах; du показывает, сколько дискового пространства занимает каталог и все его файлы. Их можно использовать для выслеживания расхитителей дискового пространства. У обоих есть справочные страницы, где подробно описаны (многочисленные) опции.
sync принуждает записать на диск все незаписанные блоки в буферном кэше (см. раздел 6.6). Делать это вручную приходится редко; процесс-демон update делает это автоматически. Это может пригодиться в катастрофических ситуациях, например если update или его вспомогательный процесс bdflush умер или если вам нужно отключить питание прямо сейчас и нет времени ждать запуска update. И снова — есть справочные страницы. man — ваш самый лучший друг в Linux. Его кузен apropos также очень полезен, когда вы не знаете, как называется нужная вам команда.
Помимо создателя файловой системы (mke2fs) и программы проверки (e2fsck), доступных напрямую или через независимые от типа интерфейсные надстройки, файловая система ext2 имеет ряд дополнительных инструментов, которые могут пригодиться.
tune2fs настраивает параметры файловой системы. Некоторые из наиболее интересных параметров:
-
Максимальное количество монтирований. e2fsck принудительно выполняет проверку, когда файловая система была смонтирована слишком много раз, даже если установлен флаг чистоты. Для системы, используемой для разработки или тестирования, может быть хорошей идеей уменьшить этот предел.
-
Максимальный интервал между проверками. e2fsck может также принудительно задать максимальный интервал между двумя проверками, даже если флаг чистоты установлен и файловая система монтировалась нечасто. Впрочем, это можно отключить.
-
Количество блоков, зарезервированных для root. Ext2 резервирует некоторые блоки для root, так что если файловая система заполнится, всё равно можно будет заниматься системным администрированием, не удаляя ничего. По умолчанию резервируется 5 процентов, что на большинстве дисков не слишком расточительно. Однако для дискет нет смысла резервировать какие-либо блоки.
Дополнительную информацию см. на справочной странице tune2fs.
dumpe2fs показывает информацию о файловой системе ext2 или ext3, в основном из суперблока. Ниже приведён пример вывода. Часть информации в выводе техническая и требует понимания работы файловой системы, но многое вполне понятно даже администраторам-непрофессионалам.
## dumpe2fsdumpe2fs 1.32 (09-Nov-2002)
Filesystem volume name: /
Last mounted on: not available
Filesystem UUID: 51603f82-68f3-4ae7-a755-b777ff9dc739
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal filetype needs_recovery sparse_super
Default mount options: (none)
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 3482976
Block count: 6960153
Reserved block count: 348007
Free blocks: 3873525
Free inodes: 3136573
First block: 0
Block size: 4096
Fragment size: 4096
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 16352
Inode blocks per group: 511
Filesystem created: Tue Aug 26 08:11:55 2003
Last mount time: Mon Dec 22 08:23:12 2003
Last write time: Mon Dec 22 08:23:12 2003
Mount count: 3
Maximum mount count: -1
Last checked: Mon Nov 3 11:27:38 2003
Check interval: 0 (none)
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 128
Journal UUID: none
Journal inode: 8
Journal device: 0x0000
First orphan inode: 655612
Group 0: (Blocks 0-32767)
Primary superblock at 0, Group descriptors at 1-2
Block bitmap at 3 (+3), Inode bitmap at 4 (+4)
Block bitmap at 3 (+3), Inode bitmap at 4 (+4)
Inode table at 5-515 (+5)
3734 free blocks, 16338 free inodes, 2 directories
debugfs — это отладчик файловой системы. Он позволяет напрямую обращаться к структурам данных файловой системы, хранящимся на диске, и потому может использоваться для ремонта диска, настолько повреждённого, что fsck не может исправить его автоматически. Известно также о его использовании для восстановления удалённых файлов. Однако debugfs очень сильно требует, чтобы вы понимали, что делаете; непонимание может уничтожить все ваши данные.
dump и restore могут использоваться для резервного копирования файловой системы ext2. Это специфичные для ext2 версии традиционных UNIX-инструментов резервного копирования. Подробнее о резервном копировании см. раздел 12.1.
Важно соблюдать правильные процедуры при завершении работы системы Linux. Если этого не делать, ваши файловые системы, скорее всего, будут разрушены, а файлы, вероятно, превратятся в кашу. Причина в том, что в Linux есть дисковый кэш, который не записывает данные на диск сразу, а лишь с интервалами. Это сильно повышает производительность, но также означает, что если вы просто по прихоти выключите питание, в кэше может оставаться много данных, а то, что на диске, может не быть полностью рабочей файловой системой (потому что на диск записано лишь часть данных).
Ещё один аргумент против простого щёлканья выключателем питания: в многозадачной системе в фоновом режиме может происходить много всего, и отключение питания может быть весьма катастрофичным. Используя правильную последовательность завершения работы, вы гарантируете, что все фоновые процессы смогут сохранить свои данные.
Команда для корректного завершения работы системы Linux — shutdown. Обычно она используется одним из двух способов.
Если вы работаете в системе, где вы единственный пользователь, обыччный способ использования shutdown таков: закройте все запущенные программы, выйдите из системы на всех виртуальных консолях, войдите как root на одной из них (или останьтесь root'ом, если вы уже им являетесь, но перейдите в домашний каталог root или в корневой каталог, чтобы избежать проблем с размонтированием), затем дайте команду shutdown -h now (замените now на знак плюс и число минут, если нужна задержка, хотя в однопользовательской системе она обычно не нужна).
Если же в вашей системе много пользователей, используйте команду shutdown -h +time message, где time — время в минутах до остановки системы, а message — краткое пояснение, почему система останавливается.
## shutdown -h +10 'We will install a new disk. System should be back on-line in three hours.'Это предупредит всех, что система будет остановлена через десять минут и что им лучше убраться подобру-поздорову, иначе потерять данные. Предупреждение выводится на каждый терминал, где кто-то работает, включая все 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 !!
Предупреждение автоматически повторяется несколько раз перед остановкой, с интервалами, которые становятся всё короче по мере истечения времени.
Когда после всех задержек начинается собственно завершение работы, все файловые системы (кроме корневой) размонтируются, пользовательские процессы (если кто-то ещё работает) уничтожаются, демоны останавливаются, все файловые системы размонтируются, и в целом всё успокаивается. Когда это сделано, init выводит сообщение о том, что можно выключить питание. И только тогда следует тянуть пальцы к выключателю.
Иногда, хотя и редко в приличной системе, корректно завершить работу невозможно. Например, если ядро впадает в панику, рушится, горит и в целом безобразничает, может быть совершенно невозможно отдать новые команды, так что корректное завершение становится затруднительным, и всё, что остаётся, — надеяться, что ничего не повреждено слишком серьёзно, и выключить питание. Если неприятности чуть менее серьёзны (скажем, кто-то ударил топором по вашей клавиатуре) и ядро с программой update ещё работают нормально, вероятно, стоит подождать пару минут, чтобы дать update шанс сбросить буферный кэш, и лишь после этого отрубить питание.
В старые времена некоторые любили останавливать систему, трижды дав команду sync, дожидаясь прекращения дискового ввода-вывода, а затем выключая питание. Если нет запущенных программ, это эквивалентно использованию shutdown. Однако такой способ не размонтирует файловые системы, что может привести к проблемам с флагом «чистой файловой системы» ext2fs. Метод тройного sync не рекомендуется.
(Если вам интересно: причина трёх sync в том, что в ранние дни UNIX, когда команды вводились по отдельности, этого обычно было достаточно, чтобы большая часть дискового ввода-вывода успела завершиться.)
Перезагрузка означает повторную загрузку системы. Это можно сделать, сначала полностью остановив её, выключив питание, а затем снова включив его. Более простой способ — попросить shutdown перезагрузить систему вместо простой остановки. Это делается с помощью опции -r команды shutdown, например, командой shutdown -r now.
Большинство систем Linux выполняют shutdown -r now при нажатии ctrl-alt-del на клавиатуре. Это перезагружает систему. Однако действие по ctrl-alt-del настраиваемо, и в многопользовательской машине, возможно, лучше предусмотреть задержку перед перезагрузкой. Системы, к которым физически имеет доступ кто угодно, можно даже настроить так, чтобы при нажатии ctrl-alt-del ничего не происходило.
В /etc/inittab есть несколько особых возможностей, позволяющих init реагировать на особые обстоятельства. Эти особые возможности помечаются специальными ключевыми словами в третьем поле. Несколько примеров:
powerwait
Позволяет init остановить систему при пропадании питания. Предполагается использование ИБП (UPS) и программного обеспечения, следящего за ИБП и сообщающего init, что питание отключилось.
ctrlaltdel
Позволяет init перезагрузить систему, когда пользователь нажимает ctrl-alt-del на клавиатуре консоли. Заметим, что системный администратор может настроить реакцию на ctrl-alt-del как-нибудь иначе, например игнорировать её, если система находится в общедоступном месте. (Или запускать nethack.)
sysinit
Команда, выполняемая при загрузке системы. Эта команда, например, обычно вычищает /tmp.
Приведённый список не исчерпывающий. Все возможности и подробности использования перечисленных смотрите на справочной странице inittab.
Когда компьютером пользуются многие люди, обычно необходимо различать пользователей, например, чтобы их личные файлы оставались личными. Это важно, даже если компьютером в каждый момент времени может пользоваться только один человек, как в большинстве микрокомпьютеров. Поэтому каждому пользователю выдаётся уникальное имя пользователя, и это имя используется для входа в систему.
Однако пользователь — это больше, чем просто имя. Учётная запись (account) — это все файлы, ресурсы и информация, принадлежащие одному пользователю. Термин намекает на банки: в коммерческой системе с каждой учётной записью обычно связаны некоторые деньги, и эти деньги исчезают с разной скоростью в зависимости от того, насколько сильно пользователь нагружает систему. Например, дисковое пространство может иметь цену за мегабайт и день, а процессорное время — цену за секунду.
Само ядро Linux воспринимает пользователей как простые числа. Каждый пользователь идентифицируется уникальным целым числом — идентификатором пользователя (user id, или uid), потому что числа обрабатываются компьютером быстрее и проще, чем текстовые имена. Отдельная база данных вне ядра сопоставляет каждому идентификатору пользователя текстовое имя — имя пользователя (username). Эта база данных содержит и дополнительную информацию.
Чтобы создать пользователя, нужно добавить сведения о нём в базу данных пользователей и создать для него домашний каталог. Может также потребоваться обучить пользователя и настроить для него подходящее начальное окружение.
В большинстве дистрибутивов Linux есть программа для создания учётных записей. Таких программ доступно несколько. Два варианта для командной строки — adduser и useradd; может быть и GUI-инструмент. Какой бы ни была программа, в результате ручной работы остаётся мало или совсем ничего. Пусть деталей и много, и они замысловаты, эти программы делают всё простым до неприличия. Тем не менее раздел 11.2.4 описывает, как сделать это вручную.
Основная база данных пользователей в Unix-системе — текстовый файл /etc/passwd (называемый файлом паролей), который перечисляет все действительные имена пользователей и связанную с ними информацию. Файл содержит по одной строке на каждое имя пользователя и разделён на семь полей, разделённых двоеточиями:
-
Имя пользователя.
-
Раньше здесь хранился пароль пользователя.
-
Числовой идентификатор пользователя.
-
Числовой идентификатор группы.
-
Полное имя или другое описание учётной записи.
-
Домашний каталог.
-
Оболочка входа (программа, запускаемая при входе в систему).
Формат подробнее объясняется на справочной странице passwd.
Большинство систем Linux используют теневые пароли (shadow passwords). Как упоминалось, раньше пароли хранились в файле /etc/passwd. При этом более новом методе хранения пароля зашифрованный пароль держится в отдельном файле, /etc/shadow, который может читать только root. В файле /etc/passwd во втором поле содержится лишь специальный маркер. Любая программа, которой требуется проверить пользователя, является setuid-программой и потому имеет доступ к файлу теневых паролей. Обычные программы, использующие лишь другие поля файла паролей, добраться до пароля не могут.
В большинстве систем не важно, каковы числовые идентификаторы пользователя и группы, но если вы используете сетевую файловую систему (NFS), идентификаторы uid и gid должны быть одинаковыми на всех системах. Это связано с тем, что NFS также идентифицирует пользователей по числовым uid. Если вы не используете NFS, можно позволить инструменту создания учётных записей подбирать их автоматически.
Если вы используете NFS, придётся изобрести механизм синхронизации сведений об учётных записях. Одна из альтернатив — система NIS (см. XXX network-admin-guide).
Однако следует стараться избегать повторного использования числовых 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. В таких случаях обычно нет необходимости устанавливать пароль (последний шаг выше). Более того, лучше этого не делать, чтобы никто не мог пользоваться учётной записью, предварительно не став root, поскольку root может стать любым пользователем.
Чтобы удалить пользователя, сначала удалите все его файлы, почтовые ящики, почтовые псевдонимы, задания печати, задания cron и at и все другие ссылки на пользователя. Затем удалите соответствующие строки из /etc/passwd и /etc/group (не забудьте удалить имя пользователя из всех групп, куда его добавили). Может быть хорошей идеей сначала отключить учётную запись (см. ниже), прежде чем начинать удаление, чтобы пользователь не мог пользоваться учётной записью во время её удаления.
Помните, что у пользователей могут быть файлы за пределами их домашнего каталога. Их найдёт команда find:
find / -user usernameОднако имейте в виду, что эта команда займёт долгое время, если у вас большие диски. Если у вас смонтированы сетевые диски, нужно быть осторожным, чтобы не забить сеть или сервер.
В некоторых дистрибутивах Linux есть специальные команды для этого; поищите deluser или userdel. Впрочем, сделать это вручную тоже несложно, а команды могут делать не всё.
Ваши данные ценны. Их воссоздание потребует времени и усилий, а это стоит денег или, как минимум, личного горя и слёз; иногда их вообще нельзя воссоздать, например, если это результаты каких-то экспериментов. Поскольку данные — это вложение, вам следует защищать их и принимать меры, чтобы их не потерять.
В основном есть четыре причины, по которым вы можете потерять данные: отказы оборудования, ошибки в программном обеспечении, действия человека и природные катаклизмы. Хотя современное оборудование обычно довольно надёжно, оно всё же может сломаться как будто бы спонтанно. Наиболее критичной для хранения данных частью оборудования является жёсткий диск, который полагается на сохранность крошечных магнитных полей в мире, полном электромагнитного шума. Современное программное обеспечение даже не отличается особой надёжностью: скала-программа без ошибок — исключение, а не правило. Люди же довольно ненадёжны: они либо допустят ошибку, либо будут злонамеренно и преднамеренно уничтожать данные. Природа может и не быть злой, но может wreak havoc (учинять разгром), даже творя добро. В общем, небольшое чудо, что хоть что-то вообще работает.
Резервные копии — способ защитить вложения в данные. Имея несколько копий данных, уже не так страшно, если одна из них уничтожена (цена — лишь восстановление потерянных данных из резервной копии).
Важно делать резервные копии правильно. Как и всё, связанное с физическим миром, резервные копии рано или поздно выйдут из строя. Часть искусства делать резервные копии хорошо — убеждаться, что они работают; вы же не хотите обнаружить, что ваши копии не сработали. В довершение бед, жёсткий сбой может случиться прямо в момент создания копии; если у вас только один носитель для резервных копий, он может быть уничтожен тоже, оставив вас с дымящимися пеплом тяжёлого труда. Или вы можете обнаружить при попытке восстановления, что забыли сохранить что-то важное, например базу данных пользователей сайта с 15000 пользователей. А лучше всего — все ваши резервные копии могут работать идеально, но последний известный ленточный накопитель, читающий такие ленты, какие вы использовали, — тот, что сейчас с ведром воды внутри.
Что касается резервного копирования, паранойя — в должностной инструкции.
Измерение времени основано на по большей части регулярных природных явлениях, например чередующихся светлых и тёмных периодах, вызванных вращением планеты. Общее время двух последовательных периодов постоянно, но длительности светлого и тёмного периодов меняются. Одной простой константой является полдень.
Полдень — это время дня, когда Солнце находится в своей наивысшей позиции. Поскольку (согласно недавним исследованиям) Земля круглая, полдень наступает в разное время в разных местах. Это приводит к понятию локального времени (local time). Люди измеряют время во многих единицах, большинство из которых привязаны к природным явлениям вроде полудня. Пока вы остаётесь на одном месте, не важно, что локальное время отличается.
Как только вам нужно связываться с отдалёнными местами, вы заметите потребность в общем времени. В новое время большая часть мест мира общается с большинством других мест мира, поэтому был определён глобальный стандарт измерения времени. Это время называется универсальным временем (universal time, UT или UTC; ранее — по Гринвичу, Greenwich Mean Time, GMT, поскольку это было локальное время в Гринвиче, Англия). Когда людям с разным локальным временем нужно общаться, они могут выражать время в универсальном, чтобы не было путаницы, когда что должно произойти.
Каждое локальное время называется часовым поясом. Хотя география позволила бы всем местам, где полдень наступает одновременно, иметь один часовой пояс, политика усложняет дело. По разным причинам многие страны используют летнее время, то есть переводят свои часы, чтобы иметь больше естественного света во время работы, а зимой переводят их обратно. Другие страны этого не делают. Те же, кто делает, не согласны, когда переводить часы, и меняют правила от года к году. Это делает преобразования часовых поясов отнюдь не тривиальными.
Часовые пояса лучше всего называть по месту либо указывая разницу между локальным и универсальным временем. В США и некоторых других странах локальные часовые пояса имеют имя и трёхбуквенное сокращение. Однако сокращения не уникальны, и их не следует использовать, если не названа страна. Лучше говорить о локальном времени, скажем, в Хельсинки, чем о восточноевропейском времени, поскольку не все страны Восточной Европы следуют одним и тем же правилам.
В Linux есть пакет данных о часовых поясах, который знает обо всех существующих поясах и который легко обновляется при изменении правил. Всё, что нужно сделать системному администратору, — это выбрать подходящий часовой пояс. Кроме того, каждый пользователь может установить свой собственный часовой пояс; это важно, поскольку многие люди работают с компьютерами в разных странах по Интернету. Когда правила перехода на летнее время меняются в вашем часовом поясе, обязательно обновите хотя бы эту часть вашей системы Linux. Помимо установки системного часового пояса и обновления файлов данных о часовых поясах, о времени беспокоиться почти не о чем.
Компьютер, подключённый к сети (пусть даже через модем), может автоматически сверять свои часы, сравнивая их с временем на другом компьютере, о котором известно, что оно точное. Именно этим и занимается Network Time Protocol (NTP). Это метод проверки и коррекции времени вашего компьютера путём его синхронизации с другой системой. С NTP время вашей системы может поддерживаться с точностью до миллисекунд от всемирного координированного времени. Подробнее см. http://www.time.gov/about.html.
Для большинства непритязательных пользователей Linux это просто приятная роскошь. У меня дома все часы выставляются по тому, что говорит моя Linux-система. Для больших организаций эта «роскошь» может стать необходимостью. Возможность искать в файлах журналов события по времени может сильно облегчить жизнь и убрать большую часть «догадок» из отладки.
Ещё один пример того, насколько важным может быть NTP, — SAN. Некоторые SAN требуют, чтобы NTP был настроен и работал корректно, чтобы обеспечить надлежащую синхронизацию использования файловых систем и корректный контроль временных меток. Некоторые SAN (и некоторые приложения) могут запутаться при работе с файлами, временные метки которых относятся к будущему.
В большинстве дистрибутивов Linux есть NTP-пакет какого-либо вида — .deb или .rpm. Можно использовать его для установки NTP, либо можно скачать исходные файлы с http://www.ntp.org/downloads.html и собрать программу самостоятельно. Так или иначе, базовая конфигурация одинакова.
«Чёрные дыры — это места, где Бог поделил на ноль». Стивен Райт
Базовые сведения об исходном коде ядра и его компиляции. Здесь также будет приведена некоторая информация об отладчике kdb. За более подробной информацией обращайтесь к другим kernel HOWTO.
IRC (Internet Relay Chat) не рассматривается в документе Эрика Рэймонда, однако IRC тоже может стать отличным способом найти нужные вам ответы. Правда, для этого требуется некоторая практика в том, чтобы задавать вопросы правильным образом. В большинстве IRC-сетей есть кипящие жизнью каналы #linux, и если ответ на ваш вопрос содержится в man-страницах или в HOWTO, то будьте готовы к тому, что вам посоветуют пойти и прочитать их. Правило о том, что писать нужно на ясном и грамматически правильном английском, остаётся в силе.
Большинство из того, что было сказано о группах новостей и списках рассылки, остаётся актуальным и для IRC, со следующими дополнениями.
Не используйте цвета, жирный шрифт, подчёркивание или странные (не ASCII) символы. Это ломает некоторые старые терминалы и просто-напросто выглядит ужасно. Если вы появитесь на канале и начнёте извергать цвет или жирный шрифт, ждите, что вас оттуда выкинут.
Помните: вы не имеете права на ответ. Если вы зададите вопрос правильным образом, то, вероятно, его получите, но права на ответ у вас нет. Люди в IRC-каналах, посвящённых Linux, находятся там в своё собственное время, им никто не платит, и уж тем более не вы.
Будьте вежливы. Относитесь к другим так, как хотите, чтобы относились к вам. Если вам кажется, что люди ведут себя с вами невежливо, не начинайте обзывать их или раздражаться — становитесь ещё вежливее. Это выставит их глупцами, вместо того чтобы опускать вас до их уровня.
Не шлёпайте никого крупной форелью. Можете поверить, что такое уже случалось раз-другой? И что нам не было смешно уже в первый раз?
Большинство каналов #linux — англоязычные. Общайтесь на них по-английски. В большинстве крупных IRC-сетей есть также каналы #linux на других языках: например, франкоязычный канал может называться #linuxfr, испаноязычный — #linuxes или #linuxlatino. Если вы не можете найти нужный канал, вопрос в основном канале #linux (желательно на английском) должен помочь вам его отыскать.
Не пишите как «1337 H4X0R d00d!!!», даже если другие так делают. Это выглядит глупо и, соответственно, делает глупым вас. В лучшем случае вы будете выглядеть идиотом, в худшем — вас осмеют и выкинут.
Никогда, слышите, никогда ни о кого не просите просканировать ваши порты или попытаться вас «взломать». Это правило незыблемо. Не существует способа убедиться, что вы — тот, за кого себя выдаёте, или что IP-адрес, с которого вы подключаетесь, принадлежит вам. Не ставьте людей в положение, в котором им придётся отказать в подобной просьбе.
Никогда никого не сканируйте порты, даже если вас об этом просят. Вы никак не можете проверить, что человек — тот, за кого себя выдаёт, или что IP, с которого он подключается, действительно принадлежит ему. В некоторых юрисдикциях сканирование портов может быть незаконным, и оно наверняка нарушает условия обслуживания (Terms of Service) большинства провайдеров. Большинство людей ведут логи TCP-соединений, и они заметят, что их сканируют. Большинство людей непременно пожалуются на вас вашему провайдеру (вычислить его — дело тривиальное).
Не отправляйте никому /msg, пока вас об этом не попросят. Это снижает полезность канала, а некоторые люди просто предпочитают, чтобы вы этого не делали.
Не отклоняйтесь от темы. Это канал про «Linux», а не канал «Чем занимался дядя Боб в прошлые выходные». Даже если вы видите, что другие люди отходят от темы, это не значит, что так можете и вы. Вероятно, они — постоянные обитатели канала, и к ним применяются другие негласные правила.
Если вы думаете о массовом CTCP-пинговании канала, о запросе CTCP version или CTCP чего-либо ещё — подумайте ещё раз. Это с очень большой вероятностью приведёт к вашему молниеносному изгнанию.
Если вы не знакомы с IRC: CTCP расшифровывается как Client To Client Protocol («протокол клиент-клиент»). Это метод, с помощью которого можно узнать информацию о клиентах других пользователей. Подробнее смотрите в документации к вашему IRC-клиенту.
Не спрашивайте об эксплойтах — разве что ищете ещё один способ быть без церемоний выкинутым.
Не сидите в хакерских/крэкерских/фрикерских/варезных каналах, пока находитесь в канале #linux. По какой-то причине люди, управляющие каналами #linux, словно ненавидят тех, кому нравится разрушать чужие машины или воровать программы. Просто невозможно представить почему.
Приносим извинения, если всё это показалось вам сплошным списком «НЕЛЬЗЯ» при почти полном отсутствии «МОЖНО». Всё, что «можно», было в значительной мере раскрыто в разделе о группах новостей и списках рассылки.
Пожалуй, самое лучшее, что вы можете сделать, — зайти на канал #linux, посидеть и посмотреть, прочувствовать атмосферу с полчасика, прежде чем что-либо сказать. Это поможет вам понять, в каком тоне следует общаться.
Существуют отличные FAQ о том, как выжать максимум из IRC-каналов #linux. У большинства каналов #linux есть FAQ и/или набор правил канала. Где их найти, обычно указано в топике канала (который можно посмотреть в любой момент с помощью команды /topic). Обязательно прочитайте правила, если они есть, и следуйте им. Один достаточно общий набор правил и советов — «Undernet #linux FAQ», который можно найти по адресу linuxfaq.quartz.net.nz.
«Библиотекарь Незримого университета в одностороннем порядке решил содействовать взаимопониманию, составив Орангутанско-человеческий словарь. Он работал над ним три месяца. Это было непросто. Он продвинулся до
Oook.» (Терри Пратчетт, «Men At Arms»)
Это краткий список определений слов, относящихся к Linux и системному администрированию.
CMOS RAM
CMOS расшифровывается как «Complementary Metal Oxide Semiconductor» (комплементарный металл-оксид-полупроводник). Это сложная технология, но, если предельно упростить, это тип транзистора, который сохраняет своё состояние даже при выключенном питании компьютера. Это достигается благодаря небольшой батарейке на материнской плате. В результате CMOS не теряет хранимую информацию при отключении питания.
account
Система Unix предоставляет пользователям учётные записи (accounts). Она выдаёт им имя пользователя и пароль, с помощью которых можно войти в учётную запись. Обычно также предоставляется домашний каталог для хранения файлов и права доступа к оборудованию и программному обеспечению. Всё это в совокупности и есть учётная запись.
application program
Программное обеспечение, которое делает что-то полезное. Результаты работы прикладной программы — это как раз то, ради чего покупался компьютер. См. также system program, operating system.
bad block
Блок (обычно один сектор на диске), который не способен надёжно хранить данные.
bad sector
Похоже на bad block, но более точно в тех случаях, когда размеры блока и сектора могут различаться.
boot sector
Обычно первый сектор любого данного раздела. Он содержит очень короткую программу (порядка нескольких сотен байт), которая загружает и запускает собственно операционную систему.
booting
Всё, что происходит между моментом включения компьютера и моментом, когда он готов принимать команды/ввод от пользователя, называется загрузкой (booting).
bootstrap loader
Очень маленькая программа (обычно находящаяся в ROM), которая читает фиксированное место на диске (например, MBR) и передаёт ему управление. Данные, находящиеся в этом фиксированном месте, как правило, немного больше по размеру и более изощрённые; они-то и берут на себя ответственность за загрузку собственно операционной системы и передачу ей управления.
cylinder
Набор дорожек (tracks) на многоголовочном диске, доступ к которым возможен без перемещения головок. Другими словами, это дорожки, находящиеся на одинаковом расстоянии от оси, вокруг которой вращаются дисковые пластины (platters). Размещение данных, которые с наибольшей вероятностью будут запрашиваться одновременно, на одном цилиндре может значительно сократить время доступа, поскольку перемещение головок чтения-записи происходит медленно по сравнению со скоростью вращения дисков.
daemon
Процесс, скрытно сидящий в фоне и обычно остающийся незамеченным, пока что-то не заставит его действовать. Например, демон update просыпается каждые тридцать секунд, чтобы сбросить буферный кэш, а демон sendmail пробуждается всякий раз, когда кто-то отправляет почту.
daylight savings time
Время года, в течение которого часы переводятся на один час вперёд. Широко используется по всему миру летом, чтобы вечера имели больше дневного света, чем имели бы иначе.
disk controller
Аппаратная схема, которая переводит инструкции операционной системы о доступе к диску на язык физического диска. Она обеспечивает уровень абстракции, благодаря которому операционной системе не нужно знать, как работать с множеством разных типов дисков, — достаточно знать о (сравнительно небольшом) количестве типов дисковых контроллеров. Распространённые типы дисковых контроллеров — IDE и SCSI.
emergency boot floppy
Дискета, с помощью которой можно загрузить систему, даже если файловая система жёсткого диска получила повреждения. Большинство дистрибутивов Linux предлагают создать такую дискету во время установки — это настоятельно рекомендуется. Если ваш дистрибутив Linux не предоставляет такой возможности, прочитайте Boot floppy HOWTO, доступный в LDP.
fibre channel
Высокоскоростной сетевой протокол, используемый в основном в сетях хранения данных (Storage Area Networks). Вопреки тому, что можно предположить из названия, fibre channel может работать как по оптоволоконным, так и по медным кабелям.
filesystem
Термин, который используется в двух целях и может иметь два слегка различающихся значения. Это либо совокупность файлов и каталогов на накопителе (будь то жёсткий диск, дискета, CD-ROM и т. д.), либо метки, нанесённые на дисковый носитель, которые ОС использует, чтобы определить, куда записывать файлы (inode, блоки, суперблоки и т. д.). Фактический смысл почти всегда можно понять из контекста.
formatting
Строго говоря, форматирование — это организация и разметка поверхности диска на дорожки (tracks), секторы (sectors) и цилиндры (cylinders). Также этим термином иногда (неправильно) обозначают действие записи файловой системы (filesystem) на диск (особенно в мире MS Windows/MS DOS).
fragmented
Ситуация, когда файл не записан на диск в виде непрерывных блоков (blocks). Если на диске недостаточно свободного места, чтобы записать файл одной непрерывной цепочкой блоков, файл разбивается на две или более частей поверхности диска. Это называется фрагментацией (fragmenting) и может увеличить время загрузки файла, так как диску приходится искать его остальные части.
full backup
Создание копии всей файловой системы на носитель для резервного копирования (например, ленту, дискету или CD).
geometry
Сколько цилиндров, секторов на цилиндр и головок имеет дисковый накопитель.
high level formatting
Неверный термин для обозначения записи файловой системы на диск. Часто используется в мире MS Windows и MS DOS.
incremental backups
Резервная копия того, что изменилось в файловой системе с момента последнего полного резервного копирования (full backup). Инкрементальные резервные копии, разумно используемые как часть стратегии резервного копирования, могут сэкономить массу времени и сил при поддержании резервной копии данных.
inode
Структура данных, хранящая информацию о файлах в файловой системе Unix. Для каждого файла существует inode, и файл однозначно идентифицируется файловой системой, в которой он находится, и номером его inode в этой системе. Каждый inode содержит следующую информацию: устройство, на котором находится inode; информацию о блокировках; режим и тип файла; количество ссылок на файл; идентификаторы пользователя и группы владельца; количество байт в файле; времена доступа и модификации; время последней модификации самого inode; адреса блоков файла на диске. Каталог в Unix — это ассоциация между именами файлов и номерами inode. Номер inode файла можно узнать с помощью опции «-i» команды ls.
iSCSI
Сетевой протокол хранения данных, позволяющий отправлять команды SCSI по сети TCP/IP. Используется в основном в сетях хранения данных (Storage Area Networks).
kernel
Часть операционной системы, которая реализует взаимодействие с оборудованием и разделение ресурсов. См. также system program.
local time
Официальное время в конкретном регионе (скорректированное с учётом расположения на Земле); устанавливается законом или обычаем.
logical partition
Раздел внутри расширенного раздела (extended partition); он называется «логическим», поскольку не существует в реальности, а только внутри логической структуры программного обеспечения.
logical volume manager (LVM)
Набор программ, которые позволяют собирать крупные физические диски в «логические» диски, которые можно уменьшать или расширять по мере изменения потребностей в данных.
low level formatting
Синоним formatting; используется в мире MS DOS, чтобы отличать это действие от создания файловой системы, которое иногда тоже называют форматированием.
mail transfer agent
(MTA) Программа, отвечающая за доставку сообщений электронной почты. Получив сообщение от mail user agent или другого MTA, она временно сохраняет его локально, анализирует получателей и либо доставляет его (если адресат локальный), либо пересылает другому MTA. В обоих случаях она может редактировать и/или дополнять заголовки сообщения. Широко используемым MTA для Unix является sendmail.
mail user agent
(MUA) Программа, позволяющая пользователю составлять и читать сообщения электронной почты. MUA обеспечивает интерфейс между пользователем и mail transfer agent. Исходящая почта в итоге передаётся MTA для доставки, а входящие сообщения забираются оттуда, где их оставил MTA (хотя MUA, работающие на однопользовательских машинах, могут забирать почту по протоколу POP). Примеры MUA — pine, elm и mutt.
master boot record
(MBR) Первый логический сектор на диске; именно туда (обычно) обращается BIOS, чтобы загрузить небольшую программу, которая загрузит компьютер.
network file system
(NFS) Протокол, разработанный Sun Microsystems и определённый в RFC 1094, который позволяет компьютеру обращаться к файлам по сети так, как будто они находятся на его локальных дисках.
operating system
Программное обеспечение, которое разделяет ресурсы компьютерной системы (процессор, память, дисковое пространство, пропускную способность сети и т. д.) между пользователями и запускаемыми ими прикладными программами. Управляет доступом к системе, обеспечивая безопасность. См. также kernel, system program, application program.
partition
Логическая часть диска. Каждый раздел обычно имеет собственную файловую систему. Unix склонен рассматривать разделы так, будто они являются отдельными физическими устройствами.
password file
Файл, хранящий имена пользователей и сведения об их учётных записях, например пароли. В системах Unix этот файл обычно /etc/passwd. В большинстве современных систем Linux файл /etc/passwd на самом деле не содержит данных паролей. Они, как правило, хранятся в другом файле — /etc/shadow — по соображениям безопасности. Подробнее смотрите man-страницы passwd(5) и shadow(5).
physical extents
Термин, описывающий фрагменты, на которые разбивается физический том (physical volume) при использовании менеджера логических томов.
physical volume
Термин для обозначения реального раздела диска, обычно в контексте менеджера логических томов.
platters
Физический диск внутри жёсткого накопителя. Обычно жёсткий диск состоит из нескольких физических дисков, установленных друг на друга. Один отдельный диск называется пластиной (platter).
power on self test
(POST) Серия диагностических тестов, которые выполняются при включении компьютера. Обычно она может включать проверку памяти, проверку того, что конфигурация оборудования совпадает с последней сохранённой конфигурацией, а также проверку того, что все известные BIOS дисководы и жёсткие диски установлены и работают.
print queue
Файл (или набор файлов), который используется демоном печати, чтобы приложениям, желающим воспользоваться принтером, не приходилось ждать завершения отправленного ими задания печати, прежде чем продолжить работу. Это также позволяет нескольким пользователям совместно использовать один принтер.
read-write head
Крошечная электромагнитная катушка и металлический полюс, используемые для записи и чтения магнитных структур на диске. Эти головки перемещаются в боковом направлении навстречу вращательному движению пластин (platters).
root filesystem
Родитель всех остальных файловых систем, смонтированных в дереве файловых систем Unix. Смонтированная как /, она может иметь поверх себя другие файловые системы (например, /usr). Если корневую файловую систему невозможно смонтировать, ядро (kernel) впадёт в панику, и система не сможет продолжить загрузку (booting).
run level
В Linux доступно до 10 уровней выполнения (runlevel, 0–9), из которых обычно определены только первые 7. Каждый уровень выполнения может запускать свой набор служб, что даёт несколько разных конфигураций в рамках одной системы. Уровень 0 определён как «остановка системы», уровень 1 — как «однопользовательский режим» (single user mode), а уровень 6 — как «перезагрузка системы». Остальные уровни, теоретически, системный администратор может определить как угодно. Однако большинство дистрибутивов предоставляют другие предопределённые уровни выполнения. Например, уровень 2 может быть определён как «многопользовательская консоль», а уровень 5 — как «многопользовательская система X-Window». Эти определения сильно различаются от дистрибутива к дистрибутиву, поэтому, пожалуйста, обратитесь к документации вашего дистрибутива.
sectors
Минимальная длина дорожки (track), которая может быть выделена для хранения данных. Обычно (но не всегда) это 512 байт.
shadow passwords
Поскольку файл паролей (password file) в системах Unix часто должен быть доступен для чтения всем, он обычно не содержит зашифрованных паролей учётных записей пользователей. Вместо этого используется теневой файл (который не доступен для чтения всем), в котором и хранятся зашифрованные пароли учётных записей пользователей.
single user mode
Обычно уровень выполнения 1. Уровень выполнения, при котором вход в систему разрешён только учётной записи root. Используется либо для ремонта системы (если файловая система повреждена частично, может быть всё ещё возможно загрузиться в уровень 1 и починить её), либо для перемещения файловых систем между разделами. Это лишь два примера. Любая задача, требующая системы, в которой только один человек может одновременно писать на диск, — кандидат на использование уровня 1.
spool
Отправить файл (или другие данные) в очередь. Обычно используется в связи с принтерами, но может применяться и для других целей (например, для почты). Сообщается, что этот термин является акронимом от «Simultaneous Peripheral Operation On-Line», однако, согласно Jargon File, он может быть бэкронимом (словом, придуманным позже для красоты).
system call
Услуги, предоставляемые ядром прикладным программам, и способ их вызова. Смотрите раздел 2 man-страниц.
swap space
Пространство на диске, в которое система может записывать части памяти. Обычно это выделенный раздел, но может быть и swap-файл.
system program
Программы, реализующие высокоуровневую функциональность операционной системы, то есть то, что напрямую не зависит от оборудования. Иногда для их запуска могут требоваться специальные привилегии (например, для доставки электронной почты), но зачастую их просто принято считать частью системы (например, компилятор). См. также application program, kernel, operating system.
time drift
Термин для обозначения неточности компьютера в отслеживании времени. Все компьютеры имеют некоторую скорость ошибки при отсчёте времени. У новых компьютеров эта скорость ошибки крайне мала.
track
Часть пластины (platter) диска, которая проходит под одной головкой чтения-записи (read-write head), пока головка неподвижна, а диск вращается. Каждая дорожка разделена на секторы (sectors), а вертикальное собрание дорожек — это цилиндр (cylinder).
volume group
Набор физических томов, разбитых на физические экстенты и доступных для использования в логических разделах.


