Как настроить смартфоны и ПК. Информационный портал

Структура файловой системы. Файловая система Linux и структура каталогов

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

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

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

В ОС Linux, как и в любой другой ОС семейства UNIX, любой объект является файлом, хранящимся на файловой системе. Файловая система представляет собой некоторое устройство (например, жесткий диск), отформатированное для хранения файлов. Файловые системы могут находиться на жестких дисках, гибких дисках, CD-ROM или других носителях, которые позволяют осуществлять произвольный или последовательный доступ к данным.

Условно файловую систему ОС Linux можно разделить на следующие компоненты.

Пространство имен - методы именования объектов файловой системы и их иерархическая организация.

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

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

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

Основными задачами файловой системы являются:

упорядочивание хранимых данных;

простой и быстрый доступ к хранимым данным;

обеспечение целостности хранимых данных.

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

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

Иерархия каталогов файловой системы ОС Linux соответствует общепринятому в мире UNIX стандарту Filesystem Hierarchy System (FHS). Основное преимущество данного стандарта заключается в том, что определенные типы файлов расположены в соответствующих каталогах.

Например, большинство конфигурационных файлов располагается в каталоге /etc, а файлы журналов различных сервисов располагаются в каталоге /var/log.

Описание каталогов файловой системы ОС Linux

Каталоги /bin, /usr/bin, /usr/locl/bin, /sbin, /usr/sbin и /usr/local/sbin содержат установленные в системе команды. При работе в системе под обычным пользователем, вам будут доступны только команды каталогов /bin, /usr/bin и /usr/locl/bin, так как в стандарте FHS определено, что в каталогах sbin должны содержаться только административные команды.


Рисунок 1.2.Структура каталогов ОС Linux

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

Монтирование файловой системы к точке монтирования осуществляется при помощи команды mount. В следующем листинге приведен пример монтирования DVD привода, содержащего дистрибутив ОС RedHatEnterpriseLinux 5.

# mount /dev/hdc /mnt/

mount: block device /dev/hdc is write-protected, mounting read-only

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

Список смонтированных файловых систем хранится в файле /etc/fstab. Благодаря этому возможны автоматическая проверка целостности файловой системы при помощи команды fsck и монтирование файловых систем на этапе начальной загрузки, а также выполнение сокращенных команд наподобие mount /var/spool. Информация, содержащаяся в этом файле, отражает расположения файловых систем на диске. Подробнее файл /etc/fstab будет рассмотрен в модуле 3.

Размонтирование файловых систем осуществляется командой umount. «Заблокированную» файловую систему размонтировать невозможно. В ней не должно быть ни открытых файлов, ни текущих каталогов выполняющихся процессов. Если размонтируемая файловая система содержит исполняемые программы, они не должны быть запущены. В следующем листинге приводится пример размонтирования ранее подмонтированной файловой системы в каталоге /mnt.

# umount /mnt # Is -1 /mnt total 0

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

# mount /dev/sda2 on / type ext3 (rw)

proc on /ргос type proc (rw)

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) /dev/hdc on /mnt type iso9660 (ro)

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

Типы файлов

При работе с ОС Linux важно понимать, что любой объект ОС является файлом. Это ключевая особенность ОС Linux по сравнению с операционными системами семейства Windows.

Файлы различаются как по своей структуре, так и по своему предназначению. В ОС Linux определены семь типов файлов:

регулярные файлы (обычные файлы);

каталоги;

именованные каналы;

файлы блочных устройств;

файлы символьных устройств.

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

/dev/hdc. # Is -Id /dev/hdc

Регулярные файлы

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

Каталоги

В ОС Linux имеются так называемые специальные каталоги. Специальные каталоги, такие как «.» и «..», обозначают, соответственно, текущий рабочий каталог и его родительский каталог.

В ОС Linux принято различать символические и жесткие ссылки, каждая из которых имеет особенное значение.

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

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

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

Сокеты

Сокет - это специальный тип файла, используемый процессами для взаимодействия друг с другом. Установленные посредством сокетов соединения позволяют процессам взаимодействовать, не подвергаясь влиянию других процессов. В ОС Linux выделяется несколько видов сокетов, использование которых предполагает наличие сетевой инфраструктуры. Локальные сокеты доступны только на локальном компьютере, обращение к ним осуществляется через специальные объекты файловой системы, а не через сетевые порты. Такие сокеты принято называть сокетами домена UNIX (UNIXdomainsocket). Помимо локальных сокетов существуют сетевые сокеты, позволяющие процессам обмениваться данными по сети.

