Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
1 Einleitung
TEIL I: Einstieg in Linux
2 Die Installation
3 Erste Schritte
4 Linux als Workstation für Einsteiger
TEIL II: Grundlagen
5 Kernel
6 Grundlagen aus Anwendersicht
TEIL III: Die Shell
7 Die Shell
8 Reguläre Ausdrücke
9 Konsolentools
10 Die Editoren
11 Shellskriptprogrammierung mit der bash
12 Die C-Shell
TEIL IV: System- & Netzwerkadministration
13 Benutzerverwaltung
14 Grundlegende Verwaltungsaufgaben
15 Netzwerkgrundlagen
16 Anwendersoftware für das Netzwerk
17 Netzwerkdienste
18 Mailserver unter Linux
19 LAMP & Co.
20 DNS-Server
21 Secure Shell
TEIL V: Die grafische Oberfläche
22 Die grafische Oberfläche
23 Window-Manager und Desktops
24 X11-Programme
25 Multimedia und Spiele
TEIL VI: Systeminterna
26 Prozesse und IPC
27 Bootstrap und Shutdown
28 Dateisysteme
29 Virtualisierung und Emulatoren
TEIL VII: Programmierung und Sicherheit
30 Softwareentwicklung
31 Crashkurs in C und Perl
32 Einführung in Computersicherheit
33 Netzwerksicherheit überwachen
TEIL VIII: Anhang
A Lösungen zu den einzelnen Aufgaben
B Kommandoreferenz
C X11-InputDevices
D MBR
E Buch-DVDs
F Glossar
G Literatur
Stichwort
Ihre Meinung?

Spacer
Linux von Johannes Plötner, Steffen Wendzel
Das umfassende Handbuch
Buch: Linux

Linux
Rheinwerk Computing
1282 S., 5., aktualisierte Auflage 2012, geb., mit 2 DVDs
49,90 Euro, ISBN 978-3-8362-1822-1
Pfeil 14 Grundlegende Verwaltungsaufgaben
Pfeil 14.1 Rechteverwaltung
Pfeil 14.1.1 chmod
Pfeil 14.1.2 chown
Pfeil 14.1.3 Erweiterte Rechte
Pfeil 14.1.4 umask
Pfeil 14.1.5 Access Control Lists
Pfeil 14.2 Softwareinstallation
Pfeil 14.2.1 Paketverwaltung und Ports
Pfeil 14.2.2 APT – Advanced Packaging Tool
Pfeil 14.2.3 Pakete in Handarbeit: dpkg und rpm
Pfeil 14.2.4 Das Slackware-Paketsystem
Pfeil 14.2.5 Gentoo Portage
Pfeil 14.2.6 BSD-Ports
Pfeil 14.2.7 Softwareinstallation ohne Pakete
Pfeil 14.3 Tätigkeiten automatisieren
Pfeil 14.3.1 Skripte & Co.
Pfeil 14.3.2 Cronjobs
Pfeil 14.3.3 Punktgenau mit »at«
Pfeil 14.4 Logging
Pfeil 14.4.1 Logdateien
Pfeil 14.4.2 syslogd
Pfeil 14.4.3 logrotate
Pfeil 14.4.4 logcheck
Pfeil 14.5 Dateisystemverwaltung
Pfeil 14.5.1 /etc/fstab
Pfeil 14.5.2 mount
Pfeil 14.5.3 Platz beschränken: Quotas
Pfeil 14.5.4 du und df
Pfeil 14.5.5 SoftRAID und LVM
Pfeil 14.5.6 Backups, Archive & Co.
Pfeil 14.6 Kernel kompilieren
Pfeil 14.6.1 Kernel-Quellen besorgen
Pfeil 14.6.2 Konfiguration
Pfeil 14.6.3 Den Kernel übersetzen
Pfeil 14.6.4 Den Bootloader anpassen
Pfeil 14.6.5 BSD-Kernel kompilieren
Pfeil 14.7 Kernelmodule verwalten
Pfeil 14.7.1 modprobe
Pfeil 14.7.2 lsmod
Pfeil 14.7.3 insmod und rmmod
Pfeil 14.7.4 /etc/modules und Co.
Pfeil 14.7.5 modconf
Pfeil 14.8 Magic SysRq
Pfeil 14.8.1 Aktivierung von SysRq
Pfeil 14.8.2 Tastenkombinationen
Pfeil 14.9 Lokalisierung
Pfeil 14.9.1 Tastaturbelegung
Pfeil 14.9.2 Deutsche Sprache
Pfeil 14.9.3 Einstellen der Uhr
Pfeil 14.9.4 Texte von anderen Plattformen
Pfeil 14.10 Zusammenfassung
Pfeil 14.11 Aufgaben

Rheinwerk Computing - Zum Seitenanfang

14.5 DateisystemverwaltungZur nächsten Überschrift

In diesem Abschnitt wollen wir uns nun um Verwaltungsaufgaben kümmern, die mit dem Dateisystem zu tun haben. Dabei gibt es wiederum Grundlagen, die vor den eigentlich interessanten Themen behandelt werden müssen. Im ersten Kapitel haben wir dabei schon das VFS, das Mounting sowie /etc/fstab erwähnt. Diese Themen wollen wir nun aufgreifen.


Rheinwerk Computing - Zum Seitenanfang

14.5.1 /etc/fstabZur nächsten ÜberschriftZur vorigen Überschrift

Betrachten wir im Folgenden noch einmal das Beispiel aus Kapitel 5, und konzentrieren wir uns dabei auf die Felder, die wir noch nicht besprochen haben:

Listing 14.64 Eine /etc/fstab-Datei

# Proc-Verzeichnis
proc /proc proc defaults 0 0

# Festplatten-Partitionen
UUID=c5d055a1-8f36-41c3-9261-0399a905a7d5
/ ext3 relatime,errors=remount-ro 0 1
UUID=c2ce32e7-38e4-4616-962e-8b824293537c
/home ext3 relatime 0 2

# Swap
/dev/sda7 none swap sw 0 0

# Wechseldatenträger
/dev/scd0 /mnt/dvd udf,iso9660 user,noauto,exec,utf8 0 0

