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

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

Download:
- ZIP, ca. 15,7 MB
Buch bestellen
Ihre Meinung?

Spacer
 <<   zurück
Linux von Johannes Pl&ouml;tner, Steffen Wendzel
Das umfassende Handbuch
Buch: Linux

Linux
geb., mit 2 DVDs
1302 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1704-0
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 .tgz Packages unter Slackware
    Pfeil 14.2.5 Das Gentoo Portage System
    Pfeil 14.2.6 BSD-Ports
    Pfeil 14.2.7 Softwareinstallation ohne Pakete
  Pfeil 14.3 Tätigkeiten automatisieren
    Pfeil 14.3.1 Skripts
    Pfeil 14.3.2 Cronjobs
    Pfeil 14.3.3 Punktgenau mit »at«
  Pfeil 14.4 Logging
    Pfeil 14.4.1 Die Logdateien
    Pfeil 14.4.2 Der syslogd
    Pfeil 14.4.3 logrotate
    Pfeil 14.4.4 logcheck
  Pfeil 14.5 Dateisystemverwaltung
    Pfeil 14.5.1 Die /etc/fstab
    Pfeil 14.5.2 Das Tool »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
  Pfeil 14.6 Kernel kompilieren
    Pfeil 14.6.1 Die Kernel-Quellen besorgen
    Pfeil 14.6.2 Die 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
    Pfeil 14.7.5 modconf
  Pfeil 14.8 Linux' SysRq
    Pfeil 14.8.1 Aktivierung von SysRq
    Pfeil 14.8.2 Tastenkombinationen
  Pfeil 14.9 Lokalisierung
    Pfeil 14.9.1 Die Tastaturbelegung
    Pfeil 14.9.2 Die deutsche Sprache
    Pfeil 14.9.3 Das Einstellen der Uhr
    Pfeil 14.9.4 Texte von anderen Plattformen
  Pfeil 14.10 Zusammenfassung
  Pfeil 14.11 Aufgaben


Galileo Computing - Zum Seitenanfang

14.5 Dateisystemverwaltung  Zur nächsten ÜberschriftZur vorigen Ü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 die /etc/fstab erwähnt. Diese Themen wollen wir nun aufgreifen.


Galileo Computing - Zum Seitenanfang

14.5.1 Die /etc/fstab  Zur 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:

# Partitionen
/dev/hda1  /            ext3     errors=remount-ro 0 1
/dev/hda3  /home        reiserfs defaults          0 0
/dev/hda4  none         swap     sw                0 0
# Wechselspeicher
/dev/fd0   /mnt/floppy  auto     user,noauto       0 0
/dev/hdc   /mnt/dvd     iso9660  ro,user,noauto    0 0
/dev/hdd   /mnt/cdburn  auto     ro,user,noauto    0 0
# virtuelle Dateisysteme
proc       /proc        proc     defaults          0 0

Listing 14.64  Eine /etc/fstab-Datei

Aufbau

