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

Обновлено: 04.07.2024

Вообще говоря, в PHP не существует функции, предназначенной именно для создания файлов. Большинство функций работают с уже существующими файлами в файловой системе сервера . Есть несколько функций, которые позволяют создавать временные файлы, или, что то же самое, файлы с уникальным для текущей директории именем. А вот для того, чтобы создать самый обычный файл, нужно воспользоваться функцией, которая открывает локальный или удаленный файл. Называется эта функция fopen () . Что значит "открывает файл"? Это значит, что fopen связывает данный файл с потоком управления программы. Причем связывание бывает различным в зависимости от того, что мы хотим делать с этим файлом: читать его, записывать в него данные или делать и то и другое. Синтаксис этой функции такой:

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

Параметр use_include_path , установленный в значение 1 или TRUE, заставляет интерпретатор искать указанный в fopen () файл в include_path . Напомним, что include_path - это директива из файла настроек PHP, задающая список директорий, в которых могут находиться файлы для включения. Кроме функции fopen () она используется функциями include() и require() .

Параметр тип_доступа может принимать одно из следующих значений (см. таб. 9.1).

Итак, чтобы создать файл, нужно, как бы нелепо это ни звучало, открыть несуществующий файл на запись.

Создавая файл, нужно учитывать, под какой операционной системой вы работаете, и под какой ОС предположительно этот файл будет читаться. Дело в том, что разные операционные системы по-разному отмечают конец строки. В Unix-подобных ОС конец строки обозначается \n , в системах типа Windows - \r\n . Windows предлагает специальный флаг t для перевода символов конца строки систем типа Unix в свои символы конца строки . В противоположность этому существует флаг b , используемый чаще всего для бинарных файлов , благодаря которому такой трансляции не происходит. Использовать эти флаги можно, просто дописав их после последнего символа выбранного типа доступа к файлу. Например, открывая файл на чтение, вместо r следует использовать rt , чтобы перекодировать все символы конца строки в \r\n . Если не использовать флаг b при открытии бинарных файлов , то могут появляться ошибки, связанные с изменением содержимого файла. Из соображений переносимости программы на различные платформы рекомендуется всегда использовать флаг b при открытии файлов с помощью fopen () .

Что происходит, если открыть или создать файл с помощью fopen не удается? В этом случае PHP генерирует предупреждение, а функция fopen возвращает как результат своей работы значение false . Такого рода предупреждения можно "подавить" (запретить) с помощью символа @ .

Например, такая команда не выведет предупреждения, даже если открыть файл не удалось:

Таким образом, функция fopen () позволяет создать только лишь пустой файл и сделать его доступным для записи . Как же записать данные в этот файл? Как прочитать данные из уже существующего файла?

Прежде чем ответить на эти вопросы, рассмотрим, как закрыть установленное с помощью fopen () соединение.

Закрытие соединения с файлом

После выполнения необходимых действий с файлом, будь то чтение или запись данных или что-либо другое, соединение, установленное с этим файлом функцией fopen () , нужно закрыть. Для этого используют функцию fclose() . Синтаксис у нее следующий:

Эта функция возвращает TRUE , если соединение успешно закрыто , и FALSE - в противном случае. Параметр этой функции должен указывать на файл, успешно открытый, например, с помощью функции fopen () .

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

Запись данных в файл

Функция fwrite

Для того чтобы записать данные в файл , доступ к которому открыт функцией fopen () , можно использовать функцию fwrite() . Синтаксис у нее следующий:

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

В результате своей работы функция fwrite() возвращает число записанных байтов или false , в случае ошибки.

Пример 9.3. Пусть в нашей рабочей директории нет файла my_file.html . Создадим его и запишем в него строку текста:

Если же мы напишем такой скрипт:

то к строке, уже существующей в файле my_file.html , добавится еще семь символов из строки, содержащейся в переменной $add_text , т.е. слово "Добавим"

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

Далее мы рассмотрим, какие методы чтения данных из файла предлагает язык PHP.

Чтение данных из файла

