[[Vorlage(Getestet, bionic, focal)]]

{{{#!vorlage Wissen
[:Pakete installieren: Installation von Programmen]
[:Programme_starten: Starten von Programmen]
[:Terminal: Ein Terminal öffnen]
[:sudo: Root-Rechte]
}}}

[[Inhaltsverzeichnis()]]

Das Paket '''dosfstools''' enthält Programme zum Anlegen, Formatieren, Überprüfen, Reparieren sowie Verwalten von MS-DOS- bzw. FAT-Dateisystemen. Dieses Paket verfolgt hinsichtlich der Bedienung einen anderen Ansatz als das funktional ähnliche Paket '''mtools''': Während '''mtools''' für jeden Dateisystem-Befehl aus MS-DOS unter UNIX einen ähnlich lautenden (z.B. mdir statt dir) Befehl bereitstellt, versucht sich '''dosfstools''' in die UNIX-Welt zu integrieren, indem es mächtige generelle Befehle wie '''mkfs''' oder '''fsck''' um spezifische Fähigkeiten für die MS-DOS-Dateisysteme erweitert.


= Installation =
Es genügt die Installation des Pakets '''dosfstools''' aus den offiziellen Paketquellen [1]:
{{{#!vorlage Paketinstallation
dosfstools
}}}

Nach der Installation stehen neue Programme/Befehle für MS-DOS-Dateisysteme zur Verfügung:
 * '''mkfs.fat''' (Alias mkfs.msdos, mkfs.vfat, mkdosfs) zum anlegen/formatieren
 * '''fsck.fat''' (Alias fsck.msdos, fsck.vfat, dosfsck) zum überprüfen und reparieren
 * '''fatlabel''' (Alias dosfslabel) zum benennen ([:Labels:Label])

= MS-DOS-Dateisysteme allgemein =
Unter MS-DOS-Dateisystem (auch: FAT-Dateisystem) wird hier eines der von Microsoft entwickelten Dateisysteme mit Blockzuweisungstabellen (file allocation table, FAT) verstanden. Die gebräuchlichen Varianten unterscheiden sich in der verfügbaren Bitlänge zur Speicherung der Blocknummern ([#Links Details siehe unter Links]):

 * 12-Bit: veraltet, gelegentlich MSDOS genannt
 * 16-Bit: meist FAT oder FAT16 genannt
 * 32-Bit: FAT32, oft auch fälschlich VFAT genannt
 * exFAT: Weiterentwicklung, von Microsoft durch Softwarepatente geschützt, durch '''dosfstools''' nicht unterstützt, aber beispielsweise über das Paket '''exfat-utils'''. Microsoft hat für Linux ab Kernel 5.7 über das OIN (Open Invention Network) [#Links exFAT kostenfrei gestellt].

Die Namensteile `fat`, `vfat` und `msdos` sind jedoch aus Sicht von '''dosfstools''' Synonyme, d.h '''dosfstools''' unterscheidet diese FAT-Varianten __nicht__ über diese Namensteile! Die FAT-Variante wird in der Regel automatisch bestimmt oder muss über die Option `-F` (siehe unten) festgelegt werden.

= Bedienung =
== Anlegen eines MS-DOS-Dateisystems ==

Ein Dateisystem anlegen kann man mit '''mkfs.fat''', welches man wahlweise direkt aufrufen[3][4][2] kann
{{{#!vorlage Befehl
sudo mkfs.fat [OPTIONEN-FAT] /dev/sda9 [BLOCK-ANZAHL] 
}}} oder über das generelle '''mkfs'''

{{{#!vorlage Befehl
sudo mkfs --type fat [OPTIONEN-ALLGEMEIN] [OPTIONEN-FAT] /dev/sda9 [BLOCK-ANZAHL]
}}}

Die zu formatierende Partition, hier beispielhaft '''/dev/sda9''', muss natürlich individuell angepasst werden.

`[OPTIONEN-ALLGEMEIN]`, `[OPTIONEN-FAT]` und `[BLOCK-ANZAHL]` sind optional:

 * `[OPTIONEN-ALLGEMEIN]` ist durch die gewünschten, von der Art des Dateisystems unabhängigen Optionen des Programms '''mkfs''' zu ersetzen.
 * `[OPTIONEN-FAT]` ist durch die für FAT-Dateisystem spezifischen Optionen des Programms '''mkfs.fat''' zu ersetzen; die wichtigsten sind:

||<rowclass="titel"-2> Wichtige Optionen für das Programm mkfs.fat ||
||<rowclass="kopf"> Option || Wirkung ||
|| `-c` || Überprüfe das Gerät vor dem formatieren auf fehlerhafte Stellen (bad blocks). ||
|| `-F FAT-SIZE` || Die Bitlänge eines FAT-Eintrags festlegen. `FAT-SIZE` ist 12, 16 oder 32. ||
|| `-i VOLUME-ID` || 32-Bit-Kennung `VOLUME-ID` (z.B. 1122-ABCD) in den Boot-Sektor schreiben.||
|| `-n VOLUME-NAME` || Filesystem Label schreiben. (Siehe [#MS-DOS-Dateisystem-benennen MS-DOS-Dateisystem benennen]) ||
|| `-S LOGICAL-SECTOR-SIZE` || Die Größe eines Filesystem-Clusters festlegen. `LOGICAL-SECTOR-SIZE` ist eine Potenz von 2 im Bereich: 512 … 32768 ||
|| `-v` || Meldungen während der Formatierung ausgeben. ||

 * `[BLOCK-ANZAHL]` ist meistens leer; dann wird die in der jeweiligen Situation maximal mögliche Blockanzahl erzeugt.

== Pflegen eines MS-DOS-Dateisystems ==
Hierzu dient '''fsck.fat''', welches ein FAT-Dateisystem überprüft und optional auch repariert. Es wird entweder direkt aufgerufen[3][4][2] mit

{{{#!vorlage Befehl
sudo fsck.fat [OPTIONEN-FAT] /dev/sda9
}}} oder über das generelle Programm '''fsck''' mit

{{{#!vorlage Befehl
sudo fsck --type fat [OPTIONEN-ALLGEMEIN] [OPTIONEN-FAT] /dev/sda9
}}}

Meist kann '''fsck''' den Dateisystem-Typ selbst erkennen, dann reicht auch aus:

{{{#!vorlage Befehl
sudo fsck [OPTIONEN-ALLGEMEIN] [OPTIONEN-FAT] /dev/sda9
}}}

Für `[OPTIONEN-ALLGEMEIN]` und `[OPTIONEN-FAT]` gelten die Hinweise entsprechend wie im Abschnitt [#Anlegen Anlegen eines MS-DOS-Dateisystems]. Wichtige Optionen von '''fsck.fat''' sind:

||<rowclass="titel"-2> Wichtige Optionen für das Programm ckfs.fat ||
||<rowclass="kopf"> Option || Wirkung ||
|| `-a` || automatische Reparatur (ohne Rückfragen) ||
|| `-r` || Reparatur nach Rückfrage ||
|| `-b` || Prüfung des Boot-Sektors (nur lesen) ||
|| `-v` || Meldungen während der Überprüfung ausgeben. || 
|| `-V` || Nach der Reparatur automatisch einen 2. Durchgang zur Verifizierung starten. ||

== MS-DOS-Dateisystem benennen ==
Das Label eines FAT-Dateisystems kann man sich anzeigen lassen mit '''fatlabel''':

{{{#!vorlage Befehl
sudo fatlabel /dev/sda9
}}}

Das Label verändert man mit:

{{{#!vorlage Befehl
sudo fatlabel /dev/sda9 NEUES-LABEL
}}}

`NEUES-LABEL` ist eine maximal 11-stellige Octet-Folge, die nur die bei FAT-Dateisystemen für kurze (sog. 8.3) Dateinamen gültigen Zeichen enthalten darf: Aus dem Bereich 0-127 die Großbuchstaben A-Z, Ziffern 0-9, einige Sonderzeichen «''! # $ % & ' ( ) - @ ^ _ \` { } ~''» und Leerzeichen, jedoch sind führende Leerzeichen verboten. Die aus Sicht des FAT-Dateisystems sämtlich erlaubten Zeichen aus dem Bereich 128-255 können bei MS-Windows-Systemen mit aktivierter Sprachunterstützung Fehler verursachen.

'''fatlabel''' kann auch Label schreiben, die nicht MS-DOS-konform sind. Man sollte das vermeiden, da es sonst bei der Verwendung eines solchen Dateisystems unter MS-Windows Probleme geben kann. Manche, nicht alle Versionen von '''fatlabel''' wandeln die Eingabe für ein Label automatisch in Großbuchstaben, weil die Verwendung eines Labels mit Kleinbuchstaben MS-Windows irritieren kann.

{{{#!vorlage Hinweis
Es gibt bei FAT-Dateisystemen zwei verschiedene Label:
 1. Eintrag im Root-Dateiverzeichnis des FAT-Dateisystems als spezieller Dateiname und
 1. manchmal zusätzlich Vermerk im "Extended Bios Parameter Block" im Boot-Sektor des FAT-Dateisystems
Das Label im Boot-Sektor befindet sich je nach Version und Hersteller an wechselnden Stellen und kann auch fehlen – daher wird '''fatlabel''' diesen Vermerk im Boot-Block bei sehr alten FAT-Dateisystemen nicht immer bearbeiten. Bei modernen FAT-Dateisystemen hält '''fatlabel''' die beiden Label synchronisiert.
}}}

== Dateien im FAT-Dateisystem verwenden ==
'''dosfstools''' stellt – im Gegensatz zu '''mtools''' – außer den hier beschriebenen (und deren Synonymem) keine weiteren Befehle und auch keine GUI bereit.

Auf der Kommandozeile verwendet man die herkömmlichen GNU-Programme wie '''ls''', '''cat''', '''grep''', '''rm''' etc. auch für Dateien in FAT-Dateisystemen. Die Programme '''chown''', '''chgrp''' und '''chmod''' zur Bearbeitung der Besitzverhältnisse und der Zugriffsrechte funktionieren jedoch nur eingeschränkt, da FAT-Dateisysteme die Konzepte Besitzer und Rechte nicht kennen.

Mehrere GUI-Programme wie beispielsweise [:Gparted:] oder die [:Laufwerksverwaltung:] '''gnome-disks''' (eingedeutscht: Laufwerke) verwenden „unter der Haube“ '''dosfstools'''.

= Dokumentation =
 * [:man:Manpages] von dosfstools:
  * '''man mkfs.fat'''
  * '''man fsck.fat'''
  * '''man fatlabel'''
 * weitere manpages:
  * '''man mkfs'''
  * '''man fsck'''

= Links =
 * [wikipedia:File_Allocation_Table:FAT]
 * [http://wiki.osdev.org/FAT Wiki von OSDev.org zu FAT] {en}
 * [wikipedia_en:8.3_filename:8.3-filename]
 * [https://msdn.microsoft.com/en-us/library/aa365247.aspx MSDN: Naming Files, Paths, and Namespaces] {en}
 * [github:dosfstools/dosfstools:dosfstools] {en}
 * [:Formatieren:]

 * [wikipedia_en:ExFAT:exFAT]
 * [https://openinventionnetwork.com/oin-adds-microsofts-exfat-to-linux-system-definition OIN Adds Microsoft’s exFAT to Linux System Definition] {en}

#tag: System, Shell, Dateisystem