Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Alois Schütte 23. März 2016 1 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Inhaltsverzeichnis Dieser Teil beschreibt den Aufbau von Dateisystemen am Beispiel des Unix-Dateisystems. 1 Zugriffsrechte 2 Dateitypen 3 Entfernbare Datenträger 4 Physische Aufbau eine Unix-Dateisystems 5 Anlegen von Dateisystemen und Fehlerüberprüfung 6 Linux Dateisysteme 2 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Zugriffsrechte Zugriffsrechte 1 Zugriffsrechte Grundlagen sticky bit suid bit 2 Dateitypen 3 Entfernbare Datenträger 4 Physische Aufbau eine Unix-Dateisystems 5 Anlegen von Dateisystemen und Fehlerüberprüfung 6 Linux Dateisysteme 3 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Zugriffsrechte Der Besitzer einer Datei muss in der Lage sein, Dateien vor dem Zugriff anderer zu schützen. Zugriffsrechte regeln für jede Datei, wer darauf wie zugreifen darf. Die Zugriffsrechte werden für drei verschiedene Nutzergruppen getrennt vergeben. • Eigentümer (User/Owner; Symbol: u) Das ist der Nutzer, der die Datei erstellt hat. Nur dieser Benutzer kann die Zugriffsrechte ändern. (Zusätzlich darf der Superuser/Root Zugriffsrechte für alle Dateien ändern). • Gruppe (Group; Symbol: g) Das ist die Gruppe, dem der Benutzer zugeordnet ist. Man kann so Dateien einer bestimmten Gruppe von Personen zugänglich machen. • Alle anderen (Others; Symbol: o) Damit sind alle anderen Nutzer gemeint. 4 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Zugriffsrechte Grundlagen Grundlagen Es gibt drei verschiedene Rechte: • die Datei lesen, • die Datei schreiben (ändern) und • die Datei ausführen (execute). Jedes Recht kann jedem der drei Nutzer-Gruppen zugeordnet werden. Ein Beispiel • der Besitzer darf lesen, schreiben, ausführen, • die Gruppe und alle anderen dürfen nur lesen und ausführen. 5 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Zugriffsrechte Grundlagen Die Zugriffskontrolle betrifft nicht nur Dateien: Auch für Verzeichnisse lassen sich die Rechte festlegen. • Wenn ein Verzeichnis nur das Lesen-Recht oder nur das Ausführen-Recht hat, dann dürfen andere Nutzer die Dateien in diesem Verzeichnis nicht lesen. Denn zum Lesen muss das Verzeichnis geöffnet (in das Verzeichnis gewechselt) und gelesen werden. • Damit Dateien aus einem Verzeichnis generell gelesen werden können, müssen also beide Rechte gesetzt sein (Lesen und Ausführen). Die Zugriffsrechte einer Datei oder eines Verzeichnisses könnend durch das Kommando chmod geändert werden. Die Eingabe des Befehls muss in folgender Syntax erfolgen: chmod modus datei Mit ’modus’ sind die Zugriffsrechte gemeint, ’datei’ ist der Namen der betreffenden Datei, deren Zugriffsrechte geändert werden sollen. 6 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Zugriffsrechte Grundlagen chmod Erste Variante: Oktal-Zahl: $ chmod 750 datei user 7 rwx 111 group 5 rwx 101 other 0 rwx 000 Zweite Variante: Symbol-Modus: $ chmod ugo=rwx datei $ chmod u+w,g-w,o-wx datei 7 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Zugriffsrechte Grundlagen chmod Verwendung $ ls -l dat -rw| - - - - - 1 as users $ $ chmod 640 dat $ ls -l dat -rw -r - - - - 1 as users $ $ chmod 000 dat $ ls -l dat ---------1 as users $ $ chmod u + rw , g + r dat $ ls -l dat -rw -r - - - - 1 as users $ 53 Dec 23 13:45 dat ← nur für Besitzer lesbar 53 Dec 23 13:45 dat 53 Dec 23 13:45 dat 53 Dec 23 13:45 dat 8 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Zugriffsrechte Grundlagen umask Das Kommando umask wird verwendet, um die Benutzerrechte einzuschränken, denn standardmäßig werden Dateien mit den Rechten rw-rw-rw (oktal 666) und Verzeichnisse mit rwxrwxrwx (oktal 0777) angelegt. ’umask MASKE’ schränkt diese Rechte ein, indem vom Standardwert ein entsprechender umask-Wert abgezogen (subtrahiert) wird. Beispiel: umask 026 Datei: 666 umask: 026 -----------Rechte: 640 Die Datei wird mit den Rechten 640 (rw-r-----) erzeugt. 9 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Zugriffsrechte sticky bit sticky bit Besitzt ein Benutzer Schreibrecht für ein Verzeichnis, kann er auch Dateien in diesem Verzeichnis löschen, für die er über keinerlei Rechte verfügt (es wird ja nicht die Datei selbst gelesen oder verändert, sondern der Verweis auf diese Datei im Verzeichnis wird gelöscht). Um dies zu verhindern, kann das Verzeichnis mit dem Attribut t (dem sticky bit) versehen werden: $ chmod +t verzeichnis In diesem Verzeichnis können dann nur Dateien gelöscht werden, falls • der Benutzer Eigentümer der Datei ist oder • der Benutzer Eigentümer des Verzeichnisses ist oder • der Benutzer Schreibrecht für die Datei besitzt Dies ist die Voreinstellung des Verzeichnisses /tmp“. ” 10 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Zugriffsrechte suid bit suid bit Normalerweise wird ein Programm beim Aufruf mit den Rechten des Aufrufers ausgeführt. Beispiel (cp): • Damit kann das cp- Kommando auf die Dateien zugreifen, die dem Benutzer des Kommandos gehören. • Das cp-Kommando gehört dem Systemverwalter. Ist für eine Datei das s-Bit gesetzt, so wird das Programm mit den Rechten des Eigentümers der Datei ausgeführt: Somit erhält der Aufrufer für die Zeit der Programmausführung die Rechte des Eigentümers der Datei. 11 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Zugriffsrechte suid bit Beispiel: passwd Dies wird vom passwd-Kommando verwendet, damit der Aufrufer sein Passwort in der ansonsten geschützten Datei /etc/passwd ändern kann. $ ls -l / usr / bin / passwd - rwsr - xr - x 1 root wheel $ $ chmod 000 dat $ chmod 4755 dat $ ls -l dat - rwsr - xr - x 1 as users 60448 Jun 29 18:41 / usr / bin / passwd ← s-bit 53 Dec 24 13:45 dat 12 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Zugriffsrechte suid bit Hörsaalübung Übersetzen Sie das u.a. Programm als root. Setzen Sie das suid-Bit. Melden Sie sich als normaler Benutzer an und starten es. Was passiert? suid.c void ausgabe ( void ) { int uid , gid , euid , egid ; uid = getuid (); /* die eigene UID */ gid = getgid (); /* die eigene GID */ euid = geteuid (); /* die eigene effektive UID */ egid = getegid (); /* die eigene effektive GID */ printf ( " UID = % u \ n " , uid ); printf ( " EUID = % u \ n " , euid ); printf ( " GID = % u \ n " , gid ); printf ( " EGID = % u \ n \ n " , egid ); } int main ( void ) { printf ( " Momentane R e c h t ev e r t e i l u n g :\ n " ); ausgabe (); system ( " / bin / sh " ); setuid (0); setgid (0); printf ( " \ nNach setuid (0):\ n " ); ausgabe (); system ( " / bin / sh " ); return 0; } 13 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Dateitypen Dateitypen 1 Zugriffsrechte 2 Dateitypen Einfache Dateien Links Verzeichnisse Spezialdateien 3 Entfernbare Datenträger 4 Physische Aufbau eine Unix-Dateisystems 5 Anlegen von Dateisystemen und Fehlerüberprüfung 6 Linux Dateisysteme 14 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Dateitypen Einfache Dateien Einfache Dateien Einfache Dateien (regular files) enthalten Daten, die irgendwann von Benutzern definiert wurden. Dies können Texte, Programmquellen oder ausführbare Programme sein. In Unix werden keine komplizierten Dateiformate oder Zugriffsmethoden verwaltet: • eine Datei ist einfach eine Folge von Zeichen, • ein File kann in beliebig großen Abschnitten byteweise von vorn nach hinter gelesen und geschrieben werden, • gezielt kann auf ein bestimmtes Byte positioniert werden, • Speicherplatz braucht für eine Datei nicht explizit reserviert zu werden, wenn hinter das letzte Zeichen der Datei geschrieben wird, so wird dir Datei automatisch vergrößert. • Durch >> kann man an eine Datei am Ende einfügen. 15 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Dateitypen Links Links Unter Unix existieren für Dateien so genannte Links (Verknüpfungen in Windows). • Es handelt sich hierbei um mehrere Dateinamen in Inhaltsverzeichnissen einer Platte, die auf die selben Blöcke zeigen. • Unter Unix spricht man hier von so genannten Hard-Links. • Wenn eine Datei zwei Namen hat, so kann nicht zwischen Original und Link unterschieden werden. Es ist möglich, eine der beiden Dateien zu löschen und trotzdem ist die andere noch vorhanden. • Physikalisch handelt s sich aber immer um die selbe Datei, d.h., sie nimmt nur einmal den Speicherplatz auf der Platte in Anspruch. • Einschränkung der Hardlink: Der Link muss sich auf der selben Partition befinden, auf der sich die Orginaldatei befindet. • Hardlinks werden mit dem Befehl ln angelegt. 16 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Dateitypen Links Beispiel Hardlinks $ pwd / Users / as / tmp $ ls -l total 8 drwx - - - - - - 2 -rw - - - - - - - 1 $ cd d $ ln ../ datei $ ls -l -rw - - - - - - - 2 $ as 68 Jul 11 14:41 d as 7 Jul 11 14:40 datei datei_hl as 7 Jul 11 14:40 datei_hl 17 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Dateitypen Links Symbolische Links Ein symbolische Link ist eine Datei, die nur einen Verweis auf eine anderen Datei enthält. • Beim SymLink kann man zwischen Orginal und Link unterscheiden. • Symbolische Links erlauben Verweise über die Partitionsgrenzen hinweg zu erstellen. • SymLinks können auch auf Verzeichnisse zeigen. Damit ist es also etwa möglich, ein Verzeichnis, das nicht mehr auf die Partition passt, in einer anderen Partition abzuspeichern und in der ursprünglichen Partition einfach einen SymLink auf die neue Position zu setzen. $ ls -l drwx - - - - - - 3 as as 102 Jul 11 14:44 d -rw - - - - - - - 2 as as 7 Jul 11 14:40 datei $ cd d $ ln -s ../ datei datei_sl $ $ ls -l -rw - - - - - - - 2 as as 7 Jul 11 14:40 datei_hl lrwx - - - - - - 1 as as 5 Jul 11 15:07 datei_sl -> datei $ 18 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Dateitypen Links Durch die Option i beim ls-Kommando kann man sich die i-Node Nummern anzeigen lassen. $ ls - il 9235050 drwx - - - - - 9235015 -rw - - - - - - $ ls - il d /* 9235015 -rw - - - - - - 9239004 lrwx - - - - - $ 4 as 2 as 2 as 1 as 136 Jul 11 15:07 d 7 Jul 11 14:40 datei ← i-Node 7 Jul 11 14:40 d / datei_hl ← selbe i-Node 5 Jul 11 15:07 d / datei_sl -> datei ← andere i-Node 19 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Dateitypen Verzeichnisse Verzeichnisse 1 Zugriffsrechte 2 Dateitypen Einfache Dateien Links Verzeichnisse Spezialdateien 3 Entfernbare Datenträger 4 Physische Aufbau eine Unix-Dateisystems 5 Anlegen von Dateisystemen und Fehlerüberprüfung 6 Linux Dateisysteme 20 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Dateitypen Verzeichnisse Verzeichnisse Verzeichnisse sind Inhaltsverzeichnisse über eine Menge von Dateien. Diese Dateien können selbst wieder Verzeichnisse enthalten, wodurch ein hierarchisches Filesystem entsteht. • Mit dem Kommando mkdir kann ein neues Verzeichnis angelegt werden. • pwd zeigt das aktuelle Verzeichnis an. • Das Kommando cd ist zum Wechseln des aktuellen Verzeichnisses da. • Wird ein neues Verzeichnis angelegt, so werden automatisch zwei Dateien erzeugt: • die Datei mit Namen ’.’ ist ein Verweis auf das Verzeichnis selbst • die Datei mit Namen ’..’ ist ein Verweis auf das Vater-Verzeichnis. 21 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Dateitypen Verzeichnisse Aufbau des Filesystems • Die Wurzel des Dateisystems nennt man root, sie wird mit ’/’ bezeichnet. • Im Verzeichnis / existieren mehrere Verzeichnisse, z.B. home für die Homeverzeichnisse der Benutzer, bin für ausführbare Dateien, die zum Lieferumfang des Unix Systems gehören. • Um Verzeichnisnamen und enthaltenen Dateinamen zu trennen, wird das Zeichen ’/’ verwendet. • Dateien im aktuellen Verzeichnis kann man mit ihrem Namen ansprechen, Dateien außerhalb des aktuellen Verzeichnisses sind über ihren Pfadnamen anzusprechen. Dies ist der Weg von der Wurzel über alle Verzeichnisse hinweg bis zum aktuellen Verzeichnis, in dem die Datei steht inklusive des Dateinamens. 22 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Dateitypen Verzeichnisse Typischer Linux-Dateibaum - - - - bin boot dev etc home - as lib - alsa ... media mnt opt proc - 1 - 10 ... tmp usr - bin ... var ... - log - mail -> spool / mail ... - www 23 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Dateitypen Spezialdateien Spezialdateien 1 Zugriffsrechte 2 Dateitypen Einfache Dateien Links Verzeichnisse Spezialdateien 3 Entfernbare Datenträger 4 Physische Aufbau eine Unix-Dateisystems 5 Anlegen von Dateisystemen und Fehlerüberprüfung 6 Linux Dateisysteme 24 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Dateitypen Spezialdateien Spezialdateien Unix betrachtet auch jedes Stück Hardware als Datei. Dabei wird zwischen block- und zeichenorientierten Geräten unterschieden. 1 Als blockorientiertes Gerät gilt jedes Gerät, das nicht einzelne Zeichen verarbeitet, sondern ganze Blocks. Dabei handelt es sich z.B. typischerweise um Festplatten, Disketten und andere Laufwerke. Diese Laufwerke werden dann als Dateien verwaltet, für den Anwender bleibt der Unterschied zwischen Gerät und Datei nahezu transparent. 2 Zeichenorientierte Geräte werden Bytes-weise angesteuert. Typischerweise handelt es sich hier um serielle oder parallele Schnittstellen, die Terminalleitungen oder den Soundanschluss. 25 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Dateitypen Spezialdateien Die Gerätedateien (special files), sowohl die block- wie auch die zeichenorientierten, befinden sich im Verzeichnis /dev. • Sie belegen physikalisch keinen Platz auf der Festplatte, sind also selbst nicht die Gerätetreiber, wie oft fälschlicherweise gedacht wird. • Sie bestehen aus nur zwei Nummern, die die Adresse des Gerätetreibers im Kernel symbolisieren. major number Die erste Nummer zeigt, um welchen Gerätetreiber es sich handelt, minor number die zweite beschreibt, das wievielte Gerät es ist, das diesen Treiber benutzt. ls -l / dev ... crw - rw - rw crw - rw - rw crw - rw - rw crw - - - - - - crw - - - - - - crw - - - - - - brw - - - - - - brw - - - - - - ... 1 1 1 1 1 1 1 1 root root root root root root root root major minor | | 4 , 125 Jul 4 , 126 Jul 13 , 1 Jul 34 , 0 Jul 35 , 0 Jul 36 , 0 Jul 2, 0 Jul 2, 1 Jul 9 9 9 9 9 9 9 9 13:08 13:08 13:08 13:09 13:09 13:09 13:08 13:08 ttywd ttywe urandom vboxdrv vboxnetctl vmmon vn0 vn1 26 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Entfernbare Datenträger Entfernbare Datenträger 1 Zugriffsrechte 2 Dateitypen 3 Entfernbare Datenträger Die Datei /etc/fstab Die Datei /etc/mtab 4 Physische Aufbau eine Unix-Dateisystems 5 Anlegen von Dateisystemen und Fehlerüberprüfung 6 Linux Dateisysteme 27 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Entfernbare Datenträger Entfernbare Datenträger • Unix fasst alle Partitionen und angeschlossenen Laufwerke zu einem Dateibaum zusammen. • Physikalisch verbleiben die Daten auf den Partitionen bzw. Laufwerken, logisch wird aus all den verschiedenen Partitionen ein einziger Dateibaum zusammengebaut. • Mit dem Befehl mount (montiere) werden die Partitionen an einem bestimmten Punkt des Dateisystems eingehängt. Als ein solcher Mountpoint dient ein leeres Verzeichnis. Falls das Verzeichnis nicht leer ist, wird der Inhalt versteckt. Nach dem Wiederabhängen des Laufwerks mit dem Befehl umount wäre der Inhalt des Verzeichnisses wieder unverändert vorhanden. 28 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Entfernbare Datenträger Entfernbare Datenträger b 2 a @ @ / @ @ d → c / /dev/usb0 @ @ 3 b a @ @ 2 / mount /dev/usb0 /a/c @ @ d c @ @ 3 29 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Entfernbare Datenträger Die Datei /etc/fstab Die Datei /etc/fstab 1 Zugriffsrechte 2 Dateitypen 3 Entfernbare Datenträger Die Datei /etc/fstab Die Datei /etc/mtab 4 Physische Aufbau eine Unix-Dateisystems 5 Anlegen von Dateisystemen und Fehlerüberprüfung 6 Linux Dateisysteme 30 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Entfernbare Datenträger Die Datei /etc/fstab Die Datei /etc/fstab In der Regel werden die ganzen Partitionen, die verwendet werden sollen, bereits während des Bootvorgangs automatisch gemountet. Dazu muss das System aber eine Bauanleitung besitzen, die klärt, in welche Verzeichnisse welche Partitionen gehängt werden sollen: /etc/fstab Diese einfache Textdatei hat für jede Partition bzw. Laufwerk eine Zeile, die das Laufwerk, den Mount-Punkt und Optionen enthält: $ cat / etc / fstab / dev / sda1 / / dev / sda2 / home / dev / sda3 swap ... / dev / cd / cdrom $ ext4 ext4 swap defaults defaults defaults iso9660 ro , noauto , user 1 1 1 2 0 0 0 0 31 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Entfernbare Datenträger Die Datei /etc/fstab $ cat / etc / fstab / dev / sda2 / home ext4 defaults 1 2 Die Zeilen haben folgendes Format: Gerätedatei Mountpoint Dateisystemtyp Optionen Dump Reihenfolge Gerätedatei Hier steht die Gerätedatei des blockorientierten Geräts, das die Partition oder das Laufwerk bezeichnet. Mountpoint Hier steht das Verzeichnis, in das die Partition oder das Laufwerk eingehängt werden soll. Dateisystemtyp Der Typ des Dateisystems, wie z.B. ext4 Dump Hier steht eine Ziffer, entweder 0 oder 1. Das Feld beschreibt, ob der Unix-Befehl dump das Dateisystem sichern soll oder nicht. Reihenfolge Reihenfolge in der Dateisystemcheck beim Booten erfolgt. Eine 0 bedeutet grundsätzlich keinen Dateisystemcheck, die 1 steht für die Wurzelpartition, die immer als erstes überprüft werden sollte, die anderen Ziffern legen die Reihenfolge der weiteren Überprüfung fest. 32 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Entfernbare Datenträger Die Datei /etc/mtab Die Datei /etc/mtab Jedesmal, wenn ein Dateisystem mit mount in den Dateibaum gehängt wurde, trägt der mount-Befehl dieses Dateisystem in die Datei /etc/mtab ein. Diese Datei enthält immer eine Liste der Dateisysteme, die gemountet sind. Wird der Befehl mount ohne jeden Parameter eingegeben, so liest er diese Datei und gibt den Inhalt in etwas aufbereiteter Form auf dem Bildschirm (genauer der Standard-Ausgabe) aus. Wichtig ist diese Datei auch für das umount-Kommando, wenn es mit der Option -a angewandt wird, wenn also alle gemounteten Dateisysteme abgehängt werden sollen. Meist ist das nur beim Herunterfahren des Systems notwendig und sinnvoll. Hier findet umount die Informationen, welche Dateisysteme gemountet sind, welche also abgehängt werden müssen. 33 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Physische Aufbau eine Unix-Dateisystems Physische Aufbau eine Unix-Dateisystems 1 Zugriffsrechte 2 Dateitypen 3 Entfernbare Datenträger 4 Physische Aufbau eine Unix-Dateisystems I-Nodes Superblock Bootblock 5 Anlegen von Dateisystemen und Fehlerüberprüfung 6 Linux Dateisysteme 34 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Physische Aufbau eine Unix-Dateisystems Physische Aufbau eine Unix-Dateisystems Ein Unix-Dateisystem besteht aus i.W. vier Bestandteilen: • Boot Block • Super Block • I-Node Liste • Datenblöcke Unix-Dateisysteme sind nach einem anderen Prinzip aufgebaut, als etwa DOS-FAT-Systeme. Es gibt zwar viele verschiedene Dateisysteme unter Unix, die Funktionsweise ist jedoch immer gleich, dieses Prinzip beruht auf den so genannten I-Nodes. 35 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Physische Aufbau eine Unix-Dateisystems I-Nodes I-Nodes Jedes Dateisystem enthält ein ’Inhaltsverzeichnis’, die I-Node-Liste. Die einzelnen Elemente der I-Node-Liste sind die Dateiheader, also die Orte wo Dateiattribute, Größe usw. gespeichert sind. Wie unter DOS auch, so verwalten Unix-Dateisysteme nicht zwangsläufig die Sektoren einer Festplattenpartition, sondern Blöcke fester Größe, etwa 512, 1024 oder 2048 Byte. Voreingestellt sind meist 1024 Byte pro Block. Anders als unter DOS werden diese Blöcke aber nicht in einer Tabelle (FAT) zusammengefasst, sondern die I-Nodes enthalten selbst die Verweise auf diese Blöcke. Zu beachten ist, dass der Dateiname nicht in der I-Node auftaucht. Die I-Node ist sozusagen nur die Referenz auf die Datenblöcke, die eine Datei benutzt und der Ort, an dem die Attribute wie Eigentümer, Gruppe, Größe und Zugriffsdaten gespeichert sind. 36 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Physische Aufbau eine Unix-Dateisystems I-Nodes • Nach den Datumsfeldern stehen zehn Felder, die direkt die Adressen der Datenblöcke beinhalten. • Ist die Datei größer als 10 Blöcke (also größer als 10*512), so enthält das nächste Feld der I-Node eine Adresse eines Blockes, der bis zu 128 Adressen anderer Blöcke enthalten kann (bei Blockgröße 512, Wortlänge 128=512*8/32 ). • Sollte das noch nicht ausreichen, so enthält der nächste I-Node-Eintrag eine Adresse eines Zweifach-Indirektionsblocks, der bis zu 128 Adressen auf Blöcke mit wiederum 128 Adressen enthält. Format eines typischen I-Node Typ und Zugriffsrechte Anzahl der Hardlinks Benutzernummer (UID) Gruppennummer (GID) Größe der Datei in Bytes Datum der letzten Veränderung (mtime) Datum der letzten Statusänderung (ctime) Datum des letzten Zugriffs (atime) Adresse von Datenblock 0 ... Adresse von Datenblock 9 Adresse des ersten Indirektionsblocks Adresse des Zweifach-Indirektionsblocks Adresse des Dreifach Indirektionsblocks • Und falls das noch nicht reicht, so enthält der nächste Eintrag die Adresse eines Blockes, der wiederum 128 Adressen von ZweifachIndirektionsblöcken enthalten kann. 37 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Physische Aufbau eine Unix-Dateisystems I-Nodes I-Node Block-Referenzierung Damit sind dann Dateigrössen von 1, 2 oder 4 Gigabyte (je nach Blockgröße von 512, 1024 oder 2048 Byte) möglich. Typ und Zugriffsrechte Anzahl der Hardlinks Benutzernummer (UID) Gruppennummer (GID) Größe der Datei in Bytes Datum der letzten Veränderung (mtime) Datum der letzten Statusänderung (ctime) Datum des letzten Zugriffs (atime) Adresse von Datenblock 0 ... Adresse von Datenblock 9 Adresse des ersten Indirektionsblocks Adresse des Zweifach-Indirektionsblocks Adresse des Dreifach Indirektionsblocks 38 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Physische Aufbau eine Unix-Dateisystems I-Nodes ext3 Das Standard Linux-Dateisystem ext3 hat zusätzlich zu den gezeigten I-Node Einträgen noch verschiedene andere, die das System in mancherlei Hinsicht noch leistungsfähiger macht. • So benutzt das ext3 System beispielsweise bis zu 12 direkte Datenblockadressen, • es hat noch ein zusätzliches Datumsfeld für das Datum des Löschens der Datei (für später zu entwickelnde Undelete-Funktion) und • es bietet weitere Attribute, die hier nicht genauer dargestellt werden sollen, weil das den allgemeinen Unix-Rahmen dieses Kurses sprengen würde. 39 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Physische Aufbau eine Unix-Dateisystems Superblock Superblock Der Superblock enthält grundlegenden Informationen zum Dateisystem selbst. Einige wichtige Daten des Superblocks sind: • Die Größe des Dateisystems in Blöcken • Die Größe der Blöcke in Bytes • Zeiger auf den ersten freien Datenblock • Zeiger auf erste freie I-Node • Verschiedene Statusbits (Flags) Das Wesentliche an dieser Struktur ist, dass der Superblock beim Mounten eines Dateisystems in den Speicher gelesen wird und alle Veränderungen dort vorgenommen werden. Erst beim Wiederabhängen des Dateisystems werden diese Veränderungen physikalisch auf der Platte gespeichert. Das erklärt auch, dass es nach einem Systemabsturz zu Inkonsistenzen in einem Dateisystem kommen kann. 40 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Physische Aufbau eine Unix-Dateisystems Bootblock Bootblock Noch vor dem Superblock steht der so genannte Bootblock auf der Platte, der in etwa dem Bootsektor der DOS-Partitionen entspricht. Zusammengefasst kann man also ein Unix-Dateisystem etwa wie unten darstellen: 41 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Anlegen von Dateisystemen und Fehlerüberprüfung Anlegen von Dateisystemen und Fehlerüberprüfung 1 Zugriffsrechte 2 Dateitypen 3 Entfernbare Datenträger 4 Physische Aufbau eine Unix-Dateisystems 5 Anlegen von Dateisystemen und Fehlerüberprüfung Anlegen von Dateisystemen Fehlerüberprüfung und Behebung im Dateisystem Die Überprüfung beim Systemstart 6 Linux Dateisysteme 42 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Anlegen von Dateisystemen und Fehlerüberprüfung Anlegen von Dateisystemen Anlegen von Dateisystemen Bevor eine Partition benutzt werden kann, muss auf ihr zunächst ein Dateisystem angelegt werden. Unter DOS/Windows wird dieser Vorgang formatieren genannt, unter Unix heißt er korrekterweise Anlegen des Dateisystems. Der Befehl, mit dem dieser Vorgang gestartet wird ist mkfs (Make Filesystem). Folgendes Kommando legt ein Dateisystem auf einem USB-Stick an. $ / etc / mkfs / dev / usb0 2200 Der letzte Parameter des mkfs Kommandos legt die Anzahl der Blöcke fest, aus denen das Filesystem bestehen soll. 43 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Anlegen von Dateisystemen und Fehlerüberprüfung Fehlerüberprüfung und Behebung im Dateisystem Fehlerüberprüfung und Behebung im Dateisystem Nach nicht korrekten umount (Systemabsturz wg. Stromausfall, USB-Stick einfach abziehen) ist ein File-System-Check erforderlich. Dazu dient das Kommando fsck . In der Regel werden die Dateisysteme beim Systemstart geprüft, bevor sie gemountet sind. Das ist wichtig, weil das Überprüfen bereits gemounteter Systeme immer die Gefahr birgt, dass ein anderer User oder Prozess das System benutzt und verändert, während es überprüft wird. Auch für eine manuelle Anwendung von fsck wird in den meisten Fällen das Dateisystem abgehängt und erst dann überprüft. Eine Sonderrolle spielt die Überprüfung des Wurzeldateisystems. Dieses System kann ja nicht abgehängt werden, schon aus dem Grund, da das Programm fsck auf der Wurzelpartition gespeichert ist. Die Überprüfung und Reparatur des Wurzeldateisystems sollte daher grundsätzlich nur im Single-User Modus durchgeführt werden und evt. sollte das Dateisystem mit dem Befehl mount -o ro,remount Gerätedatei als Read-Only neu gemountet werden. 44 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Anlegen von Dateisystemen und Fehlerüberprüfung Die Überprüfung beim Systemstart Die Überprüfung beim Systemstart Jedes mal, wenn das System neu gebootet wird, werden alle Dateisysteme überprüft. In der Regel wird aber nur überprüft, ob sießauberßind - nur wenn nicht wird die eigentliche Überprüfung gestartet. • Im Superblock existiert ein so genanntes Clean-Flag. Jedesmal, wenn ein Dateisystem gemountet wird, wird dieses Flag auf 0 gesetzt, erst beim ordentlichen Abhängen durch umount wird es wieder auf 1 gesetzt. • Beim Systemstart überprüft das fsck-Programm zunächst, ob dieses Flag auf 1 steht, wenn ja, so gilt das Dateisystem als sauber und wird nicht weiter überprüft. • Falls das System vorher nicht sauber heruntergefahren wurde, die Dateisysteme also das Clean-Flag nicht setzen konnten, erkennt das fsck Programm dies und überprüft die Dateisysteme. Zusätzlich enthält der Superblock einer ext2-Partition noch einen Zähler, der beschreibt, wie oft das Dateisystem gemountet wurde, seit es das letzte Mal überprüft wurde. Nach 20 erfolgten Mounts wird das Dateisystem überprüft, auch wenn es das Clean-Flag gesetzt hat. 45 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Linux Dateisysteme Linux Dateisysteme 1 Zugriffsrechte 2 Dateitypen 3 Entfernbare Datenträger 4 Physische Aufbau eine Unix-Dateisystems 5 Anlegen von Dateisystemen und Fehlerüberprüfung 6 Linux Dateisysteme VFS Grundlagen 46 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Linux Dateisysteme Linux Dateisysteme Linux unterstützt nicht nur ein Dateisystem, sondern erlaubt durch eine einheitliche Schnittstelle zum Linux-Kern (den Virtual Filesystem Switch, VFS oder einfach virtuelles Filessystem genannt), mehrere Dateisysteme transparent zu verwenden. Der VFS stellt einen definierten Übergang zwischen Betriebssystemkern und den unterschiedlichen Dateisystemen dar. 47 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Linux Dateisysteme Linux Dateisysteme Auf Ebene der Programmierung greift ein Nutzerprozess immer über Systemaufrufe des VFS auf ein physisches Dateisystem zu. • Der Anwendungsprogrammierer muss also Details einzelner Dateisystem nicht kennen, ebenfalls braucht er nicht zu wissen, wie der Cache-Mechanismus funktioniert. • Ein Kernelprogrammierer hingegen muss die interne Struktur (C-Datenstruktur und die CFunktionen zu ihrer Manipulation) kennen. 48 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Linux Dateisysteme Beispiel Anwendungsprogrammierer (cp) cp.c int main ( int argc , char * argv []) { int inf , outf ; // file handles const int BUFLEN =4096; // length of buffer char buf [ BUFLEN ]; // input buffer int l ; // # bytes read during one read call if (( inf = open ( argv [1] , O_RDONLY )) < 0) { /* open source file */ fprintf ( stderr , " can 't open % s for reading \ n " , argv [1]); exit (2); } if (( outf = open ( argv [2] , O_WRONLY | O_CREAT , 0600)) < 0) { ← fprintf ( stderr , " can 't open % s for writing \ n " , argv [2]); exit (3); } do { // read and write until EOF l = read ( inf , buf , BUFLEN ); ← write ( outf , buf , l ); ← } while (l >0); close ( outf ); close ( inf ); return 0; } open(), read() und write() sind VFS Funktionen; der Programmierer braucht (und soll) nicht zu wissen, auf welchem Dateisystem (-typ) die Dateien, die später mit dem Programm kopiert werden, physisch sind. 49 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Linux Dateisysteme Beispiel Kernelprogrammierer (cp) int main ( int argc , char * argv []) { ... if (( outf = open ( argv [2] , O_WRONLY | O_CREAT , 0600)) < 0) { ← fprintf ( stderr , " can 't open % s for writing \ n " , argv [2]); exit (3); } do { // read and write until EOF l = read ( inf , buf , BUFLEN ); ← write ( outf , buf , l ); ← } while (l >0); close ( outf ); close ( inf ); return 0; } • Soll das VFS bei Aufruf eines Anwendungsprogramms, durch read() die Anzahl der gelesenen Bytes in einer Protokolldatei speichern, muss ein Kernelprogrammierer die VFS readFunktion ändern, also die interne Struktur des VFS Systems kennen. • Soll diese Protokollierung lediglich beim ext2 Dateisystem vollzogen werden, muss ein Kernelprogrammierer die interne Struktur des ext2 System kennen und dessen read-Aufruf ändern. 50 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Linux Dateisysteme VFS Grundlagen VFS Grundlagen Die Grundidee hinter dem VFS ist ein allgemeines Datei-Modell (common file model, cfm), das alle realisierten Dateisysteme unterstützen kann. Einige Konsequenzen: • So ist z.B. im cfm ein Verzeichnis lediglich eine Datei, die andere Dateien enthält. Nicht-Unix Dateisysteme benutzen oft eine FAT (File Allocation Table), die die Position jeder Datei im Dateibaum speichert. In diesen Dateisystemen sind Verzeichnisse keine Dateien. Um solche Dateisysteme unter Linux verwenden zu können, muss die Implementierung eine Datei für jedes Verzeichnis automatisch erzeugen (als Objekt im Speicher des Kernel). • Der Linux Kernel kann nicht für jede read()-Funktion jedes Dateisystems einen Systemaufruf haben. Deshalb existiert im Kernel nur ein Zeiger auf eine Funktion zum Lesen in einem bestimmten Dateisystem. 51 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Linux Dateisysteme VFS Grundlagen Das cfm ist in C (wegen Performance nicht C++) geschrieben, aber objektorientiert designed: Objekte sind als Datenstrukturen (struct) realisiert, wobei die Methoden Elemente der Struktur sind, die aus Zeigern von Funktionen bestehen, die die Datenelemente der Struktur manipulieren. Im cfm sind folgende Typen von Objekten zu unterscheiden: Superblock Objekt speichert Informationen über ein gemountetes Dateisystem. Inode Objekt speichert Informationen über eine physische Datei. File Objekt speichert Informationen über den Zugriff eines Prozesses auf eine geöffnete Datei. Diese Information existiert nur im Kernel-Speicher während der Prozess auf die Datei zugreift. Dentry Objekt speichert Informationen über Directory-Eintrag und Datei (Inode). 52 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Linux Dateisysteme VFS Grundlagen Zugriff von einem Prozess auf eine Datei 53 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Linux Dateisysteme VFS Grundlagen Der Quellcode des VFS ist zu finden unter /usr/src/linux-2.4/fs“. ” In diesem Verzeichnis befinden sich für alle unterstützten Dateisysteme jeweils ein Unterverzeichnis. Die nachstehende Tabelle zeigt einige Quellcode-Dateien und ihre Bedeutung. Datei fcntl.c locks.c open.c pipe.c read write.c super.c Bedeutung fcntl() handling. Support for fcntl() locking, flock() locking, and manadatory locking Lots of system calls including open(), close(), ... Pipes read(), write(), readv(), writev(), lseek() Superblock support, filesystem registry, mount()/umount() Damit der Linux Kernel ein Dateisystem behandeln kann, muss es registriert werden (→ super.c). 54 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Linux Dateisysteme VFS Grundlagen Superblock Objekt Wenn ein (ext2-)Filesystem mit einer Platte durch das mount-Kommando verbunden wird, wird die Funktion ext2 read super() aufgerufen. Dadurch wird der Superblock auf der Platte gelesen und die Struktur super block structure gefüllt. Diese Struktur enthält einen Zeiger auf eine Struktur super operations, die wiederum Zeiger auf Verarbeitungsfunktionen enthält. Durch diese (am Anfang kompliziert erscheinende) Verzeigerung braucht der Programmierer eines Filesystems aber nur die Struktur einmal zu mit den Zeigern auf seine Funktionen zu füllen und dann einfach die Funktionen programmieren – den Rest erledigt der VFS-Code. Die super operation Struktur (in < linux/fs.h >) hat z.B. folgendes Aussehen: struct super_operation s { void (* read_inode ) ( struct inode *); int (* notify_change ) ( struct inode * , struct iattr *); void (* write_inode ) ( struct inode *); void (* put_inode ) ( struct inode *); ... } 55 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Linux Dateisysteme VFS Grundlagen inode Objekt Nachdem die Verbindung zur Platte hergestellt ist, können die Zugriffe erfolgen. Dazu sind Funktionen zum Finden von Dateien und zur Manipulation von Inodes erforderlich. (vgl. < linux/fs.h >): struct inode_operation s { struct file_operations * d e f a u l t _ f i l e _ o p s ; int (* create ) ( struct inode * , const char * , int , int , struct inode **); int (* lookup ) ( struct inode * , const char * , int , struct inode **); int (* link ) ( struct inode * , struct inode * , const char * , int ); int (* unlink ) ( struct inode * , const char * , int ); int (* symlink ) ( struct inode * , const char * , int , const char *); int (* mkdir ) ( struct inode * , const char * , int , int ); int (* rmdir ) ( struct inode * , const char * , int ); int (* mknod ) ( struct inode * , const char * , int , int , int ); ... } Die meisten Funktionen sind direkte Systemaufrufe. 56 / 57 Betriebssysteme - Dateisysteme ... [email protected] Version: (8c45d65) ARSnova 19226584 Linux Dateisysteme VFS Grundlagen file Objekt Die Methoden des file Objektes sind: struct file_operations { int (* lseek ) ( struct inode * , struct file * , off_t , int ); int (* read ) ( struct inode * , struct file * , char * , int ); int (* write ) ( struct inode * , struct file * , const char * , int ); int (* readdir ) ( struct inode * , struct file * , void * , filldir_t ); int (* select ) ( struct inode * , struct file * , int , select_table *); ... } Die meisten Funktionen sind direkte Systemaufrufe. 57 / 57
© Copyright 2024 ExpyDoc