Почему там столько различных способов измерить использование диска?

Для записи, альтернатив bindfs aufs, unionfs-fuse и rofs. Из тех aufs единственный, который не является fuse основанный.

Все, (включая aufs и bindfs) имейте ограничения как не поддержка ACLs (можно перечислить их, но они не в действительности). Другая альтернатива при необходимости в ACLs, должна использовать NFS.

116
19.03.2014, 05:28
3 ответа
[114954]Добавление чисел очень просто. Проблема в том, что можно добавлять много разных чисел.

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

Основная идея заключается в том, что файл, содержащий [115527]n[115528] байтов, использует [115529]n[115530] байтов дискового пространства, плюс немного для некоторой управляющей информации: метаданные файла (разрешения, метки времени и т.д.), и немного накладных расходов для информации, которую система должна найти, где файл хранится. Однако есть много осложнений.

  • Микроскопические осложнения
  • Думайте о каждом файле как о серии книг в библиотеке. Файлы меньшего размера составляют всего один том, а файлы большего размера состоят из многих томов, например, энциклопедии. Для того, чтобы иметь возможность найти файлы, есть каталог карт, в котором указаны ссылки на каждый том. Каждый том имеет небольшие накладные расходы из-за обложек. Если файл очень маленький, то эти накладные расходы относительно велики. Также сам каталог карт занимает некоторое пространство.
  • Немного более технически, в типичной простой файловой системе пространство разделено на [115531]блоки[115532]. Типичный размер блока - 4 КБ. Каждый файл занимает целое число блоков. Если размер файла не кратен размеру блока, то последний блок используется только частично. Таким образом, 1-байтовый файл и 4096-байтовый файл занимают 1 блок, в то время как 4097-байтовый файл занимает два блока. Это можно наблюдать с помощью команды [115533]du[115534]: если ваша файловая система имеет размер блока 4 КБ, то [115535]du[115536] выдаст для 1-байтового файла 4 КБ.

Если файл большой, то дополнительные блоки нужны только для хранения списка блоков, из которых состоит файл (это

косвенные блоки

; более сложные файловые системы могут оптимизировать это в виде

extents

). Они не отображаются в размере файла, о котором сообщает [115541]ls -l[115542] или GNU [115543] du --apparent-size[115544]; [115545]du[115546], которая сообщает об использовании диска в отличие от размера, учитывает их.

