Ich habe gerade bemerkt, dass eines der ext {2,3,4} -Dateisysteme, die ich auf einer 500G-Festplatte erstellen möchte, nicht den gesamten verfügbaren Speicherplatz (466G) nutzt. Ich habe auch reiser3, xfs, jfs, btrfs und sogar vfat ausprobiert. Alle von ihnen erzeugen fs der Größe 466G (wie durch df -h gezeigt ). Ext * erzeugt jedoch fs von 459G. Durch Deaktivieren reservierter Blöcke wird der für den Benutzer verfügbare Speicherplatz erhöht, die Größe von fs beträgt jedoch immer noch 459 G.
Gleiches gilt für 1 TB Festplatte: 932G reiserfs, 917G ext4.
Was ist dieser Unterschied von 1,5%? Warum passiert es und gibt es die Möglichkeit, ext dazu zu bringen, das gesamte Volumen zu füllen?
UPD: Alle Tests, die auf demselben Computer, auf derselben Festplatte usw. durchgeführt wurden. Es spielt keine Rolle, wie sich 466G vom Marketing von 500G unterscheidet. Das Problem ist, dass es für verschiedene FS unterschiedlich ist.
Über df - zeigt die Gesamtgröße des FS, die verwendete Größe und den freien Speicherplatz an. In diesem Fall habe ich:
für reiserfs:
/ dev / sda1 466G 33M 466G 1% / mnt
für ext4:
/ dev / sda1 459G 198M 435G 1% / mnt
Wenn ich die Root-Block-Reservierung deaktiviere, ändert sich 435G in 459G - volle Größe von fs (minus 198M). Aber fs selbst ist immer noch 459G für ext4 und 466G für reiser!
UPD2: Füllen von Volumes mit realen Daten über dd:
reiserfs:
fs: ~ # dd if = / dev / zero von = / mnt / 1 dd: запись в «/ mnt / 1»: На устройстве кончилось место 975702649 + 0 записей считано 975702648 + 0 записей написано скопировано 499559755776 байт (500 GB), 8705,61 c, 57,4 MB / c
ext2 mit deaktivierter Blockreservierung (mke2fs -m 0):
fs: ~ # dd if = / dev / zero von = / mnt / 1 dd: запись в «/ mnt / 1»: На устройстве кончилось место 960356153 + 0 записей считано 960356152 + 0 записей написано скопировано 491702349824 байта (492 GB), 8870,01 c, 55,4 MB / c
Entschuldigung für Russisch, aber ich habe es im Standardgebietsschema ausgeführt und es zu wiederholen ist zu lang. Es spielt keine Rolle, die dd-Ausgabe ist offensichtlich.
Es stellt sich also heraus, dass mke2fs wirklich ein kleineres Dateisystem erstellt als andere mkfs.
LANG=C foo
oderLC_ALL=C foo
Antworten:
Es gibt zwei Gründe, warum dies wahr ist.
Erstens melden Autoren aus irgendeinem Grund oder aus anderen Gründen immer noch freien Speicherplatz in Bezug auf ein Base-2-System, und Festplattenhersteller melden freien Speicherplatz in Bezug auf ein Base-10-System. Beispielsweise nennt ein Betriebssystemschreiber 1024 Bytes (2 ^ 10 Bytes) pro Kilobyte, und ein Festplattenhersteller würde 1000 Bytes pro Kilobyte nennen. Dieser Unterschied ist für Kilobyte ziemlich gering, aber sobald Sie Terabyte erreicht haben, ist er ziemlich bedeutend. Ein OS-Writer nennt 1099511627776 Bytes (2 ^ 40 Bytes) ein Terabyte, und ein Festplattenhersteller nennt 1000000000000 Bytes ein Terabyte.
Diese zwei unterschiedlichen Arten, über Größen zu sprechen, führen häufig zu großer Verwirrung.
Es gibt ein fleckig unterstütztes ISO-Präfix für Binärgrößen . Benutzeroberflächen, die unter Berücksichtigung des neuen Präfixes entwickelt wurden, zeigen TiB, GiB (oder allgemeiner XiB) an, wenn Größen mit einem Basis-2-Präfixsystem angezeigt werden.
Zweitens gibt df -h an, wie viel Speicherplatz für Ihre Verwendung verfügbar ist. Alle Dateisysteme müssen Reinigungsinformationen schreiben, um die Dinge für Sie im Auge zu behalten. Diese Informationen belegen einen Teil des Speicherplatzes auf Ihrem Laufwerk. Nicht generell sehr viel, aber einige. Das erklärt auch einen Teil des scheinbaren Verlusts, den Sie sehen.
Nachdem Sie Ihren Beitrag bearbeitet haben, um zu verdeutlichen, dass keine meiner Antworten Ihre Frage tatsächlich beantwortet, werde ich versuchen, Ihre Frage zu beantworten ...
Unterschiedliche Dateisysteme verwenden unterschiedliche Speicherplatzmengen für Verwaltungsinformationen und melden diese Speicherplatznutzung auf unterschiedliche Weise.
Zum Beispiel unterteilt ext2 die Platte in Zylindergruppen. Anschließend wird in jeder Zylindergruppe Platz für Inodes und Freiraumkarten vorab zugewiesen. ext3 macht das Gleiche, da es im Grunde genommen ext2 + Journaling ist. Und ext4 macht genau das Gleiche, da es eine ziemlich einfache (und fast abwärtskompatible) Modifikation von ext3 ist. Und da dieser Metadaten-Overhead bei der Erstellung des Dateisystems oder bei der Größenänderung behoben wird, wird er nicht als "verwendeter" Speicherplatz gemeldet. Ich vermute, dass dies auch daran liegt, dass sich die Metadaten der Zylindergruppe an festen Stellen auf der Festplatte befinden und daher einfach als verwendet impliziert werden und daher in Freiraumkarten nicht markiert oder berücksichtigt werden.
Reiserfs weist jedoch keinerlei Metadaten vorab zu. Es gibt kein Inode-Limit, das bei der Erstellung des Dateisystems festgelegt ist, da alle Inodes im laufenden Betrieb zugewiesen werden, wie dies bei Datenblöcken der Fall ist. Es benötigt höchstens einige Strukturen, die das Stammverzeichnis beschreiben, und eine Art Freiraumkarte. Es verbraucht also viel weniger Platz, wenn es nichts enthält.
Dies bedeutet jedoch, dass reiserfs beim Hinzufügen von Dateien mehr Speicherplatz beanspruchen, da Metadaten (wie Inodes) sowie der tatsächliche Datenbereich für die Datei zugewiesen werden.
Ich weiß nicht genau, wie jfs und btrfs die Nutzung des Metadatenbereichs verfolgen. Aber ich vermute, sie verfolgen es eher wie reiserfs. Insbesondere vfat hat überhaupt kein Inode-Konzept. Die Karte des freien Speicherplatzes (deren Größe beim Erstellen des Dateisystems festgelegt ist (die berüchtigte FAT-Tabelle)) speichert einen Großteil der Daten, die ein Inode benötigen würde, und der Verzeichniseintrag (der dynamisch zugewiesen wird) speichert den Rest.
quelle
Neben den von Omnifarious erwähnten Problemen ist bei ext2 / 3/4 ein bestimmter Speicherplatz für root reserviert - dieser reservierte Speicherplatz wird in der Ausgabe von df nicht angezeigt.
Erstellen Sie beispielsweise ein kleines Dateisystem (~ 100 MB) mit Standardoptionen, indem Sie ext2 anstelle von 3 oder 4 verwenden, um Speicherplatz zu ignorieren, der sonst vom Journal belegt würde:
Optimieren der Option für reservierte Blöcke (Mit
tune2fs
der-m
Option werden die reservierten Blöcke als Prozentsatz und mit der-r
Option die reservierten Blöcke als gerade Anzahl von Blöcken festgelegt):Wie Sie im obigen Beispiel sehen können, wird
df
der reservierte Speicherplatz in der Anzahl "Verfügbar" nicht angezeigt, selbst wenn Sie als Root angemeldet sind . Der reservierte Speicherplatz wird auch nicht in der Anzahl "Verwendet" angezeigt, unabhängig davon, ob Sie als Root oder als weniger privilegierter Benutzer angemeldet sind. Dies kann manchmal zu Verwirrung führen, wenn ein Dateisystem nahezu voll ist, wenn Sie diese beiden Fakten nicht erwarten.Beachten Sie auch, dass es
tune2fs
trotz seines Namens sowohl für ext3- und ext4-Dateisysteme als auch für ext2-Dateisysteme relevant ist.quelle
Über den Unterschied zwischen Dateisystemen, verschiedene Dateisysteme organisieren Blöcke unterschiedlich und benötigen mehr oder weniger Daten, um Blöcke zu identifizieren und zu verfolgen. Die Blockgröße macht auch einen Unterschied, da Sie mehr oder weniger Blöcke für denselben Speicherplatz haben und mehr oder weniger "verlorenen" Speicherplatz haben. Außerdem gruppieren Dateisysteme Blöcke, um das Fragmentieren von Dateien zu vermeiden, und jeder Blockcluster hat eine Kennung von einer bestimmten Größe, sodass mehr oder weniger Blockcluster unterschiedlichen physischen Speicherplatz auf der Festplatte verwenden. Der Unterschied besteht also darin, wie das Dateisystem den physischen Raum organisiert.
Hier ist eine Beschreibung für ext2 und Sie können wahrscheinlich etwas Ähnliches für reiserfs finden, aber ich habe es nie benutzt, also habe ich keine.
quelle