<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Электронный научно-практический журнал «Современные научные исследования и инновации» &#187; файловая система</title>
	<atom:link href="http://web.snauka.ru/issues/tag/faylovaya-sistema/feed" rel="self" type="application/rss+xml" />
	<link>https://web.snauka.ru</link>
	<description></description>
	<lastBuildDate>Fri, 17 Apr 2026 07:29:22 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Методы и решения, использованные для борьбы с фрагментацией при разработке дисковой файловой системы в ОС Linux</title>
		<link>https://web.snauka.ru/issues/2016/08/70354</link>
		<comments>https://web.snauka.ru/issues/2016/08/70354#comments</comments>
		<pubDate>Mon, 08 Aug 2016 13:06:31 +0000</pubDate>
		<dc:creator>Ионов Алексей Алексеевич</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[data fragmentation]]></category>
		<category><![CDATA[file]]></category>
		<category><![CDATA[file system]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[metadata]]></category>
		<category><![CDATA[метаданные]]></category>
		<category><![CDATA[файл]]></category>
		<category><![CDATA[файловая система]]></category>
		<category><![CDATA[фрагментация данных]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/issues/2016/08/70354</guid>
		<description><![CDATA[Работа Linux основана на операциях с файлами, поэтому для работы в этой операционной системе необходима дисковая файловая система, поддерживающая множество операций управления файлами, таких как поиск, просмотр, перемещение, копирование и удаление файлов. Linux различает много типов файлов в дополнение к стандартным файлам и каталогам. Файлом в Linux может быть все, что угодно, будь то каталог, [...]]]></description>
			<content:encoded><![CDATA[<p>Работа Linux основана на операциях с файлами, поэтому для работы в этой операционной системе необходима дисковая файловая система, поддерживающая множество операций управления файлами, таких как поиск, просмотр, перемещение, копирование и удаление файлов. Linux различает много типов файлов в дополнение к стандартным файлам и каталогам. Файлом в Linux может быть все, что угодно, будь то каталог, жесткий диск, раздел на жестком диске, параллельный порт, подключение к веб-сайту и т.д.</p>
<p>В настоящее время в ядре Linux присутствует множество как дисковых (minixfs, ext2/3/4[1], xfs, bmfs), так и виртуальных файловых систем(vfs). При этом только в последнее время начали появляться файловые системы со встроенными средствами борьбы с фрагментаций данных. Фрагментация на уровне файловой системы влияет на производительность, как на уровне ядра, так и на уровне приложений пользовательского уровня.</p>
<p>Целью данной статьи является описание различных способов борьбы с фрагментацией, использованных при разработке дисковой файловой системы в ОС Linux.</p>
<p><strong>1.     </strong><strong>Виды фрагментации</strong></p>
<p>Существует два основных вида фрагментации, как самих данных, так и метаданных, на уровне файловой системы:</p>
<p>-          Внутренняя фрагментация вызвана тем, что в большинстве ОС[2] для решения задачи распределения данных на диске используется минимальная единица данных, называемая блоком. В современных жестких дисках и файловых системах в качестве размера блока принята величина 4 килобайта. Т.е. если файл весит 2 килобайта, то оставшиеся 2 килобайта его первого блока не смогут быть использованы файловой системой для распределения данных других файлов. Фактор внутренней фрагментации является очень значительным, если в вашей файловой системе имеется большое количество файлов малого размера. В виду большой сложности реализации в разработанной файловой системе[3] нет методов борьбы с внутренней фрагментацией.</p>
<p>-          Внешняя фрагментация вызвана проблемами при распределении дисковых блоков между файлами. Как известно, большинство современных персональных компьютеров в качестве устройства постоянного хранения информации используют жесткие диски HDD (hard disk drive), в которых имеется большая разница между скоростью одноблочных и последовательных чтений множества блоков. Поэтому расположение данных одного файла максимально плотным образом позволяет увеличить скорость чтения данных из файла.</p>
<p>Описанные выше проблемы касаются самих данных, но в случае с метаданными в ОС Linux также существуют проблемы, такие как хранение inode-ов (сущностей, хранящих метаинформацию о файле: размер файла, дата последнего изменения и т.д.) и управление элементами директорий (directory entry).</p>
<p><strong>2.     </strong><strong>Структура разработанной файловой системы</strong></p>
<p>Для рассмотрения решений по борьбе с фрагментацией необходимо в первую очередь описать структуру разработанной файловой системы, которую условно можно разделить на несколько модулей:</p>
<p>-          модуль монтирования файловой системы, необходимый для чтения superblock с диска и создание при первом монтировании или чтении корневой директории при последующих случаях монтирования.</p>
<p>-          модуль работы с inode необходим для создания, удаления и поиска по номеру нужного inode.</p>
<p>-          модуль работы с элементами директорий отвечает за создание, удаление, добавление, переименования, поиск по имени элементов директорий.</p>
<p>-          модуль размещения данных на диске отвечает как за выделение данных, так и за освобождение выделенного под данные или метаданные пространства.</p>
<p>-          модуль адресации блоков файла.</p>
<p><strong>3.     </strong><strong>Разметка блоков файловой системы</strong></p>
<p>Т.к. проблема фрагментации неразрывно связана с размещением данных на диске, ниже при рассмотрении разметки файловой системы будут описаны ее основные структуры, элементы, а также решения, использованные для дефрагментации данных.</p>
<ol start="1">
<li>Первый блок выделен для хранения superblock(суперблока). Суперблок – это главная структура, хранящая метаинформацию о всей файловой системе, в частности – количество свободных и всего блоков на носителе, общее количество inode-ов, кол-во свободных inode, примитивы блокировок для реализации параллельного доступа и изменения суперблока.</li>
<li>Дескрипторы групп inode-ов. Для борьбы с фрагментацией на уровне метаданных, а именно inode-ов, было решено объединить inode-ы в группы по 2^16 объектов. Такой способ был в первую очередь продиктован тем, что размер inode-а фиксирован для всех файлов, и группировка inode-ов вместе для последующей борьбы с фрагментацией позволила изменить систему поиска inode-а по номеру. К примеру, inode с номером 1123122 находится в группе inode-ов номер 17 (1123122 div 2^16 = 17) и является 9010 inode-ом в группе. Так как группа inode-ов хранится как непрерывная последовательность блоков, то для считывания информации о местоположении inode-а нет необходимости производить дисковые операции. В каждой группе inode-ов помимо самих inode-ов 2 блока занято под битовую карту группы inode-ов.</li>
<li>Дескриптор группы inode-ов хранит информацию о кол-ве свободных inode-ов в группе и номер первого блока группы. Общее кол-во дескрипторов групп inode-ов равно 2^16 степени.</li>
<li>Дескрипторы групп блоков. В качестве метода борьбы с фрагментацией на уровне данных файловой системы и для структурирования хранения данных было решено группировать блоки в непрерывные последовательности размером меньше и равно 256 Мб. Такой размер был выбран в первую очередь из расчета на то, что для адресации блока в группе блоков нужно ровно 2 байта. Помимо этого, учитывался тот фактор, что средняя скорость многоблочного чтения и записи современных жестких дисков на персональных компьютерах при 7200 об/с равна 100мб/c, т.е. можно предусмотреть возможность дефрагментации данных на группе блоков путем считывания целиком всей группы блоков в ОЗУ, ее перегруппировки и последующей записи на диск.</li>
</ol>
<p>Информация о дескрипторах групп блоков записывается на диск при первом монтировании исходя из общего количества блоков носителя. Каждый дескриптор хранит информацию о номере блока, с которого начинается данная группа блоков, кол-во свободных блоков в группе и общее кол-во блоков в группе.</p>
<p>Общее кол-во дескрипторов групп блоков рассчитывается как целое от деления общего объема в мегабайтах носителя на 256 мегабайт плюс 1. В каждой группе блоков первые 2 блока заняты под битовую карту блоков.</p>
<ol start="5">
<li>Весь остальной объем носителя, за вычетом суперблока, дескрипторов групп блоков и групп inode-ов, выделен для хранения данных самих файлов, описания директорий, групп inode-ов.</li>
</ol>
<p><strong>4.     </strong><strong>Алгоритмы дефрагментации данных</strong></p>
<p>Помимо архитектурных решений, позволивших решить множество проблем фрагментации на уровне метаданных, следует рассмотреть алгоритмы выделения и освобождения блоков данных, так как они являются основной причиной внешней фрагментации данных. По этой причине были разработаны 2 алгоритма аллокации блоков – алгоритм выделения непрерывной последовательности блоков и алгоритм поблочной аллокации блоков.</p>
<p>Первый алгоритм аллокации блоков используется при выделении группы inode-ов, метаданных адресации, при увеличении размера файла через операцию truncate. Второй алгоритм аллокации блоков используется при расширении файла.</p>
<p>Ниже описаны оба алгоритма аллокации.</p>
<p><strong>4.1.           </strong><strong>Алгоритм аллокации непрерывной последовательности блоков.</strong></p>
<ol start="1">
<li>Проверка на наличие необходимого количества блоков на диске, если его нет, то выход из подпрограммы.</li>
<li>Цикл по всем дескрипторам групп блоков.</li>
<li>Проверка, есть ли в группе блоков необходимое кол-во блоков, если нет, то следующая итерация.</li>
<li>Читаем битовую карту i-ой группы блоков.</li>
<li>Начиная с номера первого свободного блока итерируемся по битовой карте и ищем непрерывную последовательность блоков.</li>
<li>Если последовательность найдена, то выдаем номер блока, с которого начинается выделенная непрерывная последовательность блоков, как результат. Иначе продолжаем итерироваться по битовой карте.</li>
</ol>
<p>Недостаток выделения непрерывной последовательности заключается, во-первых, в том, что мы не можем выделить более 256 Мб за раз, и во-вторых, в том, что вероятность нахождения непрерывной последовательности большого размера в группе относительно мала.</p>
<p>Поэтому была создана функция выделения группы непрерывных последовательностей блоков. Суть ее заключается в итерировании по группам блоков с целью выделения непрерывных последовательностей размером в 1024 или менее блоков в каждой группе блоков ровно до тех пор, пока не будет выделено необходимое кол-во блоков или не закончится итерация по группам блоков.</p>
<p><strong>4.2.           </strong><strong>Поблочный алгоритм аллокации блоков.</strong></p>
<ol start="1">
<li>Проверка на наличие необходимого количества блоков на диске, если нет, то выход из подпрограммы.</li>
<li>Цикл по всем дескрипторам групп блоков или до тех пор, пока не выделим нужное нам количество блоков.</li>
<li>Проверка, есть ли в группе блоков необходимое количество блоков, если нет, то переход к следующей итерации.</li>
<li>Читаем битовую карту i-ой группы блоков.</li>
<li>Начиная с номера первого свободного блока, проходим по битовой карте i-ой группы блоков и ищем свободные блоки. Помечаем найденные как занятые.</li>
</ol>
<p><strong>Заключение</strong></p>
<p>В работе были рассмотрены основные виды фрагментации данных и метаданных в файловых системах, описаны архитектурные решения и алгоритмы для борьбы с внешней фрагментацией и фрагментацией метаданных, некоторые из них были использованы при разработке файловой системы.</p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2016/08/70354/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
