Перераспределение блоков - это функция некоторых компьютерных файловых систем, которая позволяет использовать большие блоки или единицы распределения, эффективно используя «свободное» пространство в конце больших файлов, пространство, которое в противном случае было бы потеряно для другого использования из-за внутренней фрагментации . [1]
В файловых системах, которые не поддерживают фрагменты, эта функция также называется слиянием хвостов или упаковкой хвостов, поскольку обычно это делается путем упаковки «хвоста» или последнего частичного блока нескольких файлов в один блок.
Обоснование [ править ]
Файловые системы традиционно делят диск на блоки одинакового размера, чтобы упростить их конструкцию и ограничить фрагментацию в худшем случае . Размеры блоков обычно кратны 512 из-за размера секторов жесткого диска . Когда файлы распределяются некоторыми традиционными файловыми системами, отдельным файлам могут быть выделены только целые блоки. Но поскольку размеры файлов часто не кратны размеру блока файловой системы, такая конструкция неизбежно приводит к тому, что последние блоки файлов (называемые хвостами ) занимают только часть блока, что приводит к так называемой внутренней фрагментации (не путать с внешняя фрагментация). Эта трата места может быть значительной, если файловая система хранит много небольших файлов, и может стать критической при попытке использовать блоки большего размера для повышения производительности. FFS и другие производные файловые системы UNIX поддерживают фрагменты [ необходима цитата ], которые значительно смягчают этот эффект.
Схемы перераспределения [ править ]
Перераспределение блоков решает эту проблему, разделяя хвостовой блок каким-либо образом, чтобы позволить ему хранить фрагменты из других файлов.
Некоторые схемы перераспределения блоков могут выполнять выделение на уровне байтов; большинство, однако, просто делят блок на более мелкие (делитель обычно равен некоторой степени двойки). Например, если файл размером 38 КиБ должен храниться в файловой системе с использованием блоков 32 КиБ, файл обычно занимает два блока, или 64 КиБ, для хранения; оставшиеся 26 КиБ второго блока становятся неиспользуемым резервным пространством. Однако при перераспределении блока размером 8 КиБ файл будет занимать всего 6 КиБ во втором блоке, оставив 2 КиБ (из блока перераспределения 8 КиБ), а остальные 24 КиБ блока будут освобождены для других файлов.
Набивка хвоста [ править ]
Некоторые файловые системы с тех пор были разработаны для использования этого неиспользуемого пространства и могут упаковывать хвосты нескольких файлов в один общий хвостовой блок. Хотя на первый взгляд может показаться, что это значительно усилит фрагментацию файловой системы, отрицательный эффект можно смягчить с помощью функций опережающего чтения в современных операционных системах - при работе с короткими файлами несколько хвостов могут быть достаточно близко друг к другу, чтобы их можно было читать вместе , и поэтому поиск по диску не вводится. Такие файловые системы часто используют эвристику , чтобы определить, стоит ли упаковка хвоста в данной ситуации, а программное обеспечение дефрагментации может использовать более развитую эвристику.
Эффективность [ править ]
В некоторых сценариях, где большинство файлов меньше половины размера блока, например, в папке с небольшими файлами исходного кода или небольшими растровыми изображениями, хвостовая упаковка может повысить эффективность хранения даже более чем в два раза по сравнению с файловыми системами без хвостовой упаковки. [2]
Это не только приводит к экономии дискового пространства, но также может привести к увеличению производительности, так как из-за большей локальности ссылок требуется читать меньше данных, что также приводит к повышению эффективности кеширования страниц . Однако эти преимущества можно свести на нет из-за повышенной сложности реализации . [3]
По состоянию на 2015 год [Обновить]наиболее широко используемыми файловыми системами чтения-записи с поддержкой перераспределения блоков являются Btrfs и FreeBSD UFS2 [4] (где это называется « фрагментацией на уровне блоков »). Когда-то популярные, ReiserFS и Reiser4 больше не используются. [ необходима цитата ]
Некоторые файловые системы, доступные только для чтения, вообще не используют блоки и, таким образом, неявно используют пространство так же эффективно, как перераспределение файловых систем; такие файловые системы можно использовать как форматы архивов .
См. Также [ править ]
- Файловая система
- Внутренняя фрагментация
- Местонахождение ссылки
- Сравнение файловых систем
Ссылки [ править ]
- ^ Патент США 6041407 ( основной патент).
- ^ Ганс Рейзер (2001). «Использование жесткого диска, ReiserFS и Ext2fs» . Архивировано из оригинального 13 ноября 2006 года . Проверено 14 декабря 2006 года .
- ^ Ганс Рейзер (2001). «Проектирование файловой системы ReiserFS» . Архивировано из оригинального 13 ноября 2006 года . Проверено 14 декабря 2006 года .
- ↑ Херви, Аллен (20 июня 2005 г.). «Введение в FreeBSD, семинар PacNOG I, дополнительные темы, UFS2 и Soft Updates - мощная комбинация» (PDF) . PacNOG я . п. 23 . Проверено 22 июля 2012 года .
- Дэниел Роббинс (1 августа 2001 г.). «Расширенное руководство разработчика файловой системы, часть 2» . Общие потоки, IBM . Проверено 14 декабря 2006 года .