Kap. 8: Dateisysteme (E3 EXT2 Dateisystem) 1 E 3 EXT2 Dateisystem Lernziele Aufbau des ext2-dateisystems kennenlernen Verwaltungsstrukturen auf dem Datenträger analysieren Hard- und Softlinks Übungsumgebung USB-Memorystick, der frisch formatiert werden darf. PC mit Linux: Für das Formatieren und Mounten des Datenträgers braucht es in der Regel root- Rechte. Hilfsprogramm TransDisk zur Untersuchung der Sektoren des Datenträgers. Übersicht Das ext2-dateisystem ist eine Weiterentwicklung des UFS (Unix File System) und war viele Jahre das Standarddateisystem unter Linux. Die untenstehende Abbildung zeigt den Aufbau. Schraffiert sind die Strukturen gekennzeichnet, die auch beim UFS Dateisystem zu finden sind - für das ext2-dateisystem wurden diese teilweise erweitert. Boot Group 0 Group N-1 Group N Super Group Descriptor Bitmap Inode Bitmap Inode Table Data s Im Unterschied zum UFS Dateisystem wird der Datenträger zusätzlich in grobe Blöcke, den - Groups unterteilt. Die Eigenschaften einer -Group sind in der Struktur Group-Descriptor festgehalten, die gleich nach dem Super- auf dem Datenträger abgelegt ist. In der -Bitmap und in der Inode-Bitmap werden zusätzliche Metadaten gespeichert. Darauf folgt die Inode-Table und zum Schluss die Datenblöcke, die die Nutzdaten enthalten. Vorbereitung des Datenträgers Formatieren Sie den USB-Stick zuerst mit untenstehendem Befehl, der Datenträger darf dabei nicht gemounted sein. /sbin/mkfs.ext2 <device> Als <device> wird der Device-Name des USB-Sticks angegeben, z.b. /dev/sdb1. Die Betriebssystemeinstellungen bestimmen, welcher Device-Name dem USB-Stick zugeteilt wird, gebräuchlich ist auch /dev/sdc1.
Kap. 8: Dateisysteme (E3 EXT2 Dateisystem) 2 Aufgaben E 3.1: Der formatierte Datenträger muss anschließend gemountet werden. Beim mount Befehl wird als erster Parameter der Device-Name und als zweiter Parameter das Verzeichnis angegeben, wo der Datenträger im Verzeichnisbaum eingehängt werden soll: mount /dev/sdb1 /mnt/usbstick Analyse des Super- Als Erstes untersuchen wir beim frisch formatierten Datenträger den Super-. Der Super- folgt auf den Boot-, der die ersten beiden Sektoren belegt. Sektoren werden von 0 beginnend durchnummeriert und haben eine Grösse von 512 Byte. Der Super- startet also auf dem dritten Sektor (Sektor Nr. 2). Er umfasst immer 1024 Byte - Die untenstehende Tabelle zeigt, welche Informationen wo abgelegt sind. Pro Zeile sind 16 Byte eingetragen. Beachten Sie, dass numerische Angaben hexadezimal, mit Little Endian Notation auf dem Datenträger abgelegt sind. Total number of inodes Filesystem size in blocks Number of reserved blocks Free blocks counter Free inodes counter Number of first block size Fragment size Number blocks per group Number fragments per group Number inodes per group Time of last mount Time of last write a) b) Magic signature Status flag c) d) Time of last check Time between checks OS Filesystem created Revision level e) f) Number first nonreserved inode g) h) Compatible features bitmap Incompatible features bitmap Read-only compatible feat. bm. 128-bit filesystem identifier (16 Byte) Volume name (16 Byte) Path of last mount point (64 Byte) Used for compression i) j) k) a) Mount operations counter 2 Byte b) Number of mount operations before check 2 Byte c) Behavior when detecting errors 2 Byte d) Minor revision level 2 Byte e) Default user ID for reserved blocks 2 Byte f) Default group ID for reserved blocks 2 Byte g) Size of on-disk inode structure 2 Byte h) group number of this superblock 2 Byte i) Numbers of blocks to preallocate 1 Byte j) Number of vlocks to preallocate for directories 1 Byte k) Null to pad out 1024 Bytes 818 Byte Unter \software finden Sie das Programm TransDisk. Die Software erlaubt, Datenträger sektorweise zu lesen. Starten Sie die Software und wählen Sie den Button Lesen. Im sich öffnenden Dialog müssen sie das Verzeichnis auswählen, wo der Datenträger eingehängt ist. Lesen Sie die ersten 10 Sektoren des USB-Sticks ein und beantworten Sie folgende Fragen:
Kap. 8: Dateisysteme (E3 EXT2 Dateisystem) 3 a) Der Datenträger wurde beim Formatieren in einzelne Blöcke unterteilt. Wie gross ist ein einzelner? Der im Super angegebene Wert x ist wie folgt zu interpretieren: grösse = 1024 * 2 x. b) Wieviele Blöcke werden einer -Group zugewiesen? c) Wieviele -Groups wurden erstellt? Diese Information ist nicht direkt ersichtlich (wird beim Formatieren auf der Konsole ausgegeben), kann aber rechnerisch ermittelt werden, indem die Gesamtanzahl der Inodes durch die Anzahl Inodes pro -Group geteilt wird. d) Beim ext2-dateisystem werden die nummern verwendet, um Daten auf dem Datenträger zu lokalisieren. Beim Datenfeld Number of first ist die nummer des Super-s angegeben. Leiten Sie aus der grösse und dieser Information eine Formel ab, die erlaubt, die Sektornummer des ersten Sektors eines s aus der nummer rechnerisch zu bestimmen. Number of first : Anzahl Sektoren / : Formel: e) Wieviel Speicherplatz belegt ein einzelner Eintrag in der Inode-Tabelle? f) Die schematische Darstellung auf der ersten Seite ist nicht massstabsgetreu. Wie dick müsste der Strich sein, um den Super- darzustellen, wenn der Datenträger 1GByte gross ist und für die Darstellung des Datenträgers ein Balken von 15cm Länge zur Verfügung steht? E 3.2: Der Group-Descriptor Die Group-Descriptoren sind im Super- folgenden abgelegt. Ein einzelner Eintrag belegt 32 Byte und enthält folgende Informationen: number of block bitmap number of inode bitmap number of first inode table a) b) c) d) Null to pad out 32 Byte a) Number of free blocks in the group 2 Byte b) Number of free inodes in the group 2 Byte c) Number of directories in the group 2 Byte d) Alignment to word 2 Byte a) Bei welchem Sektor sind die Group-Descriptoren zu finden?
Kap. 8: Dateisysteme (E3 EXT2 Dateisystem) 4 b) Uns interessiert besonders, an welcher Stelle die Inode-Table abgelegt ist. Bestimmen Sie die Sektornummer der Inode-Table der ersten -Group mit der Formel, die Sie in der letzten Aufgabe ermittelt haben: c) Wieviele Verzeichniseinträge sind in der ersten -Group bereits vorhanden? E 3.3: Die Inode-Table Jede Datei und jedes Verzeichnis auf dem Datenträger besitzt einen Eintrag in der Inode-Table. Neben verschiedenen Informationen sind auch die Blöcke angegeben, die durch den Inhalt der Datei belegt sind. Ein Eintrag in der Inode-Table hat folgenden Aufbau: a) b) File length in byte Time last file access Time that inode last changed Time file contents last changed Time of file deletion c) d) Number of data blocks of the file File flags OS information Pointer to 1. data block Pointer to 2. data block Pointer to 3. data block Pointer to 4. data block Pointer to 5. data block Pointer to 6. data block Pointer to 7. data block Pointer to 8. data block Pointer to 9. data block Pointer to 10. data block Pointer to 11. data block Pointer to 12. data block Pointer to 13. data block Pointer to 14. data block Pointer to 15. data block File Version File access control list Directory access control list Fragment address OS information a) File type and access rights 2 Byte b) Owner identification 2 Byte c) Group identifier 2 Byte d) Hard link counter 2 Byte Um die Inode-Nummer einer Datei oder eines Verzeichnisses zu bestimmen, steht der Befehl stat zur Verfügung: stat <filename> a) Welche Inode-Nummer wird dem Wurzelverzeichnis des Datenträgers zugewiesen? b) An welcher Stelle ist der Inode-Eintrag auf dem Datenträger zu finden, wenn Inodes mit 1 beginnend durchnummeriert werden? c) Wie lautet die - und die Sektornummer des Datenblocks, wo die Verzeichnisinformationen abgelegt sind?
Kap. 8: Dateisysteme (E3 EXT2 Dateisystem) 5 E 3.4: Verzeichnisinformation untersuchen Für jede Datei und jedes Unterverzeichnis wird im Datenblock eines Verzeichnisses ein Eintrag gemacht. Der Aufbau eines Verzeichniseintrages ist wie folgt: Inode number (4Byte) Entry length a) b) Filename a) File name length 1 Byte b) File type (1=regular File, 2=directory) 1 Byte Interessant ist dabei der Umstand, dass die Länge eines Eintrages nicht fix ist, sondern sich nach der Länge des Verzeichnis- resp. Dateinamens richtet. Untersuchen Sie die Verzeichnisinformation des Wurzelverzeichnisses des Datenträgers. Die Sektornummer haben Sie in der letzten Aufgabe bestimmt. a) Wieviele Verzeichniseinträge sind vorhanden? Drucken Sie hierzu den Sektor aus und markieren Sie mit einem Stift die einzelnen Einträge. Wie lauten die Verzeichnisnamen der einzelnen Einträge? b) Gibt es eine Einschränkung, wie lange ein Dateiname sein darf? Untersuchen Sie den ersten Verzeichniseintrag: c) Wieviele Byte umfasst der Eintrag? d) Welche Inode-Nummer wird zugewiesen? e) Welcher Datentyp ist bei dem Eintrag zugewiesen? E 3.5: Dateien kopieren Unter /vorlagen finden Sie zwei Dateien und ein Verzeichnis. Kopieren Sie die Daten in folgender Reihenfolge auf den USB-Stick: 1. Datei hello.txt 2. Datei core.cpp 3. Verzeichnis Betriebssysteme Hängen Sie den Datenträger aus und wieder ein, damit die Dateien wirklich physikalisch auf den Datenträger geschrieben werden: umount /mnt/usbstick mount /dev/sdb1 /mnt/usbstick
Kap. 8: Dateisysteme (E3 EXT2 Dateisystem) 6 a) Lesen Sie die Verzeichnisinformation des Wurzelverzeichnisses erneut aus und bestimmen Sie die Inode-Nummern: Datei hello.txt Datei core.cpp Verzeichnis Betriebssysteme b) Untersuchen Sie erneut die Inode-Table des Datenträgers. Bei welchem Datenblock ist der Inhalt der Datei hello.txt gespeichert? c) Welche Datenblöcke werden durch die Datei core.cpp belegt? Wieviel Speicherplatz wird für die Datei auf dem Datenträger belegt, bleibt aber ungenutzt? d) Wieviel Speicherplatz wird im Durchschnitt bei einer Datei nicht genutzt, d.h. bleibt unbelegt? e) Die im Verzeichnis Betriebssysteme enthaltene Datei core.o ist einiges grösser als 15 Datenblöcke. Wie wird dieses Problem in der Inode-Table gehandhabt? Untersuchen Sie hierzu den Datenblock, der vom Pointer to 13. data block referenziert wird. Listen Sie die ersten 20 nummern der Datei auf. Hinweis: Die Datei muss nicht in der ersten -Group platziert sein. Bestimmen Sie aus der Anzahl Inodes pro -Group die zugehörige -Group. Der Group-Descriptor für diese -Group liefert dann den Startblock der Inode-Table.
Kap. 8: Dateisysteme (E3 EXT2 Dateisystem) 7 E 3.6: Hard- und Soft-Links Unter ext2 können Hard- und Softlinks (auch symbolische Verknüpfungen genannt) auf Dateien oder Verzeichnisse eingerichtet werden. Ziel dieser Aufgabe ist zu untersuchen, in welcher Form diese Einträge vom Dateisystem abgebildet werden. a) Einrichten der Links Erstellen Sie mit folgendem Befehl einen Hardlink auf die Datei Betriebssysteme/core.o: ln /mnt/usbstick/betriebssysteme/core.o /mnt/usbstick/core-hard Erstellen Sie einen Softlink wie folgt: ln --symbolic /mnt/usbstick/betriebssysteme/core.o /mnt/usbstick/core-soft b) Welche I-Nodes werden den Links zugewiesen? Hardlink: Softlink: c) Welche Informationen befinden sich im Inode des Softlinks? d) Wenn ein Hardlink gelöscht wird, bleibt die "Originaldatei" bestehen. Wie wird dies erreicht? Schliesslich verweist ein Hardlink auf den gleichen Node wie die Originaldatei. Hinweis: Untersuchen Sie das Feld Hard Link Counter im Inode der Datei.