Я только что заметил, что ни одна из файловых систем ext {2,3,4}, которые я пытаюсь создать на жестком диске 500G, не использует все доступное пространство (466G). Я также пробовал reiser3, xfs, jfs, btrfs и даже vfat. Все они создают fs размером 466G (как показано df -h ). Тем не менее, ext * создает fs 459G. Отключение зарезервированных блоков увеличивает пространство, доступное для пользователя, но размер fs по-прежнему составляет 459G.
То же самое для жесткого диска емкостью 1 Тбайт: 932G reiserfs, 917G ext4.
Итак, что же это за разница в 1,5%? Почему это происходит и есть ли способ сделать ext заполнить весь объем?
UPD: все тесты проводятся на одной машине, на одном и том же жестком диске и т. Д. Неважно, чем 466G отличается от маркетинговой 500G. Проблема в том, что она отличается для разных ФС.
О df - показывает общий размер FS, использованный размер и свободное место. В этом случае у меня есть:
для reiserfs:
/ dev / sda1 466G 33M 466G 1% / мин
для ext4:
/ dev / sda1 459G 198M 435G 1% / мин
Если я отключу резервирование корневого блока, 435G изменится на 459G - полный размер fs (минус 198M). Но само fs по-прежнему 459G для ext4 и 466G для рейзера!
UPD2: заполнение томов реальными данными через dd:
ReiserFS:
fs: ~ # dd if = / dev / zero of = / mnt / 1 дд: запись в «/ mnt / 1»: 975702649 + 0 записей считано 975702648 + 0 записей написано скопировано 499559755776 байт (500 ГБ), 8705,61 с, 57,4 МБ / с
ext2 с отключенным резервированием блоков (mke2fs -m 0):
fs: ~ # dd if = / dev / zero of = / mnt / 1 дд: запись в «/ mnt / 1»: 960356153 + 0 записей считано 960356152 + 0 записей написано скопировано 491702349824 байта (492 ГБ), 8870,01 с, 55,4 МБ / с
Извините за русский, но я запустил его в локали по умолчанию и повторял слишком долго. Неважно, вывод dd очевиден.
Таким образом, оказывается, что mke2fs действительно создает меньшую файловую систему, чем другие mkfs.
LANG=C foo
илиLC_ALL=C foo
Ответы:
Есть две причины, по которым это правда.
Во-первых, по тем или иным причинам разработчики ОС по-прежнему сообщают о свободном месте с точки зрения системы Base 2, а производители жестких дисков сообщают о свободном месте с точки зрения системы Base 10. Например, средство записи операционной системы будет называть 1024 байта (2 ^ 10 байтов) килобайтом, а производитель жесткого диска будет называть 1000 байтов килобайтом. Эта разница довольно незначительна для килобайтов, но как только вы получите терабайты, она будет довольно значительной. Оператор записи будет называть 1099511627776 байт (2 ^ 40 байт) терабайтом, а производитель жесткого диска - 1000000000000 байт терабайтом.
Эти два разных способа говорить о размерах часто приводят к путанице.
Существует точный поддерживаемый префикс ISO для двоичных размеров . Пользовательские интерфейсы, разработанные с учетом нового префикса, будут показывать TiB, GiB (или, в более общем случае, XiB) при отображении размеров с системой префиксов base 2.
Во-вторых, df -h сообщает, сколько места доступно для вашего использования. Все файловые системы должны записывать служебную информацию, чтобы следить за вещами для вас. Эта информация занимает некоторое место на вашем диске. Как правило, не очень, но некоторые. Это также объясняет некоторые видимые потери, которые вы видите.
После того, как вы отредактировали свое сообщение, чтобы понять, что ни один из моих ответов на самом деле не отвечает на ваш вопрос, я постараюсь ответить на ваш вопрос ...
Различные файловые системы используют разные объемы пространства для служебной информации и сообщают об использовании пространства по-разному.
Например, ext2 делит диск на группы цилиндров. Затем он предварительно выделяет пространство в каждой группе цилиндров для инодов и карт свободного пространства. ext3 делает то же самое, так как в основном это ext2 + ведение журнала. И ext4 также делает то же самое, поскольку это довольно простая (и почти обратно совместимая) модификация ext3. И поскольку эти издержки метаданных фиксируются при создании файловой системы или при изменении размера, она не отображается как «использованное» пространство. Я подозреваю, что это также потому, что метаданные группы цилиндров находятся в фиксированных местах на диске, и поэтому просто подразумеваются как используемые и, следовательно, не отмеченные или не учитываемые в картах свободного пространства.
Но reiserfs не выделяет заранее какие-либо метаданные. У него нет предела inode, который фиксируется при создании файловой системы, потому что он распределяет все свои inode на лету, как это происходит с блоками данных. В большинстве случаев ему нужны структуры, описывающие корневой каталог и какую-то карту свободного пространства. Так что он использует гораздо меньше места, когда в нем ничего нет.
Но это означает, что при добавлении файлов reiserfs будет занимать больше места, поскольку будет выделять метаданные (например, inode), а также фактическое пространство данных для файла.
Я не знаю точно, как jfs и btrfs отслеживают использование пространства метаданных. Но я подозреваю, что они отслеживают это больше как reiserfs. В частности, vfat не имеет никакой концепции inode. Его карта свободного пространства (размер которой фиксирован при создании файловой системы (печально известная таблица FAT)) хранит большую часть данных, которые будет иметь индекс, а запись каталога (которая динамически распределяется) хранит остальные.
источник
Помимо проблем, о которых упоминает Omnifarious, в ext2 / 3/4 определенное количество места зарезервировано для root - это зарезервированное пространство не отображается в выходных данных df.
Например, создание небольшой файловой системы (~ 100 МБ) с параметрами по умолчанию, используя ext2 вместо 3 или 4, чтобы игнорировать пространство, которое в противном случае заняло бы журнал:
Подстройка зарезервированных опций блоков (
tune2fs
«s-m
опция устанавливает зарезервированные блоки в процентах, и-r
опционные наборы зарезервированных блоков как прямое число блоков):Как вы можете видеть в приведенном выше примере, даже при входе в систему как root
df
не показывает зарезервированное пространство в счетчике «Доступно». Зарезервированное пространство не отображается в подсчете «Используется», независимо от того, вошел ли он в систему как пользователь root или пользователь с меньшими правами. Иногда это может вызвать путаницу, когда файловая система близка к полной, если вы не ожидаете этих двух фактов.Также обратите внимание, что
tune2fs
, несмотря на свое название, она актуальна как для файловых систем ext3 и ext4, так и для ext2.источник
Что касается различий между файловыми системами, разные файловые системы организуют блоки по-разному и нуждаются в большем или меньшем количестве данных для идентификации и отслеживания блоков. Размер блока также имеет значение, так как если у вас больше или меньше блоков для одного и того же пространства, у вас больше или меньше «потерянного» пространства. Кроме того, файловые системы группируют блоки, чтобы избежать фрагментации файлов, и каждый кластер блоков имеет идентификатор определенного размера, поэтому более или менее кластеры блоков будут использовать различное физическое пространство на диске. Таким образом, разница в том, как файловая система организует физическое пространство.
Вот описание для ext2, и вы, вероятно, можете найти что-то подобное для reiserfs, но я никогда не использовал его, поэтому у меня его нет.
источник