Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

Перераспределение блоков - это функция некоторых компьютерных файловых систем, которая позволяет использовать большие блоки или единицы распределения, эффективно используя «свободное» пространство в конце больших файлов, пространство, которое в противном случае было бы потеряно для другого использования из-за внутренней фрагментации . [1]

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

Обоснование [ править ]

Файловые системы традиционно делят диск на блоки одинакового размера, чтобы упростить их конструкцию и ограничить фрагментацию в худшем случае . Размеры блоков обычно кратны 512 из-за размера секторов жесткого диска . Когда файлы распределяются некоторыми традиционными файловыми системами, отдельным файлам могут быть выделены только целые блоки. Но поскольку размеры файлов часто не кратны размеру блока файловой системы, такая конструкция неизбежно приводит к тому, что последние блоки файлов (называемые хвостами ) занимают только часть блока, что приводит к так называемой внутренней фрагментации (не путать с внешняя фрагментация). Эта трата места может быть значительной, если файловая система хранит много небольших файлов, и может стать критической при попытке использовать блоки большего размера для повышения производительности. FFS и другие производные файловые системы UNIX поддерживают фрагменты [ необходима цитата ], которые значительно смягчают этот эффект.

Схемы перераспределения [ править ]

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

Некоторые схемы перераспределения блоков могут выполнять выделение на уровне байтов; большинство, однако, просто делят блок на более мелкие (делитель обычно равен некоторой степени двойки). Например, если файл размером 38 КиБ должен храниться в файловой системе с использованием блоков 32 КиБ, файл обычно занимает два блока, или 64 КиБ, для хранения; оставшиеся 26 КиБ второго блока становятся неиспользуемым резервным пространством. Однако при перераспределении блока размером 8 КиБ файл будет занимать всего 6 КиБ во втором блоке, оставив 2 КиБ (из блока перераспределения 8 КиБ), а остальные 24 КиБ блока будут освобождены для других файлов.

Набивка хвоста [ править ]

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

Эффективность [ править ]

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

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

По состоянию на 2015 год наиболее широко используемыми файловыми системами чтения-записи с поддержкой перераспределения блоков являются Btrfs и FreeBSD UFS2 [4] (где это называется « фрагментацией на уровне блоков »). Когда-то популярные, ReiserFS и Reiser4 больше не используются. [ необходима цитата ]

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

См. Также [ править ]

Ссылки [ править ]

  1. ^ Патент США 6041407 ( основной патент).
  2. ^ Ганс Рейзер (2001). «Использование жесткого диска, ReiserFS и Ext2fs» . Архивировано из оригинального 13 ноября 2006 года . Проверено 14 декабря 2006 года .
  3. ^ Ганс Рейзер (2001). «Проектирование файловой системы ReiserFS» . Архивировано из оригинального 13 ноября 2006 года . Проверено 14 декабря 2006 года .
  4. Херви, Аллен (20 июня 2005 г.). «Введение в FreeBSD, семинар PacNOG I, дополнительные темы, UFS2 и Soft Updates - мощная комбинация» (PDF) . PacNOG я . п. 23 . Проверено 22 июля 2012 года .
  • Дэниел Роббинс (1 августа 2001 г.). «Расширенное руководство разработчика файловой системы, часть 2» . Общие потоки, IBM . Проверено 14 декабря 2006 года .