Файловая система unix кратко

Обновлено: 05.07.2024

Мы рассмотрим общее понятие файловой системы в UNIX-подобных ОС. Детали реализации дисковых, сетевых и пр. файловых систем на низком уровне будут изучаться позже.

Содержание

Файловая система

В UNIX-системах играет большую роль, чем во многих остальных. Одна из частей философии UNIX — многие вещи представляются в файловой системе как специальные файлы.

В Windows NT всё — объекты, у которых есть handle'ы. В UNIX-системах пытались утверждать, что всё — файлы. У файла есть имя, из него можно читать байты, в него можно писать и пр.

Организация ФС в Unix отличается от организации ФС в DOS, Windows, где есть понятие отдельных устройств (диски C:, D:, . ) и для доступа к фалу нужно сначала указать это устройство. В UNIX-системах есть общая иерархия, устройства есть подкаталоги корневой системы. Эти идеи стали позже перенимать в NT (возможность сделать монтирование раздела куда-то в дерево).

Понятия

Сложно дать определение файлу. Приведём определение из Википедии.

Файл (file) — ресурс для хранения информации, доступный для компьютерных программ и обычно основанный на каком-то долговременном хранилище (в том смысле, что он продолжит быть доступным для других программ после того, как создавшая его программа завершит выполнение). Как правило, доступ к файлам осуществляется по имени.

Каталог (directory) — структура для организации файловой системы, которая содержит ссылки на другие файлы или каталоги.

В иерархической файловой системе (hierarchical filesystem) файлы и каталоги организуются в виде дерева. Каталог, находящийся внутри другого, называется подкаталогом (subdirectory). Каталог верхнего уровня называется корневым (root).

Ранее часто использовался термин директория (транслитерация с англ.).

Термин папка (folder) был введён для представления объектов файловой системы в графическом пользовательском интерфейсе путём аналогии с офисными папками (впервые использован в Mac System Software, потом в Windows 95). При работе в консоли принято использовать слово каталог, а не папка.

Структура

Корень иерархической файловой системы — это слеш (/). Пути в ФС разделяются слешами, и все остальные символы могут использоваться в именах файлов, кроме символа с кодом 0.

В одном каталоге не может существовать двух файлов или подкаталогов с одинаковыми именами. Каталоги с именами . (текущий каталог) и .. (родительский каталог) неявно существуют в любом каталоге, поэтому эти имена нельзя использовать для файлов. .. в корневом каталоге ведёт в него же.

Монтирование

Это процесс, с помощью которого операционная система делает доступными файлы и каталоги на устройстве хранения (таком как жесткий диск, CD-ROM или общий сетевой ресурс) пользователю через файловую систему компьютера.

Точкой монтирования называют каталог, принадлежащий дереву каталогов корневой файловой системы, которая начинается с корневого каталога. Точка монтирования используется для реализации возможности динамически присоединять/отсоединять разделы диска к файловой системе во время работы операционной системы.

Примонтировать некоторое устройство в определённое место файловой системы (на примере CD-дисковода):

При запуске команды mount без параметров выводится список смонтированных файловых систем.

Для размонтирования используется команда umount.

К монтированию имеют отношение следующие конфигурационные файлы:

  • /etc/fstab (file systems table) — то, что монтируется при загрузке системы
  • /etc/mtab (mounted file systems table) — то, что примонтировано сейчас

Современные Linux-системы используют менеджер udev для автомонтирования внешних накопителей (USB-флешек, CD/DVD и пр.). В старых дистрибутивах в начале двухтысячных его не было, нужно было вручную монтировать и размонтировать носитель, что часто неудобно.

Популярные ФС

  • Ext4. В Ubuntu Linux эта файловая система используется по умолчанию при автоматическом разбиении диска инсталлятором.
  • Ext2. Достаточно быстра для того, чтобы служить эталоном в тестах производительности файловых систем. Она не является журналируемой файловой системой и это её главный недостаток.
  • FAT16. Широко используется в картах памяти, USB-накопителях.
  • NTFS. Файловая система MS Windows. В UNIX-системах её поддержка ограниченна. Драйвер в ядре Linux умеет читать NTFS. Для записи обычно используют внешний драйвер NTFS-3G.

Большинство ФС в UNIX-системах чувствительно к регистру.

