Блочное перераспределение

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Блочное перераспределение — способность некоторых (ReiserFS, Reiser4) компьютерных файловых систем, позволяющая объединить несколько небольших или распределённых единиц в один блок, таким образом обеспечивая более эффективное использование дискового пространства (которое в противном случае было бы утеряно), уменьшается фрагментация и предотвращается возникновение «хвостов» у данных.[1]

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

Обоснование[править | править исходный текст]

Файловая система традиционно разделяет диск на одинаковые по размеру блоки для упрощения её конструкции и ограничения фрагментации. Размеры блоков, как правило, кратны 512 в связи с размером дисковых секторов. Некоторые традиционные файловые системы распределяют файлы только по целым блокам, где каждый блок отнесён только к одному файлу. Но так как размеры файлов часто не кратны размеру блока файловой системы, эта конструкция по сути приводит к появлению в последних блоках файлов хвостов которые занимают только часть блока, что называется внутренней фрагментацией. Это пустое место может быть значительным, если файловая система хранит много маленьких файлов, размер которых может стать критическим при попытке использовать большие размеры блоков для повышения производительности. В UFS и других производных UNIX, подобные файловые системы поддерживают упаковку хвостов, что значительно уменьшает этот эффект.

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

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

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

Упаковка хвостов[править | править исходный текст]

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

Эффективность[править | править исходный текст]

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

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

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

Файловые системы, не использующие функцию блочных перераспределений, используют пространство не так эффективно, как файловые системы использующие эту функцию - они имеют признаки файловых архивов: содержат в одном куске данных, 1 или несколько файлов, имеют средства обнаружения и коррекции ошибок (Btrfs CRC32), контрольные суммы данных для проверки их целостности (Btrfs CRC32).

См. также[править | править исходный текст]

Примечания[править | править исходный текст]

Ссылки[править | править исходный текст]