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

4068
confetti

У меня есть несколько внешних и внутренних жестких дисков, которые я использую в системе 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 без журналирования и все остальное, что занимает столько места, если это возможно.

48
Вы [видели эту тему] (https://superuser.com/questions/176126/why-ext-filesystems-dont-fill-entire-device?rq=1)? JakeGould 6 лет назад 1
У меня есть, и он объяснил, что занимает дополнительное место, но разница между NTFS и ext НАМНОГО больше, чем между reiserfs и ext, и мне интересно, есть ли способ уменьшить его. Например, на жестком диске емкостью 1 ТБ я могу использовать 989 ГБ с NTFS. Ext4 даст мне около 909 ГБ. confetti 6 лет назад 4
Справедливо. Достойный вопрос и ответ тоже поучительный. JakeGould 6 лет назад 0
как вы на самом деле измеряете, какое место доступно? это важно, потому что в зависимости от того, на какие значения вы смотрите, вы можете увидеть или не увидеть, например, эффект 5% -ного резервирования, как указано в связанном вопросе. eMBee 6 лет назад 3
Раньше я проверял свойства «Свободного пространства» в файловом менеджере, `df` и` gnome-system-monitor`. Однако у последнего, похоже, есть еще один столбец под названием «free», который фактически показывает свободное пространство, включая 5%, о которых я только что узнал. confetti 6 лет назад 0
Имейте в виду, что ведение журнала в файловых системах, таких как ext3 и ext4, - это хорошо. Довольно просто отключить питание внешнего диска или отсоединить его случайно, если это USB. Когда это происходит, это часто не представляет особой проблемы, потому что он лечит себя, используя журнал при запуске резервного копирования. Без этой сети безопасности все было бы намного хуже. Это не просто случай, когда лучше. Joe 6 лет назад 2
Это относится и к устройствам с шифрованием LUKS, верно? Я предполагаю, что восстановление журнала / fsck будет выполняться при монтировании раздела внутри LUKS-контейнера, верно? Ответ @ harrymc дает мне достаточно места, чтобы использовать ext4 и вести дневник. confetti 6 лет назад 0

3 ответа на вопрос

94
harrymc

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

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

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

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

tune2fs -m 0 /dev/sda1 

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

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

tune2fs -l <device> 
Это прекрасно объяснило бы огромную разницу в используемом пространстве (так как 5% от 2 ТБ составляют 100 ГБ). Диски не будут использоваться ни для чего, связанного с правами root или системными файлами, поэтому я думаю, что было бы сохранено, чтобы отключить это. Однако у меня возник вопрос: откуда программы, принадлежащие root, знают, что свободного места больше, чем программы, не принадлежащие root? Запуск `df` как не-root против root не показывает разницы. confetti 6 лет назад 10
@confetti: потому что VFS не отклоняет свои попытки записи на диск с ошибкой (конечно, до тех пор, пока том не заполнится). Ignacio Vazquez-Abrams 6 лет назад 12
Linux обрабатывает это внутренне с помощью uid процесса или его группы. Я предполагаю, что это делается в драйвере диска при выделении пространства, на гораздо более низком уровне, чем тот, в котором работает `df`. harrymc 6 лет назад 0
Так что, как пользователь root, невозможно определить, сколько свободного места у меня на самом деле? Что происходит, когда root на самом деле использует эти 5%? Нет ли способа «отследить» это? confetti 6 лет назад 0
У `gnome-system-monitor` есть столбец с именем` free` в мониторе файловой системы. Это показывает мне `26,5 ГБ` для 59-ГБ ext4 SSD-раздела на данный момент, в то время как` available` сообщает о `23,5 ГБ`. Я полагаю, это разница в 5%? confetti 6 лет назад 0
`tune2fs -l `должен придавать этому значение среди других. 5% -ное количество было установлено в 1980-х годах, когда диски были намного меньше, но были оставлены как есть. В настоящее время 1%, вероятно, достаточно для стабильности системы. harrymc 6 лет назад 1
XFS резервирует меньший из 5% или 8192 блоков (32 МБ), поэтому зарезервированный объем, как правило, крошечный по сравнению с размером файловой системы. Michael Hampton 6 лет назад 7
@confetti: что происходит, когда пользователь root использует 5%? 5% зарезервировано означает, что пользователь без полномочий root может писать только до тех пор, пока остается 5% свободного места. другими словами, 5% никогда не будут затронуты, пока все остальное пространство не будет израсходовано. eMBee 6 лет назад 0
Спасибо всем большое за объяснения. Это помогло мне понять очень. Раньше мой диск полностью заполнялся до последнего байта, но моя система не полностью отказала, теперь я понимаю, почему. confetti 6 лет назад 5
msgstr "пока что моя система не вышла из строя полностью *". Но это хорошо, и не должно быть изменено. RonJohn 6 лет назад 0
О да. У меня была система, которая была на 104% после установки. Только root может записывать на диск. Joshua 6 лет назад 0
@RonJohn Правильно, я говорю о внешних USB-накопителях в моем вопросе, которые хранят только несистемные файлы. confetti 6 лет назад 0
3
hanshenrik

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

  • это заставит btrfs прозрачно сжимать ваши данные перед записью на диск и прозрачно распаковывать их при обратном чтении. Кроме того, ext4 предварительно выделяет все inode при создании файловой системы, btrfs создает их по мере необходимости, я думаю, это также может сэкономить место.
Вы не против добавить больше информации к этому ответу? (Как это работает, что это делает, может быть, ссылка, ...) confetti 6 лет назад 1
@confetti как это? https://patchwork.kernel.org/patch/9817875/ hanshenrik 6 лет назад 0
Мне очень нравится эта идея, но было бы неплохо получить больше информации о том, как это повлияет на скорость и производительность. confetti 6 лет назад 0
@confetti, поскольку вы используете жесткий диск, это, вероятно, повысит производительность. Процессоры настолько быстрее, чем жесткие диски, поэтому медленная часть доступа к диску позволяет получать данные с диска; время, потраченное на сжатие или распаковку, не будет заметно. Mark 6 лет назад 2
С другой стороны, в настоящее время большинство типов больших файлов (например, изображения, аудио, видео и даже большинство форматов текстовых документов) уже сжаты и, как правило, не получают дополнительного сжатия. По крайней мере, не простого общего назначения, выполняемого на уровне файловой системы. Ilmari Karonen 6 лет назад 2
@IlmariKaronen true, но btrfs автоматически обнаруживает эти файлы и пропускает сжатие их (если только эвристика btrfs - которая очень проста, кстати, - не сработает, также эвристику можно отключить, используя «compress-force» вместо «compress», но это необычная конфигурация) ... есть также html, javascript и css ... и сжатие btrfs прекрасно работает на моем почтовом сервере, который хранит электронные письма в html-подобном формате hanshenrik 6 лет назад 0
BTRFS является разумной заменой ext4 во многих случаях, но обратите внимание, что она требует периодического обслуживания и имеет тенденцию быть немного медленнее в зависимости от того, что вы делаете. Конечно, возможность изменять его в оперативном режиме и возможности контрольной суммы RAID для предотвращения повреждения данных обычно компенсируют это в тех случаях, когда вы заполняете диски полностью, а данные изменяются медленно. Perkins 6 лет назад 0
3
glglgl

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

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

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

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

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