Aufbau

Der Aufbau dieser Datei ist tabellarisch. Jeder Datensatz steht in einer eigenen Zeile, jedes Attribut ist durch Leerzeichen vom nächsten getrennt. Die erste Spalte legt das Blockgerät – die Gerätedatei des Speichermediums – fest, das gemountet werden soll. An dieser Stelle können auch Netzwerkdateisysteme in der Form Rechner:Verzeichnis angegeben werden.

In Spalte zwei ist der Mountpoint angegeben. Beschreibt ein Datensatz jedoch den Swap-Auslagerungsspeicher, so ist hier kein Mountpoint, sondern »none« anzugeben.

Das dritte Feld legt das Dateisystem fest. Auf einer CD-ROM findet sich schließlich ein ganz anderes Dateisystem als auf einer Windows- oder Linux-Partition. Generell können hier folgende Dateisystemtypen angegeben werden:

  • ext
    Der Vorläufer des bei Linux hauseigenen Dateisystems ext2.
  • ext2
    Dieses Dateisystem erlaubt recht lange Dateinamen und benutzt Inodes zur Verwaltung der Dateien.
  • ext3/ext4
    Die aktuellen Journaling-Versionen des ext2-Dateisystems. Diese Extended-Dateisysteme sind speziell für Linux entwickelt worden und damit für den Einsatz damit prädestiniert. Sie sind abwärtskompatibel. Man kann demnach eine ext3-Partition mit einem ext2-Treiber mounten, und alles läuft glatt. Darüber hinaus entfällt bei ext3 und ext4 ein langes Überprüfen der Partition, wenn beispielsweise durch einen Stromausfall das Dateisystem nicht ordentlich ausgebunden werden konnte, was sonst beim Shutdown des Systems automatisch passiert.
  • xfs
    SGIs XFS. Dieses schon alte Dateisystem benötigt einen Kernel-Patch, bietet sich jedoch besonders für die Verwaltung sehr großer Datenmengen an und unterstützt Access Control Lists sowie Journaling.
  • reiserfs
    ReiserFS (Filesystem) ist ein relativ neues und sehr weit verbreitetes Journaling-Dateisystem, das binäre Bäume als Grundlage seiner Datenverwaltung benutzt. Als das ext3-System noch nicht fertiggestellt war, wurde ReiserFS aufgrund seiner Journaling-Fähigkeiten dem Dateisystem ext2 oft vorgezogen.
  • swap
    Das Swap-Dateisystem wird zur Auslagerung momentan nicht benötigter Hauptspeicherdaten benutzt.
  • msdos/vfat
    Microsofts FAT16/32-Dateisysteme. Sollten Sie eine ältere Windows- oder DOS- Partition benutzen, so kann diese hiermit auch von Linux aus genutzt werden.
  • ntfs
    Das Dateisystem NTFS von Microsoft, das auf neueren Windows-Versionen zum Einsatz kommt, wird ebenfalls (jedoch nicht immer mit Schreibzugriff) unterstützt.
  • iso9660
    Dieses Dateisystem wird auf CD-ROMs und DVDs verwendet.
  • nfs
    Das Netzwerkdateisystem NFS (Network Filesystem) wird für die Speicherung von Dateien auf Fileservern genutzt. Ein so von einem anderen Rechner gemountetes Dateisystem ist für den Benutzer mit Ausnahme von Performanceaspekten nicht von lokalen Verzeichnissen zu unterscheiden.
  • proc
    Das Prozessdateisystem proc enthält unter anderem Informationen über die aktuellen Prozesse des Rechners sowie andere Einstellungen und Laufzeitdaten des Kernels. Dieses Dateisystem ist ein Pseudodateisystem, da Sie die Dateien und Verzeichnisse zwar sehen, aber alles auf Ihren Zugriff hin zur Laufzeit für Sie erstellt wird. Es benötigt also keinerlei Platz auf der Festplatte.

Die vierte Spalte wird zur Festlegung einiger Optionen benutzt. Mehrere angegebene Optionen werden durch ein Komma getrennt. Die wichtigsten lauten:

  • auto/noauto
    Hiermit wird festgelegt, ob ein Dateisystem automatisch beim Booten gemountet werden soll. Mountet man ein Dateisystem nicht beim Booten, so genügt später ein einfaches mount mit dem Mountpoint oder dem Device als Parameter, um das Dateisystem einzubinden.

Integration ins VFS

  • user=steffen,gid=1000
    Mit einem solchen Parameter können die Rechte für den Zugriff auf ein Dateisystem gesetzt werden. Das ist vor allem für Dateisysteme interessant, die selbst keine Benutzer- oder Rechteinformationen verwalten, wie etwa Microsofts FAT16/32. Bei einem Listing mit ls -l werden dann die hier vorgegebenen (Rechte-)Daten angezeigt.
  • ro/rw
    Mit diesen Optionen kann festgelegt werden, ob ein Dateisystem nur lesbar (ro, read-only) oder mit Lese- und Schreibzugriff (rw, read & write) gemountet wird.
  • suid/nosuid
    Über die suid-Option können Sie festlegen, ob Dateien mit den SUID- und SGID-Berechtigungen ausgeführt werden dürfen. Vor allem für »fremde« (Netzwerk-)Dateisysteme empfiehlt es sich, das nosuid-Flag zu setzen, um Sicherheitsrisiken zu minimieren.
  • sync/async
    Soll ein asynchroner oder synchroner I/O-Zugriff auf das Medium erfolgen?
  • atime/noatime
    Regelt, ob die Zugriffszeiten auf Dateien angepasst werden sollen oder nicht.
  • dev/nodev
    Erlaubt beziehungsweise verbietet die Nutzung von Character- und Block-Geräten in diesem Dateisystem. Demnach sollte das Dateisystem, auf dem sich das Verzeichnis /dev befindet, diese Option sinnvollerweise gesetzt haben – andere, vor allem fremde Dateisysteme aus Sicherheitsgründen eher nicht.
  • exec/noexec
    Diese Option erlaubt bzw. verhindert die Ausführung von Binärdateien.
  • user/nouser
    Mit der nouser-Option hat nur root die Berechtigung, dieses Medium zu mounten. Ist die user-Option gesetzt, so dürfen auch andere Benutzer das Medium mounten.
  • default
    Diese Option setzt die Optionen rw, suid, dev, exec, auto, nouser und async.

Es existieren noch einige weitere, teilweise dateisystemspezifische Optionen, die an dieser Stelle nicht weiter erläutert werden sollen. Falls Sie sich dafür interessieren, so hilft Ihnen die mount-Manpage weiter.

Spalte Nummer fünf beinhaltet entweder eine »1« oder eine »0«. Ist eine »1« gesetzt, so wird das Dateisystem für die Backup-Erstellung mittels des dump-Kommandos markiert. Da dieses Kommando aber kaum noch genutzt wird, brauchen Sie sich über diesen Wert keine Gedanken zu machen. Wenn Sie es genau nehmen, sollten allerdings alle Wechselmedien mit einer »0« gekennzeichnet werden. Schließlich wird man ja – wenn überhaupt – nur die lokalen Platten, aber keine zufällig eingelegten CD-ROMs sichern wollen.

Die letzte Spalte (eine »2«, »1« oder eine »0«) gibt ein Flag für das Tool fsck an. Ist es auf eine Zahl größer Null gesetzt, so überprüft fsck beim Booten nach einem fehlerhaften oder ganz fehlenden Unmount (beispielsweise nach dem Absturz des Rechners) das Dateisystem auf Fehler hin. Die Zahlen selbst geben dabei die Reihenfolge beim Überprüfen an. Man sollte daher die Rootpartition (/) mit einer »1« und alle anderen Platten und Partitionen mit einer »2« versehen. Dort ist die Reihenfolge schließlich egal.


Rheinwerk Computing - Zum Seitenanfang

14.5.2 mountZur nächsten ÜberschriftZur vorigen Überschrift

Dateisysteme einbinden

Das mount-Tool wurde bereits kurz angesprochen: Es wird benutzt, um ein Dateisystem per Hand einzuhängen. Dabei werden der Dateisystemtyp (mit dem Parameter -t), das zu mountende Gerät und der Mountpoint angegeben. Das Gerät kann sowohl ein CD-ROM-Laufwerk als auch eine Festplattenpartition, eine Netzwerkressource (Network Filesystem) oder Ähnliches sein.

Ein Aufruf von mount hat die Form mount Optionen Quelldateisystem Mountpunkt, also etwa mount -t ext3 /dev/sdb1 /public. In diesem Beispiel wurde die erste Partition der zweiten Festplatte [Fn. Genauer gesagt: der Primary Slave des SATA-Hostadapters.], auf der sich ein ext3-Dateisystem befindet, in das Verzeichnis /public gemountet. Ruft man mount ohne Parameter auf, werden alle aktuell eingehängten Dateisysteme angezeigt:

Listing 14.65 Was haben wir denn Feines eingehängt?

# mount
/dev/sda5 on / type ext3 (rw)
proc on /proc type proc (rw)
...

[+]Mit dem Kommando umount wird ein Dateisystem wieder ausgehängt. Einsteigern bereitet dieses Kommando jedoch oft Kopfzerbrechen, da sich so manches Dateisystem nicht ohne Weiteres unmounten lässt. Dies liegt dann oft daran, dass noch ein Prozess läuft, der sein aktuelles Arbeitsverzeichnis in diesem Dateisystem hat – beispielsweise befindet man sich mit dem Arbeitsverzeichnis der Shell oft selbst noch im Mountpoint.

Listing 14.66 Unmounten einer Partition

# umount /public

Rheinwerk Computing - Zum Seitenanfang

14.5.3 Platz beschränken: QuotasZur nächsten ÜberschriftZur vorigen Überschrift

Im Folgenden wollen wir die sogenannten Quotas besprechen. Quotas sind dazu da, den Speicherplatz zu begrenzen, den ein Benutzer zur Verfügung hat. Dies ist auf Mehrbenutzersystemen oft effektiver, als auf die Kooperation der Nutzer zu hoffen. Quotas werden somit vor allem in größeren Unix-Rechenzentren eingesetzt.

Es sei hier erwähnt, dass Quotas in erster Linie von den ext-Dateisystemen in dieser Form unterstützt werden. Möchte ein Prozess eine Datei anlegen oder anderweitig mehr Speicherplatz beanspruchen, so prüft der Kernel zuerst, ob der mit dem Prozess assoziierte Nutzer überhaupt das Recht dazu hat.

Harte und weiche Grenzen

Um den Benutzern den Umgang mit dieser Kontrolle zu erleichtern, können sogenannte harte und weiche Grenzen definiert werden. Ein Überschreiten der weichen Grenzen ist auf eine gewisse Dauer beschränkt und wird mit einer Warnmeldung quittiert. Im Gegensatz dazu ist es unmöglich, harte Grenzen zu überschreiten. Auf diesem Weg kann man klare Limits setzen und trotzdem zeitweilige Ansprüche befriedigen.

Um solche Speicherplatzbeschränkungen einrichten zu können, muss zunächst der Quota-Support in den Kernel kompiliert sein, was jedoch bei allen Standard-Kerneln, so wie sie von den Distributoren ausgeliefert werden, der Fall sein sollte.

Den Quota-Support aktivieren

Anschließend kann in der /etc/fstab für die entsprechenden Partitionen der Quota-Support aktiviert werden. Dies geschieht im Optionenfeld durch Angabe der Schlüsselwörter usrquota beziehungsweise grpquota, je nachdem, ob man eine Beschränkung für Benutzer oder für Gruppen aktivieren möchte. Natürlich ist auch eine Kombination dieser Parameter möglich.

Listing 14.67 Aktivieren von Quotas in der fstab-Datei

/dev/sda3  /home ext3 defaults,usrquota,grpquota  1 2

Hier im Beispiel wurden für die /home-Partition beide Begrenzungsmöglichkeiten aktiviert. Als Nächstes muss man sicherstellen, dass in der Wurzel der entsprechenden Partitionen die Datei quota.user beziehungsweise quota.group existiert. Da diese Dateien beim Erstellen auch leer sein können, reicht ein Anlegen der Dateien mit touch, dass leere Dateien anlegen bzw. die zeitlichen Zugriffswerte von Dateien ändern kann:

Listing 14.68 Anlegen einer quota.user-Datei

# cd /home
# touch quota.user

Mit den Kommandos quotaon und quotaoff kann nun der Administrator die Quotas aktivieren und wieder abschalten. Sinnvollerweise sollten die Befehle, soweit sie noch nicht von der Distribution über ein bestimmtes Paket [Fn. Natürlich sollte man vor jeder Aktion im Repository der eigenen Distribution nachsehen, ob man sich vielleicht etwas Arbeit durch ein vorkonfiguriertes Paket sparen könnte.] vorkonfiguriert sind, in ein Skript in /etc/init.d eingebaut werden. Am besten eignet sich dafür die Datei /etc/init.d/boot oder die /etc/init.d/boot.local, in die beispielsweise folgende Zeilen eingefügt werden könnten:

Listing 14.69 Quotas im Initscript

if [ -x /usr/sbin/quotaon ]
then
echo "Aktivieren der Speicherplatzbeschränkung"
/usr/sbin/quotaon -avug
fi

Dieses kurze Codefragment testet, ob die Datei /usr/sbin/quotaon vorhanden und ausführbar ist. Im Erfolgsfall wird das Programm dann mit einer kurzen Meldung einfach gestartet.

Des Weiteren ist es empfehlenswert, vor dem Aktivieren die Quotas überprüfen zu lassen. Dazu führt man vor dem Befehl quotaon das Kommando quotacheck aus. Analog dazu können Quotas natürlich mit quotaoff wieder deaktiviert werden.

Quotas setzen

Nun möchten wir natürlich noch die Quotas ändern können. Es ist zwar unter Unix-Systemen unüblich, Konfigurationsdateien im Binärformat zu speichern, die quota.user bzw. quota.group sind aus Performancegründen allerdings hierfür optimiert. Aus diesem Grund kann man sie auch nicht per Hand editieren, sondern benötigt das Programm edquota. Mit edquota -u jploetner kann man dann beispielsweise die Quotas für den Benutzer jploetner ändern.

Das Programm edquota nutzt dafür den in der Shellvariablen EDITOR benannten Editor. Es wird sich dann die Möglichkeit eröffnen, für die Werte soft = 0, hard = 0 entsprechende Grenzen einzutragen. Aber Vorsicht: Hier sind die Größen in Blocks oder Inodes angegeben! Daher müssen Sie eventuell erst zurückrechnen, wie viel Platz das letztendlich wäre. Standardgrößen sind 1024, 2048 oder 4096 Bytes pro Block. Über die Inodes lässt sich dann die Anzahl der Dateien und Verzeichnisse regeln.

Listing 14.70 Die Limits für den Benutzer »jploetner« ändern

# edquota -u jploetner
Quotas for user jploetner:
/dev/sda3:
blocks in use: 6, limits (soft = 0, hard = 0)
inodes in use: 5, limits (soft = 0, hard = 0)

Hier könnte man nun ein entsprechendes Limit eintragen. Dabei wird jedoch das hard-Limit erst genutzt, wenn man eine grace-time, eine Art »Gnadenfrist«, definiert hat. In dieser Zeit kann das Softlimit überschritten werden, das Hardlimit jedoch nicht. Setzen kann man diese Frist mit dem Parameter -t:

Listing 14.71 Die grace-time setzen

# edquota -t
Time units may be: days, hours, minutes, or seconds
Grace period before enforcing soft limits for users:
/dev/sda3:
block grace period: 0 days,
file grace period: 0 days

Nach dem Speichern der Datei und dem Beenden des Editors werden die Daten schließlich übernommen. Wir könnten Ihnen nun noch sehr viel über die vielfältigen Spielereien erzählen, die mit Quotas möglich sind, jedoch würde dies den Rahmen des Kapitels sprengen. Stattdessen wollen wir uns von der administrativen Sichtweise verabschieden und im Folgenden einen Blick auf die Benutzer in einer von Quotas bestimmten Welt werfen.

Benutzer und Quotas

Natürlich werden Benutzer durch Quotas in dem ihnen zur Verfügung stehenden Speicherplatz eingeschränkt. Die Frage ist jedoch, wie sie mit dieser Einschränkung umgehen können. Grundsätzlich sollten die Benutzer einen Überblick über den bisher verbrauchten Speicher sowie die gesetzten Grenzen haben. Dazu können sie recht einfach das quota-Programm nutzen:

Listing 14.72 Das quota-Programm

$ quota
Disk quotas for user steffen (uid 1021):
Filesystem blocks quota limit grace
/dev/hda3 37760 80000 90000
files quota limit grace
1272 8000 9000

Natürlich kann sich auch der Administrator über die Option -u, gefolgt vom Benutzernamen, beziehungsweise -g, gefolgt vom Gruppennamen, diese Daten anzeigen lassen.


Rheinwerk Computing - Zum Seitenanfang

14.5.4 du und dfZur nächsten ÜberschriftZur vorigen Überschrift

In diesem Zusammenhang ebenfalls interessant sind Informationen über die Gesamtgröße bestimmter Verzeichnisse oder Dateisammlungen. Zu diesem Zweck gibt es das Tool du:

Listing 14.73 Verzeichnisplatz anzeigen: du

$ du -h Kompendium/
12K Kompendium/CVS
12K Kompendium/images/CVS
13M Kompendium/images
45M Kompendium/

Offensichtlich zeigt du also den aufsummierten Speicherverbrauch eines bestimmten Verzeichnisses an – alternativ auch einer Datei oder mehrerer Dateien – samt aller Unterverzeichnisse. Hier wurde die Option -h (vom englischen human readable) benutzt, die die Angabe des Speicherplatzes in »üblichen Größen« veranlasst. Ohne diese Option dürfte man entsprechend von der Anzeige in Kilobyte zurückrechnen. Ebenfalls häufig genutzt wird die Parameterkombination -sch, die am Ende nur für jedes auf der Kommandozeile angegebene Argument sowie die Gesamtheit aller Argumente eine Summe produziert und ausgibt:

Listing 14.74 Nur die Summen: du -sch

$ du -sch Kompendium/
45M Kompendium/
45M insgesamt

Mit du behält der Benutzer auf einem durch Quotas reglementierten Dateisystem einen guten Überblick über seinen Speicherplatzverbrauch.

In größeren Maßstäben denken: df

Größe eines Dateisystems

Dagegen ist das df-Tool (vom englischen disk free) dazu gedacht, die Auslastung ganzer Dateisysteme zu überwachen. Dazu übergibt man bei jedem Aufruf am besten ebenfalls die Option -h, da spätestens bei etwas größeren Platten der Umgang mit mehreren hundert Millionen Kilobytes etwas unhandlich wird. Eine Anzeige in Gigabyte ist allemal handlicher:

Listing 14.75 Platz auf der Platte: df

$ df -h
Dateisystem Größe Benut Verf Ben% Eingehängt auf
/dev/hda1 20G 8,2G 11G 44 % /
tmpfs 380M 4,0K 380M 1 % /dev/shm
/dev/hda2 21G 7,5G 13G 38 % /mnt/openbsd
/dev/hda3 35G 30G 4,5G 96 % /home

Vielleicht werden Sie sich an dieser Stelle fragen, warum der verfügbare Plattenplatz, addiert zum benutzten Plattenplatz, so gar nicht mit der Größe der Partition zusammenhängt. Der Grund dafür ist in der Struktur der Dateisysteme zu suchen: Für Metadaten wie »Eigentümer« oder »Zugriffsrechte« von Dateien beziehungsweise Verzeichnissen wird ebenfalls Speicherplatz benötigt. Diese Metadaten werden in Form von sogenannten Inodes am Anfang einer Partition abgelegt. Mehr Informationen zum Thema »Dateisysteme« finden Sie im gleichnamigen Kapitel 28.


Rheinwerk Computing - Zum Seitenanfang

14.5.5 SoftRAID und LVMZur nächsten ÜberschriftZur vorigen Überschrift

Dieser Abschnitt zeigt Ihnen Möglichkeiten auf, wie Sie aus Linux bezüglich der Speicherplatzverwaltung das Optimum herausholen können. Dabei gibt es – abgesehen von hardwarebasierten Lösungen, die wir hier nicht besprechen wollen – unter Linux zwei Ansätze: SoftRAID und LVM.

  • LVM
    Der LVM (Logical Volume Manager) bietet Ihnen die Möglichkeit, Dateisysteme über mehrere Partitionen, ja sogar über mehrere Speichermedien, zu verteilen.
  • SoftRAID
    SoftRAID dagegen bietet Ihnen eine Softwarelösung, um Ihr System in verschiedenen RAID-Leveln zu fahren und damit Performance beziehungsweise Datensicherheit zu gewinnen. Zwar muss der Prozessor dafür etwas Leistung einbüßen, da er sich um Dinge kümmern muss, die sonst ein RAID-Controller übernehmen würde, doch kann man diese Einbuße auf modernen, leistungsfähigen Rechnern durchaus in Kauf nehmen.

Zuerst wollen wir jedoch klären, was ein RAID überhaupt ist, welche Unterschiede bestehen und was das für Linux bedeutet.

RAID

Ein RAID (Redundant Array of Inexpensive/Independent Disks) dient zur Organisation mehrerer Festplatten in einem Computersystem.

Performance und Sicherheit

Man kann ein RAID unterschiedlich nutzen, je nachdem, ob man in erster Linie Performance, Datensicherheit durch Redundanz oder eine möglichst gute Kombination aus beiden Vorteilen haben will. Die wichtigsten Arten, ein RAID zu betreiben – die sogenannten RAID-Level – sind in der folgenden Übersicht zusammengefasst:

Parallelisierung

  • Level 0
    Bei RAID 0 (Striping) werden mehrere Festplatten ohne Fehlertoleranz zusammengeschlossen. Um eine Performanceverbesserung zu erreichen, werden dabei jeweils Schreib- und Leseoperationen parallel auf allen verfügbaren Platten durchgeführt. Es wird also zum Beispiel Datenblock 1 auf die Platte 1 und gleichzeitig Datenblock 2 auf Platte 2 geschrieben.
  • Fällt hier allerdings eine Platte aus, so können die Daten nicht wiederhergestellt werden, da keine Fehlertoleranz genutzt wurde. Daher ist RAID 0 auch eigentlich kein echtes RAID, da die Daten nicht redundant gespeichert werden.

Spiegelung

  • Level 1
    Auf RAID 1-(Mirroring-)Systemen wird eine Festplatte einfach nur von einer anderen Platte permanent gespiegelt. Fällt eine der Platten aus, können die Daten dann selbstverständlich von der anderen Platte aus rekonstruiert werden. Auch wenn man es auf den ersten Blick vielleicht übersieht, ist hier zumindest beim Lesen ein Performancegewinn möglich, da eine große Datei parallel von beiden Platten gelesen werden kann.
  • Da RAID 1 aber bezüglich der verwendeten und dann nutzbaren Kapazität recht ineffizient und teuer ist, wird es meist nur bei sehr kleinen Servern eingesetzt.

  • Level 5
    Der RAID-Level 5 (Striping and distributed parity mode) versucht, die Vorteile von Level 0 und Level 1 zu kombinieren, indem eine Paritätsinformation [Fn. Die Paritätsinformation wird datenblockweise in einer Art und Weise gebildet, dass beim Verlust eines Datenblocks dieser wiederhergestellt werden kann. Für alle, die es interessiert: Die mathematische Funktion XOR leistet genau das Gewünschte: a XOR b = c, a XOR c = b und b XOR c = a.] auf den Platten verteilt wird. Für RAID 5 braucht man mindestens 3 Platten und kann dann bei $n$ Platten immerhin $\frac{n-1}{n}$ der Gesamtkapazität effektiv nutzen. Man braucht also nur eine Platte für die Paritätsinformation.
  • Dadurch, dass für jeden Datenblock auch die Paritätsinformation geschrieben werden muss, dauert das Schreiben natürlich länger als bei anderen RAID-Leveln. Dafür erfolgt das Lesen ähnlich wie bei RAID 0 parallel von mehreren Platten und ist daher prinzipiell schneller als bei einzelnen Festplatten. Aufgrund dieser Datensicherheit durch Redundanz sowie des Performance-Gewinns ist RAID 5 der meistgenutzte RAID-Level.

Ein RAID kann nun auf unterschiedliche Weise realisiert werden; so gibt es zum Beispiel RAID-Controller in Hardware und Software. Eine Softwarelösung wäre bspw. die im Folgenden beschriebene Soft-RAID-Implementierung im Linux-Kernel. Dort kann man einzelne Festplatten zu neuen, virtuellen Devices zusammenfassen, die sich dann wie ganz normale Platten ins Dateisystem einbinden lassen. Ein Hardware-RAID funktioniert vom Prinzip her nicht anders, nur dass die Intelligenz nicht in Form von Softwaretreibern für das Betriebssystem, sondern in Mikrochips implementiert ist.

SoftRAID konfigurieren

Die Verwaltung von mehreren unabhängigen Festplatten beziehungsweise Partitionen als ein RAID-Device fällt eindeutig in den Aufgabenbereich des Kernels, was bei der Übersetzung des Kernels die Einbindung entsprechender Features – direkt oder als Modul – voraussetzt.

Setzt man nun einen Standard-Kernel ein, so wird man die benötigten Treiber in der Regel als Modul finden. Man kann zum Beispiel den Support für RAID 5 durch Laden des gleichnamigen Moduls aktivieren:

Listing 14.76 Die benötigten Module laden

# modprobe raid5

Da modprobe alle durch Abhängigkeiten benötigten Module automatisch mitlädt, werden die Module md und xor mitgeladen, wie man an der Ausgabe von lsmod erkennt:

Listing 14.77 lsmod

# lsmod
raid5 22592 0
md 49544 1 raid5
xor 15688 1 raid5
...

Sind die Module eingebunden, so wird im /proc-Verzeichnis die Datei mdstat angelegt, die immer den aktuellen RAID-Status des Systems enthält. Zu Anfang ist jedoch noch kein RAID konfiguriert:

Listing 14.78 Die /proc/mdstat

$ cat /proc/mdstat
Personalities : [raid5]
unused devices: <none>

Möchte man nun ein RAID-System konfigurieren, so benötigt man bestimmte Programme. Früher hat man zur Konfiguration oft das raidtools-Paket herangezogen, jedoch ist man mit der Zeit zum einfacheren mdadm übergegangen. Nach der Installation des entsprechenden Pakets kann man nun ein RAID anlegen.

Normalerweise würde man als Devices zum Zusammenstellen eines RAIDs verschiedene, möglichst gleich große Partitionen [Fn. Die kleinste Partition bestimmt die Gesamtgröße des RAIDs, da alle Platten parallel genutzt werden.] auf unterschiedlichen Festplatten zusammenschließen. Da jedoch die meisten Heimanwender eben keine zwei oder drei Festplatten übrig haben, kann man zum Testen auch Ramdisks verwenden.

Eine Ramdisk ist ein Bereich im Hauptspeicher, der nicht Programmen zur Verfügung steht, sondern mit einem Dateisystem formatiert und in das VFS (Virtual File System) eingebunden werden kann.

Der Aufruf von mdadm zum Anlegen eines neuen RAID 5-Devices aus drei Ramdisks sieht nun wie folgt aus:

Listing 14.79 Ein RAID-System anlegen

# mdadm --create --verbose /dev/md0 --level=raid5    \
--raid-devices=3 /dev/rd/0 /dev/rd/1 /dev/rd/2
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 64K
mdadm: size set to 8128K
mdadm: array /dev/md0 started.

Als Ausgabe erhält man auch gleich die entsprechenden Erfolgsmeldungen. An der /proc/mdstat kann man ebenfalls die Veränderung erkennen. Dort wird aufgeführt, dass md0 ein RAID 5-Gerät ist und aus drei Ramdisks besteht:

Listing 14.80 Änderungen in der /proc/mdstat

# cat /proc/mdstat
Personalities : [raid5]
md0 : active raid5 ram2[2] ram1[1] ram0[0]
16256 blocks level 5, 64k chunk,
algorithm 2 [3/3] [UUU]

unused devices: <none>

Dateisystem formatieren

Bevor wir das RAID nun nutzen können, muss es mit einem Dateisystem formatiert werden. Bei richtigen (Soft-)RAID-Systemen wird man hier noch einige Parameter zur Performanceverbesserung anpassen wollen, aber da eine Ramdisk im Gegensatz zu einer Festplatte auch so unschlagbar schnell ist, wollen wir es hier bei einem einfachen Aufruf belassen:

Listing 14.81 Unser RAID formatieren ...

# mke2fs /dev/md0
mke2fs 1.38-WIP (20-Jun-2005)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
4064 inodes, 16256 blocks
812 blocks (5.00 %) reserved for the super user
...

Nun kann unser neues Device auch gemountet werden. Im Anschluss daran könnte man Dateien speichern und das RAID als vollwertiges Dateisystem nutzen.

Listing 14.82 ... und mounten!

# mount -t ext2  /dev/md0 /mnt/
# mount
...
/dev/md/0 on /mnt/ type ext2 (rw)
# ls /mnt/
lost+found

In unserem Fall sind jedoch alle Einstellungen und Formatierungen spätestens nach dem nächsten Neustart vergessen, schließlich wurde alles nur im flüchtigen Hauptspeicher angelegt.

Diese Ausführungen sollen an dieser Stelle genügen. Es wurde gezeigt, wie SoftRAID funktioniert und wie man es aufsetzen könnte. Da diese Informationen natürlich für einen ernsthaften Einsatz nicht ausreichen, findet sich auf der Buch-DVD das SoftRAID-HOWTO, in dem Sie Details zum Performance-Tuning und zur Verwaltung zur Laufzeit finden. Ansonsten hilft Ihnen natürlich auch die sehr ausführliche Manpage zu mdadm weiter.


Rheinwerk Computing - Zum Seitenanfang

