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


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

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

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

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

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