Некоторые файловые системы пытаются повторно использовать свободное пространство, оставшееся в последнем блоке, чтобы [115547] упаковать несколько хвостов файлов в одном блоке [115548]. Некоторые файловые системы (такие как [115549]ext4 начиная с Linux 3.8[115550] используют 0 блоков для крошечных файлов (всего несколько байт), которые полностью помещаются в inode.

Макроскопические осложнения

Обычно, как видно выше, общий размер, сообщаемый [115551]du[115552], представляет собой сумму размеров блоков или экстенов, используемых файлом.

Размер, сообщаемый [115553]du[115554], может быть меньше, если файл сжимается. Unix-системы традиционно поддерживают грубую форму сжатия: если файловый блок содержит только нулевые байты, то вместо того, чтобы хранить блок нулей, файловая система может опустить этот блок целиком. Файл с такими опущенными блоками называется

разреженным файлом

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

Некоторые файловые системы, такие как [115557]btrfs[115558] и [115559]zfs[115560], поддерживают сжатие общего назначения [115561]сжатие [115562].

Продвинутые сложности

Две основные особенности очень современных файловых систем, таких как zfs и btrfs, делают связь между размером файла и использованием диска значительно более отдаленной: снимки и дедупликация.

Снимки

- это замороженное состояние файловой системы на определенную дату. Файловые системы, поддерживающие эту функцию, могут содержать несколько снимков, сделанных в разные даты. Разумеется, эти снимки занимают место. С одной стороны, если вы удалите все файлы из активной версии файловой системы, файловая система не станет пустой, если останутся снимки.[12169]Любой файл или блок, который не изменился с момента создания снимка, или между двумя снимками, существует идентично как в снимке, так и в активной версии или другом снимке. Это реализовано посредством [115565] копирования на запись [115566]. В некоторых крайних случаях возможно, что удаление файла на полной файловой системе не удастся из-за нехватки свободного места - так как для удаления этого файла потребовалось бы сделать копию блока в каталоге, а места даже для этого блока больше нет.[12170]Дедупликация[12171]- это метод оптимизации хранилища, который заключается в том, чтобы избежать хранения идентичных блоков. При работе с типичными данными поиск дубликатов не всегда стоит усилий. И [115569]zfs[115570], и [115571]btrfs[115572] поддерживают дедупликацию в качестве опции.[12172]Почему сумма из [115573]du[115574] отличается от суммы размеров файла?[12173]Как мы видели выше, размер, сообщаемый [115575]du[115576] для каждого файла, как правило, представляет собой сумму размеров блоков или эквивалентов, используемых файлом. Обратите внимание, что по умолчанию в [115577]ls -l[115578] перечислены размеры в байтах, а в [115579]du[115580] перечислены размеры в килобайтах или в 512-байтных единицах (секторах) на некоторых более традиционных системах ([115581]du -k[115582] заставляет использовать килобайты). Большинство современных юниксов поддерживают [115583]ls -lh[115584] и [115585]du -h[115586] для использования "читаемых человеком" чисел с использованием K, M, G и т.д. достаточно (для KiB, MiB, GiB) соответственно.[12174] Когда вы запускаете [115587]du[115588] в каталоге, он суммирует использование диска всеми файлами в дереве каталогов, [115589] включая сами каталоги [115590]. Каталог содержит данные (имена файлов и указатель на то, где находятся метаданные файла), поэтому ему требуется немного места для хранения. Маленький каталог займет один блок, большой - больше. Объем памяти, используемый каталогом, иногда зависит не только от файлов, которые он содержит, но и от порядка, в который они были вставлены и в который удалены некоторые файлы (в некоторых файловых системах это может оставить дыры - компромисс между дисковым пространством и производительностью), но разница будет незначительной (дополнительный блок то тут, то там). При запуске [115591]ls -ld /some/directory[115592] указан размер каталога. (Обратите внимание, что строка "total NNN" в верхней части вывода от [115593]ls -l[115594] является несвязанным числом, это сумма размеров в блоках перечисленных элементов, выраженных в KiB или секторах. )[12175]Имейте в виду, что [115595]du[115596] включает [12176]точечные файлы[12177], которые [115599]ls[115600] не показывают, если не использовать вариант [115601]-A[115602] или [115603]-a[115604].[12178]Иногда [115605]du[115606] сообщает меньшую, чем ожидаемая сумма. Это происходит, если внутри дерева каталогов имеются [12179]-жесткие ссылки[12180]: [115609]du[115610] считает каждый файл только один раз.[12181] В некоторых файловых системах, таких как [115611]ZFS[115612] под Linux, [115613]du[115614] не сообщает о полном дисковом пространстве, занятом расширенными атрибутами файла.[12182]Остерегайтесь, что если под каталогом имеются точки монтирования, то [115615]du[115616] будет считать все файлы в этих точках монтирования также, если только не задан параметр [115617]-x[115618]. Поэтому, если, например, вам нужен общий размер файлов в вашей корневой файловой системе, запустите [115619]du -x /[115620], а не [115621]du /[115622].[12183] Если файловая система монтируется в непустую директорию [115624], то файлы в этой директории будут скрыты монтируемой файловой системой. Они всё ещё занимают их место, но [115625]du[115626] их не найдёт.[12184]Удалённые файлы[12185] Когда файл [115627]удалён[115628], это только удаляет запись каталога, а не обязательно сам файл. Для того, чтобы удалить файл и тем самым вернуть ему место на диске, необходимо выполнить два условия:[12186]Счетчик ссылок файла должен упасть до 0: если файл имеет несколько жестких ссылок, то удаление одной из них не влияет на другие.[12187]Пока файл открыт каким-либо процессом, данные остаются. Только когда все процессы закрыли файл, он удаляется. Вывод [12188]fuser -m[12189]или [12190]lsof[12191]на точку монтирования включает в себя процессы, у которых файл открыт на этой файловой системе, даже если файл удален.[12192]даже если ни один процесс не открыл удаленный файл, пространство файла может не быть восстановлено, если этот файл является бэкендом устройства [115969]loop[115970]. [115971]losetup -a[115972] (как [115973]root[115974]) может сказать вам, какие устройства [115975]loop[115976] в настоящее время настроены и на каком файле. Устройство шлейфа должно быть уничтожено (с помощью [115977]losetup -d[115978]), прежде чем дисковое пространство может быть восстановлено.[12193] Если вы удаляете файл в некоторых файловых менеджерах или графических средах, он может быть помещен в мусорное ведро, где его можно недооценить. До тех пор, пока файл может быть недоосвоен, его пространство все еще занято.[12194]Что это за цифры из [115635]df[115636]?[12195]Типичная файловая система содержит:[12196]Блоки, содержащие данные файла (включая каталоги) и некоторые метаданные (включая косвенные блоки, и расширенные атрибуты на некоторых файловых системах). [12197]Свободные блоки.[12198]Блоки, зарезервированные за корневым пользователем.[12199]Суперблоки и другая управляющая информация.[12200]Inodes[12201]A [115981]journal[12202]Только первый вид сообщается [115649]du[115650]. Когда дело доходит до [115651]df[115652], то, что попадает в "использованные", "доступные" и суммарные столбцы, зависит от файловой системы (конечно использованные блоки (в том числе и косвенные) всегда находятся в столбце "использованные", а неиспользуемые - в столбце "доступные").[12203]Файловые системы в ext2/ext3/ext4 [115653]резервируют[115654] 5% пространства для корневого пользователя. Это полезно в корневой файловой системе, чтобы система работала, если она заполняется (в частности, для протоколирования, и чтобы системный администратор мог хранить немного данных во время исправления проблемы). Даже для разделов с данными, таких как [115655]/home[115656], сохранение этого зарезервированного пространства полезно, так как почти полная файловая система подвержена фрагментации. Linux пытается избежать фрагментации (которая замедляет доступ к файлам, особенно на вращающихся механических устройствах, таких как жесткие диски), предварительно выделяя много последовательных блоков при записи файла, но если последовательных блоков не много, это не может работать.[12204]Традиционные файловые системы, вплоть до ext4, но не btrfs, резервируют фиксированное число [115657]inodes[115658] при создании файловой системы. Это значительно упрощает проектирование файловой системы, но имеет оборотную сторону, заключающуюся в том, что количество кодов должно быть подобрано по размеру: при слишком большом количестве кодов пространство растрачивается впустую; при слишком малом количестве кодов файловая система может закончиться до того, как закончится пространство. Команда [115659]df -i[115660] сообщает количество используемых и доступных драйверов (файловые системы, где концепция не применима, могут показывать 0).[12205]Выполнение [115661]tune2fs -l[115662] на томе, содержащем файловую систему ext2/ext3/ext4, сообщает некоторую статистику, включая общее количество и количество свободных драйверов и блоков. [12206]Другая особенность, которая может смутить дело - это [115663]subvolumes[115664] (поддерживается в [115665]btrfs[115666], а в zfs под именем [115667]datasets[115668]). Несколько подтомов занимают одно и то же место, но имеют отдельные корни дерева каталогов.[12207]Если файловая система смонтирована по сети (NFS, Samba и т.д.) и сервер экспортирует часть этой файловой системы (например [115669] сервер имеет файловую систему [115983]/home[115984] и экспортирует [115985]/home/bob[12208]), то [115671]df[115672] на клиенте отражает данные для всей файловой системы, а не только для той ее части, которая экспортируется и монтируется на клиенте. [12209] Что используется пространство на моем диске? [12210] Как мы видели выше, общий размер, указанный в [115673]df[115674], не всегда учитывает все управляющие данные файловой системы. Используйте инструменты, специфичные для файловой системы, чтобы получить точный размер файловой системы, если это необходимо. Например, с помощью ext2/ext3/ext4 запустите [115675]tune2fs -l[115676] и умножьте размер блока на количество блоков.[12211]Когда вы создаете файловую систему, она обычно заполняет доступное пространство на окружающем разделе или томе. Иногда при перемещении файловых систем вокруг томов или изменении их размеров вы можете получить файловую систему меньшего размера.[12212]В Linux, [115677]lsblk[115678] представляет хороший обзор доступных томов хранилищ. Для получения дополнительной информации или если у вас нет [115679]lsblk[115680], воспользуйтесь специализированными утилитами управления томами или разметки, чтобы проверить, какие разделы у вас есть. В Linux есть [115681]lvs[115682], [115683]vgs[115684], [115685]pvs[115686] для [115687]LVM[115688], [12213]fdisk[12214]для разделов традиционного PC-стиля ("MBR") (а также GPT на последних системах), [12215]gdisk[12216]для разделов [115693]GPT[115694], [12217]disklabel[12218]для BSD disklabel, [115697]Parted[115698] и др. Под Linux [115699]cat /proc/partitions[115700] дает краткое описание. Типичные установки имеют как минимум два раздела или тома, используемые операционной системой: файловую систему (иногда больше) и том [115701]swap[115702].[12219]Некоторые компьютеры имеют раздел, содержащий [115703]BIOS[115704] или другое диагностическое программное обеспечение. Компьютеры с [115705]UEFI[115706] имеют специальный раздел загрузчика.[12220]Наконец, обратите внимание, что большинство компьютерных программ используют устройства, основанные на мощности 1024 = 2[115707]10[115708] (потому что программисты любят двоичные файлы и мощности 2). Так 1 кБ = 1024 B, 1 МБ = 1048576 B, 1 ГБ = 1073741824, 1 ТБ = 1099511627776 B, ... Официально эти единицы известны как [115709]кибибайт[115710] KiB, [115711]мебибайт[115712] MiB и т.д., но большинство программ просто сообщает k или kB, M или MB и т.д. и т.п. С другой стороны, Производители жестких дисков систематически используют метрические (на базе 1000 единиц). Так что диск емкостью 1 ТБ составляет всего 931 Гб или 0,904 Тб[115041].

147
27.01.2020, 19:29

Я проиллюстрирую здесь различные случаи, из-за которых du отличается от df .

df подсчитывает блоки, выделенные файловой системой, du используют информацию о размере каждого файла. Разница может иметь множество причин:

  1. Несвязанные (удаленные) файлы, которые все еще открыты приложением. Информация о файле отсутствует, блоки все еще выделены. lsof + aL1 поможет вам идентифицировать процессы. В большинстве случаев вам нужно убить процессы, чтобы освободить место (это зависит от процесса, иногда достаточно перезагрузки конфигурации).

  2. Файлы ниже точек монтирования скрыты в du , но не в df . debugfs может помочь вам прочитать файловую систему.

     $ sudo debugfs 
    debugfs 1.42.12 (29 августа 2014 г.) 
    debugfs: open / dev / xxx (желаемое устройство файловой системы) 
    debugfs: cd / boot 
    debugfs: ls -l 
    1966081 40755 (2) 0 0 4096 26 мая 2016 г. 16:28. 
    2 40555 (2) 0 0 4096 11 мая- 2016 10:43 .. 
    1974291 100644 (1) 0 0 0 26 мая 2016 г. 16:28 bob <--- <<< / boot / bob скрыт / boot fs 
     
  3. Редкие файлы , которые кажутся больше, чем на самом деле. Нераспределенные блоки не подсчитываются с помощью df , но видимый размер файла считается с помощью du .

Обратите внимание, что жесткие ссылки не обманывают и .

3
20.08.2021, 12:54

Un breve resumen de las complicaciones para calcular el tamaño de los archivos y los espacios en disco:

  • El espacio que ocupa el archivo en el disco es un multiplicador del número de bloques que ocupa contra el tamaño de cada bloque + el número de inodos que ocupa. Un archivo de 1 byte de longitud ocupará al menos 1 bloque, 1 inodo y una entrada de directorio.

    Pero podría tomar solo 1 entrada de directorio adicional si el archivo es un enlace fijo a otro archivo. Sería solo otra referencia al mismo conjunto de bloques.

  • El tamaño del contenido del archivo. Esto es lo que muestra ls.
  • El espacio libre en disco no es el tamaño del archivo más grande que puede caber o la suma de todos los tamaños de contenido de archivo que caben en el disco. Está en algún punto intermedio. Depende de la cantidad de archivos (que ocupan inodos ), el tamaño del bloque y qué tan cerca el contenido de cada archivo llena los bloques por completo.

Esto es solo arañar la superficie de los sistemas de archivos y está demasiado simplificado. Recuerde también que los diferentes sistemas de archivos funcionan de manera diferente.

states muy útil para detectar parte de esta información. Aquí hay algunos ejemplos de cómo usar stat y para qué sirve:http://landoflinux.com/linux_stat_command_examples.html

5
20.08.2021, 12:54

Теги

Похожие вопросы