Gibt es eine Möglichkeit, dass ext-Dateisysteme unter Linux weniger Platz für sich beanspruchen?

48

Ich habe eine Reihe von externen und internen Festplatten, die ich auf einem Linux-System verwende. Ich habe nur Linux-Systeme, also wäre die Verwendung eines Linux-Dateisystems nur sinnvoll, oder? Allerdings verwende ich derzeit überall NTFS, da ich dadurch den größtmöglichen Speicherplatz auf Festplatten habe.

Ich würde jetzt jedoch gerne auf Linux-Dateisysteme umsteigen, hauptsächlich wegen der Berechtigungen und der Kompatibilität (z. B. kann ich meine LUKS-verschlüsselte NTFS-Partition nicht zur Größenänderung unter Linux veranlassen, was mir immer wieder sagt, dass ich unter Windows chkdsk verwenden soll).

Als ich diese Festplatten formatierte, habe ich eine Reihe verschiedener Dateisysteme ausprobiert und jedes Linux-Dateisystem, sogar ext2, das meines Wissens kein Journaling hat, hat viel Platz für sich beansprucht. Ich kann mich nicht an exakte Werte erinnern, aber NTFS brachte mir mehr als 100 GB auf eine 2-TB-Festplatte, was sehr viel ist.

Meine Frage lautet also: Gibt es eine Möglichkeit, dass ext-Dateisysteme weniger Speicherplatz für sich selbst beanspruchen? Oder gibt es ein anderes Dateisystem (ich habe ext2, ext3, ext4, NTFS und vfat ausprobiert - keines kam dem von NTFS angebotenen nutzbaren Speicherplatz auch nur nahe) mit perfekter Linux-Unterstützung und großartigem nutzbarem Speicherplatz?

Ich würde gerne erfahren, wie und warum Dateisysteme (insbesondere ext2 ohne Journaling) so viel mehr Speicherplatz als NTFS belegen, und ich weiß nicht, wo ich sonst nachfragen soll. Ich bevorzuge meistens eine Möglichkeit, ext4 ohne Journaling zu verwenden, und alles andere, das so viel Platz beansprucht, wenn das möglich ist.

Konfetti
quelle
1
Hast du diesen Thread gesehen ?
JakeGould
4
Ich habe und es erklärt, was den zusätzlichen Speicherplatz verbraucht, aber der Unterschied zwischen NTFS und ext ist VIEL größer als zwischen reiserfs und ext, und ich frage mich, ob es eine Möglichkeit gibt, ihn kleiner zu machen. Zum Beispiel kann ich auf einer 1-TB-Festplatte 989 GB mit NTFS verwenden. ext4 würde mir um die 909GB geben.
Konfetti
Fair genug. Anständige Frage und die Antwort ist auch aufschlussreich.
JakeGould
3
Wie messen Sie tatsächlich, welcher Platz zur Verfügung steht? Dies ist wichtig, da abhängig von den von Ihnen betrachteten Werten die Wirkung der 5%
-Reservierung
2
Denken Sie daran, dass die Aufzeichnung auf Dateisystemen wie ext3 und ext4 eine gute Sache ist. Es ist ziemlich einfach, die Stromversorgung für ein externes Laufwerk zu verlieren oder es versehentlich zu entfernen, wenn es sich um ein USB-Laufwerk handelt. Ohne dieses Sicherheitsnetz wäre es noch viel schlimmer. Es geht nicht nur darum, dass mehr besser ist.
Joe

Antworten:

97

Standardmäßig reservieren ext2 und seine Nachfolger 5% des Dateisystems für den Root-Benutzer. Dies verringert die Fragmentierung und verringert die Wahrscheinlichkeit, dass dem Administrator oder Daemons, die sich im Root-Besitz befinden, kein Platz zum Arbeiten zur Verfügung steht.

Diese reservierten Blöcke verhindern, dass Programme, die nicht als Root ausgeführt werden, Ihre Festplatte füllen. Ob diese Überlegungen den Kapazitätsverlust rechtfertigen, hängt davon ab, wofür das Dateisystem verwendet wird.

Der Betrag von 5% wurde in den 1980er Jahren festgelegt, als die Festplatten viel kleiner waren, wurde aber so belassen, wie sie waren. Heutzutage ist 1% wahrscheinlich genug für die Systemstabilität.

Die Reservierung kann mit der -mOption des tune2fsBefehls geändert werden :

tune2fs -m 0 /dev/sda1

Dies setzt den Prozentsatz der reservierten Blöcke auf 0% (0 Blöcke).

Verwenden Sie den folgenden Befehl, um (unter anderem) den aktuellen Wert abzurufen:

tune2fs -l <device> 
Harrymc
quelle
10
Dies würde den enormen Unterschied im nutzbaren Speicherplatz perfekt erklären (da 5% von 2 TB 100 GB sind). Die Datenträger werden nicht für Root- oder Systemdateien verwendet. Ich denke, es wäre sicher, sie zu deaktivieren. Ich habe jedoch eine Frage: Woher wissen Root-Programme, dass mehr freier Speicherplatz zur Verfügung steht als Nicht-Root-Programme? Wenn Sie dfals Nicht-Root- Benutzer oder als Root-Benutzer ausgeführt werden, besteht kein Unterschied.
Konfetti
12
@confetti: Weil das VFS die Versuche, auf die Festplatte zu schreiben, nicht mit einem Fehler ablehnt (bis das Volume tatsächlich voll ist, natürlich).
Ignacio Vazquez-Abrams
1
tune2fs -l <device>sollte diesen Wert unter anderem geben. Der Betrag von 5% wurde in den 1980er Jahren festgelegt, als die Festplatten viel kleiner waren, wurde aber so belassen, wie sie waren. Heutzutage ist 1% wahrscheinlich genug für die Systemstabilität.
Harrymc
7
XFS reserviert den kleineren von 5% oder 8192 Blöcken (32 MiB), daher ist die reservierte Menge im Vergleich zur Größe des Dateisystems im Allgemeinen winzig.
Michael Hampton
5
Vielen Dank an alle für die Erklärungen. Das hat mir sehr geholfen zu verstehen. Früher war meine Festplatte bis zu ihrem letzten Byte voll, aber mein System ist nicht vollständig ausgefallen. Jetzt verstehe ich, warum.
Konfetti
3

Wenn die Daten, die Sie speichern möchten, komprimierbar sind, würde btrfs, das mit compress=zstd(oder compress-force=zstd) gemountet wird, wahrscheinlich erheblich weniger Speicherplatz als ext * belegen.

  • Dadurch komprimiert btrfs Ihre Daten transparent, bevor sie auf die Festplatte geschrieben werden, und dekomprimiert sie beim Zurücklesen transparent. Außerdem reserviert ext4 alle Inodes bei der Dateisystemerstellung im Voraus, btrfs erstellt sie nach Bedarf, was möglicherweise auch Platz spart.
Hanshenrik
quelle
1
Haben Sie etwas dagegen, dieser Antwort weitere Informationen hinzuzufügen? (Wie es funktioniert, was es tut, vielleicht eine Referenz, ...)
Konfetti
@confetti gefällt das? patchwork.kernel.org/patch/9817875
hanshenrik
Ich mag diese Idee wirklich, aber mehr Informationen darüber, wie sich dies auf Geschwindigkeit und Leistung auswirken würde, und so weiter, wären nett.
Konfetti
2
@confetti, da Sie eine Festplatte verwenden, wird dies wahrscheinlich die Leistung verbessern. CPUs sind so viel schneller als Festplatten, dass der langsame Teil des Festplattenzugriffs die Daten auf und von der Festplatte abruft. Die Zeit, die zum Komprimieren oder Dekomprimieren aufgewendet wird, ist nicht spürbar.
Mark
2
Andererseits sind die meisten großen Dateitypen (z. B. Bilder, Audio, Video und sogar die meisten Rich-Text-Dokumentformate) in der Regel bereits komprimiert und profitieren im Allgemeinen nicht von einer zusätzlichen Komprimierung. Zumindest nicht von der Art eines einfachen Allzweckgeräts, das auf Dateisystemebene ausgeführt wird.
Ilmari Karonen
3

Ein weiterer Punkt, über den noch nicht gesprochen wurde, ist die Anzahl der Inodes, die Sie in Ihrem Dateisystem reservieren.

Standardmäßig erstellt mkfs eine Reihe von Inodes, die es ermöglichen sollen, viele sehr kleine Dateien in Ihr Dateisystem zu kopieren. Wenn Sie wissen, dass die Dateien sehr groß sind und Sie nur eine kleine Anzahl von Dateien auf dem FS ablegen, können Sie die Anzahl der Inodes reduzieren.

Sich kümmern! Diese Anzahl (bzw. das Verhältnis zwischen Leerzeichen und Anzahl der Inodes) kann nur zum Zeitpunkt der Dateisystemerstellung festgelegt werden. Auch bei Verlängerung des FS bleibt das Verhältnis gleich.

glglgl
quelle
Wenn Sie wissen, dass Sie viele wirklich kleine Dateien speichern werden, können Sie alternativ die Anzahl der Inodes erhöhen und die Blockgröße verringern, damit Sie nicht so viel Speicherplatz verschwenden. (Jede Datei muss mindestens einen Block belegen, auch wenn es 1 Byte ist. Verwenden Sie ls -ls, um die Größe mit der auf der Festplatte verwendeten zu vergleichen.)
Perkins
@Perkins Sie haben Recht, aber ich denke, dies gilt nur für SEHR kleine Dateien: Die Standardblockgröße beträgt 4 KB (IIRC), die Mindestgröße 1 KB. Es ist also nicht so viel zu gewinnen, außer dass Ihre Festplatte wirklich voll mit diesen Dateien ist. Aber trotzdem könnte ich morgen darauf eingehen.
Glglgl
2
Alternativ können Sie auch btrfs verwenden, um nach Bedarf Inodes zu erstellen. Während die Inodes von ext4 zum Zeitpunkt der Dateisystemerstellung zugewiesen werden und nach der Erstellung nicht in der Größe geändert werden können, werden die Inodes von btrfs nach Bedarf dynamisch erstellt, und das harte Limit liegt bei 2 ^ 64, etwa 18,4 Billionen, was etwa 4,6 Milliarden entspricht mal höher als die harte Grenze eines maxed ext4: p
hanshenrik
Erinnert mich daran, eine Usenet-Spule einzurichten. ext4 speichert winzig (das Limit liegt zwischen 60 und 160 Byte, abhängig von vielen Dingen) innerhalb des Inodes.
mr.spuratic
@hanshenrik Beachten Sie, dass Sie bei btrfs die gleiche Blockgrößenbeschränkung haben (mit ein paar zusätzlichen Möglichkeiten, dies zu umgehen), sodass Sie immer noch wissen müssen, welche Art von Dateien (groß oder klein oder beides) Sie speichern und Passen Sie Ihr Dateisystem entsprechend an, wenn Sie den maximalen Speicherplatz herausholen möchten. Die Verfügbarkeit der automatischen Komprimierung hilft jedoch einiges, wenn Sie fluffige Daten speichern.
Perkins