Есть ли способ заставить ext-файловые системы использовать меньше места для себя в Linux?

48

У меня есть несколько внешних и внутренних жестких дисков, которые я использую в системе Linux. У меня есть только системы Linux, поэтому использование файловой системы Linux имело бы смысл, верно? Однако в настоящее время я использую NTFS везде, потому что она дает мне наиболее полезное пространство из жестких дисков.

Я хотел бы сейчас перейти на файловые системы Linux, в основном из-за разрешений и совместимости (например, я не могу изменить размер зашифрованного раздела LFS с помощью NTFS для изменения размера под Linux, продолжает говорить мне chkdsk под Windows).

Однако, когда я отформатировал эти жесткие диски, я опробовал несколько различных файловых систем, и каждая файловая система Linux, даже ext2, которая, насколько я знаю, не ведет журналирование, использовала много места для себя. Я не помню точных значений, но более 100 ГБ NTFS дало мне больше на 2 ТБ HDD, что очень много.

Итак, мой вопрос: есть ли способ заставить ext-файловые системы использовать меньше места для себя? Или есть другая файловая система (я пробовал ext2, ext3, ext4, NTFS и vfat - ни одна из них даже близко не подходила для полезного пространства, предлагаемого мне NTFS) с идеальной поддержкой Linux и большим используемым пространством?

Я хотел бы услышать о том, как и почему файловые системы (особенно ext2, у которых нет ведения журнала) используют намного больше места, чем NTFS, и я не знаю, где еще спросить. Я бы предпочел способ использовать ext4 без журналирования и все остальное, что занимает столько места, если это возможно.

конфетти
источник
1
Вы видели эту ветку ?
JakeGould
4
У меня есть, и он объяснил, что занимает дополнительное пространство, но разница между NTFS и ext НАМНОГО больше, чем между reiserfs и ext, и мне интересно, есть ли способ сделать его меньше. Например, на жестком диске емкостью 1 ТБ я могу использовать 989 ГБ с NTFS. Ext4 даст мне около 909 ГБ.
конфетти
Справедливо. Достойный вопрос и ответ тоже поучительный.
JakeGould
3
как вы на самом деле измеряете, какое место доступно? это важно, потому что в зависимости от того, на какие значения вы смотрите, вы можете видеть или не видеть эффект 5% -ного резервирования, например, как указано в связанном вопросе
eMBee
2
Имейте в виду, что ведение журнала в файловых системах, таких как ext3 и ext4, - это хорошо. Довольно просто отключить питание внешнего диска или отсоединить его случайно, если это USB. Когда это происходит, это часто не представляет особой проблемы, потому что он лечит себя, используя журнал при запуске резервного копирования. Без этой сети безопасности все было бы намного хуже. Это не просто случай, когда лучше.
Джо

Ответы:

97

По умолчанию ext2 и его наследники резервируют 5% файловой системы для использования пользователем root. Это уменьшает фрагментацию и снижает вероятность того, что администратор или любые демоны, принадлежащие пользователю root, останутся без места для работы.

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

5% -ное количество было установлено в 1980-х годах, когда диски были намного меньше, но были оставлены как есть. В настоящее время 1%, вероятно, достаточно для стабильности системы.

Резервирование может быть изменено с помощью -mопции tune2fsкоманды:

tune2fs -m 0 /dev/sda1

Это установит процент зарезервированных блоков на 0% (0 блоков).

Чтобы получить текущее значение (среди прочего), используйте команду:

tune2fs -l <device> 
harrymc
источник
10
Это прекрасно объяснило бы огромную разницу в используемом пространстве (5% от 2 ТБ составляют 100 ГБ). Диски не будут использоваться ни для чего, связанного с правами root или системными файлами, поэтому я думаю, что было бы целесообразно сохранить это, чтобы отключить это. Однако у меня возник вопрос: откуда программы, принадлежащие root, знают, что свободного места больше, чем программы, не принадлежащие root? Запуск без dfполномочий root против root не показывает разницы.
конфетти
12
@confetti: Поскольку VFS не отвергает их попытки записи на диск с ошибкой (до тех пор , пока объем не является на самом деле полна, конечно).
Игнасио Васкес-Абрамс
1
tune2fs -l <device>должен дать это значение среди других. 5% -ное количество было установлено в 1980-х годах, когда диски были намного меньше, но были оставлены как есть. В настоящее время 1%, вероятно, достаточно для стабильности системы.
Harrymc
7
XFS резервирует меньший из 5% или 8192 блоков (32 МБ), поэтому зарезервированный объем обычно крошечный по сравнению с размером файловой системы.
Майкл Хэмптон
5
Спасибо всем большое за объяснения. Это помогло мне понять очень. Раньше мой диск полностью заполнялся до последнего байта, но моя система не полностью отказала, теперь я понимаю, почему.
конфетти
3