Работа с ФС

  • Название расшифровывается как change directory.
  • Это команда оболочки (sh/bash/. ), а не отдельная программа или системный вызов.
  • Без аргументов — переход в домашний каталог.
  • cd - — возврат в предыдущий каталог.
  • print working directory
  • Выводит текущий каталог (абсолютный путь)
  • Команда ls — list. Печатает в стандартный вывод содержимое каталогов.
  • По умолчанию печатает содержимое текущего каталога, но можно указать произвольный каталог в качестве аргумента.
  • ls -1 — печать по одному названию в строке.
  • ls -a — выводить записи, начинающиеся с точки (по умолчанию эти файлы и каталоги скрыты).
  • ls -t — сортировка по времени изменения, новые файлы сначала.
  • ls -l — подробный режим.

mkdir

  • make directory
  • С ключом -p не выдаёт ошибок, если каталог существует, и создаёт при необходимости промежуточные каталоги.

touch

  • Предназначена для установки времени последнего изменения файла или доступа. Также используется для создания пустых файлов.
  • Если файл не существует, утилита создает пустой файл с указанным именем.
  • Если аргумент времени не задан, используется текущее время.
  • Предназначена для копирования файлов и каталогов.
  • Ключ -R, -r, --recursive — копировать директории рекурсивно (то есть все поддиректории и все файлы в поддиректориях).

Три режима работы (режим зависит от числа аргументов и типов).

  1. Когда программа имеет два аргумента — пути к файлам, программа копирует содержимое первого файла во второй файл, создавая при необходимости второй файл.
  2. Когда программа имеет один или несколько аргументов — путей к файлам, после них аргумент — путь к каталогу, то программа копирует каждый исходный файл в целевой каталог, создавая файлы, которые не существуют.
  3. Когда аргументы программы являются путями к двум каталогам, cp копирует исходный каталог в целевой каталог, создавая любые файлы или каталоги при необходимости. Для этого режима работы требуется дополнительный флаг -r.
  • move
  • Используется для перемещения или переименования.

Примеры использования

Эта программа на поверку оказалась хорошо замаскированным rm -rf / . При попытке запуска её из аккаунта root пользователь мог поплатиться всеми данными.

Летом 2011 года похожая ситуация с rm произошла в проекте Bumblebee, представляющем собой костыль для поддержки технологии NVidia Optimus в ноутбуках с двумя видеокартами.

Файл install.sh в исходниках данного проекта вместо строки

содержал безобидную строчку

Эта строка, как нетрудно заметить, удаляет директорию /usr. Лишний пробел вызвал потерю данных.

rmdir

  • remove directory
  • Удаляет пустой каталог. Если каталог не пустой, выдаёт ошибку.
  • Существование этой команды вызвано историческими причинами.
  • Более безопасно, чем rm -r, потому что случайно нельзя удалить файлы.
  • Выводит дерево в человекочитаемом виде.
  • Во многих дистрибутивах не является стандартной программой, ставится отдельно.
  • Программа UNIX, предназначенная как для копирования, так и для конвертации файлов.
  • dataset definition (иногда в шутку расшифровывают как disk destroyer)
  • Утилита позволяет производить низкоуровневые операции на жёстких дисках. При малейшей ошибке (такой, как реверс параметров if и of) можно потерять часть данных на диске (или даже все данные).

Примеры использования

Файл, забитый случайными данными:

Загрузочный сектор с диска (MBR):

  • disk free
  • Показывает список всех файловых систем по именам устройств, сообщает их размер, занятое и свободное пространство и точки монтирования.
  • Ключ -h, --human-readable отобразит размер в человекочитаемом формате, добавив названия единиц.
  • disk usage
  • Программа для оценки занимаемого файлового пространства.
  • По умолчанию показывает размер файлового пространства, занимаемого каждым файлом и каталогом в текущем каталоге.

dirname

  • Отрезает последнюю компоненту пути и слеш. Не проверяет, что файлы существуют.
  • /usr/bin/ -> /usr
  • /usr/bin/a.out -> /usr/bin
  • abacaba -> .

basename

  • Наоборот, оставляет только последнюю компоненту.
  • /usr/bin/sort -> sort
  • Утилита поиска файлов по имени и другим свойствам.
  • По умолчанию возвращает все файлы в рабочей директории.
  • Позволяет применять пользователю определённые действия ко всем найденным файлам.
  • Для поиска файлов по содержимому следует пользоваться утилитой grep.

Поиск в текущей директории

Найти все файлы, начиная с текущей директории, название которых начинается на my.

Поиск в определенном каталоге

Найти все файлы, начиная с корневой директории, название которых начинается на my.

Поиск в директориях /usr/local/man и /opt/local/man файлов, название которых начинается на my.

Поиск по нескольким именам файлов

Найти все файлы, начиная с текущей директории, название которых начинается на my или qu. Обратите внимание, что по умолчанию все аргументы соединены с помощью логического и (опция '-a'). Если необходимо объединить несколько аргументов логическим или — используйте опцию '-o'.