Если мы хотим прочитать данные из существующего файла, одной функции fopen () , как и в случае с записью данных , недостаточно. Она лишь возвращает указатель на открытый файл, но не считывает ни одной строки из этого файла. Поэтому для того, чтобы прочитать данные из файла, нужно воспользоваться одной из специальных функций: file, readfile , file_get_contents , fread , fgets и т.п.

Функция fread

Эта функция осуществляет чтение данных из файла . Ее можно использовать и для чтения данных из бинарных файлов , не опасаясь их повреждения. Синтаксис fread () такой:

При вызове этой функции происходит чтение данных длины (в байтах), определенной параметром длина, из файла, на который указывает указатель на файл. Параметр указатель на файл должен быть реально существующей переменной типа ресурс, содержащей в себе связь с файлом, открытую, например, с помощью функции fopen () . Чтение данных происходит до тех пор, пока не встретится конец файла или пока не будет прочитано указанное параметром длина число байтов.

В результате работы функция fread () возвращает строку со считанной из файла информацией.

Как вы заметили, в этой функции параметр длина - обязательный. Следовательно, если мы хотим считать весь файл в строку, нужно знать его длину. PHP может самостоятельно вычислить длину указанного файла. Для этого нужно воспользоваться функцией filesize(имя файла) . В случае ошибки эта функция вернет false . К сожалению, ее можно использовать только для получения размера локальных файлов .

Пример 9.4. Прочитаем содержимое файла my_file.html

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

Функция filesize() кэширует результаты своей работы. Если изменить содержимое файла my_file.html и снова запустить приведенный выше скрипт, то результат его работы не изменится. Более того, если запустить скрипт, считывающийданные из этого файла с помощью другой функции (например, fgets ), то результат может оказаться таким, как если бы файл не изменился. Чтобы этого избежать, нужно очистить статический кэш, добавив в код программы команду clearstatcache() ;

Функция fgets

С помощью функции fgets() можно считать из файла строку текста. Синтаксис этой функции практически такой же, как и у fread () , за исключением того, что длину считываемой строки указывать необязательно:

В результате работы функция fgets() возвращает строку длиной ( длина-1 ) байт из файла, на который указывает указатель на файл . Чтение заканчивается, если прочитано ( длина-1 ) символов или встретился символ перевода строки или конец файла. Напомним, что в PHP один символ - это один байт. Если длина считываемой строки не указана (данная возможность появилась начиная с PHP 4.2.0), то считывается 1 Кбайт (1024 байт) текста или, что то же самое, 1024 символа. Начиная с версии PHP 4.3, если параметр длина не задан, считывается строка целиком. В случае ошибки функция fgets() возвращает false . Для версий PHP начиная с 4.3 эта функция безопасна для двоичных файлов.

Обе функции, fread () и fgets() , прекращают считывание данных из файла, если встречают конец файла. В PHP есть специальная функция, проверяющая, смотрит ли указатель позиции файла на конец файла. Это булева функция feof() , в качестве параметра которой передается указатель на соединение с файлом.

Например, вот так можно считать все строки файла my_file.html :

Функция fgetss

Существует разновидность функции fgets() - функция fgetss() . Она тоже позволяет считывать строку из указанного файла, но при этом удаляет из него все встретившиеся html-теги, за исключением, быть может, некоторых. Синтаксис fgetss() такой:

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

Пример 9.6. Пусть у нас имеется файл my_file.html следующего содержания:

Выведем на экран все строки файла my_file.html , удалив из них все теги, кроме <b> и <i>:

В результате работы этого скрипта получим:

Эта функция возвращает символ из файла, на который ссылается указатель на файл, и значение, вычисляемое как FALSE , если встречен конец строки.

Вот так, например, можно считать файл по одному символу:

На самом деле для того чтобы прочитать содержимое файла, открывать соединение с ним посредством функции fopen () совсем не обязательно. В PHP есть функции, которые позволяют делать это, используя лишь имя файла. Это функции readfile ( ), file( ) и file_get_contents ( ) . Рассмотрим каждую из них подробнее.

Функция readfile