если данные, которые вы намереваетесь хранить на них, являются сжимаемыми, btrfs, смонтированные с compress=zstd(или compress-force=zstd), вероятно, будут использовать значительно меньше дискового пространства, чем ext *

  • это заставит btrfs прозрачно сжимать ваши данные перед записью на диск и прозрачно распаковывать их при обратном чтении. Кроме того, ext4 предварительно выделяет все inode при создании файловой системы, btrfs создает их по мере необходимости, я думаю, это также может сэкономить место.
hanshenrik
источник
1
Вы не против добавить больше информации к этому ответу? (Как это работает, что это делает, может быть, ссылка, ...)
конфетти
@confetti, как это? patchwork.kernel.org/patch/9817875
hanshenrik
Мне очень нравится эта идея, но было бы неплохо получить больше информации о том, как это повлияет на скорость и производительность.
конфетти
2
@confetti, поскольку вы используете жесткий диск, это, вероятно, повысит производительность. Процессоры настолько быстрее, чем жесткие диски, поэтому медленная часть доступа к диску позволяет получать данные с диска; время, потраченное на сжатие или распаковку, не будет заметно.
Mark
2
С другой стороны, в настоящее время большинство типов больших файлов (например, изображения, аудио, видео и даже большинство форматов текстовых документов), как правило, уже сжаты и, как правило, не получают дополнительного сжатия. По крайней мере, не простого общего назначения, выполняемого на уровне файловой системы.
Илмари Каронен
3

Еще один момент, о котором еще не говорилось, это количество инодов, которые вы резервируете в своей файловой системе.

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

Береги себя! Это число (соответственно, отношение между пространством и числом inode) может быть установлено только во время создания файловой системы. Даже при расширении FS соотношение остается тем же.

glglgl
источник
В качестве альтернативы, если вы знаете, что собираетесь хранить много действительно крошечных файлов, вы можете увеличить количество инодов и уменьшить размер блока, чтобы не тратить столько места. (Каждый файл должен занимать минимум один блок, даже если он составляет 1 байт. Используйте ls -ls для сравнения размера с тем, что используется на диске.)
Perkins
@ Perkins Вы правы, но я думаю, что это справедливо только для ОЧЕНЬ крошечных файлов: размер блока по умолчанию - 4 КБ (IIRC), минимальный - 1 КБ. Так что выиграть не так уж и много, за исключением того, что на вашем диске действительно полно этих файлов. Но, тем не менее, я могу погрузиться в это завтра.
glglgl
2
или в качестве альтернативы используйте btrfs, который создает inode по мере необходимости. в то время как inods ext4 выделяются во время создания файловой системы и не могут быть изменены после создания, с жестким ограничением в 4 миллиарда, inodes btrfs создаются динамически по мере необходимости, а жесткий предел составляет 2 ^ 64, около 18,4 квинтиллиона, что составляет около 4,6 миллиарда раз выше, чем жесткий предел max4 ext4: p
hanshenrik
Напоминает мне о настройке катушки Usenet. ext4 будет хранить крошечные (предел где-то от 60 до 160 байт в зависимости от множества вещей) внутри самого inode.
mr.spuratic
@hanshenrik Обратите внимание, что у вас есть такое же ограничение размера блока для btrfs (с несколькими дополнительными способами обойти это), поэтому вам все равно нужно знать, какие типы файлов (большие или маленькие или оба) вы собираетесь хранить, и настройте свою файловую систему соответствующим образом, если вы хотите выжать из нее максимальный объем памяти. Хотя автоматическое сжатие очень помогает, если вы храните пушистые данные.
Перкинс