linux:dateisysteme-und-formatierung

Dateisysteme und Formatierung

Bevor man Datenträger verwenden kann, muß auf den Partitionen auch noch ein Dateisystem angelegt werden, oder wie man (eigentlich nicht ganz korrekt) sagt, formatiert werden.

Linux kennt nicht nur ein Dateisystem, sondern sehr viele (50+) teile sehr spezielle Dateisysteme. Diese werden lokal, remote und im cluster eingesetzt und haben deshalb unterschiedliche Vor- und Nachteile.

Oft verwendet werden ext4 und XFS. Aber auch das von Solaris stammende ZFS hat viele Anhänger. Eine genaue Übersicht findet sich bei Wikipedia (Eng).

  • ext2 ist das älteste dieser Systeme und gilt daher als am stabilsten und ausgereiftesten. Es hat jedoch den entscheidenden Nachteil das es kein sogenanntes Journal führt. Bei einem journalisierenden Dateisystem muß nach einem Absturz kein zeitaufwendiger Dateisystemcheck beim nächsten Booten durchgeführt werden.
  • Aus diesem Grund ist der Nachfolger ext3 entstanden, welcher nichts weiter als ein ext2-System mit Journal ist. Zu beachten ist das mit 4k-Block size (standard auf x86/amd64) schon bei 2TiB-Dateigröße Schluss ist:
Block-größe 1) maximale Dateigröße maximale Dateisystemgröße
1 KiB 16 GiB 2 TiB
2 KiB 256 GiB 8 TiB
4 KiB 2 TiB 16 TiB
8 KiB 2) 2 TiB 32 TiB
  • ext4 ist der Nachfolger von ext3 und seit kernel-Version 2.6.28 als stabil markiert. Vorhandene ext3-Dateisysteme können mit diesem Befehl konvertiert werden:
    tune2fs -O extents,uninit_bg,dir_index /dev/sda1

    3) Anschließend ein Dateisystemcheck:

    fsck -fCVD /dev/sda1

    Von da an kann das neue Dateisystem nicht mehr als ext3 gemountet werden, eine Konvertierung zurück ist ausgeschlossen. Ein ext3-Dateisystem kann jedoch als ext4 gemountet werden Es bleibt dennoch ein ext3-System, bis es explizit konvertiert wird. Die maximale Dateigröße steigt bei 4k Blöcken auf 16TiB. Bis 29.11.2011 limitierten die e2fsprogs die maximale Volumegröße auf 16 TB, mit der Version 1.42 von e2fsprogs ist diese Hürde entfallen, für Online-Resizing ist aber ein Kernel ab Version 3.2 erforderlich 4), offline funktioniert es immer noch nicht. Siehe auch: ext3 und reiserfs im Detail, The Ongoing Evolution of Ext4 le system und Quo vadis Linux File Systems: An operations point of view on EXT4 and BTRFS.

  • ReiserFS ist in der Version 3 seit einiger Zeit im Kernel enthalten. Es sticht bei Festplattenbenchmarks vor allem hervor wenn es um das schreiben sehr vieler kleiner Dateien, bzw. um sehr viele Dateien pro Verzeichnis geht. Allerdings haben (fast?) alle große Distributionen nicht (mehr) Reiserfs als Standarddateisystem, auch OpenSuse nicht mehr (ab der 10.2-Version). Die Gründe lassen sich in der entsprechenden Ankündigungs-mail ablesen. Mit der Version4 sind weitere Neuerungen eingeführt worden, bisher ist diese Version allerdings nur bei der Distribution Linspire enthalten und nicht im Standard-kernel. Da keine treibende Programmierekraft hinter Reiser4 steht sieht dessen Zukunft nicht allzu gut aus.
  • XFS ist ein Dateisystem das ursprünglich von SGI für deren kommerzielles Unix Irix entwickelt wurde und von SGI auf Linux portiert wurde. Es hat Journaling und arbeitet insbesondere bei sehr großen Dateien schnell. Siehe XFS Faq.

Wer konservativ ist, oder sich nicht entscheiden kann, wählt einfach mit einem aktuellen Kernel einfach ext4.

Ein Dateisystem wird mit dem Befehl mkfs angelegt. mkfs ist dabei eigentlich nur eine Art Verteiler, welcher dann das eigentliche Pogramm aufruft, da jedes Dateisystem seinen eigenen Befehl zum erzeugen hat. Der Parameter -t sagt mkfs welches Dateisystem wir anlegen wollen. Dann muß mkfs natürlich auch noch wissen, welche Partition wir formatieren wollen, daher muß auch noch der Gerätename mit Partitionsnummer angegeben werden:

mkfs -t reiserfs /dev/hda1

legt z. B. eine ReiserFS-Partition auf hda1 an. mkfs ruft dabei in Wirklichkeit mkreiserfs auf welches das ReiserFS anlegt. Der direkte Befehl um ext2/ext3 Partitionen anzulegen, lautet mke2fs, wobei der Parameter -j zusätzlich ein Journal anlegt (also aus dem ext2 ein ext3 Dateisystem macht).

  • Handelt es sich jedoch um eine Swap-Partition, wird diese mit mkswap gefolgt vom Gerätenamen mit Partitionsnummer formatiert.
  • Wer eine Fat-Partition möchte, kann diese mit mkdosfs gefolgt von der Gerätebezeichnung anlegen.

Dateisysteme mit Journaling enthalten ein Journal (eine Art Logbuch) für Datenverändernde Transaktionen. Bei Störungen (Strom weg etc.) fällt das beim nächsten Check des Journals auf und der Fehler kann behoben werden.

Daher benötigen Dateisysteme mit Journalen nicht nach jedem Absturz des Systems einen kompletten Dateisystemcheck und man spart Bootzeit und sichert dennoch Datenkonsistenz. Vertreter sind z.B. ext3 und ReiserFS.

Die meisten Distributionen checken standardmäßig nach einer bestimmten Zeit oder einer bestimmten Anzahl von mounts die Dateisysteme durch. Wenn man dennoch auf solchen Datenträgern von Zeit zu Zeit ein Dateisystemcheck durch führen will gibt es dazu das Kommando fsck das mit root-Rechten ausgeführt werden muss und bei einem nicht eingehängten Dateisystem angewendet werden kann.

Bei (automatisch beim booten) gemounteten Datenträgern wird ein eventueller Dateisystemcheck vorgenommen, wenn der letzte Parameter der /etc/fstab eine 1 oder 2 ist, wobei Partitionen mit einer 1 zuerst gecheckt werden, dann die mit einer 2. Dieser Check wird von Zeit zu Zeit ausgeführt, was man dann an einer längeren Bootzeit bemerkt. Mit fsck -t Dateisystemtyp Gerätename kann dieser Check auch manuell vorgenommen werden. Dabei darf der Datenträger nicht gemountet oder allenfalls nur read only gemountet sein.

mit tune2fs kann man u.A. folgende Dateisystemparameter bei ext2/3 einstellen:

Möglichkeiten Welcher Parameter
Die Anzahl der mounts nach dem das Dateisystem mal wieder komplett gecheckt wird -c [Zahl]
Den Speicherplatz (prozentual) der für root reservierten ist -m [Zahl]
Den Speicherplatz (Blöcke) die für root reservierten ist -r [Zahl]
Fehlerverhalten (continue, remount-ro, panic) -e
Datenträgerbezeichnung (Volume-Label) setzen -L [Bezeichnung]

Der Befehl

sudo tune2fs -c 40 -i 60 -m 0 -L filme1 /dev/sda1

würde also beim 40 mounts oder nach 60 Tagen (was eher zutrifft) wieder das Dateisystem komplett checken, für root keinen Speicherplatz reservieren und die Bezichnung/das Label „filme1“ vergeben. Genaueres liefert der Befehl man tune2fs .

Einige Hersteller (Netapp, …) formatieren Datenträger auf 520B Sektorgröße, die muss man wieder zeitaufwendig umformatieren:

smartctl -i /dev/$Disk
[...]
Logical block size:   520 bytes

apt install sg3-utils
:!: --format zerstört alle Daten! sg_format -v --format --size=512 /dev/$Disk

bei 4k protection ist u.U. fmtpinfo nötig: sg_format --format --size=512 --fmtpinfo=0 /dev/sda

Quellen:


1)
tune2fs -l /dev/sda1 | grep -i 'block size'
bzw. mit
tune2fs -l UUID=a806826e-99be-4515-bfb6-1b965e3c774e | grep -i 'block size'
alternativ geht auch: dumpe2fs -h
2)
8 KiB block size ist nur auf Architekturen verfügbar die 8 KiB pages unterstützen, wie Alpha, jedoch nicht auf Intel x86.
3)
extents: verwendet „extents“ statt „bitmap mapping“ für Dateien; „uninit_bg“ reduziert die Dateisystemcheckzeit und „dir_index“ erlaubt htree für schnelleren Zugriff in Verzeichnissen mit vielen Dateien.
4)
beides bei Debian Wheezy enthalten