Функция readfile () считывает файл, имя которого передано ей в качестве параметра имя_файла, и выводит его содержимое на экран. Если дополнительный аргумент use_include_path имеет значение TRUE , то поиск файла с заданным именем производится и по директориям, входящим в include_path .

С помощью функции readfile () можно читать содержимое удаленных файлов, указывая их URL-адрес в качестве имени файла, если эта опция не отключена в настройках сервера .

Сразу же выводить содержимое файла на экран не всегда удобно. Порой нужно записать информацию из файла в переменную, чтобы в дальнейшем произвести с ней какие-либо действия. Для этого можно использовать функцию file() или file_get_contents () .

Функция file

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

Что за массив возвращает эта функция? Каждый элемент данного массива является строкой в файле, информацию из которого мы считываем (его имя задано аргументом имя_файла ). Символ новой строки тоже включается в каждый из элементов массива. В случае ошибки функция file() , как и все уже рассмотренные, возвращает false . Дополнительный аргумент use_include_path опять же определяет, искать или нет данный файл в директориях include_path . Открывать удаленные файлы с помощью этой функции тоже можно, если не запрещено сервером. Начиная с PHP 4.3 работа с бинарными файлами посредством этой функции стала безопасной.

Типы файловых систем

Рядовому пользователю компьютерных электронных устройств редко, но приходится сталкиваться с таким понятием, как «выбор файловой системы». Чаще всего это происходит при необходимости форматирования внешних накопителей (флешек, microSD), установке операционных систем, восстановлении данных на проблемных носителях, в том числе жестких дисках. Пользователям Windows предлагается выбрать тип файловой системы, FAT32 или NTFS, и способ форматирования (быстрое/глубокое). Дополнительно можно установить размер кластера. При использовании ОС Linux и macOS названия файловых систем могут отличаться.

Возникает логичный вопрос: что такое файловая система и в чем ее предназначение? В данной статье дадим ответы на основные вопросы касательно наиболее распространенных ФС.

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

Обычно вся информация записывается, хранится и обрабатывается на различных цифровых носителях в виде файлов. Далее, в зависимости от типа файла, кодируется в виде знакомых расширений – *exe, *doc, *pdf и т.д., происходит их открытие и обработка в соответствующем программном обеспечении. Мало кто задумывается, каким образом происходит хранение и обработка цифрового массива в целом на соответствующем носителе.

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

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

Файловая система связывает носитель информации (хранилище) с прикладным программным обеспечением, организуя доступ к конкретным файлам при помощи функционала взаимодействия программ A PI. Программа, при обращении к файлу, располагает данными только о его имени, размере и атрибутах. Всю остальную информацию, касающуюся типа носителя, на котором записан файл, и структуры хранения данных, она получает от драйвера файловой системы.

На физическом уровне драйверы ФС оптимизируют запись и считывание отдельных частей файлов для ускоренной обработки запросов, фрагментации и «склеивания» хранящейся в ячейках информации. Данный алгоритм получил распространение в большинстве популярных файловых систем на концептуальном уровне в виде иерархической структуры представления метаданных (B-trees). Технология снижает количество самых длительных дисковых операций – позиционирования головок при чтении произвольных блоков. Это позволяет не только ускорить обработку запросов, но и продлить срок службы HDD. В случае с твердотельными накопителями, где принцип записи, хранения и считывания информации отличается от применяемого в жестких дисках, ситуация с выбором оптимальной файловой системы имеет свои нюансы.

Основные функции файловых систем

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

Основными функциями файловой системы являются:

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

VDS Timeweb арендовать

Задачи файловой системы

Функционал файловой системы нацелен на решение следующих задач:

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

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

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

Операционные системы и типы файловых систем

Существует три основных вида операционных систем, используемых для управления любыми информационными устройствами: Windows компании Microsoft, macOS разработки Apple и операционные системы с открытым исходным кодом на базе Linux. Все они, для взаимодействия с физическими носителями, используют различные типы файловых систем, многие из которых дружат только со «своей» операционкой. В большинстве случаев они являются предустановленными, рядовые пользователи редко создают новые дисковые разделы и еще реже задумываются об их настройках.