Файловые менеджеры

Если неудобно работать с командной строкой, то есть файловые менеджеры. Nautilus входит в стандартную поставку GNOME. Computer является там аналогом /.

Консольная программа mc — Midnight Commander — аналог Norton Commander и FAR. Двухпанельный файловый менеджер с псевдографическим интерфейсом.

Жёсткие и символические ссылки

Жёсткие ссылки

Жёсткой ссылкой (hard link) называется структурная составляющая файла — описывающий его элемент каталога.

Файл представляет собой структуру блоков данных на диске, имеющую уникальный индексный дескриптор (или i-node) и набор атрибутов (метаинформацию). Жёсткая ссылка связывает индексный дескриптор файла с каталогом и дает ему имя.

У файла может быть несколько жёстких ссылок: в таком случае он будет фигурировать на диске одновременно в различных каталогах или под различными именами в одном каталоге. При редактировании файла через одну из ссылок на него, содержимое по другим ссылкам тоже изменится.

Hard Link Illustration.jpg

Жёсткие ссылки создаются командой ln.

Символические ссылки

Символические ссылки используются для более удобной организации структуры файлов на компьютере, так как:

  • позволяют для одного файла или каталога иметь несколько имён и различных атрибутов;
  • свободны от некоторых ограничений, присущих жёстким ссылкам (последние действуют только в пределах одной файловой системы (одного раздела) и не могут ссылаться на каталоги).

Символические ссылки создаются командой ln с ключом -s.

Ограничения

Чтобы избежать появления циклов в файловой системе и поддерживать согласованную интерпретацию понятия .. (родительский каталог), многие современные операционные системы не позволяют создавать жёсткие ссылки на каталоги. В старинной системе UNIX System V их создавать можно, но только суперпользователь имел разрешение на создание таких ссылок.

Жёсткие ссылки могут быть созданы для файлов только на том же разделе диска (томе).

Максимальное количество жёстких ссылок на один файл ограничено разрядностью счетчика ссылок. В UNIX-подобных системах счетчик обычно 32- или 54-битный, хотя в некоторых файловых системах количество жёстких ссылок ограничено более строго. Файловая система ext4 ограничивает количество жёстких ссылок на файл до 65000.

Ссылки усложняют устройство программ, которые обрабатывают деревья каталогов, в том числе архиваторы и инструменты для подсчёта использования диска, такие как du. Нужно заботиться о дублирующихся файлах в иерархии.

Команды

При простом копировании файлов через cp жёсткие и символические ссылки разыменовываются, т.е. каждая ссылка превращается в самостоятельный файл. Другого поведения можно добиться указанием специальных опций.

readlink

  • Выводит значение символической ссылки на стандартный вывод.
  • С ключом -f получает каноническое имя файла путем рекурсивного следования по всем символьным ссылкам в каждом компоненте заданного пути; все компоненты пути, кроме последнего, должны существовать.

realpath

Есть несколько нестандартных версий этой утилиты. В составе GNU она появилась в 2012 г. Она работает так же, как readlink -f.

Filesystem Hierarchy Standard

Корневой каталог в UNIX-системе может показаться свалкой. В каком-то смысле это так и есть.

Даже если посмотреть, в каких каталогах лежат исполняемые файлы программ, можно найти много мест:

  1. /bin/
  2. /sbin/
  3. /usr/bin/
  4. /usr/sbin/
  5. /usr/local/bin/
  6. /usr/local/sbin/

Стандарт

Изначально были какие-то негласные стандарты организации каталогов, они копировались из одной системы в другую. Потом было решено всё это унифицировать, чтобы везде работало.

Процесс разработки стандарта иерархии файловой системы начался в августе 1993 года с попыток упорядочить структуру каталогов и файлов в операционной системе GNU/Linux.

Документ получил название Filesystem Hierarchy Standard.

Текущая версия стандарта — 3.0, анонсирована 3 июня 2015 года.

Документ в открытом доступе, доступен для просмотра. [1]

Есть две независимые классификации файлов.

  • shareable — могут быть сохранены на одной машине и использованы на другой;
  • unshareable — не являются shareable.
  • static — программы, библиотеки, документация — то, что не меняется обычно без вмешательства администратора;
  • variable — остальные.

Корневая ФС — это то, что видит ядро до того, как примонтировать другие ФС. Зачастую это диск, находящийся в т.н. initrd. Она может быть небольшого размера, но содержать достаточный для загрузки ядра набор файлов.

Архивы

