Почему размер выделения по умолчанию exFAT в Windows так высок?
Ссылка на эту страницу: https://support.microsoft.com/en-us/kb/140365
NTFS не превышает 4 КБ размера кластера, пока объем не превышает 16 ТБ, а FAT32 не превышает 16 КБ в диапазоне от 16 ГБ до 32 ГБ в современных версиях Windows.
Однако exFAT по умолчанию имеет значение 4 КБ в диапазоне громкости от 7 до 256 МБ. После этого он прыгает до 32 КБ в диапазоне 256–32 ГБ и до 128 КБ сверх этого.
Это почему? Относительно большой размер кластера кажется расточительным, особенно в формате, предназначенном для небольших внешних устройств, таких как флэш-накопители. Вдвойне, если вы форматируете флэш-память, потому что, насколько я понимаю, главное преимущество большего размера кластера - более быстрый ввод-вывод из-за меньшей фрагментации и меньшего количества читаемых кластеров. Поправьте меня, если я ошибаюсь, но флэш-память гораздо, гораздо менее подвержена замедлениям, вызванным фрагментацией. Так зачем делать размер кластера таким большим?
2 ответа
Поскольку exFAT используется в основном для таких вещей, как карты SD большой емкости, а на картах SD вы должны стереть сектор, прежде чем сможете писать на него. Если бы вы использовали небольшие кластеры на карте с большим размером сектора стирания, это привело бы к тому, что многие команды стирания и записи в один и тот же сектор записывали бы несколько последовательных кластеров данных на диск, не только снижая производительность, но и преждевременно изнашивая флэш-память. клетки. Размер сектора стирания обычно не документируется в таблицах данных карты, но может быть найден в реестре CSD карты. Содержимое этого реестра будет варьироваться от карты к карте в зависимости от ее внутреннего дизайна. Поскольку SD-карты обычно используются в таких вещах, как камеры, в которых хранятся большие файлы, неиспользуемое пространство большого размера кластера не имеет значения, и это было бы так, если бы вы хранили очень большое количество очень маленьких файлов, чего обычно не происходит.
На этой веб-странице содержится содержимое этого реестра примерно для десятка карточек:
http://goughlui.com/2014/01/03/project-read-collect-decode-sd-card-csd-register-data/
И если вы введете его содержимое в следующий калькулятор, вы увидите, что для нескольких карт емкостью 32/64 ГБ размер сектора стирания составляет 128 блоков, а блок - 512 байт. А для карты емкостью 2 ГБ размер сектора стирания составляет 32 блока, а блок - 1024 байта.
http://goughlui.com/static/csdecode2.htm
Является ли Windows достаточно умной, чтобы запрашивать регистр CSD и предлагать размер кластера, или она просто догадывается на основе размера раздела или диска, неизвестно. Если бы вам пришлось эмулировать SD-карту с помощью микроконтроллера, вы могли бы это узнать.
Предыдущий ответ на этот вопрос неверен и не должен был быть одобрен или принят. exFAT не является файловой системой флэш-памяти. Он никогда не использовался непосредственно на «сырой» вспышке. Это было бы крайне неэффективно, даже если бы размер кластера соответствовал размеру блока флэш-стирания.
На самом деле exFAT работает поверх уровня эмуляции блочного устройства, который обычно реализуется в прошивке самого флэш-устройства. Предположим, размер кластера exFAT составляет 128 КБ, размер сектора (поддельного) блочного устройства — 4 КБ, и вы записываете файл размером 5 КБ на том exFAT. Драйвер exFAT выделяет для файла 128 КБ, но (игнорируя метаданные) записывает только 8 КБ: два сектора, которые фактически содержат данные файла. Это тот же объем данных, который был бы записан, если бы размер кластера составлял 4 КБ. Разница в том, что если вы напишете кучу файлов размером 5 КБ, они будут разделены 30 неиспользуемыми поддельными секторами, которые никогда не читаются и не записываются. Но это не имеет значения, поскольку реальное место, где данные хранятся на необработанной флэш-памяти, не связано с номерами секторов виртуального блочного устройства. Размер кластера exFAT, вероятно, мало влияет на объем данных, записываемых на необработанную флэш-память, или количество операций стирания блоков. Когда вы включаете служебные данные метаданных exFAT, более крупные кластеры должны быть несколько более эффективными, но это не имеет никакого отношения к размеру блоков стирания необработанной флэш-памяти, которые полностью скрыты слоем эмуляции.
Конечно, большие кластеры означают, что вам не хватает места на поддельном блочном устройстве, если вы попытаетесь сохранить много маленьких файлов, и нет никакого способа заставить уровень эмуляции позволить вам использовать остальную часть реального пространства (за исключением использования те номера секторов, которые вы пропустили), поэтому большие кластеры по-прежнему кажутся плохой идеей. Я не знаю, кто в Microsoft решил, что размер кластера exFAT по умолчанию должен быть таким большим и почему, но я выскажу предположение.
exFAT имеет гораздо большие накладные расходы на кластер, чем NTFS: фактически в 65 раз больше, потому что NTFS имеет только один бит на кластер для растровой карты свободного пространства, в то время как exFAT имеет один бит в растровой карте плюс 4 байта в каждой из двух FAT. С другой стороны, у NTFS есть и другие существенные фиксированные накладные расходы (в частности, несколько мегабайт на журнал), которые не связаны напрямую с количеством кластеров.
Я предполагаю, что они хотели, чтобы exFAT требовал меньше накладных расходов, чем NTFS. На небольших томах NTFS всегда потребляет как минимум пару мегабайт, поэтому накладные расходы в 0,2% у 4К-кластеров кажутся не такими уж плохими. Но только что отформатированный том объемом 1 ТБ будет содержать около 2 ГБ метаданных exFAT с кластерами 4 КБ, тогда как NTFS потребуется всего около 40 МБ. Это выглядело бы плохо (и, я полагаю, было бы плохо), поэтому им пришлось использовать гораздо больший размер кластера.