В случае с Windows все выглядит достаточно просто: NTFS на всех дисковых разделах и FAT32 (или NTFS) на флешках. Если установлен NAS (сервер для хранения данных на файловом уровне), и в нем используется какая-то другая файловая система, то практически никто не обращает на это внимания. К нему просто подключаются по сети и качают файлы.

На мобильных гаджетах с ОС Android чаще всего установлена ФС версии ext4 во внутренней памяти и FAT32 на карточках microSD. Владельцы продукции Apple зачастую вообще не имеют представления, какая файловая система используется на их устройствах – HFS+, HFSX, APFS, WTFS или другая. Для них существуют лишь красивые значки папок и файлов в графическом интерфейсе.

Более богатый выбор у линуксоидов. Но здесь настройка и использование определенного типа файловой системы требует хотя бы минимальных навыков программирования. Тем более, мало кто задумывается, можно ли использовать в определенной ОС «неродную» файловую систему. И зачем вообще это нужно.

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

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

Исходный код файловой системы, получившей название FAT, был разработан по личной договоренности владельца Microsoft Билла Гейтса с первым наемным сотрудником компании Марком Макдональдом в 1977 году. Основной задачей FAT была работа с данными в операционной системе Microsoft 8080/Z80 на базе платформы MDOS/MIDAS. Файловая система FAT претерпела несколько модификаций – FAT12, FAT16 и, наконец, FAT32, которая используется сейчас в большинстве внешних накопителей. Основным отличием каждой версии является преодоление ограниченного объема доступной для хранения информации. В дальнейшем были разработаны еще две более совершенные системы обработки и хранения данных – NTFS и ReFS.

FAT (таблица распределения файлов)

Числа в FAT12, FAT16 и FAT32 обозначают количество бит, используемых для перечисления блока файловой системы. FAT32 является фактическим стандартом и устанавливается на большинстве видов сменных носителей по умолчанию. Одной из особенностей этой версии ФС является возможность применения не только на современных моделях компьютеров, но и в устаревших устройствах и консолях, снабженных разъемом USB.

Пространство FAT32 логически разделено на три сопредельные области:

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

К недостатком стандарта FAT32 относится ограничение размера файлов на диске до 4 Гб и всего раздела в пределах 8 Тб. По этой причине данная файловая система чаще всего используется в USB-накопителях и других внешних носителях информации. Для установки последней версии ОС Microsoft Windows 10 на внутреннем носителе потребуется более продвинутая файловая система.

С целью устранения ограничений, присущих FAT32, корпорация Microsoft разработала обновленную версию файловой системы exFAT (расширенная таблица размещения файлов). Новая ФС очень схожа со своим предшественником, но позволяет пользователям хранить файлы намного большего размера, чем четыре гигабайта. В exFAT значительно снижено число перезаписей секторов, ответственных за непосредственное хранение информации. Функция очень важна для твердотельных накопителей ввиду необратимого изнашивания ячеек после определенного количества операций записи. Продукт exFAT совместим с операционными системами Mac, Android и Windows. Для Linux понадобится вспомогательное программное обеспечение.

NTFS (файловая система новой технологии)

Стандарт NTFS разработан с целью устранения недостатков, присущих более ранним версиям ФС. Впервые он был реализован в Windows NT в 1995 году, и в настоящее время является основной файловой системой для Windows. Система NTFS расширила допустимый предел размера файлов до шестнадцати гигабайт, поддерживает разделы диска до 16 Эб (эксабайт, 10 18 байт ). Использование системы шифрования Encryption File System (метод «прозрачного шифрования») осуществляет разграничение доступа к данным для различных пользователей, предотвращает несанкционированный доступ к содержимому файла. Файловая система позволяет использовать расширенные имена файлов, включая поддержку многоязычности в стандарте юникода UTF, в том числе в формате кириллицы. Встроенное приложение проверки жесткого диска или внешнего накопителя на ошибки файловой системы chkdsk повышает надежность работы харда, но отрицательно влияет на производительность.

ReFS (Resilient File System)

Последняя разработка Microsoft, доступная для серверов Windows 8 и 10. Архитектура файловой системы в основном организована в виде B + -tree. Файловая система ReFS обладает высокой отказоустойчивостью благодаря реализации новых функций:

  • Copy-on-Write (CoW) – никакие метаданные не изменяются без копирования;
  • данные записываются на новое дисковое пространство, а не поверх существующих файлов;
  • при модификации метаданных новая копия хранится в свободном дисковом пространстве, затем система создает ссылку из старых метаданных на новую версию.

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

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

Для операционной системы macOS компания Apple использует собственные разработки файловых систем:

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

  1. HFS+, которая является усовершенствованной версией HFS, ранее применяемой на компьютерах Macintosh, и ее более соверешенный аналог APFS. Стандарт HFS+ используется во всех устройствах под управлением продуктов Apple, включая компьютеры Mac, iPod, а также Apple X Server.
  2. Кластерная файловая система Apple Xsan, созданная из файловых систем StorNext и CentraVision, используется в расширенных серверных продуктах. Эта файловая система хранит файлы и папки, информацию Finder о просмотре каталогов, положениях окна и т.д.

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

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

Файловая система Линукс

Основные файловые системы, используемые в дистрибутивах Linux:

Ext2, Ext3, Ext4 или Extended Filesystem – стандартная файловая система, первоначально разработанная еще для Minix. Содержит максимальное количество функций и является наиболее стабильной в связи с редкими изменениями кодовой базы. Начиная с ext3 в системе используется функция журналирования. Сегодня версия ext4 присутствует во всех дистрибутивах Linux.

JFS или Journaled File System разработана в IBM в качестве альтернативы для файловых систем ext. Сейчас она используется там, где необходима высокая стабильность и минимальное потребление ресурсов (в первую очередь в многопроцессорных компьютерах). В журнале хранятся только метаданные, что позволяет восстанавливать старые версии файлов после сбоев.

ReiserFS также разработана в качестве альтернативы ext3, поддерживает только Linux. Динамический размер блока позволяет упаковывать несколько небольших файлов в один блок, что предотвращает фрагментацию и улучшает работу с небольшими файлами. Недостатком является риск потери данных при отключении энергии.

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

Btrfs или B-Tree File System легко администрируется, обладает высокой отказоустойчивостью и производительностью. Используется как файловая система по умолчанию в OpenSUSE и SUSE Linux.

Другие ФС, такие как NTFS, FAT, HFS, могут использоваться в Linux, но корневая файловая система на них не устанавливается, поскольку они для этого не предназначены.

Дополнительные файловые системы

В операционных системах семейства Unix BSD (созданы на базе Linux) и Sun Solaris чаще всего используются различные версии ФС UFS (Unix File System), известной также под названием FFS (Fast File System). В современных компьютерных технологиях данные файловые системы могут быть заменены на альтернативные: ZFS для Solaris, JFS и ее производные для Unix.

Кластерные файловые системы включают поддержку распределенных хранилищ, расширяемость и модульность. К ним относятся:

  • ZFS – «Zettabyte File System» разработана для распределенных хранилищ Sun Solaris OS;
  • Apple Xsan – эволюция компании Apple в CentraVision и более поздних разработках StorNext;
  • VMFS (Файловая система виртуальных машин) разработана компанией VMware для VMware ESX Server;
  • GFS – Red Hat Linux именуется как «глобальная файловая система» для Linux;
  • JFS1 – оригинальный (устаревший) дизайн файловой системы IBM JFS, используемой в старых системах хранения AIX.

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

Владельцы мобильных гаджетов для хранения большого объема информации используют дополнительные твердотельные накопители microSD (HC), по умолчанию отформатированные в стандарте FAT32. Это является основным препятствием для установки на них приложений и переноса данных из внутренней памяти. Чтобы решить эту проблему, необходимо создать на карточке раздел с ext3 или ext4. На него можно перенести все файловые атрибуты (включая владельца и права доступа), чтобы любое приложение могло работать так, словно запустилось из внутренней памяти.