В соответствии с традициями UNIX-программирования, программа должна делать что-то одно, но делать это хорошо.

Архивация

tar tape archive) — формат битового потока или файла архива, а также название традиционной для UNIX программы для работы с такими архивами.

Первоначально программа tar использовалась для создания архивов на магнитной ленте, а в настоящее время tar используется для хранения нескольких файлов внутри одного файла, для распространения программного обеспечения, а также по прямому назначению — для создания архива файловой системы. Одним из преимуществ формата tar при создании архивов является то, что в архив записывается информация о структуре каталогов, о владельце и группе отдельных файлов, а также временны́е метки файлов.

Компрессия

gzip (сокращение от GNU Zip) — утилита сжатия и восстановления (декомпрессии) файлов, использующая алгоритм Deflate.

gzip выполняет только две функции: сжатие и распаковку одного файла; упаковка нескольких файлов в один архив невозможна. При сжатии к оригинальному расширению файла добавляется суффикс .gz.

Практические задания

Задача 1

Объяснить, где спрятаны ~11 МБ в пустом каталоге.

Задача 2

Создать иерархию каталогов одним вызовом команды.

Задача 3

Задача 4

Каким образом можно добиться такой непонятной ошибки от команды touch?

Задача 5

Скопируйте все файлы из каталога dirA в каталог dirB. Так, что файлы lorem.txt и ipsum.txt оба окажутся в dirB. Файлы, ранее лежавшие в каталоге dirB, должны быть сохранены.

Задача 6

Проверьте на практике, в чём разница между командами

  1. Случай, когда foo не существует.
  2. Случай, когда foo является файлом.
  3. Случай, когда foo является каталогом.

Задача 7

Проверьте на практике, как команда du дружит с симлинками и хардлинками.

Задача 8

Создайте цикл при помощи символических ссылок.

Попробуйте запаковать эту структуру в архив при помощи tar с ключом --dereference и получите Segmentation fault.

Как мы отмечали в разделе 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 системах.

Имена файлов ограничены 14 символами ASCII, кроме косой черты "/" и NUL - отсутствие символа. (в последующих версиях расширены до 255)

Контроль доступа к файлам и каталогам.

Имена чувствительны к регистру, my.txt и MY.TXT это разные файлы.

Используется схема i-узлов.

Не делается различий между разными файлами (текстовыми, двоичными и д.р.).

Поддерживаются символьные специальные файлы (для символьных устройств ввода-вывода).
- Если открыть файл /dev/lp и записать в него данные, то данные будут распечатаны на принтере.
- Если открыть файл /dev/tty и прочитать из него данные, то получим данные, введенные с клавиатуры.

Поддерживаются блочные специальные файлы (для блочных устройств ввода-вывода, например /dev/hd1).

Позволяет монтировать разделы в любое место дерева системы.

Расположение файловой системы UNIX

Количество дисковых блоков

Начало списка свободных блоков диска

При уничтожении суперблока, файловая система становится не читаемой.

Каждый i-узел имеет 64 байта в длину и описывает один файл (в том числе каталог).

Каталог содержит по одной записи для каждого файла.

Каталоговая запись UNIX V7 в 16 байт

Первые 10 дисковых блоков файла хранятся в самом i-узле, при блоке в 1Кбайт, файл может быть 10Кбайт.

Дополнительные блоки для i-узла, в случае больших файлов:

Одинарный косвенный блок - дополнительный блок с адресами блоков файла, если файл не сильно большой, то один из адресов в i-узле указывает на дополнительный блок с адресами. Файл может быть 266Кбайт=10Кбайт+256Кбайт (256Кбайт 3.1.1 Поиск файла

Этапы поиска файла по абсолютному пути /usr/sbin/mc

При использовании относительного пути, например sbin/mc, поиск начинается с рабочего каталога /usr.

3.1.2 Блокировка данных файла

Блокирование осуществляется по блочно.

Стандартом POSIX два типа блокировки:

Блокировка с монополизацией - больше ни один процесс эти блоки заблокировать не может.

Блокировка без монополизации - могут блокировать и другие процессы.

Блокировки данных файла без монополизации

Если процесс К попытается блокировать блок 6 с монополизацией, то сам процесс будет заблокирован до разблокирования блока 6 всеми процессами.

3.1.3 Создание и работа с файлом

fd=creat("abc", mode) - Пример создания файла abc с режимом защиты, указанном в переменной mode (какие пользователи имеют доступ). Используется системный вызов creat.

Успешный вызов возвращает целое число fd - дескриптор файла.

Который хранится в таблице дескрипторов файла, открывшего процесса.

После этого можно работать с файлом, используя системные вызовы write и read.

n=read(fd, buffer, nbytes)

n=write(fd, buffer, nbytes)

У обоих вызовов всего по три параметра:

fd - дескриптор файла, указывающий на открытый файл

buffer - адрес буфера, куда писать или откуда читать данные

nbytes - счетчик байтов, сколько прочитать или записать байт

Теперь нужно по дескриптору получить указатель на i-узел и указатель на позицию в файле для записи или чтения.

Таблица открытых файлов - создана для хранения указателей на i-узел и на позицию в файле. И позволяет родительскому и дочернему процессам совместно использовать один указатель в файле, но для посторонних процессов выделять отдельные указатели.

Связь между таблицей дескрипторов файлов, таблицей открытых файлов и таблицей i-узлов.

3.2 Файловая система BSD

Основу составляет классическая файловая система UNIX.

Особенности (отличие от предыдущей системы):

Увеличена длина имени файла до 255 символов

Было добавлено кэширование имен файлов, для увеличения производительности.

Применено разбиение диска на группы цилиндров, чтобы i-узлы и блоки данных были поближе друг к другу, для каждой группы были свои:
- суперблок
- i-узлы
- блоки данных.
Это сделано для уменьшения перемещений галовок.

Используются блоки двух размеров, для больших файлов использовались большие блоки, для маленьких маленькие.

Каталоговые записи ни как не отсортированы и следуют друг за другом.

Каталог BSD с тремя каталоговыми записями для трех файлов и тот же каталог после удаления файла zip, увеличивается длина первой записи.

3.3 Файловые системы LINUX

Изначально использовалась файловая система MINIX с ограничениями: 14 символов для имени файла и размер файла 64 Мбайта.

После была создана файловая система EXT с расширением: 255 символов для имени файла и размер файла 2Гбайта.

Система была достаточно медленной.

3.3.1 Файловая система EXT2

Эта файловая система стала основой для LINUX, она очень похожа BSD систему.

Вместо групп цилиндров используются группы блоков.

Размещение файловой системы EXT2 на диске

Размер блока 1 Кбайт

Размер каждого i-узла 128 байт.

i-узел содержит 12 прямых и 3 косвенных адресов, длина адреса в i-узле стала 4 байта, что обеспечивает поддержку размера файла чуть более 16Гбайт.

Особенности работы файловой системы:

Создание новых каталогов распределяется равномерно по группам блоков, чтобы в каждой группе было одинаковое количество каталогов.

Новые файлы старается создавать в группе, где и находится каталог.

При увеличении файла система старается новые блоки записывать ближе к старым.

Благодаря этому файловую систему не нужно дефрагментировать, она не способствует фрагментации файлов (в отличии от NTFS), что проверено многолетним использованием.

3.3.2 Файловая система EXT3

В отличие от EXT2, EXT3 является журналируемой файловой системой, т.е. не попадет в противоречивое состояние после сбоев. Но она полностью совместима с EXT2.

Разработанная в Red Hat

В данный момент является основной для LINUX.

Драйвер Ext3 хранит полные точные копии модифицируемых блоков (1КБ, 2КБ или 4КБ) в памяти до завершения операции. Это может показаться расточительным. Полные блоки содержат не только изменившиеся данные, но и не модифицированные.

Такой подход называется "физическим журналированием", что отражает использование "физических блоков" как основную единицу ведения журнала. Подход, когда хранятся только изменяемые байты, а не целые блоки, называется "логическим журналированием" (используется XFS). Поскольку ext3 использует "физическое журналирование", журнал в ext3 имеет размер больший, чем в XFS. За счет использования в ext3 полных блоков, как драйвером, так и подсистемой журналирования нет сложностей, которые возникают при "логическом журналировании".

Типы журналирования поддерживаемые Ext3, которые могут быть активированы из файла /etc/fstab:

data=journal (full data journaling mode) - все новые данные сначала пишутся в журнал и только после этого переносятся на свое постоянное место. В случае аварийного отказа журнал можно повторно перечитать, приведя данные и метаданные в непротиворечивое состояние.
Самый медленный, но самый надежный.

data=ordered - записываются изменения только мета-данных файловой системы, но логически metadata и data блоки группируются в единый модуль, называемый transaction. Перед записью новых метаданных на диск, связанные data блоки записываются первыми. Этот режим журналирования ext3 установлен по умолчанию.
При добавлении данных в конец файла режим data=ordered гарантированно обеспечивает целостность (как при full data journaling mode). Однако если данные в файл пишутся поверх существующих, то есть вероятность перемешивания "оригинальных" блоков с модифицированными. Это результат того, что data=ordered не отслеживает записи, при которых новый блок ложится поверх существующего и не вызывает модификации метаданных.

data=writeback (metadata only) - записываются только изменения мета-данных файловой системы. Самый быстрый метод журналирования. С подобным видом журналирования вы имеете дело в файловых системах XFS, JFS и ReiserFS.

3.3.3 Файловая система XFS

XFS - журналируемая файловая система разработанная Silicon Graphics, но сейчас выпущенная открытым кодом (open source).

XFS была создана в начале 90ых (1992-1993) фирмой Silicon Grapgics (сейчас SGI) для мультимедийных компьютеров с ОС Irix. Файловая система была ориентирована на очень большие файлы и файловые системы. Особенностью этой файловой системы является устройство журнала - в журнал пишется часть метаданных самой файловой системы таким образом, что весь процесс восстановления сводится к копированию этих данных из журнала в файловую систему. Размер журнала задается при создании системы, он должен быть не меньше 32 мегабайт; а больше и не надо - такое количество незакрытых транзакций тяжело получить.

Более эффективно работает с большими файлами.

Имеет возможность выноса журнала на другой диск, для повышения производительности.

Сохраняет данные кэша только при переполнении памяти, а не периодически как остальные.

В журнал записываются только мета-данные.

Используются B+ trees.

Используется логическое журналирование

3.3.4 Файловая система RFS

RFS (RaiserFS) - журналируемая файловая система разработанная Namesys.

Официальная информация на RaiserFS

Более эффективно работает с большим количеством мелких файлов, в плане производительности и эффективности использования дискового пространства.

Использует специально оптимизированные b* balanced tree (усовершенствованная версия B+ дерева)

Динамически ассигнует i-узлы вместо их статического набора, образующегося при создании "традиционной" файловой системы.

Динамические размеры блоков.

3.3.4 Файловая система JFS

JFS (Journaled File System) - журналируемая файловая система разработанная IBM для ОС AIX, но сейчас выпущенная как открытый код.

Журналы JFS соответствуют классической модели транзакций, принятой в базах данных

В журнал записываются только мета-данные

Размер журнала не больше 32 мегабайт.

Асинхронный режим записи в журнал - производится в моменты уменьшения трафика ввода/вывода

Файловая система — это логическая коллекция файлов на разделе или диске. Раздел представляет собой контейнер для информации и при желании может охватывать весь жесткий диск.

Ваш жесткий диск может иметь различные разделы, которые обычно содержат только одну файловую систему, например, одну файловую систему, в которой находится файловая система /, или другую, содержащую файловую систему / home .

Одна файловая система на раздел позволяет логически обслуживать и управлять различными файловыми системами.

Все в Unix считается файлом, включая физические устройства, такие как DVD-диски, USB-устройства и дисководы.

Структура каталогов

Unix использует иерархическую структуру файловой системы, очень похожую на перевернутое дерево, с корнем (/) в основе файловой системы и всеми остальными каталогами, распространяющимися оттуда.

Файловая система Unix — это набор файлов и каталогов, который имеет следующие свойства:

У него есть корневой каталог ( / ), который содержит другие файлы и каталоги.

Каждый файл или каталог уникально идентифицируется по его имени, каталогу, в котором он находится, и уникальному идентификатору, обычно называемому inode .

По соглашению, корневой каталог имеет номер инода 2, а потерянный каталог & plus; found имеет номер инода 3 . Номера узлов 0 и 1 не используются. Номера файловых индексов можно увидеть, указав опцию -i в команде ls .

Это автономно. Нет никаких зависимостей между одной файловой системой и другой.

У него есть корневой каталог ( / ), который содержит другие файлы и каталоги.

Каждый файл или каталог уникально идентифицируется по его имени, каталогу, в котором он находится, и уникальному идентификатору, обычно называемому inode .

По соглашению, корневой каталог имеет номер инода 2, а потерянный каталог & plus; found имеет номер инода 3 . Номера узлов 0 и 1 не используются. Номера файловых индексов можно увидеть, указав опцию -i в команде ls .

Это автономно. Нет никаких зависимостей между одной файловой системой и другой.

Каталоги имеют конкретные цели и, как правило, содержат одинаковые типы информации для удобного поиска файлов. Ниже приведены каталоги, которые существуют в основных версиях Unix —

Это корневой каталог, который должен содержать только каталоги, необходимые на верхнем уровне структуры файла.

Здесь находятся исполняемые файлы. Эти файлы доступны всем пользователям

Это драйверы устройств

Содержит файлы общей библиотеки и иногда другие файлы, связанные с ядром

Содержит файлы для загрузки системы

Содержит домашний каталог для пользователей и других учетных записей

Используется для монтирования других временных файловых систем, таких как cdrom и floppy для дисковода CD-ROM и дисковода гибких дисков , соответственно

Содержит все процессы, отмеченные как файл номером процесса или другой информацией, которая является динамической для системы

Содержит временные файлы, используемые между загрузками системы

Используется для разных целей и может использоваться многими пользователями. Включает административные команды, общие файлы, библиотечные файлы и другие

Обычно содержит файлы переменной длины, такие как файлы журнала и печати, а также файлы любого другого типа, которые могут содержать переменное количество данных

Содержит двоичные (исполняемые) файлы, обычно для системного администрирования. Например, fdisk и ifconfig utlities

Содержит файлы ядра

Это корневой каталог, который должен содержать только каталоги, необходимые на верхнем уровне структуры файла.

Здесь находятся исполняемые файлы. Эти файлы доступны всем пользователям

Это драйверы устройств

Содержит файлы общей библиотеки и иногда другие файлы, связанные с ядром

Содержит файлы для загрузки системы

Содержит домашний каталог для пользователей и других учетных записей

Используется для монтирования других временных файловых систем, таких как cdrom и floppy для дисковода CD-ROM и дисковода гибких дисков , соответственно

Содержит все процессы, отмеченные как файл номером процесса или другой информацией, которая является динамической для системы

Содержит временные файлы, используемые между загрузками системы

Используется для разных целей и может использоваться многими пользователями. Включает административные команды, общие файлы, библиотечные файлы и другие

Обычно содержит файлы переменной длины, такие как файлы журнала и печати, а также файлы любого другого типа, которые могут содержать переменное количество данных

Содержит двоичные (исполняемые) файлы, обычно для системного администрирования. Например, fdisk и ifconfig utlities

Содержит файлы ядра

Навигация по файловой системе

Теперь, когда вы понимаете основы файловой системы, вы можете перейти к нужным файлам. Следующие команды используются для навигации по системе —

имя файла кошки

Отображает имя файла

Перемещает вас в указанный каталог

cp file1 file2

Копирует один файл / каталог в указанное место

Определяет тип файла (двоичный, текстовый и т. Д.)

найти имя файла dir

Находит файл / каталог

имя файла заголовка

Показывает начало файла

меньше имени файла

Просматривает файл с конца или с начала

Показывает содержимое указанного каталога

mkdir dirname

Создает указанный каталог

больше имени файла

Просматривает файл от начала до конца

mv file1 file2

Перемещает местоположение или переименовывает файл / каталог

Показывает текущий каталог, в котором находится пользователь

рм имя файла

rmdir dirname

хвостовое имя файла

Показывает конец файла

коснитесь имени файла

Создает пустой файл или изменяет существующий файл или его атрибуты

где имя файла

Показывает расположение файла

какое имя файла

Показывает местоположение файла, если он находится в вашем PATH

имя файла кошки

Отображает имя файла

Перемещает вас в указанный каталог

cp file1 file2

Копирует один файл / каталог в указанное место

Определяет тип файла (двоичный, текстовый и т. Д.)

найти имя файла dir

Находит файл / каталог

имя файла заголовка

Показывает начало файла

меньше имени файла

Просматривает файл с конца или с начала

Показывает содержимое указанного каталога

mkdir dirname

Создает указанный каталог

больше имени файла

Просматривает файл от начала до конца

mv file1 file2

Перемещает местоположение или переименовывает файл / каталог

Показывает текущий каталог, в котором находится пользователь

рм имя файла

rmdir dirname

хвостовое имя файла

Показывает конец файла

коснитесь имени файла

Создает пустой файл или изменяет существующий файл или его атрибуты

где имя файла

Показывает расположение файла

какое имя файла

Показывает местоположение файла, если он находится в вашем PATH

Вы можете использовать справку Manpage, чтобы проверить полный синтаксис для каждой команды, упомянутой здесь.

Команда df

Первый способ управления пространством разделов — команда df (без диска) . Команда df -k (без диска) отображает использование дискового пространства в килобайтах , как показано ниже —

Некоторые каталоги, такие как / devices , показывают 0 в килобайтах, столбцы используемых и доступных, а также 0% для емкости. Это специальные (или виртуальные) файловые системы, и хотя они находятся на диске в каталоге /, сами по себе они не занимают места на диске.

Вывод df -k обычно одинаков во всех системах Unix. Вот что обычно включает в себя:

Файловая система

Имя физической файловой системы

Всего килобайт свободного места на носителе

используемый

Всего килобайт использованного пространства (по файлам)

Всего килобайт, доступных для использования

вместимость

Процент общего пространства, используемого файлами

Прикреплено к

На что монтируется файловая система

Файловая система

Имя физической файловой системы

Всего килобайт свободного места на носителе

используемый

Всего килобайт использованного пространства (по файлам)

Всего килобайт, доступных для использования

вместимость

Процент общего пространства, используемого файлами

Прикреплено к

На что монтируется файловая система

Вы можете использовать опцию -h (удобочитаемый для человека), чтобы отобразить вывод в формате, который показывает размер в более простой для понимания записи.

Du Command

Команда du (использование диска) позволяет указать каталоги, чтобы показать использование дискового пространства в определенном каталоге.

Эта команда полезна, если вы хотите определить, сколько места занимает конкретный каталог. Следующая команда отображает количество блоков, используемых каждым каталогом. Один блок может занять 512 байт или 1 килобайт в зависимости от вашей системы.

Опция -h облегчает понимание вывода —

Монтирование файловой системы

Файловая система должна быть смонтирована, чтобы ее можно было использовать в системе. Чтобы увидеть, что в настоящий момент смонтировано (доступно для использования) в вашей системе, используйте следующую команду:

Каталог / mnt , в соответствии с соглашением Unix, — это место, где находятся временные монтирования (такие как дисководы CDROM, удаленные сетевые диски и дисководы гибких дисков). Если вам нужно смонтировать файловую систему, вы можете использовать команду mount со следующим синтаксисом:

Например, если вы хотите смонтировать компакт-диск в каталог / mnt / cdrom , вы можете набрать —

Это предполагает, что ваше устройство CD-ROM называется / dev / cdrom и вы хотите смонтировать его в / mnt / cdrom . Обратитесь к странице руководства по монтированию для получения более подробной информации или введите в командной строке mount -h для получения справочной информации.

После монтирования вы можете использовать команду cd для навигации по новой доступной файловой системе через точку монтирования, которую вы только что сделали.

Размонтирование файловой системы

Чтобы размонтировать (удалить) файловую систему из вашей системы, используйте команду umount , указав точку монтирования или устройство.

Например, чтобы размонтировать cdrom , используйте следующую команду —

Команда mount позволяет вам получить доступ к вашим файловым системам, но в большинстве современных систем Unix функция автомонтирования делает этот процесс невидимым для пользователя и не требует вмешательства.

Квоты пользователей и групп

Квоты пользователей и групп предоставляют механизмы, с помощью которых объем пространства, используемого одним пользователем или всеми пользователями в конкретной группе, может быть ограничен значением, определенным администратором.

Квоты действуют в пределах двух пределов, которые позволяют пользователю предпринимать некоторые действия, если объем пространства или количество дисковых блоков начинают превышать установленные администратором ограничения —

Мягкий лимит — если пользователь превышает установленный лимит, существует льготный период, который позволяет ему освободить некоторое пространство.

Жесткий лимит — Когда жесткий лимит достигнут, независимо от льготного периода, дальнейшие файлы или блоки не могут быть выделены.

Мягкий лимит — если пользователь превышает установленный лимит, существует льготный период, который позволяет ему освободить некоторое пространство.

Жесткий лимит — Когда жесткий лимит достигнут, независимо от льготного периода, дальнейшие файлы или блоки не могут быть выделены.

Существует несколько команд для управления квотами:

Отображает использование диска и ограничения для пользователя группы

Это редактор квот. С помощью этой команды можно редактировать квоты пользователей или групп.

Сканирует файловую систему на использование диска, создает, проверяет и восстанавливает файлы квот

Это редактор квот командной строки

Это сообщает системе, что дисковые квоты должны быть включены в одной или нескольких файловых системах.

Это сообщает системе, что дисковые квоты должны быть отключены для одной или нескольких файловых систем.

Это печатает сводную информацию об использовании диска и квотах для указанных файловых систем.

Отображает использование диска и ограничения для пользователя группы

Это редактор квот. С помощью этой команды можно редактировать квоты пользователей или групп.

Сканирует файловую систему на использование диска, создает, проверяет и восстанавливает файлы квот

Это редактор квот командной строки

Это сообщает системе, что дисковые квоты должны быть включены в одной или нескольких файловых системах.

Это сообщает системе, что дисковые квоты должны быть отключены для одной или нескольких файловых систем.

Это печатает сводную информацию об использовании диска и квотах для указанных файловых систем.

Вы можете использовать справку Manpage, чтобы проверить полный синтаксис для каждой команды, упомянутой здесь.

Читайте также: