Домашняя » как » Почему существует большая разница между «размером» и «размером на диске»?

    Почему существует большая разница между «размером» и «размером на диске»?

    В большинстве случаев значения «Размер» и «Размер на диске» будут очень близки к совпадению при проверке размера папки или файла, но что, если между ними существует огромное расхождение? В сегодняшнем посте SuperUser Q & A рассматривается ответ на эту непонятную проблему.

    Сегодняшняя сессия вопросов и ответов пришла к нам благодаря SuperUser - подразделению Stack Exchange, группе веб-сайтов вопросов и ответов, управляемой сообществом..

    Вопрос

    Считыватель SuperUser thelastblack хочет знать, почему между папками на SD-карте его телефона такая огромная разница между «Размером» и «Размером на диске»:

    Как вы можете видеть ниже, для этой папки существует большая разница между полями «Размер» и «Размер на диске». Это почему?

    Я знаю, что «Размер на диске» должен быть немного больше, чем «Размер» из-за единиц размещения в Windows, но почему такая большая разница? Может ли это быть из-за большого количества файлов?

    Кстати, эта папка находится на SD-карте моего телефона Android. В этом приложении мое карты хранит свои кэшированные карты, а приложение получает свои карты из Google Maps..

    Глядя на скриншот, определенно есть огромное расхождение между «Размер» и «Размер на диске», поэтому то, что здесь произошло, вызвало это?

    Ответ

    Участник SuperUser Боб имеет ответ для нас:

    Я буду предполагать, что вы используете файловую систему FAT / FAT32 здесь, поскольку вы упоминаете, что это SD-карта. NTFS и exFAT ведут себя одинаково в отношении единиц размещения. Другие файловые системы могут отличаться, но они все равно не поддерживаются в Windows.

    Если у вас много маленьких файлов, это, безусловно, возможно. Учти это:

    • 50000 файлов
    • Размер кластера 32 КБ (единицы размещения), который является максимальным для FAT32

    Хорошо теперь минимальный занимаемое пространство составляет 50 000 * 32 000 = 1,6 ГБ (для упрощения математики используются префиксы SI, а не двоичные). Пространство, которое каждый файл занимает на диске, всегда кратно размеру единицы размещения - и здесь мы предполагаем, что каждый файл на самом деле достаточно мал, чтобы поместиться в одном блоке, с некоторым (потерянным) пространством, оставшимся над.

    Если бы каждый файл занимал в среднем 2 КБ, вы получили бы около 100 МБ общего объема - но вы также теряете в 15 раз больше (30 КБ на файл) в среднем из-за размера единицы размещения.

    Углубленное объяснение

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

    Так что же будет, если у вас очень маленький файл? Что ж, файловой системе все равно, если файл имеет размер 0 КБ, 2 КБ или даже 15 КБ, он даст ему наименьшее пространство, которое он может - в приведенном выше примере это 32 КБ. Ваш файл использует только небольшое количество этого пространства, а остальное в основном тратится впустую, но все равно принадлежит файлу - очень похоже на спальню, которую вы оставляете незанятой.

    Почему существуют разные размеры единиц размещения? Что ж, это становится компромиссом между наличием большого стола (адресная книга, например, говоря, что Джон владеет домом на 123 Фэйк-стрит, 124 Фэйк-стрит, 666 Сатана-лейн и т. Д.) Или большим количеством неиспользуемого пространства в каждой единице (доме) , Если у вас есть файлы большего размера, имеет смысл использовать большие единицы размещения - потому что файл не получает новый блок (дом), пока все остальные не будут заполнены. Если у вас много маленьких файлов, то в любом случае у вас будет большая таблица (адресная книга), так что вы можете также дать им маленькие блоки (дома).

    Большие единицы размещения, как правило, будут занимать много места, если у вас много маленьких файлов. Обычно нет веской причины превышать 4 КБ для общего использования..

    фрагментация?

    Что касается фрагментации, фрагментация не должна тратить пространство таким образом. Большие файлы могут быть фрагментированы, то есть разделены на несколько единиц размещения, но каждая единица должна быть заполнена до запуска следующей. Дефрагментация может сэкономить немного места в таблицах размещения, но это не ваша проблема.

    Возможные решения

    Как и предположил gladiator2345, ваши единственные реальные варианты на данный момент - жить с ним или переформатировать с меньшими единицами выделения..

    Ваша карта может быть отформатирована в FAT16, который имеет меньшее ограничение на размер таблицы и, следовательно, требует гораздо больших единиц выделения для адресации большего объема (с верхним пределом в 2 ГБ и 32 КБ). Источник любезно предоставлен Брайаном. Если это так, вы все равно можете безопасно форматировать как FAT32.


    Есть что добавить к объяснению? Отключить звук в комментариях. Хотите узнать больше ответов от других технически подкованных пользователей Stack Exchange? Ознакомьтесь с полным обсуждением здесь.