Семейство файловых систем ext2 / ext3 / ext4 не нуждается в дефрагментации.
Какой основной дизайн помогает этой файловой системе не фрагментироваться?
Семейство файловых систем ext2 / ext3 / ext4 не нуждается в дефрагментации.
Какой основной дизайн помогает этой файловой системе не фрагментироваться?
Ответы:
Один из способов, с помощью которого файловая система ext4 контролирует фрагментацию, - это процесс с отложенным размещением (режим выделения по умолчанию в ext4).
Отложенное размещение работает путем отсрочки отображения вновь записанных файловых блоков данных на дисковые блоки в файловой системе до времени обратной записи.
Это работает, выделяя большинство блоков для файла одновременно, когда известно общее количество блоков (или, по крайней мере, приблизительное число) в каждом файле. Это позволяет распределителю блоков ( mballoc
упомянутому в ответе MMK) лучше выполнять поиск области свободного размера подходящего размера для размещения файла.
В файловой системе ext3 для каждого блока есть распределитель блоков для диска, и поэтому вполне возможно, что может произойти фрагментация.
Тем не менее, в файловой системе ext4 есть многоблочный распределитель, который может задерживать запись блоков на диск, так что он может выделять несколько блоков одновременно на одном куске диска, чтобы обеспечить непрерывную запись - и так, менее вероятно, что фрагментация может произойти (это все еще возможно, просто менее вероятно)
По крайней мере, для Ext2 (и Ext3, я думаю, хотя я менее уверен), в формате / структуре на диске нет ничего, что могло бы предотвратить дефрагментацию.
Отсутствие необходимости в дефрагментации происходит на уровне реализации, который будет варьироваться от ОС к ОС. То есть, в зависимости от реализации, файл в Ext2 может быть или не быть фрагментированным.
Если избежать фрагментации, это, вероятно, будет связано с задержкой выделения физических блоков. То есть на некотором уровне реализации файловая система будет кэшировать данные (и обращаться к ним по номеру логического блока) до тех пор, пока они не будут записаны / записаны на диск. Когда данные, наконец, записываются на диск, должны быть выделены физические блоки. Алгоритм выделения может (или не может) распределять количество смежных доступных физических блоков для данных.
Надеюсь это поможет.