14.5.6 Backups, Archive & Co.Zur nächsten ÜberschriftZur vorigen Überschrift

Auch ein RAID-System, das dank Redundanzen den Ausfall von einer bis teilweise mehreren Festplatten verkraften kann, schützt nicht vor einem Totalausfall. Es muss nicht einmal das ganze Haus abbrennen, damit ein Backup benötigt wird: Auch wenn man versehentlich eine wichtige Datei löscht, ist es vorteilhaft, noch irgendwo eine Sicherungskopie zu haben.

Sicherung bestimmter Dateien

In der Regel möchte man dabei nicht das ganze System, sondern nur ausgewählte Dateien sichern. Diese befinden sich oft in einem bestimmten Verzeichnis, oder es handelt sich um eine einzelne besondere Datei. Anstatt diese Daten nun einfach nur zu kopieren, bietet es sich an, sie vorher zu komprimieren.

Wo man unter Windows die Daten einfach »zippen« würde, ist unter Linux ein etwas anderes Vorgehen angebracht. Man unterscheidet hier nämlich zwischen einem Archiv und einer gepackten Datei:

Ein Archiv enthält mehrere Dateien und Verzeichnisse, während eine gepackte Datei einfach nur eine einzige, komprimierte Datei darstellt.

Archive mit tar

Rechte erhalten

Damit Rechte und andere Dateiattribute bei der Komprimierung erhalten bleiben, werden mehrere Dateien vor dem Packen in ein Archiv gesteckt. Dies hat den Vorteil, dass bei Änderungen an den Dateiattributen nicht jedes einzelne Komprimierungsprogramm neu geschrieben werden muss. Vor allem im Hinblick auf ACLs ist diese Trennung sinnvoll.

Das Archivierungsprogramm der Wahl ist unter Linux so gut wie immer tar, der Tape ARchiver. Wie man dem Namen entnehmen kann, stammt das Programm aus einer Zeit, als Backups noch auf große Magnetbänder geschrieben wurden – und ACLs auch noch weitgehend unbekannt waren.

Listing 14.83 Ein Archiv mit tar erstellen

$ tar -c Verzeichnis > Verzeichnis.tar
$ ls *.tar
Verzeichnis.tar

tar schreibt die binären Daten standardmäßig einfach auf die Standardausgabe, also in unserem Fall auf den Bildschirm. Weil wir sie aber nicht dort, sondern lieber in einer Datei haben wollen, müssen wir die Ausgabe mit dem >-Operator in eine Datei umlenken. Alternativ könnte man mit der Option -f auch einen Dateinamen auf der Kommandozeile angeben.

Möchten wir das Ganze auch packen, dann müssen wir zur Option -c für create noch ein -z anfügen, um das Resultat dann zu gzippen. Das erspart uns den Aufruf eines Extraprogramms, und so ist es also nicht ganz richtig, wenn wir am Anfang sagten, dass Archivierer und Packer streng voneinander getrennt sind. Das Resultat ist es allerdings dasselbe wie nach einem getrennten Aufruf des Komprimierungsprogramms gzip: Es handelt sich um ein gepacktes tar-Archiv.

Listing 14.84 Ein komprimiertes Archiv mit tar erstellen

$ tar -cz Verzeichnis > Verzeichnis.tar.gz
$ ls *.gz
Verzeichnis.tar.gz

Jetzt haben wir alle Dateien im »Verzeichnis« wirklich gepackt. Da Linux nicht auf das DOS-Format von 8.3-Dateinamen [Fn. Unter DOS waren Dateinamen auf acht Buchstaben vor und drei nach dem Punkt beschränkt.] beschränkt ist, drücken wir die Beziehung, dass wir das »Verzeichnis« erst gepackt und dann komprimiert haben, durch die Endung .tar.gz aus, die aber oft auch als .tgz abgekürzt wird.

Möchten wir ein solches Archiv wieder entpacken, nutzen wir statt -c für create einfach die Option -x für eXtract. Handelt es sich um ein mit gzip komprimiertes tar-Archiv, packen wir, wie beim Erstellen, einfach nur noch das -z dazu.

Listing 14.85 Ein Archiv mit tar entpacken

$ tar -xz Verzeichnis.tar.gz

Weitere wichtige Optionen von tar sind im Folgenden aufgelistet:

  • -r, --append
    Ruft man tar mit dieser Option auf, so kann man Dateien zu einem bestehenden Archiv hinzufügen. Ein Beispiel könnte so aussehen:
  • Listing 14.86 Dateien hinzufügen

    $ tar -cf a.tar Ausarbeitung/
    $ tar -rf a.tar paper-ssl.pdf

    Im zweiten Schritt wird hier die Datei paper-ssl.pdf zum bereits bestehenden Archiv a.tar hinzugefügt.

    -t, --listWas ist drin?

  • Diese Option gibt den Inhalt eines Archivs aus:
  • Listing 14.87 Inhalt anzeigen

    $ tar -tf a.tar
    Ausarbeitung/
    ...
    Ausarbeitung/vortrag.tex
    paper-ssl.pdf

    Im Beispiel wurde also der Inhalt des eben erzeugten Archivs ausgegeben, das wie erwartet den Inhalt des Verzeichnisses Ausarbeitung sowie die PDF-Datei enthält.

  • -u, --update
    Mit dieser Option kann man Dateien in einem Archiv aktualisieren, die neuer als die dort enthaltenen Versionen sind.
  • -d, --diff
    Mit dieser Option ermitteln Sie Unterschiede zwischen einem Archiv und den auf dem Dateisystem gespeicherten Daten:
  • Listing 14.88 Änderungen erkennen

    $ tar -df a.tar
    paper-ssl.pdf: Änderungszeit ist unterschiedlich
    paper-ssl.pdf: Größe ist unterschiedlich

    In diesem Beispiel hat sich also etwas an der PDF-Datei geändert.

Hier wurde, anstatt über die Ein-/Ausgabeumlenkung zu arbeiten, illustriert, wie man über den Parameter -f (wie weiter oben beschrieben) das Archiv auch auf der Kommandozeile angeben kann. Konsistenterweise müsste man für die Arbeit mit einem mittels gzip komprimierten Archiv nur die Option -z auf der Kommandozeile hinzufügen. Mit den unterschiedlichen Komprimierungsmethoden wollen wir uns nun im Folgenden näher beschäftigen.