Несмотря на то, что другие процессы распознают файлы сокетов как элементы каталога, только процессы, между которыми установлено соответствующее соединение, могут осуществлять чтение и запись файлов сокета. С локальными сокетами работают различные сервисы ОС Linux - CUPS, XWindow и Syslog.

Именованные каналы ( FIFO)

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

Файлы блочных и символьных устройств

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

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

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

Linux (Линукс) – это операционная система, которая на сегодняшний день является фактически единственной альтернативной заменой ОС Windows от Microsoft. Свое начало Linux берет с 1991 года, когда молодой программист с Финляндии Линус Торвальдс взялся за работу над самой первой версией системы, которая и была названа в честь его имени. Рассвет популярности Linux начался с самого его возникновения. Это связано, в первую очередь, с тем, что ядро этой ОС, как и большинство программ, написанных под нее, обладают очень важными качествами.

Ядро Ядро это операционная система низкого Машинно-зависимая часть традиционного уровня, обрабатывающая файлы, работающая с ядра ОС UNIX включает следующие компоненты: дисками, сетью и выполняющая другие необходимые операции. (пока это зависит от особенностей аппаратуры); Ядро операционной системы Linux представляет элементами собой монолитную микроядерной систему архитектуры. раскрутка и инициализация системы на низком уровне с прерываний; При компиляции ядра можно разрешить динамическую первичная обработка внутренних и внешних управление памятью (в той части, которая относится к загрузку и выгрузку очень многих компонентов ядра - особенностям аппаратной поддержки виртуальной так называемых модулей. В момент загрузки модуля памяти); его код загружается на уровне системы и связывается с остальной частью ядра. Внутри модуля могут использоваться функции. любые экспортируемые ядром переключение контекста процессов между режимами пользователя и ядра; связанные с особенностями целевой платформы части драйверов устройств.

Файловая структура (система) /bin – основные двоичные пользовательские модули /boot – файлы статической загрузки /cdrom – исторически выбранная точка монтирования для CD-дисков /dev – файлы устройств /etc – конфигурационные файлы /home – домашние каталоги /lib – основные разделяемые библиотеки /lost+found – восстановленные файлы /media – подключаемые носители /proc – файлы ядра и процессов /root – домашний каталог пользователя root /srv – данные сервисных служб /tmp – временные файлы /usr – пользовательские двоичные файлы и данные, используемые только для чтения (показано на картинке)

Интерфейс (графическая оболочка) – это программа, организующая взаимодействие пользователя с компьютером. Обеспечивает поддержку окон, меню, иконок, мыши и других известных элементов GUI - графического интерфейса пользователя. На основе X строятся более сложные графические среды; наиболее популярные из них - KDE и GNOME. GUI - это набор иконок, меню, диалогов, панелей, окон, и других графических элементов, позволяющих пользователям легко работать с компьютером и приложениями. KDE и Gnome - интегрированные рабочие среды. Пользователи работают с элементами интерфейса и программами.

Утилиты Утилита (англ. utility или tool) - вспомогательная компьютерная программа в Встроенные в Linux программные утилиты и языки. составе g++ -GNU C++ компилятор; Perl - очень мощный скриптовый язык; g 77 - GNU FORTRAN компилятор; (параметрам, настройкам, установкам), либо делают процесс f 2 c - перекодировщик из FORTRAN в C; изменения параметров (автоматизируют его). Fort 77 - компилятор FORTRAN. Выполняет f 2 c, а затем общего программного обеспечения для выполнения специализированных типовых задач. Утилиты предоставляют доступ к возможностям Виды утилит по связи с ОС использует gcc или g++; Независимые утилиты, не требующие для своей работы операционной системы, Grep - поиск фрагмента текста в файлах, удовлетворяющего набранной маске. Маска определяется с Системные утилиты, входящие в поставку ОС и требующие её помощью стандартной системы обозначений, называемой наличия "регулярные выражения «; Виды утилит по функциям Диспетчеры файлов; Архиваторы (с возможным сжатием данных); Просмотрщики; Деинсталлятор - обеспечения [; программа для Tr - translation utility (другими словами - замена букв в текстовом файле); Gawk - GNU awk (используется для обработки форматированных текстовых файлов); удаления программного sed - утилита для обработки текстовых файлов;

Очень сильно отличается от устройства в windows. Для начала, в линуксе нет дисков C или D. Один физический диск (или несколько) при установке системы разбивается на каталоги и подкаталоги. Основной, корневой каталог обозначается символом / (слэш) Вместо файла подкачки существует отдельный раздел /swap . Каждый каталог можно форматировать в нужную файловую систему, в зависимости от задач пользователя. Например Ext3, ReiserFS, JFS или другую.
В разных дистрибутивах линукс схема и назначение некоторых каталогов может несколько отличаться.
Можно создавать свои каталоги. У меня на отдельном жестком диске находится каталог с фильмами. В корневом разделе он выглядит как /films.

Описание основных каталогов и подкаталогов в linux:
/bin - В нем находятся
основные файлы команд.

/boot - В этом каталоге находится загрузчик системы (Grub или Lilo) и файлы, необходимые для загрузки системы.

/dev - В каталоге dev размещаются файлы описания устройств компьютера. В linux все устройства считаются файлами. Даже порты, диски, принтеры - все файл.

/etc - Каталог, в котором находятся конфигурационные файлы системы, программ, стартовые сценарии.
/etc/rc.d - файлы команд, запускающие приложения при загрузке системы.
/etc/passwd - в файле зашифрованы все данные о пользователях.
/etc/fstab - в файле содержится информация о файловых системах, автоматически монтируемых при запуске системы

/home - Пользовательский, домашний каталог. В linux может быть множество пользователей. Каждый пользователь имеет свой каталог.(например /home/user) В нем находятся любые файлы пользователей к которым он имеет непосредственный доступ
записи/удаления. Также в домашнем каталоге находятся пользовательские программы, настройки. Их имена начинаются на точку и выглядят, к примеру, вот так - .kde .fonts

/lib - Здесь находятся различные библиотеки системы, модули ядра
/lib/firmware - несвободные модули ядра с закрытой лицензией
/lib/modules - подгружаемые модули ядра. Например драйверы устройств, файловых систем.

/mnt - В этот каталог временно монтируются различные подключаемые устройства. Флешки, дискеты, диски

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

/proc - Каталог с виртуальной файловой системой. В нем, в виде файлов содержится информация о происходящих в системе процессах.
/proc/modules - в этом файле находится информация о списке загруженных модулей ядра.
/proc/cpuinfo - подробная информация о процессоре.
/proc/meminfo -
информация об оперативной памяти.
/proc/devices - драйверы устройств встроенных в ядро системы.
/proc/uptime - информация про uptime системы. Т.е. Время работы без перезагрузки.
/proc/version - версия используемого системой ядра linux .
Все эти данные можно выводить в консоли с помощью команды cat .
Например cat /proc/cpuinfo

/root - Домашний каталог администратора(суперпользователя) системы. Используется администратором в случае если основной каталог home по каким-то причинам недоступен.

/sbin - Тут находятся основные программы выполняемые root.

/tmp - Каталог для временного хранения данных программами.

/usr - Основной каталог для установки программ. Кроме программ, в нем находятся файлы документации, исходные коды программ, ядра.
/usr/local - в этом каталоге находятся
отдельно устанавливаемые пакеты программ.
/usr/src - исходники установленных программ и ядра.
/usr/man - файлы руководств к установленным программам.
/usr/lib - неизменяемые конфигурационные файлы и данные программ.

/var - В каталоге var находятся данные которые часто меняются в процессе работы системы. Например логи, кэши программ.
/var/local - изменяемые данные программ, установленных администратором в /usr/local.
/var/log - логи различных системных программ.
/var/run - временные файлы. Информация в них хранится до очередной перезагрузки системы.
/var/tmp - каталог для временных файлов.

Файловая структура Linux очень сильно отличается от таковой в Windows, поэтому, если Вы решили всерьёз заняться изучением UNIX-подобных систем, то начинать, на мой взгляд, лучше именно со структуры каталогов.

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

К чему я веду? А к тому, что пользователь Windows, который впервые увидел Linux, конечно, сможет с ним совладать (выйти в Интернет или посмотреть видеозапись), однако, стоит только возникнуть какой-либо внештатной ситуации, и он уже не будет знать, что делать!

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

Как гласит пословица, внешний вид бывает обманчив. Современные дистрибутивы Linux могут внешне и по основным принципам работы во многом копировать привычную многим среду Windows. Однако, достаточно лишь "копнуть" глубже и мы сразу увидим, что перед нами нечто совсем иное и непонятное:)

Убедиться в этом несложно на примере Linux Mint. Давайте откроем папку "Компьютер" на Рабочем столе и посмотрим на её содержимое:

Как видим, здесь, кроме подключённой флешки, нет ни одного привычного нам раздела жёсткого диска, кроме устройства "Файловая система". Именно здесь (а точнее, в корневом каталоге с названием "/", который иногда ошибочно называют "/root/", хотя это отдельная папка в "/") по умолчанию и хранятся все данные, включая системные и пользовательские файлы! Весьма странно и непонятно на первый взгляд. Давайте разбираться...

Дело в том, что Linux использует кардинально отличающийся от Windows подход к организации и работе с файловой системой. Если в Windows основой являются разделы жёсткого диска, на которых мы можем создавать произвольные папки с файлами, то в Линуксах всё базируется на чёткой иерархии каталогов, не зависящей от разметки винчестера и регламентированной стандартом FHS (сокр. англ. "Filesystem Hierarchy Standard" - "стандарт иерархии файловой системы").

Понятие дисков и их разделов, конечно, существует и в Linux, но здесь первичной является именно структура папок, в одну из которых (как правило, "/media/", "/dev/" или "/mnt/") и монтируются различные типы дисков. Сами же диски обычно именуются в зависимости от типа их подключения: SATA - sda (sdb и т.д. в зависимости от их количества), а IDE - hda (hdb...). Разделы же на дисках просто нумеруются (например, sda1, hdb2).

Отдельные каталоги Linux могут быть вынесены на разные разделы разных дисков и даже на удалённые сетевые хранилища. Единственное условие - все они должны быть примонтированы до загрузки системы. Обычно это делается автоматически при запуске Linux, но иногда может потребоваться произвести и ручную правку параметров.

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

Основные папки Linux

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

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

Каталог Назначение Аналог Windows (если есть)
/ Хранит всю структуру каталогов системы Диск C:
/bin/ Хранит бинарные исполняемые файлы системных утилит C:\Windows\System32
/boot/ Хранит ядро системы и прочие загрузочные файлы C:\Windows
/cdrom/ Хранит точки монтирования для дисководов -
/dev/ Хранит файлы подключённых устройств по типам (жёсткие диски, видеоустройства и т.п.) или псевдоустройств (например, /dev/null и /dev/zero) -
/etc/ Хранит некоторые системные файлы настроек и настройки установленных программ Частично C:\Windows\System32, частично C:\Program Files
/home/ Хранит домашние папки пользователей системы с их настройками и данными C:\Documents and Settings или C:\Users
/lib/ Хранит большинство библиотек стандартных программ и некоторых установленных Частично C:\Windows и C:\Windows\System32
/lost+found/ Хранит файлы, которые обычно в результате каких-либо сбоев остались непрописанными ни в одном из каталогов, но в то же время и не помечены для перезаписи. Пользователь обычно не имеет к ней доступа Частично C:\Recycler (Корзина)
/media/ Хранит точки монтирования для всех съёмных носителей (флешки, дисководы, съёмные жёсткие диски) -
/mnt/ Хранит временные точки монтирования устройств и их файловых систем, которые были добавлены вручную -
/opt/ Хранит дополнительные пакеты различных программ C:\Users\Admin\Application Data
/proc/ Хранит данные о запущенных процессах и работе ядра системы Частично Диспетчер задач
/root/ Хранит данные суперпользователя (root) системы Частично C:\Users\Admin
/run/ Хранит временные файлы, которые выполняются в процессе загрузки системы
/sbin/ Хранит большинство системных программ для администрирования и настройки ОС Частично C:\Windows\System32
/srv/ Хранит файлы, отвечающие за работу серверной части системы и различных протоколов передачи данных по сети (HTTP, FTP и т.п.) Частично C:\Windows\System32
/sys/ Хранит виртуальную файловую систему с данными об установленных устройствах и драйверах Частично Диспетчер устройств
/tmp/ Хранит временные файлы C:/Windows/Temp
/usr/ Хранит данные пользователей системы и файлы установленных вручную программ. Частично C:\Users\
/var/ Хранит файлы с различными изменяющимися данными, логи, кеши и пр. -

Кроме папок в самом корневом каталоге стоит также обратить внимание на некоторые вложенные директории:

Каталог Назначение Аналог Windows (если есть)
/etc/X11/ Хранит файлы настроек системы отображения окон X Window System -
/etc/samba/ Хранит файлы настроек сервера Samba, который служит для связи c сетевыми папками Windows -
/home/username/ Хранит файлы и конфигурацию учётной записи конкретного пользователя (Домашняя папка) C:\Users\Username
/usr/bin/ Хранит ряд программ, которые нужны для работы в многопользовательском режиме -
/usr/share/ Хранит общие данные установленных программ -
/usr/src/ Хранит файлы с исходными кодами ядра системы -
/var/cache/ Хранит кеши программ и скачанные из репозитория пакеты программ -
/var/games/ Хранит сохранения и достижения установленных игр -
/var/log/ Хранит логи (журналы) системы и установленных программ -
/var/mail/ Хранит настройки почтовых ящиков пользователей -
/var/run/ Хранит данные о запущенных процессах и демонах Частично Диспетчер задач
/var/tmp/ Хранит временные файлы, сохраняемые при перезагрузке системы -
/var/www/ Хранит веб-страницы, обрабатывающиеся средствами локального сервера -

Немного о файловых системах

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

В Windows мы привыкли пользоваться традиционной NTFS и не морочить себе голову (ну, ещё FAT32 на флешках или UDF на дисках). В мире же Линуксов всё гораздо более разнообразно. Здесь имеется поддержка всех ФС Windows, но рекомендуется использовать специальные системы, оптимизированные под UNIX-подобные ОС.

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

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

  1. Ext4 - журналируемая файловая система, которая является стандартной для большинства современных дистрибутивов Linux. Она хорошо защищена от проблем фрагментации и оптимизирована для работы с большими файлами. Если Вы при установке не форматировали раздел под систему вручную, то, скорее всего, у Вас стоит именно Ext4.
  2. Ext2 - нежурналируемая файловая система, которая была основной для старых дистрибутивов Linux (до 2000-х). Она имеет ряд ограничений на работу с большими файлами, однако, в то же время, является и самой быстрой ФС, поэтому её часто используют в различных сравнительных тестах как эталонную.
  3. Reiser4 - журналируемая файловая система, которую многие продвинутые пользователи рекомендуют к использованию на Linux. Её преимущество в хорошей стабильности и высокой скорости работы, которую, к тому же, можно ещё более повысить за счёт активации специального плагина для сжатия данных.
  4. btrfs (также B-tree FS) - журналируемая файловая система, разработанная известной компанией Oracle довольно недавно (в 2007 году). К её особенностям относятся хранение индекса файлов в так называемых "B-деревьях" - иерархических структурах, которые максимально оптимально используют ресурсы оперативной памяти за счёт небольшой глубины вложения данных.
  5. SWAP - особый вид нежурналируемой файловой системы, которая реализует структуру хранения данных, аналогичную ячеистой структуре оперативной памяти. За счёт этого используется для реализации файла подкачки в Linux.

В большинстве современных дистрибутивов по умолчанию жёсткий диск форматируется в Ext4, а также SWAP, под который отводится размер, аналогичный размеру установленной оперативной памяти. Так, например, выглядит стандартная разметка диска под Linux Mint, которая производится, если Вы никак не влияете на создание разделов вручную:

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

Разметка диска

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

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

Если Вы планируете двойную загрузку с установкой Windows, то к рассмотренным выше трём разделам на место sda1 и sda2 лучше поставить два раздела, отформатированных в NTFS: один под Диск C, а второй под Диск D, соответственно.

Более же продвинутые пользователи склонны делать более сложную схему диска с учётом разделения его на отдельные загрузочные области и области выполнения программ:

В принципе, вышеупомянутые каталоги на sda4 некоторые пользователи монтируют на отдельных разделах, а некоторые не выделяют и вовсе. Всё зависит от того, какие задачи Вы планируете решать на своём ПК. Если Вы ещё не решили, как будете использовать отдельные каталоги, то рекомендую оставить "про запас" пару десятков гигабайт места на жёстком диске неразмеченным. Так Вы в любой момент прямо из-под своей системы сможете перемонтировать нужные каталоги на новосозданные разделы.

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

В процессе запуска с LiveCD Вам будет задан ряд вопросов по поводу вариантов загрузки. Везде оставляем всё по умолчанию, кроме экрана с выбором языка. Там нужно будет вписать номер, соответствующий русскоязычному интерфейсу (у меня это был "22"). Во всех остальных вопросах просто жмём Enter и в результате попадём на виртуальный рабочий стол ОС Debian с запущенным GParted:

Если Вы выбрали русский интерфейс, то проблем с работой в программе у Вас не будет даже, если Вы решите переразметить диск с уже установленной системой. Алгоритм действий следующий:

  1. Выделяем существующий раздел, который нужно разделить, и жмём кнопку "Изменить размер или переместить", либо аналогичный пункт в контекстном меню.
  2. В открывшемся окошке при помощи полозков или окошек для ввода чисел задаём новый размер раздела и его отступ от от начала или конца диска (помним, что корень и своп лучше размещать ближе к началу).
  3. Выделяем новосозданную неразмеченную область и нажимаем кнопку "Новый" на панели инструментов или в контекстном меню.
  4. В открывшемся окошке задаём тип файловой системы, метку тома и иные параметры.
  5. Повторяем вышеописанные действия нужное количество раз, после чего применяем все изменения и дожидаемся завершения их выполнения.

Теперь осталось немного. Устанавливаем систему в корневой каталог (если она ещё не была установлена) и загружаем её. Сейчас все каталоги находятся на одном разделе и нам нужно перемонтировать их на другие, специально созданные для этого области диска. Сделать это можно почти полностью в визуальном режиме или при помощи терминала. Чтобы было понятнее рассмотрим процесс переноса на примере каталога /home/ в полувизуальном режиме.

Если Вы решили делать всё в визуальном, то откройте, например, папку /mnt/ или /media/ и в ней создайте временную папку (назовём её /newhome/) для переноса данных. Теперь всё-таки придётся запустить терминал для того чтобы примонтировать новосозданную папку к разделу, на который мы хотим перенести папку /home/. Делается это командой вида:

Естественно, что вместо "ext4" Вы будете указывать свою файловую систему, а вместо "sda5" раздел, на который будете переносить папку. Когда раздел примонтируется и папка окажется на нём, откроем её и скопируем туда всё текущее содержимое каталога /home/. По окончании копирования отмонтируем раздел от папки следующей командой:

$sudo umount /mnt/newhome

Теперь существующую папку /home/ можно либо полностью удалить (а лучше переименовать, например, в /oldhome/) и создать заново, либо просто полностью очистить. Главное, чтобы у нас появился пустой каталог /home/. Теперь примонтируем сюда наш раздел со скопированными данными:

$sudo mount /dev/sda5 /home

Если всё прошло успешно, то в каталоге /home/ появятся все файлы, которые мы скопировали. То есть, фактически перенос завершился успешно. Осталось только закрепить успех и сделать так, чтобы не пришлось каждый раз вручную монтировать наш каталог при загрузке системы. Для этого воспользуемся правкой файла fstab (сокр. от англ. "file systems table" - "таблица файловой системы"), который находится в каталоге /etc/. Откроем его любым текстовым редактором и в самом конце допишем такую строчку:

/dev/sda5 /home ext4 nodev,nosuid 0 2

Этим мы "говорим" системе буквально следующее: на разделе /dev/sda5 находится каталог /home/, отформатированный в системе ext4, в котором нельзя создавать каталог с конфигурацией устройств (/dev/), а также запрещены операции с suid и sgid битами, отключено резервное копирование и монтирование файловой системы происходит во второй проход (в первый всегда монтируется корневая система).

Перезагружаемся и радуемся:) Для истинных же гиков скажу, что все операции (кроме правки fstab) можно было проделать прямо в консоли примерно такой последовательностью команд:

$sudo mkdir /mnt/newhome

$sudo mount -t ext4 /dev/sda5 /mnt/newhome

$find . -depth -print0 | sudo cpio --null --sparse -pvd /mnt/newhome/

