Почему файловые системы ext не заполняют все устройство?

8

Я только что заметил, что ни одна из файловых систем 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.

Ineu
источник
2
Существует определенное количество накладных расходов с каждой FS ... Я не знаю ни одного, который позволит вам иметь доступ ко всему доступному физическому пространству на диске.
блудница
Я рекомендую изменить отображаемое имя и поместить то, что кажется вашим блогом, в поле веб-сайта вашего профиля, чтобы сделать его менее заметным в рекламе.
Hello71
1
Здравствуйте71, спасибо за совет. Сайт на самом деле не имеет значения, он только для openid.
Ineu
На будущее, если вы хотите, чтобы программа выводилась на английском языке, используйте LANG=C fooилиLC_ALL=C foo
Alan Pearce
Алан, правильно, спасибо. Это может быть даже LANG = или LANG = POSIX. Но, как я уже сказал, этот процесс занимает много времени, поэтому повторный запуск его с другим языком только для пары строк нецелесообразен :) В любом случае, это доказывает проблему с размером FS для ext2 :(
Ineu

Ответы:

19

Есть две причины, по которым это правда.

Во-первых, по тем или иным причинам разработчики ОС по-прежнему сообщают о свободном месте с точки зрения системы 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)) хранит большую часть данных, которые будет иметь индекс, а запись каталога (которая динамически распределяется) хранит остальные.

всевозможный
источник
2
Для этого есть стандарт ISO: en.wikipedia.org/wiki/Binary_prefix
Бобби,
@Bobby - Да, и он начал появляться на экранах. Я добавлю это к моему ответу. Спасибо!
Всезнающий
8

Помимо проблем, о которых упоминает Omnifarious, в ext2 / 3/4 определенное количество места зарезервировано для root - это зарезервированное пространство не отображается в выходных данных df.

Например, создание небольшой файловой системы (~ 100 МБ) с параметрами по умолчанию, используя ext2 вместо 3 или 4, чтобы игнорировать пространство, которое в противном случае заняло бы журнал:

swann:/tmp# dd if=/dev/zero of=./loop.fs bs=10240 count=10240
swann:/tmp# mkfs.ext2 loop.fs
swann:/tmp# mkdir loop
swann:/tmp# mount -text2 -oloop loop.fs loop
swann:/tmp# df loop
Filesystem           1K-blocks      Used Available Use% Mounted on
/tmp/loop.fs             99150      1550     92480   2% /tmp/loop

Подстройка зарезервированных опций блоков ( tune2fs«s -mопция устанавливает зарезервированные блоки в процентах, и -rопционные наборы зарезервированных блоков как прямое число блоков):

swann:/tmp# umount loop
swann:/tmp# tune2fs -m 25 loop.fs
swann:/tmp# mount -text2 -oloop loop.fs loop
swann:/tmp# df loop
Filesystem           1K-blocks      Used Available Use% Mounted on
/tmp/loop.fs             99150      1550     72000   3% /tmp/loop

swann:/tmp# umount loop
swann:/tmp# tune2fs -m 0 loop.fs
swann:/tmp# mount -text2 -oloop loop.fs loop
swann:/tmp# df loop
Filesystem           1K-blocks      Used Available Use% Mounted on
/tmp/loop.fs             99150      1550     97600   2% /tmp/loop

Как вы можете видеть в приведенном выше примере, даже при входе в систему как root dfне показывает зарезервированное пространство в счетчике «Доступно». Зарезервированное пространство не отображается в подсчете «Используется», независимо от того, вошел ли он в систему как пользователь root или пользователь с меньшими правами. Иногда это может вызвать путаницу, когда файловая система близка к полной, если вы не ожидаете этих двух фактов.

Также обратите внимание, что tune2fs, несмотря на свое название, она актуальна как для файловых систем ext3 и ext4, так и для ext2.

Дэвид Спиллетт
источник
Спасибо за ответ. Нет, дело не в зарезервированных блоках. Обновленный вопрос.
Ineu
0

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

Вот описание для ext2, и вы, вероятно, можете найти что-то подобное для reiserfs, но я никогда не использовал его, поэтому у меня его нет.

Laurent
источник
2
Reiserfs и btrfs необычны тем, что почти вся бухгалтерская информация распределяется динамически. При установке файловой системы выделяются только копии суперблока и растровые изображения свободного пространства. Конечно, это означает, что фактический объем доступного пространства для данных менее детерминирован для этих файловых систем.
Всезнающий
@ Omnifarious +1 - Итак, если я хорошо разбираюсь в reiserfs и btrfs, сообщаемое доступное пространство вначале больше, но оно будет использоваться как с данными, так и с бухгалтерской информацией, а не только с данными, верно?
Лоран
@ laurent-rpnet - Да, это правильно. В случае с btrfs это еще интереснее. btrfs может реализовывать RAID на основе отдельных файлов, поэтому его отчеты о доступном свободном пространстве еще сложнее определить, поскольку он не может просто предположить, что на каждый блок, используемый для данных, будет использоваться определенное количество дополнительного пространства. Кроме того, он позволяет создавать очень дешевые копии на основе COW, поэтому запись блока в середине существующего файла может выделить место.
Всевышний
А как насчет XFS, JFS и VFAT? Трудно поверить, что такие примитивные fs, как FAT32, более динамичны, чем ext4.
Ineu
FAT32 также имеет блоки, зарезервированные для организации. В чем здесь смысл динамики? При динамическом размещении FAT32 не имеет динамического размещения, как ext, и также не отображает все блоки на диске, доступные для данных. Она также имеет некоторые ограничения. Файловая система ext4 не имеет аналогичной системе разрешений, в то время как ext4 имеет разрешения POSIX и ACL, а максимальный размер файла составляет 4 ГБ для FAT32 и 2 ТБ для ext3 (не уверен насчет ext4, но он должен быть как минимум одинаковым).
Лоран