Komprimieren mit gzip, bzip2 und compress

Wie bereits erwähnt wurde, gibt es unterschiedliche Komprimierungsprogramme, die alle unterschiedliche Algorithmen einsetzen und daher mehr oder weniger effektiv beziehungsweise effizient sind. Je stärker eine Datei komprimiert wird, umso länger muss in der Regel für diese Komprimierung gerechnet werden.

Im Folgenden stellen wir die entsprechenden Komprimierungsprogramme einander gegenüber. Dazu haben wir unser Buchverzeichnis gepackt, das im Original zum aktuellen Zeitpunkt stolze 13 Megabyte umfasst. [Fn. Mittlerweile sind es 773 MB, davon sind etwa 2700 KB .tex-Dateien!]

Listing 14.89 Vergleich der Komprimierungsprogramme

$ ls -lh Buch*
-rw-r--r-- 1 jploetner users 2.2M Oct9 Buch.tar.bz2
-rw-r--r-- 1 jploetner users 3.7M Oct9 Buch.tar.gz
-rw-r--r-- 1 jploetner users 3.8M Oct9 Buch.Z
-rw-r--r-- 1 jploetner users 13M Oct9 Buch.tar
...

Unterschiedlicher Erfolg

Wie Sie sehen können, sind die Ergebnisse doch sehr unterschiedlich. Das GNU- Programm gzip ist in Verbindung mit tar äquivalent zum PKZIP aus der DOS/Win- dows-Welt und liefert ein mittelmäßiges Ergebnis. Mit Abstand die kleinste Datei hat bzip2 erzeugt, allerdings hat das Programm dafür auch am längsten gebraucht. Dies ist ein Grund dafür, weshalb man in der Unix-Welt oft auf den Kompromiss gzip zurückgreift.

Man sieht ebenfalls sehr schön, dass tar die Daten standardmäßig nicht packt – das .tar-Archiv ist nämlich genauso groß wie das Verzeichnis selbst. Im Folgenden möchten wir Ihnen die Komprimierungsprogramme kurz einzeln vorstellen und ihre Bedienung erläutern.

compress

Dieses Programm hat mittlerweile nur noch historische Bedeutung und wird in der Praxis kaum noch eingesetzt. Die Programme zum Packen und Entpacken heißen compress und uncompress. Die meist auf .Z endenden Dateien dieser Tools werden dabei einfach auf der Kommandozeile übergeben. Weil compress kaum noch genutzt wird, ist auf vielen Systemen oft nur uncompress vorhanden. So haben Sie zwar die Möglichkeit, noch vorhandene alte Archive zu entpacken, können jedoch keine neuen erstellen.

bzip2

Das bisher effektivste unter den Komprimierungsprogrammen wird durch die Kommandos bzip2 und bunzip2 gesteuert, an die sich der Dateiname der zu komprimierenden Datei anschließt. Optional kann man beim Packen beispielsweise noch das Verhältnis von Geschwindigkeit und Effektivität durch die Parameter –1 bis –9 steuern, wobei –1 die schnellste und –9 die effektivste Art zu packen bezeichnet.

Mit gepackten Dateien arbeiten

Sie können eine gepackte Textdatei [Fn. Was bei großen Textdateien durchaus sinnvoll ist ...] auch lesen, ohne sie gleich entpacken zu müssen. Für diesen Fall gibt es nämlich das praktische Programm bzcat, das den Inhalt der Datei einfach ausgibt, ohne dass man diese vorher extra entpacken müsste: [Fn. Der Exaktheit halber ist zu erwähnen, dass bzcat die Datei im Hintergrund dennoch entpackt – Sie müssen sich jedoch nicht selbst darum kümmern.]

Listing 14.90 Gepackte Dateien lesen mit bzcat

$ bzcat Readme.bz2
Das ist ein Test.
$

Ein mit bzip2 gepacktes TAR-Archiv heißt dann entsprechend Datei.tar.bz2, und aus tar heraus kann man auf die BZip2-Kompression mit dem Parameter -j zugreifen, der dann beim Packen und Entpacken anstelle des Parameters -z wie beim GZip-Format gesetzt wird.

gzip

Die einfache Steuerung durch zwei Programme zum Packen und Entpacken gibt es für das GZip-Format natürlich auch – gzip und gunzip. Allerdings gibt es für das beliebte und populärste Packprogramm weitaus mehr Tools als nur ein zcat wie bei bzip2. Es sind nämlich unter anderem die Programme diff, less und grep jeweils durch ein vorangestelltes z auch für auf diese Weise gepackte Dateien verfügbar.

p7zip und unrar

Zwei weitere Programme zur (De-)Komprimierung sollen noch vorgestellt werden. Wir empfehlen Ihnen, lieber die seit Jahrzehnten genutzten und gleichzeitig sehr stabilen Programme bzip2 und gzip zu verwenden – doch nicht immer kann man sich aussuchen, in welchem Dateiformat man z. B. Mail-Anhänge erhält.

p7zip stellt eine Portierung von 7za.exe auf POSIX-Plattformen dar. Es unterstützt das besonders stark komprimierende 7-Zip-Format, gehört aber nicht zum Stan- dardumfang der meisten Linux-Distributionen.

Mit unrar lassen sich hingegen WinRAR-Archive unter Linux dekomprimieren. Dazu muss das Programm mit dem e-Parameter und dem jeweiligen Dateinamen aufgerufen werden. Auch unrar muss von Hand nachinstalliert werden.

Listing 14.91 Entpacken eines Winrar-Archivs

$ unrar e datei.rar
...


Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
<< zurück
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Linux Handbuch






 Linux Handbuch


Zum Katalog: Linux Server






 Linux Server


Zum Katalog: Raspberry Pi






 Raspberry Pi


Zum Katalog: Ubuntu 14.04 LTS






 Ubuntu 14.04 LTS


Zum Katalog: Roboter bauen mit Arduino






 Roboter bauen
 mit Arduino


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2012
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de