$sudo umount /mnt/newhome

$sudo mv /home /oldhome

$sudo mkdir /home

$sudo mount /dev/sda5 /home

sudo gedit /etc/fstab

Выводы

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

Потратив немного времени на оптимизацию структуры каталогов Вы сделаете свой Linux более надёжным в плане хранения информации и в будущем убережёте много собственных нервов и сил!

P.S. Разрешается свободно копировать и цитировать данную статью при условии указания открытой активной ссылки на источник и сохранения авторства Руслана Тертышного.

Основные понятия

Операционная система Linux разработана в соответствии с требованиями международного стандарта на UNIX-совместимые системы IEEE POSIX, поэтому логично будет кратко рассмотреть сначала структуру файловой системы ОС UNIX.

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

Пользователь

С самого начала ОС UNIX замышлялась как интерактивная система. Другими словами, UNIX предназначен для терминальной работы. Чтобы начать работать, человек должен "войти" в систему, введя со свободного терминала свое учетное имя (account name) и, возможно, пароль (password). Человек, зарегистрированный в учетных файлах системы, и, следовательно, имеющий учетное имя, называется зарегистрированным пользователем системы. Регистрацию новых пользователей обычно выполняет администратор системы. Пользователь не может изменить свое учетное имя, но может установить и/или изменить свой пароль. Пароли хранятся в отдельном файле в закодированном виде. Не стоит забывать свой пароль, снова узнать его не поможет даже администратор!

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

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

Понятие файла является одним из наиболее важных для ОС UNIX. Все файлы, с которыми могут манипулировать пользователи, располагаются в файловой системе, представляющей собой дерево, промежуточные вершины которого соответствуют каталогам, и листья - файлам и пустым каталогам. Примерная структура файловой системы ОС UNIX показана на рисунке 2.1. Реально на каждом логическом диске (разделе физического дискового пакета) располагается отдельная иерархия каталогов и файлов. Для получения общего дерева в динамике используется "монтирование" отдельных иерархий к фиксированной корневой файловой системе.

Замечание: В мире ОС UNIX по историческим причинам термин "файловая система" является перегруженным, обозначая одновременно иерархию каталогов и файлов и часть ядра, которая управляет каталогами и файлами. Видимо, было бы правильнее называть иерархию каталогов и файлов архивом файлов, а термин "файловая система" использовать только во втором смысле. Однако, следуя традиции ОС UNIX, мы будем использовать этот термин в двух смыслах, различая значения по контексту.

Каждый каталог и файл файловой системы имеет уникальное полное имя (в ОС UNIX это имя принято называть full pathname - имя, задающее полный путь, поскольку оно действительно задает полный путь от корня файловой системы через цепочку каталогов к соответствующему каталогу или файлу; я буду использовать термин "полное имя", поскольку для pathname отсутствует благозвучный русский аналог). Каталог, являющийся корнем файловой системы (корневой каталог), в любой файловой системе имеет предопределенное имя "/" (слэш). Полное имя файла, например, /bin/sh означает, что в корневом каталоге должно содержаться имя каталога bin, а в каталоге bin должно содержаться имя файла sh. Коротким или относительным именем файла (relative pathname) называется имя (возможно, составное), задающее путь к файлу от текущего рабочего каталога (существует команда и соответствующий системный вызов, позволяющие установить текущий рабочий каталог).

В каждом каталоге содержатся два специальных имени, имя ".", именующее сам этот каталог, и имя "..", именующее "родительский" каталог данного каталога, т.е. каталог, непосредственно предшествующий данному в иерархии каталогов.

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

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

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

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

В мире 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. Это значит, что, во-первых, могут задаваться достаточно длинные смещения и, во-вторых, смещения могут быть положительными и отрицательными.

Например, после выполнения системного вызова

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

UNIX стандарту Filesystem ... команды. Рисунок 1.2.Структура каталогов ОС Linux Основным каталогом файловой системы ОС Linux является корневой каталог...

  • Установка операционной системы Linux

    Реферат >> Информатика

    Мощных и гибких методов управления файловыми системами Linux или Linux -подобных операционных систем. Во многих... одна древовидная структура каталогов, и эта структура может занимать несколько разделов. Когда файловая система монтируется...

  • Лучшие статьи по теме