Der Aufbau dieser Datei ist tabellarisch. Jeder Datensatz wird in einer eigenen Zeile platziert, jedes Attribut wird mittels 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. Handelt es sich bei einem Datensatz jedoch um den Swap-Auslagerungsspeicher, so ist hier kein Mountpoint, sondern »none« anzugeben.

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

  • ext
    Der Vorläufer des für 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 unter Linux 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 ungemountet 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 das Journaling.
  • reiserfs
    Das 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 auch von Linux aus genutzt werden.
  • ntfs
    Das Dateisystem NTFS von Microsoft, das auf neueren Windows-Versionen zum Einsatz kommt, wird ebenfalls 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 identisch mit lokalen Verzeichnissen.
  • 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 während Ihres Zugriffs 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 Optionen lauten:

  • auto/noauto
    Mit diesen Optionen wird festgelegt, ob ein Dateisystem automatisch beim Booten gemountet werden soll. Wenn man ein Dateisystem nicht beim Booten mountet, 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 entsprechenden (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 von anderen Systemen 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 von diesem Medium. 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 die Benutzer das Medium mounten.

Default-Option

  • 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 für diese Optionen 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 mit einer 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.


Galileo Computing - Zum Seitenanfang

14.5.2 Das Tool »mount«  Zur 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. Hier wurde die erste Partition der zweiten Festplatte [Genauer gesagt: der Primary Slave des SATA-Hostadapters], auf der sich ein ext3-Datei- system befindet, in das Verzeichnis /public gemountet. Ruft man mount ohne Parameter auf, werden alle aktuell eingehängten Dateisysteme angezeigt:

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

Listing 14.65  Was haben wir denn Feines eingehängt?


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 in diesem Dateisystem noch ein Prozess läuft – beispielsweise befindet man sich mit dem Arbeitsverzeichnis der Shell gerade selbst im Mountpoint.


# umount /public

Listing 14.66  Unmounten einer Partition


Galileo Computing - Zum Seitenanfang

14.5.3 Platz beschränken: Quotas  Zur 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. Das ist auf Mehrbenutzersystemen oft effektiver, als auf die Kooperation der Nutzer zu hoffen. Quotas werden somit vor allem in größeren Unix-Rechenzentren eingesetzt.

Abbildung Tux

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 Grenzen setzen und trotzdem zeitweilige Ansprüche befriedigen.

Um diese Speicherplatzbeschränkungen nutzen 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.

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

Listing 14.67  Aktivieren von Quotas in der fstab-Datei

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:

# cd /home
# touch quota.user

Listing 14.68  Anlegen einer quota.user-Datei

Mit den Kommandos quotaon und quotaoff kann nun der Administrator die Quotas aktivieren und wieder beenden. Sinnvollerweise sollten die Befehle, soweit sie noch nicht von der Distribution über ein bestimmtes Paket [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:

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

Listing 14.69  Quotas im Initscript

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 das in der Shellvariablen EDITOR gespeicherte Programm. Es wird sich dann die Möglichkeit eröffnen, für die Werte soft = 0, hard = 0 entsprechende Grenzen einzutragen. Aber Vorsicht: Sie geben die Größen in Blocks oder Inodes an! 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.

# 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)

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

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:

# 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

Listing 14.71  Die grace-time setzen

Nach dem Speichern der Datei und dem Beenden des Editors werden diese 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 die 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 erhalten. Dazu können diese recht einfach das quota-Programm nutzen:

$ 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

Listing 14.72  Das quota-Programm

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


Galileo Computing - Zum Seitenanfang

14.5.4 du und df  Zur nächsten ÜberschriftZur vorigen Überschrift

Ebenfalls in diesem Zusammenhang interessant sind Informationen über die Gesamtgröße bestimmter Verzeichnisse oder Dateisammlungen. Für diesen Zweck gibt es das Tool du:

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

Listing 14.73  Verzeichnisplatz anzeigen: du

Offensichtlich zeigt du also den aufsummierten Speicherplatz eines bestimmten Verzeichnisses an – alternativ auch einer Datei oder mehrerer Dateien – samt aller aufsummierten Unterverzeichnisse. Dabei 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:

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

Listing 14.74  Nur die Summen: du -sch

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:

$ 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

Listing 14.75  Platz auf der Platte: df

Vielleicht werden Sie sich an dieser Stelle fragen, warum der verfügbare Plattenplatz addiert auf den 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.


Galileo Computing - Zum Seitenanfang

14.5.5 SoftRAID und LVM  Zur 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 getroffen werden und was das für Linux bedeutet.

RAID


Ein RAID (Redundant Array of Inexpensive/Independet 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 geschrieben, während gleichzeitig Datenblock 2 auf Platte 2 geschrieben wird.
    • 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 selbstverständlich von der anderen Platte noch rekonstruiert werden. Auch wenn man es auf den ersten Blick vielleicht übersieht: Auch hier ist 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 [Die Paritätsinformation wird datenblockweise in einer Art und Weise gebildet, dass bei dem Verlust von einem Datenblock 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 (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 zum Beispiel die im Folgenden beschriebene Soft-RAID-Implementierung im Linux-Kernel. Dort kann man einzelne Festplatten zu neuen, virtuellen Devices zusammenfassen, die man dann wie ganz normale Platten auch ins Dateisystem einbinden kann. 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. So kann man zum Beispiel den Support für RAID 5 durch das Laden des gleichnamigen Moduls aktivieren:

# modprobe raid5

Listing 14.76  Die benötigten Module laden

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:

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

Listing 14.77  lsmod

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:

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

Listing 14.78  Die /proc/mdstat

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 [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 Vefü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:

# 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.

Listing 14.79  Ein RAID-System anlegen

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:

# 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>

Listing 14.80  Änderungen in der /proc/mdstat

Dateisystem formatieren

Bevor wir das RAID nun nutzen können, muss es zuerst 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:

# 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
...

Listing 14.81  Unser RAID formatieren ...

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

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

Listing 14.82  ... und mounten!

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.


Galileo Computing - Zum Seitenanfang

14.5.6 Backups, Archive & Co.  topZur 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. Das 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.

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

Listing 14.83  Ein Archiv mit tar erstellen

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: Es handelt sich um ein gepacktes tar-Archiv.

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

Listing 14.84  Ein komprimiertes Archiv mit tar erstellen

Jetzt haben wir alle Dateien im »Verzeichnis« wirklich gepackt. Da Linux nicht auf das DOS-Format von 8.3-Dateinamen [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 gzip tar-Archiv, packen wir, wie beim Erstellen, einfach nur noch das -z dazu.

$ tar -xz Verzeichnis.tar.gz

Listing 14.85  Ein Archiv mit tar entpacken

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:
$ tar -cf a.tar Ausarbeitung/
$ tar -rf a.tar paper-ssl.pdf

Listing 14.86  Dateien hinzufügen

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

Was ist drin?

  • -t, --list
    Diese Option gibt den Inhalt eines Archivs aus:
$ tar -tf a.tar
Ausarbeitung/
...
Ausarbeitung/vortrag.tex
paper-ssl.pdf

Listing 14.87  Inhalt anzeigen

    • 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:
$ tar -df a.tar
paper-ssl.pdf: Änderungszeit ist unterschiedlich
paper-ssl.pdf: Größe ist unterschiedlich

Listing 14.88  Änderungen erkennen

    • Es hat sich also etwas an der PDF-Datei geändert.

In dem Beispiel 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 diese Komprimierung berechnet 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. [Mittlerweile sind es 773 MB, davon sind etwa 2700 KB .tex-Dateien!]

$ 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
...

Listing 14.89  Vergleich der Komprimierungsprogramme

Unterschied- licher 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 mittleres Ergebnis. Mit Abstand die kleinste Datei hat bzip2 erzeugt, allerdings hat das Programm dafür auch am längsten gebraucht. Das 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, jedoch nicht die Möglichkeit, neue zu 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 [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: [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.]

$ bzcat Readme.bz2
Das ist ein Test.
$

Listing 14.90  Gepackte Dateien lesen mit bzcat

Ein mit bzip2 gepacktes TAR-Archiv heißt dann entsprechend Datei.tar.bz2, und aus tar heraus kann man auf die Bzip-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. Es unterstützt das besonders stark komprimierende 7-Zip-Format. p7zip gehört nicht zum Standardumfang 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.

$ unrar e datei.rar
...

Listing 14.91  Entpacken eines Winrar-Archivs



Ihr Kommentar

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






 <<   zurück
  Zum Katalog
Zum Katalog: Linux, Ausgabe 2011






Linux, Ausgabe 2011
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Linux-Server






 Linux-Server


Zum Katalog: Linux Hochverfügbarkeit






 Linux Hoch-
 verfügbarkeit


Zum Katalog: LPIC-1






 LPIC-1


Zum Katalog: Debian GNU/Linux






 Debian GNU/Linux


Zum Katalog: openSUSE 11.2






 openSUSE 11.2


Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Ubuntu GNU/Linux






 Ubuntu GNU/Linux


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2011
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.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de