Betriebssysteme

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