Структура логического диска под управлением ос unix
Аннотация: Разделы носителя информации (partitions) в UNIX. Логическая структура файловой системы и типы файлов в UNIX. Организация файла на диске в UNIX на примере файловой системы s5fs. Понятие индексного узла (inode). Организация директорий (каталогов) в UNIX. Понятие суперблока. Операции над файлами и директориями. Системные вызовы и команды для выполнения операций над файлами и директориями. Системный вызов open(). Системный вызов close(). Операция создания файла. Системный вызов creat(). Операция чтения атрибутов файла. Системные вызовы stat(), fstat() и lstat(). Операции изменения атрибутов файла. Операции чтения из файла и записи в файл. Операция изменения указателя текущей позиции. Системный вызов lseek(). Операция добавления информации в файл. Флаг O_APPEND. Операции создания связей. Команда ln, системные вызовы link() и symlink(). Операция удаления связей и файлов. Системный вызов unlink(). Специальные функции для работы с содержимым директорий. Понятие о файлах, отображаемых в память (memory mapped файлах). Системные вызовы mmap(), munmap().
Создание файловых систем
После разбиения всего диска на разделы удобного способа для получения доступа к данным или их сохранения все еще не существует. Дальнейшая настройка методов доступа осуществляется с применением файловых систем. Файловые системы обладают следующими возможностями:
- назначение отдельных владельцев файлами и каталогам;
- отслеживание времени создания и изменения файлов и каталогов;
- управление доступом к данным;
- ведение учета объемов выделяемого и используемого пространства.
Файлы в системе UNIX
Файлы являются в большинстве компьютерных систем базовой единицей хранения данных и применяются для хранения списков пользователей, сценариев оболочки и т.п. Все элементы в UNIX и Linux, даже аппаратные устройства, интерпретируются как файлы. Файловая система UNIX имеет иерархическую структуру, в самом верху которой находится корневой каталог, обозначаемый символом левой косой черты (/).
Совет. В Oracle все данные хранятся в таблицах, а в UNIX — в файлах.
В типичной системе UNIX файлы могут представлять собой файлы одного из следующих трех типов.
- Обычные файлы. Такие файлы могут содержать текст, данные или программы.Содержать другие файлы они не могут.
- Каталоги. Каталоги содержат файлы. Они могут также содержать и другие каталоги из-за древовидности структуры каталогов в UNIX.
- Специальные файлы. Такие файлы не используются обычными пользователями для ввода данных или текста; вместо этого они используются устройствами ввода и вывода вроде принтеров и терминалов. Если они содержат потоки символов, их называют специальными символьными файлами, а если предназначены для работы с большими блоками данных — специальными блочными файлами.
Введение
В материалах нескольких предыдущих семинаров (семинары 1–2, семинар 5) уже затрагивались вопросы работы с файлами в UNIX . Но только теперь, пояснив в лекции понятие файловой системы, мы можем рассмотреть файловую систему UNIX в целом. Наш обзор, правда, ограничится общими вопросами, связанными с организацией файловой системы, и системными вызовами, которые с наибольшей вероятностью могут пригодиться в дальнейшем. Это связано как с ограниченностью времени, которое отводится на работу с файловыми системами в нашем курсе, так и с преимущественно практическим направлением наших занятий.
Расслоение дисков
Важно понимать, что файловую систему можно размещать как на одном единственном физическом диске, так и на нескольких “расслоенных” физических дисках.В последнем случае, несмотря на охват файловой системой сразу нескольких дисков,для пользователей файлы будут отображаться как находящиеся на одном так называемом логическом томе. Для объединения множества дисков в единый логический том в системах UNIX предлагается несколько способов.
Один из них предусматривает применение утилиты Logical Volume Manager (Диспетчер логических томов). С помощью этой утилиты десять дисков размером 72 Гбайт можно объединять в один единственный логический диск размером 720 Гбайт. Таким образом,получается, что стратегия расслоения дисков может также позволять создавать и гораздо более объемные логические диски, способные справляться с более объемными файловыми системами. Файловые системы не могут выходить за границы дисков, так что логические диски предоставляют простой способ для создания больших томов.
Логические тома и утилита LVM
Давайте вкратце рассмотрим два основных метода конфигурирования физических дисков. Хотя заниматься этим администратору баз данных может никогда и не потребоваться, иметь общее представление о том, как системные администраторы управляют дисками, вовсе не помешает. Диски могут конфигурироваться либо как целые диски,либо как логические тома.
Целые диски представляют собой именно то, на что указывает их название: каждый такой диск воспринимается как одно целое и допускает создание только одной файловой системы. Ни расширять, ни сокращать файловые системы позже на таких дисках нельзя.
Логические тома, с другой стороны, создаются за счет объединения нескольких жестких дисков или дисковых разделов. Для объединения жестких дисков системные администраторы обычно применяют утилиту LVM. Они объединяют ряд физических дисков в группу тома, которую утилита LVM затем самостоятельно разбивает на несколько логических томов меньшего размера. В большинстве современных систем чаще всего применяется подход с применением утилиты LVM, потому что он является чрезвычайно гибким и легким способом для управления дисковым пространством. Например, нет ничего проще, чем добавлять пространство и изменять разделы на работающей системе с помощью утилиты LVM.
После создания логических томов дисковые тома могут назначаться точками монтирования, в которых затем, в свою очередь, могут начинать создаваться различные файлы.
Разбиение дисков на разделы
Исходные диски не обеспечивают легкого доступа к данным: для этого им необходимо придать какую-то структуру. В частности, первое, что потребуется делать, прежде чем использовать жесткий диск — это разбить его на разделы. Разбиение приводит к получению возможности сохранять данные системы и приложений на отдельных разделах диска, а также легко управляться с вопросами, касающимися выделения пространства. Иногда такие разделы сами называются дисками, но все они на самом деле являются частью одного физического диска. После разбиения диска на разделы можно приступать к созданию на нем файловых систем.
Изменение группы
Команда chgrp позволяет изменять группу, к которой принадлежит файл. Изменять группу может только владелец файла, причем только на ту, к которой принадлежит сам.Синтаксис команды chgrp выглядит так:
Установка и изменение разрешений для файлов
Для любого создаваемого файла первоначально устанавливаются разрешения -rw-r--r--. То есть всем разрешено читать этот файл, но никому — выполнять его.В случае помещения внутрь файла исполняемой программы, однако, может возникать необходимость в предоставлении кому-то разрешения на его выполнение. Устанавливать разрешения для файлов в UNIX можно с помощью команды chmod, у которой имеется два возможных способа применения.
Во-первых, в этой команде можно использовать символические обозначения, а именно: o — для владельца, g — для группы и u — для остальных пользователей в системе.В таком случае необходимые разрешения предоставляются так: сначала указывается интересующая сущность вместе со знаком плюс (+), а затем — символ, представляющий разрешение, которое ей требуется предоставить. В приведенном ниже примере обозначение go+x означает, что группе и всем остальным пользователями предоставляется разрешение на выполнение (x) сценария оболочки test.ksh:
Следующий пример показывает, как с помощью символического обозначения лишить группу разрешений на чтение и запись:
Во-вторых, в команде chmod можно также использовать для изменения разрешений файлов восьмеричные числа. Каждому разрешению соответствует разный цифровой “вес”: разрешению на чтение — вес 4, разрешению на запись — вес 2, а разрешению на выполнение — вес 1. Чтобы установить то или иное разрешение, достаточно просто добавить соответствующее ему число. Наибольшим числом, которое может ассоциироваться с каждой из трех сущностей (владельцем, группой и всеми остальными пользователями) является 7, равнозначное наличию разрешения на чтение, на запись и на выполнение файла. Например, рассмотрим следующий случай:
Первоначально разрешения файла test.txt выглядели как 644 (rw, r, r). Выполнение команды chmod 777 привело к выдаче всех разрешений (чтение, запись и выполнение) всем трем сущностям, т.е. владельцу, группе и всем остальным пользователям. При желании изменить это и сделать так, чтобы у владельца были все права, а у всех остальных пользователей — ни одного, достаточно просто указать восьмеричное число 700 (означающее, что у владельца должны быть права на чтение, запись и выполнение, а у группы, к которой он принадлежит, и у все остальных пользователей не должно быть вообще никаких прав) и использовать его в команде chmod следующим образом:
В табл. 3.3 приведен краткий перечень команд, которые можно использовать для изменения разрешений файлов. По умолчанию все файлы поставляются с включенными привилегиями только на чтение и запись, а каталоги — на чтение, запись и выполнение.
За предоставляемые по умолчанию разрешения для доступа к файлам и каталогам отвечает переменная среды UMASK. Поэтому просматривать, как в текущий момент на сервере выглядят предоставляемые по умолчанию разрешения можно с помощью следующей команды:
Символическое обозначение | Восьмеричное число | Описание привилегий |
--- | 0 | Никаких привилегий |
--x | 1 | Только выполнение |
-w- | 2 | Только запись |
-wx | 3 | Запись и выполнение, но не чтение |
r-- | 4 | Только чтение |
r-x | 5 | Чтение и выполнение, но не запись |
rw- | 6 | Чтение и запись, но не выполнение |
rwx | 7 | Чтение, запись и выполнение (все привилегии) |
При создании новый файл по умолчанию получает разрешения, наличие которых допускает переменная UMASK. В предыдущем примере вывод показал, что переменная UMASK имеет значение 022, а это значит, что к новым файлам пользователя ни его группа, ни другие пользователи системы не смогут получать доступ для записи.
Введение
В материалах нескольких предыдущих семинаров (семинары 1–2, семинар 5) уже затрагивались вопросы работы с файлами в UNIX . Но только теперь, пояснив в лекции понятие файловой системы, мы можем рассмотреть файловую систему UNIX в целом. Наш обзор, правда, ограничится общими вопросами, связанными с организацией файловой системы, и системными вызовами, которые с наибольшей вероятностью могут пригодиться в дальнейшем. Это связано как с ограниченностью времени, которое отводится на работу с файловыми системами в нашем курсе, так и с преимущественно практическим направлением наших занятий.
Просмотр разрешений файлов
С помощью команды ls -al можно отображать перечень разрешений и имен всех имеющихся в каталоге файлов. Например, рассмотрим вывод следующей команды:
Здесь видно, что в начале каждой строки для каждого файла отображается комбинация, состоящая из десяти разных букв и символа дефиса (-).
Первым может отображаться как символ дефиса, так и буква d. Если отображается буква d, значит, речь идет о каталоге, а если символ дефиса — значит, речь идет об обычном файле.
Следующие девять позиций занимают три набора букв rwx, под которыми подразумеваются, соответственно, предоставляемые для файла разрешения на чтение (r —read), на запись (w — write) и на выполнение (e — execution). Первый набор указывает на разрешения, предоставляемые владельцу файла, второй — на разрешения, предоставляемые группе, к которой принадлежит пользователь-владелец, а последний, третий — на разрешения, предоставляемые всем остальным пользователям в системе.
Для примера рассмотрим следующую строку:
Первым здесь идет символ дефиса (-), а это значит, что test.ksh является файлом,а не каталогом. Следующие три символа, rwx, указывают на то, что владелец файла test.ksh обладает всеми тремя разрешениями для доступа к этому файлу (чтение, запись и выполнение). Идущие далее символы, r-x, означают, что все пользователи, которые находятся в той же группе, что и владелец файла, имеют разрешения на чтение и выполнение этого файла, но не имеют разрешение на запись в него. То есть изменять содержимое этого файла они не могут. И, наконец, последний набор символов, --x, указывает на то, что всем остальным пользователям в системе разрешено выполнять файл,но не разрешено изменять его.
Связывание файлов
Команда link позволяет создавать так называемый указатель (pointer), или ссылку, на любой существующий файл. При использовании этой команды никакого нового файла в действительности не создается; вместо этого создается виртуальная копия исходного существующего файла за счет указания для него нового имени. Символические ссылки позволяют легко обращаться к файлам из другого каталога без предоставления полного пути к ним. В общем случае ссылки бывают двух типов: символические и жесткие. Жесткие ссылки (hard links) могут создаваться между файлами, находящимися в одном и том же каталоге, в то время как символические (symbolic) могут создаваться между любыми файлами, находящимися в любом каталоге. Пример символической ссылки приведен ниже. Жесткая ссылка обычно применяется для создания копии файла, а символическая — просто для указания на другой файл (или каталог). При управлении базами данных Oracle часто создаются символические ссылки для файлов параметров для обеспечения возможности легко ссылаться на них без указания полного пути.
При создании символической ссылки применяется такой синтаксис:
Ниже приведен пример создания символической ссылки по имени test.sql для файла monitor.sql:
После создания символической ссылки test.sql,проверить состояние нового файла из каталога /u01/app/oracle можно следующим образом:
Управление файлами
Команда ls позволяет отображать список всех имеющихся в каталоге файлов.Добавляя к ней параметр -al (ls -al) можно получать длинный список всех файлов со всеми их разрешениями и прочей информацией, а добавляя параметра -altr (ls -altr) — упорядоченный список всех файлов с новейшими или недавно отредактированными в конце. Ниже приведено несколько примеров:
Команда cat позволяет просматривать содержимое любого файла, как показано в следующем фрагменте кода. Чуть позже вы узнаете, как просматривать и изменять файлы с помощью редактора vi.
Но что если файл, который требуется просмотреть, имеет очень большие размеры? В случае использования обычной команды cat его содержимое промелькнет на экране настолько быстро, что его невозможно будет исследовать. Поэтому для просмотра длинных файлов лучше дополнительно использовать команду more, которая позволяет отображать содержимое файлов по одной странице за раз и переходить на следующую страницу нажатием клавиши пробела:
Команда cp позволяет копировать файл в другое место. Обратите внимание, что в случае использования вместе с параметром -i она будет спрашивать разрешения, прежде чем перезаписывать уже существующий и сохраненный ранее файл с таким же именем:
Команда mv позволяет перемещать исходный файл в другое место, изменять его имя или делать и то и другое. В следующем примере команда mv используется для изменения имени файла test.txt на abc.txt:
Если по какой-то причине нужно избавиться от файла, для этого служит команда rm.При этом, однако, следуют соблюдать особую осторожность, поскольку команда rm удаляет файлы навсегда. Для безопасности лучше использовать команду rm с параметром –i, в случае чего она будет отображать перед безвозвратным удалением файла соответствующее предупреждение. Будьте предельно аккуратны с командой rm, поскольку с ее помощью можно очень легко случайно удалить даже всю файловую систему!
Видео инструкция по настройке производительности Unix для баз данных
Ниже Вы может посмотреть мастер-класс по настройке аппаратной и программной части Unix-подобных систем (в данном случае на примере Linux) с целью оптимизации производительности баз данных, работающих на этих серверах.
Данный видеокурс рассматривает следующие темы:
- Выбор "железа", т.е. аппаратной части сервера (выбор жестких дисков - обычные Sata или SSD, FusionIO, выбор памяти, конкретного бренда сервера).
- Настройка операционной системы (обычная файловая система, динамические диски или кластер, память, настройка ввода-вывода).
- Как осуществить сбалансированный выбор между "железом" (сервером), настройкой операционной системы и конфигурацией базы данных.
Управление каталогами
Тема управления каталогами имеет два направления. Одно требует разбираться в командах, которые необходимо выполнять для создания, перемещения и удаления каталогов, а второе — в определенных стандартных каталогах, которые встречаются в практически каждой системе UNIX или Linux.
Логическая структура файловой системы и типы файлов в UNIX
Мы не будем давать здесь определение файла, полагая, что интуитивное представление о файлах у вас имеется, а в лекции 11 (раздел "Введение") было введено понятие о файлах, как об именованных абстрактных объектах, обладающих определенными свойствами. При этом в пространстве имен файлов одному файлу могут соответствовать несколько имен.
В материалах семинаров 1-2 упрощенно говорилось о том, что файлы могут объединяться в директории , и что файлы и директории организованы в древовидную структуру. На нынешнем уровне знаний мы можем сформулировать это более аккуратно. В операционной системе UNIX существуют файлы нескольких типов, а именно:
- обычные или регулярные файлы ;
- директории или каталоги;
- файлы типа FIFO или именованные pip 'ы;
- специальные файлы устройств ;
- сокеты (sockets);
- специальные файлы связи (link).
Что такое регулярные файлы и директории , вам должно быть хорошо известно из личного опыта и из лекций (лекция 11). О способах их отображения в дисковое пространство речь пойдет чуть позже. Файлы типа FIFO были представлены в семинаре 5, когда рассматривалась работа с именованными pip 'ами (раздел "Понятие FIFO . Использование системного вызова mknod() для создания FIFO . Функция mkfifo ()"). Файлы типа "связь" мы представим в этом семинаре, когда будем обсуждать операции над файлами (раздел " Операции над файлами и директориями ") и соответствующие им системные вызовы (раздел "Системные вызовы и команды для выполнения операций над файлами и директориями "). О специальных файлах устройств будет рассказано в материалах семинаров 13–14, посвященных реализации в UNIX подсистемы ввода-вывода и передаче информации с помощью сигналов. Файлы типа "сокет" будут введены в семинарах 15–16, когда мы будем рассматривать вопросы сетевого программирования в UNIX .
Файлы всех перечисленных типов логически объединены в ациклический граф с однонаправленными ребрами, получающийся из дерева в результате сращивания нескольких терминальных узлов дерева или нескольких его нетерминальных узлов таким образом, чтобы полученный граф не содержал циклов. В нетерминальных узлах такого ациклического графа (т.е. в узлах, из которых выходят ребра) могут располагаться только файлы типов " директория " и "связь" . Причем из узла, в котором располагается файл типа "связь" , может выходить только ровно одно ребро . В терминальных узлах этого ациклического графа (т.е. в узлах, из которых не выходит ребер) могут располагаться файлы любых типов (см. рис. 11–12.1), хотя присутствие в терминальном узле файла типа "связь" обычно говорит о некотором нарушении целостности файловой системы.
В отличие от древовидной структуры набора файлов, где имена файлов связывались с узлами дерева, в таком ациклическом графе имя файла связывается не с узлом, соответствующим файлу, а с входящим в него ребром. Ребра, выходящие из узлов, соответствующих файлам типа "связь" , являются неименованными. Надо отметить, что практически во всех существующих реализациях UNIX -подобных систем в узел графа , соответствующий файлу типа " директория ", не может входить более одного именованного ребра, хотя стандарт на операционную систему UNIX и не запрещает этого. Правила построения имен ребер (файлов) рассматривались в семинарах 1-2. В качестве полного имени файла может использоваться любое имя, получающееся при прохождении по ребрам от корневого узла графа (т.е. узла, в который не входит ни одно ребро ) до узла, соответствующего этому файлу, по любому пути с помощью следующего алгоритма:
- Если интересующему нас файлу соответствует корневой узел, то файл имеет имя " / ".
- Берем первое именованное ребро в пути и записываем его имя, которому предваряем символ " / ".
- Для каждого очередного именованного ребра в пути приписываем к уже получившейся строке справа символ " / " и имя соответствующего ребра.
Полное имя является уникальным для всей файловой системы и однозначно определяет соответствующий ему файл .
Как мы отмечали в разделе 2.1, понятие файла является одним из наиболее важных для ОС UNIX. Все файлы, с которыми могут манипулировать пользователи, располагаются в файловой системе, представляющей собой дерево, промежуточные вершины которого соответствуют каталогам, и листья - файлам и пустым каталогам. Примерная структура файловой системы ОС UNIX показана на рисунке 2.1. Реально на каждом логическом диске (разделе физического дискового пакета) располагается отдельная иерархия каталогов и файлов. Для получения общего дерева в динамике используется "монтирование" отдельных иерархий к фиксированной корневой файловой системе.
Замечание: в мире ОС UNIX по историческим причинам термин "файловая система" является перегруженным, обозначая одновременно иерархию каталогов и файлов и часть ядра, которая управляет каталогами и файлами. Видимо, было бы правильнее называть иерархию каталогов и файлов архивом файлов, а термин "файловая система" использовать только во втором смысле. Однако, следуя традиции ОС UNIX, мы будем использовать этот термин в двух смыслах, различая значения по контексту.
Каждый каталог и файл файловой системы имеет уникальное полное имя (в ОС UNIX это имя принято называть full pathname - имя, задающее полный путь, поскольку оно действительно задает полный путь от корня файловой системы через цепочку каталогов к соответствующему каталогу или файлу; мы будем использовать термин "полное имя", поскольку для pathname отсутствует благозвучный русский аналог). Каталог, являющийся корнем файловой системы (корневой каталог), в любой файловой системе имеет предопределенное имя "/" (слэш). Полное имя файла, например, /bin/sh означает, что в корневом каталоге должно содержаться имя каталога bin, а в каталоге bin должно содержаться имя файла sh. Коротким или относительным именем файла (relative pathname) называется имя (возможно, составное), задающее путь к файлу от текущего рабочего каталога (существует команда и соответствующий системный вызов, позволяющие установить текущий рабочий каталог).
В каждом каталоге содержатся два специальных имени, имя ".", именующее сам этот каталог, и имя "..", именующее "родительский" каталог данного каталога, т.е. каталог, непосредственно предшествующий данному в иерархии каталогов.
Рис. 2.1. Структура каталогов файловой системы
Структура файловой системы
Файловая система обычно размещается на дисках или других устройствах внешней памяти, имеющих блочную структуру. Кроме блоков, сохраняющих каталоги и файлы, во внешней памяти поддерживается еще несколько служебных областей.
В мире UNIX существует несколько разных видов файловых систем со своей структурой внешней памяти. Наиболее известны традиционная файловая система UNIX System V (s5) и файловая система семейства UNIX BSD (ufs). Файловая система s5 состоит из четырех секций (рисунок 2.2,a). В файловой системе ufs на логическом диске (разделе реального диска) находится последовательность секций файловой системы (рисунок 2.2,b).
Рис. 2.2. Структура внешней памяти файловых систем s5 и ufs
- Boot-блок содержит программу раскрутки, которая служит для первоначального запуска ОС UNIX. В файловых системах s5 реально используется boot-блок только корневой файловой системы. В дополнительных файловых системах эта область присутствует, но не используется.
- Суперблок - это наиболее ответственная область файловой системы, содержащая информацию, которая необходима для работы с файловой системой в целом. Суперблок содержит список свободных блоков и свободные i-узлы (information nodes - информационные узлы). В файловых системах ufs для повышения устойчивости поддерживается несколько копий суперблока (как видно из рисунка 2.2,b, по одной копии на группу цилиндров). Каждая копия суперблока имеет размер 8196 байт, и только одна копия суперблока используется при монтировании файловой системы (см. ниже). Однако, если при монтировании устанавливается, что первичная копия суперблока повреждена или не удовлетворяет критериям целостности информации, используется резервная копия.
- Блок группы цилиндров содержит число i-узлов, специфицированных в списке i-узлов для данной группы цилиндров, и число блоков данных, которые связаны с этими i-узлами. Размер блока группы цилиндров зависит от размера файловой системы. Для повышения эффективности файловая система ufs старается размещать i-узлы и блоки данных в одной и той же группе цилиндров.
- Список i-узлов (ilist) содержит список i-узлов, соответствующих файлам данной файловой системы. Максимальное число файлов, которые могут быть созданы в файловой системе, определяется числом доступных i-узлов. В i-узле хранится информация, описывающая файл: режимы доступа к файлу, время создания и последней модификации, идентификатор пользователя и идентификатор группы создателя файла, описание блочной структуры файла и т.д.
- Блоки данных - в этой части файловой системы хранятся реальные данные файлов. В случае файловой системы ufs все блоки данных одного файла пытаются разместить в одной группе цилиндров. Размер блока данных определяется при форматировании файловой системы командой mkfs и может быть установлен в 512, 1024, 2048, 4096 или 8192 байтов.
Монтируемые файловые системы
Файлы любой файловой системы становятся доступными только после "монтирования" этой файловой системы. Файлы "не смонтированной" файловой системы не являются видимыми операционной системой.
Для монтирования файловой системы используется системный вызов mount. Монтирование файловой системы означает следующее. В имеющемся к моменту монтирования дереве каталогов и файлов должен иметься листовой узел - пустой каталог (в терминологии UNIX такой каталог, используемый для монтирования файловой системы, называется directory mount point - точка монтирования). В любой файловой системе имеется корневой каталог. Во время выполнения системного вызова mount корневой каталог монтируемой файловой системы совмещается с каталогом - точкой монтирования, в результате чего образуется новая иерархия с полными именами каталогов и файлов.
Смонтированная файловая система впоследствии может быть отсоединена от общей иерархии с использованием системного вызова umount. Для успешного выполнения этого системного вызова требуется, чтобы отсоединяемая файловая система к этому моменту не находилась в использовании (т.е. ни один файл из этой файловой системы не был открыт). Корневая файловая система всегда является смонтированной, и к ней не применим системный вызов umount.
Как мы отмечали выше, отдельная файловая система обычно располагается на логическом диске, т.е. на разделе физического диска. Для инициализации файловой системы не поддерживаются какие-либо специальные системные вызовы. Новая файловая система образуется на отформатированном диске с использованием утилиты (команды) mkfs. Вновь созданная файловая система инициализируется в состояние, соответствующее наличию всего лишь одного пустого корневого каталога. Команда mkfs выполняет инициализацию путем прямой записи соответствующих данных на диск.
Интерфейс с файловой системой
Ядро ОС UNIX поддерживает для работы с файлами несколько системных вызовов. Среди них наиболее важными являются open, creat, read, write, lseek и close.
Важно отметить, что хотя внутри подсистемы управления файлами обычный файл представляется в виде набора блоков внешней памяти, для пользователей обеспечивается представление файла в виде линейной последовательности байтов. Такое представление позволяет использовать абстракцию файла при работе в внешними устройствами, при организации межпроцессных взаимодействий и т.д.
Файл в системных вызовах, обеспечивающих реальный доступ к данным, идентифицируется своим дескриптором (целым значением). Дескриптор файла выдается системными вызовами open (открыть файл) и creat (создать файл). Основным параметром операций открытия и создания файла является полное или относительное имя файла. Кроме того, при открытии файла указывается также режим открытия (только чтение, только запись, запись и чтение и т.д.) и характеристика, определяющая возможности доступа к файлу:
open(pathname, oflag [,mode])
Одним из признаков, которые могут участвовать в параметре oflag, является признак O_CREAT, наличие которого указывает на необходимость создания файла, если при выполнении системного вызова open файл с указанным именем не существует (параметр mode имеет смысл только при наличии этого признака). Тем не менее по историческим причинам и для обеспечения совместимости с предыдущими версиями ОС UNIX отдельно поддерживается системный вызов creat, выполняющий практически те же функции.
Открытый файл может использоваться для чтения и записи последовательностей байтов. Для этого поддерживаются два системных вызова:
read(fd, buffer, count) и write(fd, buffer, count)
Здесь fd - дескриптор файла (полученный при ранее выполненном системном вызове open или creat), buffer - указатель символьного массива и count - число байтов, которые должны быть прочитаны из файла или в него записаны. Значение функции read или write - целое число, которое совпадает со значением count, если операция заканчивается успешно, равно нулю при достижении конца файла и отрицательно при возникновении ошибок.
В каждом открытом файле существует текущая позиция. Сразу после открытия файл позиционируется на первый байт. Другими словами, если сразу после открытия файла выполняется системный вызов read (или write), то будут прочитаны (или записаны) первые count байтов содержимого файла (конечно, они будут успешно прочитаны только в том случае, если файл реально содержит по крайней мере count байтов). После выполнения системного вызова read (или write) указатель чтения/записи файла будет установлен в позицию count+1 и т.д.
Такой, чисто последовательный стиль работы, оказывается во многих случаях достаточным, но часто бывает необходимо читать или изменять файл с произвольной позиции (например, как без такой возможности хранить в файле прямо индексируемые массивы данных?). Для явного позиционирования файла служит системный вызов
lseek(fd, offset, origin)
Как и раньше, здесь fd - дескриптор ранее открытого файла. Параметр offset задает значение относительного смещения указателя чтения/записи, а параметр origin указывает, относительно какой позиции должно применяться смещение. Возможны три значения параметра origin. Значение 0 указывает, что значение offset должно рассматриваться как смещение относительно начала файла. Значение 1 означает, что значение offset является смещением относительно текущей позиции файла. Наконец, значение 2 говорит о том, что задается смещение относительно конца файла. Заметим, что типом данных параметра offset является long int. Это значит, что, во-первых, могут задаваться достаточно длинные смещения и, во-вторых, смещения могут быть положительными и отрицательными.
Например, после выполнения системного вызова
указатель чтения/записи соответствующего файла будет установлен на начало (на первый байт) файла. Системный вызов
установит указатель на конец файла. Наконец, выполнение системного вызова
приведет к увеличению текущего значения указателя на 10.
Естественно, системный вызов успешно завершается только в том случае, когда заново сформированное значение указателя не выходит за пределы существующих размеров файла.
Как и следовало ожидать, файлы и каталоги в UNIX выглядят во многом так же, как в Windows. Вы узнаете все о файловой системе и структуре каталогов в UNIX и том, какие каталоги в UNIX являются наиболее важными, а также познакомитесь с рядом основных команд, которые можно использовать в UNIX для работы с файлами.
Важные каталоги UNIX
Существует несколько каталогов, с которыми администратору баз данных Oracle приходится регулярно иметь дело при использовании системы UNIX.
Организация файловой системы UNIX имеет древовидную структуру, вершина которой называется корнем, а сама структура называется файловым деревом. Каждая вершина в файловом дереве, за исключением листьев, является каталогом, листья же в свою очередь являются либо обычными файлами, либо файлами устройств (Рис. 1).
[IMAGE ] |
Для того, чтобы добраться до файла необходимо указать его имя, которому предшествует указание пути поиска, который описывает местоположение файла в файловом дереве. Путь поиска состоит из компонент, разделенных между собой наклонной чертой (``/''), которые представляют из себя последовательность вершин в файловом дереве, которые необходимо посетить, чтобы достигнуть требуемый файл. Путь поиска может начинаться в корне, в этом случае первая компонента пути записывается как ``/'' (например ``/usr/src/cmd/date.c''). Такой путь называется полным. Также путь может отсчитываться относительно текущей директории (например если текущей директорией является ``cmd'', то путь ``date.c'' соответствует пути ``/usr/src/cmd/date.c'').
В файловой системе UNIX также существует понятие прав доступа к файлу. Права доступа к файлу регулируются установкой специальных битов разрешения доступа, связанных с файлом. Устанавливая биты разрешения доступа, можно независимо управлять выдачей разрешений на чтение, запись и выполнение для трех категорий пользователей: владельца файла, группового пользователя и прочих. Пользователи также могут создавать файлы, если разрешен доступ к каталогу. Вновь созданные файлы становятся листьями в древовидной структуре файловой системы.
Устройства в системе UNIX трактуются так, как если бы они были файлами. Обращение программ к устройствам имеет тот же самый синтаксис, что и обращение к обычным файлам; семантика операций чтения и записи по отношению к устройствам в большой степени совпадает с семантикой операций чтения и записи обычных файлов. Способ защиты устройств совпадает со способом защиты обычных файлов: путем соответствующей установки битов разрешения доступа к ним. Поскольку имена устройств выглядят так же, как и имена обычных файлов, и поскольку над уст- ройствами и над обычными файлами выполняются одни и те же операции, большинству программ нет необходимости различать внутри себя типы обрабатываемых файлов.
Тема физического хранения данных и использования дисковой системы в UNIX является чрезвычайно важной для администратора баз данных Oracle и MySQL, потому что выбор конфигурации для дисков очень сильно влияет на доступность и производительность баз данных в будущем. Некоторые базы данных Oracle функционируют лучше в случае использования “неформатированных” дисковых хранилищ, а не дисков, находящихся под управлением операционной системы UNIX. Кластеры RAC (Oracle Real Application Clusters — кластеры реальных приложений Oracle) вообще могут работать только с неформатированными устройствами и не могут работать с обычными дисками в формате UNIX.
Все файлы UNIX в системе образуют файловую систему, создаваемую на так называемом разделе диска, который представляет собой “часть” диска и считается базовым устройством хранения данных. Структура типичной файловой системы Unix представлена на рисунке ниже:
Разделы носителя информации (partitions) в UNIX
Физические носители информации – магнитные или оптические диски, ленты и т.д., использующиеся как физическая основа для хранения файлов, в операционных системах принято логически делить на разделы (partitions) или логические диски . Причем слово "делить" не следует понимать буквально, в некоторых системах несколько физических дисков могут быть объединены в один раздел . Об этом подробнее рассказывается в лекции 12 в разделе "Общая структура файловой системы".
В операционной системе UNIX физический носитель информации обычно представляет собой один или несколько разделов . В большинстве случаев разбиение на разделы производится линейно, хотя некоторые варианты UNIX могут допускать некое подобие древовидного разбиения (Solaris). Количество разделов и их размеры определяются при форматировании диска. Поскольку форматирование диска относится к области администрирования операционных систем, оно в нашем курсе рассматриваться не будет.
Наличие нескольких разделов на диске может определяться требованиями операционной системы или пожеланиями пользователя. Допустим, пользователь хочет разместить на одном жестком диске несколько операционных систем с возможностью попеременной работы в них, тогда он размещает каждую операционную систему в своем разделе . Или другая ситуация: необходимость работы с несколькими видами файловых систем. Под каждый тип файловой системы выделяется отдельный логический диск . Третий вариант – это разбиение диска на разделы для размещения в разных разделах различных категорий файлов. Скажем, в одном разделе помещаются все системные файлы, а в другом разделе – все пользовательские файлы. Примером операционной системы, внутренние требования которой приводят к появлению нескольких разделов на диске, могут служить ранние версии MS-DOS , для которых максимальный размер логического диска не превышал 32 Мбайт.
Для простоты далее в этих семинарах будем полагать, что у нас имеется только один раздел и, следовательно, одна файловая система . Вопросы взаимного сосуществования нескольких файловых систем в рамках одной операционной системы мы затронем в семинарах 13–14 перед обсуждением реализации подсистемы ввода-вывода.
Разрешения на чтение и запись данных в файлы в UNIX
Способность пользователя считывать и записывать данные в файлы в системе UNIX зависит от разрешений, которые были предоставлены владельцем этого файла или каталога (владельцем файла автоматически считается пользователь, который его создал).
Для каждого файла и каталога могут предоставляться разрешения трех типов.
- Разрешение на чтение (read permission), позволяющее только просматривать содержимое файла.
- Разрешение на запись (write permission), позволяющее изменять содержимое файла, а в случае каталога — создавать, изменять и удалять файлы в данном каталоге.
- Разрешение на выполнение (execute permission), позволяющее выполнять (запускать) файл, если в нем содержится исполняемая программа (или сценарий).
Разрешение на чтение является самым базовым. От разрешения на выполнение без разрешения на чтение мало толку, так как выполнить файл, который изначально невозможно прочитать, не получится.
Мониторинг использования дисков
При подготовке системы Oracle администратор баз данных обычно отправляет системному администратору формальный запрос на требуемый для нее объем физического дискового пространства, который основан на произведенных подсчетах размеров и ожидаемого роста базы данных. После принятия этого общего запроса системный администратор в ответ сообщает администратору баз данных о местонахождении точек монтирования, в которых он выделил ему необходимое пространство. Точками монтирования (mount points) называются каталоги в системе, в которых монтируются файловые системы. Далее администратор баз данных может создавать в этих точках монтирования все необходимые каталоги, прежде чем приступать к установке программного обеспечения Oracle и созданию самой базы данных.
После выделения места под программное обеспечение и базы данных Oracle обязанность следить за его использованием полностью ложится на плечи администратора баз данных. Если места начнет не хватать, администратору баз данных придется просить увеличить его у системного администратора. В идеале у администратора должно всегда оставаться немного дополнительного свободного пространства в выделенных ему точках монтирования, чтобы он мог самостоятельно добавлять место для файлов базы данных в случае возникновения в том необходимости. Для проверки объема дискового пространства и выяснения того, сколько из него уже занято, и сколько все еще свободно для использования в будущем, существует несколько очень удобных команд.
Команда df (disk free) позволяет просматривать информацию об общем объеме пространства (в байтах), которое было выделено для каждой точки монтирования, и том,сколько из него уже используется в текущий момент. Добавив к ней параметр –k (df –k),ту же информацию можно просматривать в килобайтах, что обычно гораздо удобнее.
Ниже приведен пример применения команды df вместе с параметром –k:
В этом примере вывод команды df показывает, что всего для точки монтирования /finance09 было выделено 7,09 Гбайт, из которых 5,35 Гбайт в текущее время занимают различные файлы, а 1,74 Гбайт — по-прежнему свободны.
Еще одной командой, которая позволяет просматривать информацию об использовании дисков, является du. Эта команда отображает сведения об используемом каждой точкой монтирования объеме пространства (в байтах):
Как видно в приведенном выше примере, команда du показывает, сколько места занимают различные файлы и каталоги в точке монтирования (каковой в данном случае является /finance09), и сколько всего места занимает эта точка.
Предпочтительней пользоваться командой df, а не du, потому что она позволяет сразу же видеть в процентах, сколько пространства свободно и сколько занято.
Манипулирование каталогами
Существует несколько важных команд, которые позволяют создавать, перемещать и удалять каталоги.
В частности, команда mkdir позволяет создавать новый каталог:
Путем добавления к ней параметра -p можно также создавать и любые необходимые промежуточные каталоги, если таковых еще не существует. В следующем примере с помощью всего одной команды создается сразу три каталога — /u01/, /u01/app и /u01/app/oracle:
Команда для удаления каталогов выглядит не так, как команда для удаления файлов.Для удаления каталога нужно использовать команду rmdir, как показано в следующем примере (но перед этим все равно обязательно удалять из него все файлы с помощью команды rm):
Команда rmdir позволяет удалять только пустые каталоги. Для удаления каталога,в котором содержатся файлы, нужно использовать команду rmdir вместе параметром -R (или -r), тогда перед удалением самого каталога, сначала рекурсивно удаляются все его содержимое:
Для перемещения по иерархической структуре каталогов UNIX можно использовать команду cd (которая расшифровывается как “change directory” — “сменить каталог”):
Обратите внимание, что в команде cd можно указывать как полный абсолютный путь, так и более короткий относительный путь. Кроме того, вместо пути к каталогу можно указывать имя той переменной среды, которая на него ссылается. Например,выполнение команды cd $ORACLE_HOME приведет к переходу из текущего каталога в каталог, на который ссылается переменная ORACLE_HOME.
Хранение данных на дисках, производительность и доступность
Доступность и производительность лежит в основе всех стратегий конфигурации дисков. Единственное, в чем можно быть уверенным при использовании систем хранения на базе дисков, так это, что в какой-то момент времени диски будут отказывать. Все диски обладают показателем среднего времени наработки на отказ (Mean Time Between Failures — MTBF), который может составлять сотни тысяч часов работы и в среднем позволять диску работать многие годы. Однако, как известно, пользоваться среднестатическими данными в подобных ситуациях может быть опасно, так как любой отдельно взятый диск может отказать в любой момент, независимо от того, как выглядит его показатель MTBF. Управляют дисками дисковые контроллеры, и отказ такого контроллера чреват прекращением всех системных операций. Поэтому сегодня для обеспечения постоянной доступности принято вносить в дисковые системы (и другие ключевые компоненты всех системы) избыточность.
Производительность тоже является важной деталью при рассмотрении вариантов конфигурации устройств хранения данных. В системах с очень часто выполняемыми операциями чтения и записи могут быстро возникать узкие места в работе дисков, если не планировать конфигурацию дисков правильным образом с самого начала.
Для улучшения производительности чаще всего применяется стратегия расслоения дисков (disk stripping), которая позволяет создавать из нескольких физических дисков единую логическую единицу. Эта единица состоит из чередующихся разделов с каждого из дисков в наборе и обеспечивает разделение данных на блоки одинакового размера и их запись слоями одновременно на все диски. Операции чтения выполняются точно так же, т.е. с одновременным использованием всех дисков. Благодаря этому, производительность операций ввода-вывода значительно улучшается, поскольку для их выполнения используются соответствующие средства не одного, а целого набора дисков.
Варианты конфигурации дисковых устройств хранения данных
Варианты, выбираемые при конфигурировании дисковых устройств хранения данных (дисковых носителей), оказывают очень серьезное влияние на производительность и период работоспособности баз данных. Принимать касающиеся этих устройств решения отдельно не стоит, вместо этого при принятии таких решений следует брать в рас-чет то, база данных и приложения какого типа будут размещаться на этих носителях.
Например, при наличии хранилища данных, может быть, необходимо заставить системного администратора использовать для дисков расслоение с большими размерами. Если ожидается выполнение большого количества операций записи или чтения данных из базы, нужно обязательно выбирать для дисков подходящую конфигурацию. По сравнению с технологиями, которые предлагались несколько лет назад, сверхсложные технологии хранения, которые предлагаются сегодня, позволяют добиваться одновременно и высокого уровня производительности и высокой степени доступности данных.
Несмотря на это, все равно остается еще масса решений, которые требуется принимать, и которые будут оказывать влияние на производительность и доступность баз данных. Природа операций ввода-вывода, кэши баз данных, соотношение операций чтения и записи и прочие детали выглядят совершенно по-разному в системах OLTP и DSS. Кроме того, ожидания в отношении показателей времени отклика между этими системами тоже отличаются. Следовательно, схема хранения, прекрасно подходящая для базы данных одного типа, может совершенно не подходить для базы данных другого типа, поэтому для выбора правильных вариантов в этой чрезвычайно важной области, на стадии физического проектирования необходимо узнать об операционных потребностях своего приложения как можно больше.
Читайте также: