In Foren fallen mir immer wieder Fragen von Linux-Anwendern zur Kapazität Ihrer Festplatten auf. Man wundert sich oft, warum nach dem Formatieren einer etwa 500GB großen Festplatte deutlich weniger freier Plattenplatz angezeigt wird, als eigentlich erwartet.

Dies liegt zum Einen an der unterschiedlichen Rechnungsweise der Festplattenhersteller, zum Anderen am Dateisystem Ext2/3 das üblicherweise einen Teil der Festplatte für das System reserviert. Ich versuche das Thema kurz zusammenzufassen…

Das Einheiten-Chaos

Der primäre Unterschied liegt in der unterschiedlichen rechenweise von Festplattenherstellern und Informatikern. In der “normalen” Welt sind wir die 10 als Vorsatz für Maßeinheiten gewohnt. Bei den Gewichtseinheiten wird immer mit 10 hoch irgendwas gerecht, also beispielsweise…

  • 1 Kilogramm sind 10^3 Gramm
  • 1 Tonne sind 10^3 Kilogramm oder 10^6 Gramm
  • usw…

Informatiker rechnen nun meist Binär. Daher verwenden sie die 2 als Präfix für Potenzen.

  • 1 Byte entspricht 8 Bit
  • 1 Kilobyte sind 2^10 Byte, also 1024 Byte
  • 1 Megabyte sind 2^20 Byte, also 1.048.576 Byte
  • usw…

Bei auf der 2 basierenden Einheiten sollte man daher eigentlich von Kibibyte, Mebibyte und Co. reden, doch im allgemeinen Sprachgebrauch macht das praktisch niemand.

Die Folge dieser unterschiedlichen Rechenweise: Eine vom Hersteller mit 1000 GB Speicherkapazität angegebene Festplatte wird vom Betriebsystem mit nur rund 932 GB ausgewiesen. Dem Marketing- und Kaufleuten der Festplattenherstellern kommt die größer aussehende Auszeichnung natürlich besser, als die “kleinere” Rechenweise der Informatiker.

Viel mehr will ich gar nicht auf diesen Unterschied eingehen. In der Wikipedia und selbst auf Spiegel Online finden sich wirklich gute Artikel, die das Thema auch dem Laien und nicht-Mathematiker erklären…

Ext2, Ext3 und Ext4 reservieren Speicher

Das eigentliche Thema ist die Tatsache, dass bei der Formatierung einer Festplatte mit Ext2 oder Ext3 (Ext4 scheint auch noch zu machen, allerdings scheitert tune2fs bei Ext4) als Dateisystem ein Teil der Festplatte für das System reserviert wird.

Zum Warum und Weshalb komme ich gleich, erst einmal kurz ein paar Zahlen… Ich demonstriere das an einer alten Festplatte mit vom Hersteller angegebenen 4,32GB. Schaut man sich die Ausgabe von df -h an, so sieht man dass von den real freien 4GB Speicherplatz nur 3,7 GB verfügbar sind

$ df -h
Dateisystem            Größe Benut  Verf Ben% Eingehängt auf
[...]
/dev/sdh1             4,0G  137M  3,7G   4% /media/disk-1

Der Grund dafür liegt darin, dass bei Ext{2,3,4} als Dateisystem von Haus aus 5% Speicherplatzes einer Partition für das System reserviert werden. Dies soll Fragmentierung verhindern und garantieren, dass wichtige Dienste IMMER Schreiben können, selbst wenn ein User des Systems die Platte zugemüllt hat. Die man-Page von tune2fs beschreibt die Funktion so…

$ man tune2fs
[...]
-m reserved-blocks-percentage

Set the percentage of the filesystem which may only be allocated by privileged processes. Reserving some number of filesystem blocks for use by privileged processes is done to avoid filesystem fragmentation, and to allow system  daemons,  such  as  syslogd(8),  to continue to function correctly after non-privileged processes are prevented from writing to  the  filesystem. Normally, the default percentage of reserved blocks is 5%.

Bei modernen Platten ist dieser reservierte Speicherbereich mit 5% natürlich recht groß, bei einer Platte mit 1000 GB werden zum Beispiel 50GB reserviert. Gerade wenn man eine Festplatte nur als Datenspeicher benutzt, kann man diesen Wert ruhig runtersetzen. Über den Befehl…

$ sudo tune2fs -m [Prozentsatz] /dev/sd[xy]

kann man dies über ein Terminal machen. Die Partition kann währenddessen eingehängt (aka gemountet) bleiben. Den Prozentsatz kann Ihr dabei frei wählen. Die Partition muss man natürlich korrekt angegeben, Ihr findet die Partition etwa über fdisk heraus…

$ sudo fdisk -l
[...]
Platte /dev/sdh: 4327 MByte, 4327464960 Byte
255 Köpfe, 63 Sektoren/Spuren, 526 Zylinder
Einheiten = Zylinder von 16065 × 512 = 8225280 Bytes
Disk identifier: 0x16b6ac7b

   Gerät  boot.     Anfang        Ende     Blöcke   Id  System
/dev/sdh1               1         526     4225094+  83  Linux

Habt Ihr eine Partition nur mit Daten, so könnt Ihr den reservierten Speicherplatz komplett deaktivieren. Nach einem…

$ sudo tune2fs -m 0 /dev/sdh1
Setze den Prozentsatz reservierter Böcke auf 0% (0 Blöcke)

…steht auf der vorhin gezeigte Festplatte nun (fast) der komplette Speicherplatz auch zur Verfügung.

$ df -h
[...]
/dev/sdh1             4,0G  137M  3,9G   4% /media/disk-1

Die bereits nach der Formatierung belegten MB dienen dem Journal des Ext3-Dateisystem. “Ganz leer” bekommt Ihr die Platte mit Ext3 also nie.