Операционная система Windows не умеет делать на флешках больше одного раздела. С этой задачей легко справится Linux, который можно запустить, например, в виртуальной среде. Второй вариант - использование специальной утилиты для работы с логической разметкой, такой как MiniTool Partition Wizard Free . Обнаружив на карточке дополнительный первичный раздел с ext3/ext4, приложение Андроид Link2SD и аналогичные ему предложат куда больше вариантов.

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

Флешки и карты памяти быстро умирают как раз из-за того, что любое изменение в FAT32 вызывает перезапись одних и тех же секторов. Гораздо лучше использовать на флеш-картах NTFS с ее устойчивой к сбоям таблицей $MFT. Небольшие файлы могут храниться прямо в главной файловой таблице, а расширения и копии записываются в разные области флеш-памяти. Благодаря индексации на NTFS поиск выполняется быстрее. Аналогичных примеров оптимизации работы с различными накопителями за счет правильного использования возможностей файловых систем существует множество.

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

Управление файловой системой – одна из наиболее традиционных функций ОС Файловая система – это часть операционной системы, назначение которой состоит в том, чтобы организовать эффективную работу с данными, хранящимися во внешней памяти, и обеспечить пользователю удобный интерфейс при работе с такими данными. Помимо собственно файлов и структур данных, используемых для управления файлами (каталоги, дескрипторы файлов, различные таблицы распределения внешней памяти), понятие «файловая система» включает и программные средства, реализующие различные операции над файлами.

Управление файловой системой опирается:

· на подсистему управления вводом–выводом;

· использование специальных аппаратных средств;

· специальные информационные структуры.

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

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

Назовем основные функции файловой системы:

· идентификация файлов – связывание имени файла с выделенным ему пространством внешней памяти;

· распределение внешней памяти между файлами. Для работы с конкретным файлом пользователю не требуется иметь информацию о местоположении этого файла на внешнем носителе информации. Например, для того чтобы загрузить документ в редактор с жесткого диска, нам не нужно знать, на какой стороне, какого магнитного диска, на каком цилиндре и в каком секторе находится данный документ;

· обеспечение надежности и отказоустойчивости. Стоимость информации может во много раз превышать стоимость компьютера;

· обеспечение защиты от несанкционированного доступа;

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

· обеспечение высокой производительности.

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

· средства взаимодействия с процессами пользователей, обеспечивающие прием и интерпретацию запросов от пользователей на обработку файлов и сообщающие им в удобной форме о результатах этой обработки;

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

· средства, обеспечивающие распределение внешней памяти для хранения файлов и ее освобождение при уничтожении файлов;

· средства учета расположения файлов в целом и их составных частей.

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

1. open(char * fname, int flags, mode_t mode)

Эта операция открывает файл, устанавливая соединение между программой и файлом. При этом программа получает дескриптор файла — целое число, идентифицирующее данное соединение. Все остальные операции (чтения, записи, позиционирования) используют этот индекс для ссылки на файл. Параметр char * fname задает имя файла, int flags — это битовая маска, определяющая режим открытия файла. Файл может быть открыт только для чтения, только для записи и для чтения и записи; кроме того, можно открывать существующий файл, а можно пытаться создать новый файл нулевой длины. Необязательный третий параметр mode используется только при создании файла и задает его атрибуты.

2. lseek(int handle, off_t offset., int whence)

Эта операция перемещает указатель чтения/записи в файле. Параметр offset задает количество байтов, на которое нужно сместить указатель, а параметр whence — начало отсчета смещения. Предполагается, что смещение можно отсчитывать от начала файла (SEEK_SET), от его конца (SEEK_END) и от текущего положения указателя (SEEK_CUR). Операция возвращает положение указателя, отсчитываемое от начала файла.

3. read(int handle, char * where, size__t howjnuch)

Операция чтения из файла. Указатель where задает буфер, куда нужно поместить прочитанные данные; третий параметр указывает, сколько данных надо считать. Система считывает требуемое число байтов из файла, начиная с указателя чтения/записи в этом файле, и перемещает указатель к концу считанной последовательности. Если файл кончился раньше, считывается столько данных, сколько оставалось до его конца. Операция возвращает количество считанных байтов. Если файл открывался только для записи, вызов read возвратит ошибку.

