Почему ext2 и преемники не нуждаются в дефрагментации?

8

Семейство файловых систем ext2 / ext3 / ext4 не нуждается в дефрагментации.

Какой основной дизайн помогает этой файловой системе не фрагментироваться?

Atur
источник
Пожалуйста, не используйте тег ext-filesystem , это существующая, давно устаревшая файловая система Linux .
Жиль "ТАК - перестань быть злым"

Ответы:

9

Один из способов, с помощью которого файловая система ext4 контролирует фрагментацию, - это процесс с отложенным размещением (режим выделения по умолчанию в ext4).

Отложенное размещение работает путем отсрочки отображения вновь записанных файловых блоков данных на дисковые блоки в файловой системе до времени обратной записи.

Это работает, выделяя большинство блоков для файла одновременно, когда известно общее количество блоков (или, по крайней мере, приблизительное число) в каждом файле. Это позволяет распределителю блоков ( mballocупомянутому в ответе MMK) лучше выполнять поиск области свободного размера подходящего размера для размещения файла.

Аарон
источник
Имейте в виду, что это действительно только особенность драйвера ext4 . Теперь, я не знаю, если очень технически говоря, что не может смонтировать старые fs с такой опцией (по крайней мере, частично ). На данный момент DELALLOC помечен как ext4-only .
Мир
8

В файловой системе ext3 для каждого блока есть распределитель блоков для диска, и поэтому вполне возможно, что может произойти фрагментация.

Тем не менее, в файловой системе ext4 есть многоблочный распределитель, который может задерживать запись блоков на диск, так что он может выделять несколько блоков одновременно на одном куске диска, чтобы обеспечить непрерывную запись - и так, менее вероятно, что фрагментация может произойти (это все еще возможно, просто менее вероятно)

Магнитка
источник
6

По крайней мере, для Ext2 (и Ext3, я думаю, хотя я менее уверен), в формате / структуре на диске нет ничего, что могло бы предотвратить дефрагментацию.

Отсутствие необходимости в дефрагментации происходит на уровне реализации, который будет варьироваться от ОС к ОС. То есть, в зависимости от реализации, файл в Ext2 может быть или не быть фрагментированным.

Если избежать фрагментации, это, вероятно, будет связано с задержкой выделения физических блоков. То есть на некотором уровне реализации файловая система будет кэшировать данные (и обращаться к ним по номеру логического блока) до тех пор, пока они не будут записаны / записаны на диск. Когда данные, наконец, записываются на диск, должны быть выделены физические блоки. Алгоритм выделения может (или не может) распределять количество смежных доступных физических блоков для данных.

Надеюсь это поможет.


источник
На самом деле есть утилита e2defrag, и она может понадобиться (на довольно полных дисках со многими случайно записанными файлами). Отсроченный распределитель ext4 делает это еще менее вероятным. Но даже в ext2 было какое-то отложенное размещение / запись, поэтому запускать утилиту дефрагментации требовалось меньше, чем примитивному распределителю MS-DOS®.
Мирабилось