Почему размер выделения по умолчанию exFAT в Windows так высок?

12

Ссылка на эту страницу: https://support.microsoft.com/en-us/kb/140365

NTFS не превышает 4 КБ размера кластера, пока объем не превышает 16 ТБ, а FAT32 не превышает 16 КБ в диапазоне от 16 ГБ до 32 ГБ в современных версиях Windows.

Однако exFAT по умолчанию имеет значение 4 КБ в диапазоне громкости от 7 до 256 МБ. После этого он переходит к 32 КБ в диапазоне от 256 МБ до 32 ГБ и до 128 КБ сверх этого.

Это почему? Относительно большой размер кластера кажется расточительным, особенно в формате, предназначенном для небольших внешних устройств, таких как флэш-накопители. Вдвойне, если вы форматируете флеш-память, потому что, насколько я понимаю, главное преимущество большего размера кластера - более быстрый ввод-вывод из-за меньшей фрагментации и меньшего количества читаемых кластеров. Поправьте меня, если я ошибаюсь, но флэш-память гораздо, гораздо менее подвержена замедлениям, вызванным фрагментацией. Так зачем делать размер кластера таким большим?

InsanityOnABun
источник
«Размер» и «высокий» не идут вместе. Числа могут быть «высокими». «Большой» - это слово «беттор» вместо «высокий».
опилки
Я просто хотел упомянуть, что я только что отформатировал диск размером 1 ТБ, используя размер кластера по умолчанию, а в Windows использовался размер кластера 2048 КБ !!! Это не только игнорирование спецификаций на их странице, это всегда СЛИШКОМ Слишком высоко
woojoo666
Для любого, кто достиг этого с помощью Googling и может создать резервную копию каталога git на соответствующем диске / карте, важно также знать недостатки больших секторов: каждый ~ 200-байтовый файл в каталоге git занимает 1 единицу полного выделения. Большие секторы могут привести к тому, что каталог разработчика (который может содержать более 10 тыс. Файлов) занимает многократное число от их обычных размеров жесткого диска.
Например

Ответы:

11

Поскольку 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-карту с помощью микроконтроллера, вы могли бы это узнать.

Мух Фуген
источник
1
я не знал о необходимости стереть флэш-память, прежде чем вы могли бы написать на нее. Это имеет смысл сейчас. Спасибо!
InsanityOnABun
1
Похоже, вы предполагаете, что SD-карты не имеют слоя флеш-трансляции, то есть, что смежные логические сектора всегда будут физически смежными в NAND. В противном случае логические сектора в кластере не должны принадлежать одному и тому же стираемому блоку. Какие доказательства у вас есть, чтобы поддержать это предположение?
опилки
Действительно, некоторые высокопроизводительные SD-карты и флэш-накопители имеют слой перевода и все же поставляются предварительно отформатированными с кластерами 32 КБ. Я проверил, что кластеры 4kb улучшают производительность для случайных
операций