4. write(int handle, char * what, size__t how_much)

Операция записи в файл. Указатель what задает начало буфера данных, третий параметр указывает, сколько данных надо записать. Система записывает требуемое число байтов в файл, начиная с указателя чтения/записи в этом файле, заменяя хранившиеся в этом месте данные, и перемещает указатель к концу записанного блока. Если файл кончился раньше, его длина увеличивается. Операция возвращает количество записанных байтов. Если файл открывался только для чтения, вызов write возвратит ошибку.

5. close (int handle)

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

Набор файловых системных вызовов в ОС MS–DOS фактически был скопирован с вызовов Unix, послуживших основой для стандарта POSIX. В свою очередь и Windows NT/2000/XP унаследовали принципы работы с файлами непосредственно от MS–DOS.

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

Отображение (проецирование) файла в память. Отображение (проецирование) файла в память (File mapping) – это соединение содержания файла с частью виртуального адресного пространства процесса. Система создает объект «проекция файла» (file mapping object), чтобы обслужить эту ассоциацию. Представление данных файла (file view) – это часть виртуального адресного пространства, которое процесс использует, чтобы получить доступ к содержанию файла. Процессы читают и записывают в представление данных файла, используя указатели точно так же, как при работе с динамически распределенной памятью.

Отображение файла в память обеспечивает несколько преимуществ:

· возможность работы с файлами большего размера;

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

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

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

Управление атрибутами файлов. Кроме имени и расширения имени файла, операционная система хранит для каждого файла дату его создания (изменения) и атрибуты файла. Атрибуты – это дополнительные параметры, определяющие свойства файлов. Операционная система позволяет их контролировать и изменять. Состояние атрибутов учитывается при проведении автоматических операций с файлами. Существует четыре основных атрибута: только для чтения (Read Only), скрытый (Hidden), системный (System), архивный (Archive).

Атрибут «только для чтения» ограничивает возможности работы с файлом. Его установка означает, что файл не предназначен для внесения изменений. Атрибут «скрытый» указывает, что данный файл не следует 129

отображать на экране при проведении файловых операций. Это мера защиты против случайного повреждения файла. Атрибут «системный» используется для файлов, связанных с функционированием операционной системы. Его отличительная особенность в том, что средствами операционной системы его изменить нельзя. Как правило, большинство файлов, имеющих установленный атрибут «системный», имеют также установленный атрибут «скрытый». Атрибут «архивный» в прошлом использовался для работы программ резервного копирования. Предполагалось, что любая программа, изменяющая файл, должна автоматически устанавливать этот атрибут, а средство резервного копирования должно его сбрасывать. Таким образом, очередному резервному копированию подлежали только те файлы, у которых этот атрибут был установлен. Современные программы резервного копирования используют другие средства для установления факта изменения файла, и данный атрибут во внимание не принимается, а его изменение вручную средствами операционной системы не имеет практического значения.

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

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

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

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

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

Файловая система осуществляет работу с данными на диске, основываясь на адресах секторов.

Работа с программами основывается на именах файлов.

Цели, состав и функции

Цели использования файловой системы:

  • Экранирование физической организации долговременного хранилища данных.
  • Создание простой модели (логической) этого хранилища.
  • Предоставление программам и пользователям удобного набора команд для манипулирования файлами.

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

  1. Все файлы на диске.
  2. Наборы структур данных, которые используются для управления файлами.
  3. Комплекс системных программных средств которые реализуют различные операции над файлами (создание, запись, чтение, поиск и другие).

Функции файловой системы:

  • Отображение логической модели данных на физическую организацию хранилища данных. То есть структура файлов и папок на компьютере переноситься на физический жесткий диск. А именно на конкретные сектора.
  • Обеспечение устойчивости файловой системы к сбоям и ошибкам.
  • Предоставление программного интерфейса для приложений. Что бы программы могли работать с файлами.
  • Обеспечение совместного доступа к файлу несколькими процессами. О процессах я рассказывал в основах операционных систем.
  • Защита файлов от несанкционированного доступа.

