Блочное перераспределение
Блочное перераспределение — способность некоторых (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).
См. также
Примечания
- U.S. Patent 6 041 407 (Fundamental patent)
- Hans Reiser. Hard Disk usage, ReiserFS and Ext2fs (2001). Дата обращения: 14 декабря 2006. Архивировано 29 сентября 2012 года. (недоступная ссылка)
- Hans Reiser. ReiserFS file system design (2001). Дата обращения: 14 декабря 2006. Архивировано 29 сентября 2012 года. (недоступная ссылка)
- Hervey, Allen Introduction to FreeBSD, PacNOG I Workshop, Additional Topics, UFS2 and Soft Updates make for a powerful combination . PacNOG I 23 (20 июня 2005). Дата обращения: 22 июля 2012. Архивировано 29 сентября 2012 года.
Ссылки
- Daniel Robbins. Advanced filesystem implementor's guide, Part 2 . Common threads, IBM (1 августа 2001). Дата обращения: 22 июля 2012. Архивировано 29 сентября 2012 года.