Какие бывают файловые системы

Для Windows используются два файловые системы:

  1. FAT (File Allocation Table).
  2. NTFS (New Technology File System).

Для UNIX систем это:

  1. UFS (Unix File System).
  2. S5 (применительно к System V).

Физическая организация файловых систем

Обычные HDD диски состоят из:

  1. Дорожек. Концентрических колец предназначенных для хранения данных, размеченных на диске. Они состоят из одинакового числа секторов.
  2. Секторов. Сектор является наименьшей адресуемой единицей дискового устройства для обмена данными. Размер сектора фиксирован.
  3. При низкоуровневом форматировании создаются дорожки и сектора, на диск записывается информация для определения границ секторов.

Организация физического диска

Логические диски

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

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

На одном логическом диске может использоваться только одна файловая система.

На моем примере.

Логические диски

Физические диски

Возможные варианты организации логических дисков:

  • Один физический – один логический.
  • Один физический – несколько логических.
  • Несколько физических – один логический.

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

На картинке выше видно что один диск (диск C) помечен как загружаемый (системный) иконкой слева.

Высокоуровневое форматирование диска

Высокоуровневое форматирование диска необходимо для создания логического диска и файловой системы на нем.

При форматировании пространство логического диска разбивается на кластеры определенного размера.

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

При форматировании на диск записывается следующая информация:

  1. Загрузчик операционной системы.
  2. Сведения о границах областей отведенных под файлы и каталоги.
  3. Информация о поврежденных областях.
  4. Информация о доступном и неиспользуемом пространстве.

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

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

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

Организация данных в NTFS

Организация данных в NTFS

Возникает вопрос, а что же такое файл?

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

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

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

Типы файлов

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

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

Иерархическая структура файловой системы состоит из следующих элементов:

  • Дерево – файл может входить только в один каталог.
  • Сеть – файл может входить в несколько каталогов.

Корневым называют каталог верхнего уровня.

Структура файловой системы

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

Монтирование логических дисков

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

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

Возможности файловой системы

Учет свободных кластеров

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

Использование битового массива. Свободные кластеры помечаются 1, а занятые 0 (или наоборот). В оперативной памяти достаточно хранить один кластер битового массива. Выделяемые файлу свободные кластеры располагаются близко друг к другу, что приводит к увеличению быстродействия.

Дисковые квоты

Дисковая квота – максимальное количество файлов и блоков (кластеров), назначаемое пользователю для хранения данных.

Гибкий лимит – при превышении гибкого лимита во время регистрации пользователю выдается предупреждение, и счетчик предупреждений уменьшается на 1. Если счетчик равен 0, то в регистрации отказывается.

Жесткий лимит – лимит который не может быть превышен.

Резервное копирование

Резервное копирование это процесс создания на носителе, предназначенном для восстановления данных в оригинальном месте их расположения в случае их повреждения или разрушения.

Существуют следующие способы повышения эффективности и удобства резервного копирования:

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

Физическое резервное копирование это последовательное копирование всех кластеров диска.

Логическое резервное копирование это проверка каталогов и сохранение содержащихся в них информации.

Преимущества физического копирования:

  • простота реализации;
  • высокая скорость.
  • резервирование свободных кластеров;
  • невозможность восстановления отдельных файлов;
  • невозможность инкрементного резервного копирования.

Логическое резервирование происходит следующим образом:

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

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

Восстановление файловой системы из резервной копии происходит следующим образом:

  1. Создается пустая файловая система.
  2. Восстанавливаются данные последней полной архивации, сначала каталоги, а затем файлы.
  3. Восстанавливаются данные из инкрементных резервных копий.
  4. Восстанавливается список свободных кластеров.

Теперь вы знаете основы файловых систем.

Анатолий Бузов

Обучаю HTML, CSS, PHP. Создаю и продвигаю сайты, скрипты и программы. Занимаюсь информационной безопасностью. Рассмотрю различные виды сотрудничества.

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