Kapitel 7

Laufwerke, Datenspeicher und Dateisysteme

IN DIESEM KAPITEL

  • Festplatten, Partitionen und Dateisysteme
  • Mehrere Partitionen zu Verbundsystemen zusammenfassen
  • Linux und fremde Dateisysteme
  • Eine Festplatte booten

Aus der Sicht des Anwenders enthält der Computer nur einen großen Verzeichnisbaum. Anders als bei anderen Systemen gibt es keine Laufwerksbuchstaben oder -kennungen. Stattdessen ist es die Aufgabe des Administrators, die Dateien so auf die Laufwerke zu verteilen, dass diese sinnvoll genutzt werden.

Hardwarezugriff per Gerätedatei: /dev

Aus der Sicht des Betriebssystems ist eine Festplatte ein Gerät mit ganz vielen Speicherblöcken, in die erst einmal Struktur gebracht werden muss. Um dieses blöckestrotzende Speichermonster überhaupt erreichen zu können, greift es über das Verzeichnis /dev (Devices, Geräte) zu.

Die Dateien in diesem Verzeichnis unterscheiden sich von normalen Dateien.

crw------- 1 root root 5, 1 2010-09-06 11:45 console
crw-rw-rw- 1 root root 1, 3 2010-09-06 11:45 null
brw-rw---- 1 root disk 8, 0 2010-09-06 11:45 sda
brw-rw---- 1 root disk 8, 1 2010-09-06 11:45 sda1
brw-rw---- 1 root disk 8, 2 2010-09-06 11:45 sda2
brw-rw---- 1 root disk 8, 5 2010-09-06 11:45 sda5
brw-rw---- 1 root disk 8, 6 2010-09-06 11:45 sda6
crw-rw-rw- 1 root tty 5, 0 2010-09-06 12:12 tty
crw--w---- 1 root root 4, 0 2010-09-06 11:45 tty0
crw------- 1 root root 4, 1 2010-09-06 11:45 tty1
crw-rw-rw- 1 root root 1, 5 2010-09-06 11:45 zero

Block- und Zeichengerät

Im Gegensatz zu Dateien und Verzeichnissen, bei denen in der ersten Spalte ein Leerzeichen beziehungsweise ein d steht, findet sich bei Device-Dateien ein b oder ein c.

  • b steht für Blockgerät wie eine Festplatte (sda). Wenn man Daten lesen oder schreiben will, erhält man immer einen Block auf einmal. Bei solchen Geräten ist die Blockübertragung bei großen Datenmengen wesentlich effizienter.
  • c steht für Character wie eine Tastatur oder Terminal (tty0). Die Daten werden byte- oder buchstabenweise gelesen oder geschrieben. Bei diesen Geräten ist es wichtig, dass die Reaktion auf einen einzelnen Tastendruck sofort erfolgt.

Major und Minor

Wie bei normalen Dateien kommen nun die Rechte, Linkzähler und Eigentümer der Gerätedateien. Wo nach einem ls -l normalerweise die Dateigröße steht, finden Sie die major- und die minor-number. Sie können sehen, dass console und tty die gleiche Major-Nummer haben, nämlich 5. Das bedeutet, dass sie vom gleichen Treiber bedient werden. Das Gleiche gilt für sda und sda1, obwohl Ersteres eine komplette Festplatte und Letzteres eine Partition bezeichnet. Durch die minor-Nummer kann der Treiber die Geräte voneinander unterscheiden.

Virtuelle Geräte

Manchmal gibt es Geräte, die gibt es gar nicht, zumindest nicht als Hardware. So sind die Geräte tty0 bis tty6 die virtuellen Konsolen, die Sie über die Tastenkombination ++ bis ++ erreichen.

Für die Gerätedatei /dev/null existiert keinerlei Hardware. Das Null-Device dient als Mülleimer. Dateien, die Sie dorthin verschieben, verschwinden auf Nimmerwiedersehen. Auch Datenströme können Sie dorthin umleiten.

Genau das Gegenstück zum Mülleimer ist die Gerätedatei /dev/zero. Diese ist nicht das Ziel, sondern die Quelle einer Umleitung und liefert beliebig viele Nullwerte. Beispielsweise können Sie mit dem Befehl dd (siehe Kapitel 18) die »Daten« von /dev/zero auf eine Festplatte kopieren und so erreichen, dass deren Oberfläche vollständig gelöscht wird.

Die Hardware der Festplatte

Heutige Festplatten sind als magnetische Festplatten oder als SSD-Platten erhältlich. Letztlich ist es die Abschätzung zwischen Geschwindigkeit und Preis.

Vielfach sind heute zwei Festplatten in einem Server verbaut. Die schnelle SSD beheimatet das Betriebssystem, während große magnetische Festplatten die Daten halten. Das passt insofern gut, als manche Computer von Festplatten, die größer als 2 TByte sind, nicht booten. Diese Situation wird sich aber vermutlich in nicht allzu ferner Zeit deutlich ändern.

Als Anschluss ist SATA üblich, bei Notebooks wird auch M.2 verwendet. Ganz unglücklich sind verlötete Festplatten. Denn Linux ermöglicht es, eine Festplatte schnell in einen anderen Computer einzubauen und weiterzuarbeiten, wenn ein Schaden eintritt oder schlicht ein schnellerer Rechner eingesetzt werden soll.

Ein ähnliches Problem gibt es bei RAID-Systemen. Zwar sollten RAID-Systeme eigentlich vor einem Festplattenschaden bewahren, weil man im laufenden Betrieb eine Festplatte austauschen können sollte. Sollten aber zwei Festplatten ausfallen oder gar der RAID-Controller, dann kann nur noch die Datensicherung helfen.

Die Festplatte einrichten und aufteilen

Eine Festplatte ist beim Kauf normalerweise leer. Sobald sie eingebaut ist, kann sie über eine Device-Datei angesprochen werden. Dabei wird die erste Festplatte als /dev/sda und die zweite als /dev/sdb angesprochen. Bei weiteren Festplatten wird der jeweils nächste Buchstabe verwendet. Auch USB-Sticks oder externe Festplatten erhalten diese Device-Dateien.

Bevor sie verwendet werden kann, muss eine Festplatte zunächst partitioniert werden. Die Partitionierung teilt die Festplatte in logische Teilbereiche auf, in denen dann die einzelnen Dateisysteme angelegt werden. Die Partitionen einer Festplatte /dev/sda heißen beispielsweise /dev/sda1, /dev/sda5 und /dev/sda6.

Für die Partitionierung wurden lange Zeit die DOS/MBR-Partitionstabellen verwendet. Das Programm zur Partitionierung hieß fdisk. Diese Partitionstabellen sind allerdings auf 2 TByte begrenzt.

Mit dem Aufkommen größerer Festplatten wurde das GPT-Partitionsschema üblich. Dieses kann von fdisk nicht mehr bearbeitet werden. Dafür muss gparted verwendet werden. Da dieses Programm auch die alten DOS/MBR-Partitionstabellen verwalten kann und darüber hinaus einfacher und leistungsfähiger ist, gibt es keinen Grund, fdisk noch zu verwenden.

Partitionierung GPT

GUID Partition Table (GPT) ist Bestandteil des UEFI-Standards. Eine Installation von Linux auf einer GPT-partitionierten Festplatte bereitet grundsätzlich keine Probleme, der Zugriff auf reine Datenpartitionen auch nicht. Sollte der Rechner kein UEFI, sondern ein BIOS haben, muss eine spezielle BIOS-Boot-Partition angelegt werden, von der GRUB 2 dann starten kann, um Linux zu booten.

Da GPT 128 Partitionen erlaubt, sind Klimmzüge wie logische und erweiterte Partitionen nicht mehr nötig, wie sie beim MSDOS-Schema noch erforderlich waren.

Partitionierung mit gparted

Die Partitionierung können Sie bei der Installation von Linux von Hand durchführen. Wenn Sie später noch an den Partitionen arbeiten wollen, müssen Sie gparted aus dem gleichnamigen Paket installieren.

# apt install gparted

Sie können immer nur Partitionen bearbeiten, die nicht eingehängt sind. Wenn Sie also Ihre Systempartition verändern müssen, sollten Sie ein Installationsmedium booten und die Arbeiten von dort erledigen.

Das Programm kann aus dem Menü in einem Fenster gestartet werden und sollte sich ähnlich darstellen wie in Abbildung 7.1.

Abbildung 7.1: Das Programm gparted

Achten Sie zunächst darauf, dass Sie in der Klappbox rechts oben das richtige Laufwerk am Wickel haben.

In der grafischen Darstellung unterhalb des Menüs sehen Sie die Partitionsverteilung der Festplatte, darunter eine Liste der Partitionen. Diese zeigt auch an, wie viel Platz der Partition bereits belegt ist.

Sie können die Partitionen anwählen, dann löschen, in der Größe verändern und neu anlegen. Diese Aktionen werden aber erst dann wirksam, wenn Sie den Menüpunkt BEARBEITEN | ALLE VORGÄNGE AUSFÜHREN anklicken.

Beim Anlegen oder Ändern von Partitionen können Sie das Dateisystem auswählen und den Einhängepunkt festlegen.

Die Bedienung des Programms ist weitgehend selbsterklärend. Es warnt auch vor versehentlichen Aktionen. Sie finden eine gute Anleitung unter der folgenden URL:

 https://wiki.ubuntuusers.de/GParted

Partitionierung DOS/MBR

Lange Zeit wurde die Partitionierung verwendet, die schon MS-DOS verwendete. Darum mag es sein, dass Sie noch auf Festplatten stoßen, die in dieser Form partitioniert wurden.

Primäre, erweiterte und logische Partitionen

Die Anzahl der Partitionen war ursprünglich auf vier begrenzt worden. Als man erkannte, dass doch mehr Partitionen benötigt würden, hat man eine der Partitionen zur »erweiterten« Partition gemacht, die so in der Lage war, weitere Partitionen aufzunehmen, die man als »logische« Partitionen bezeichnete. Damit gab es folgende Arten von Partitionen:

  • Primäre Partitionen: Die klassische Partition. Als Nummern sind 1 bis 4 zulässig.
  • Erweiterte Partition: Sie kann kein Dateisystem aufnehmen, sondern nur Partitionen. Als Nummern sind 1 bis 4 zulässig.
  • Logische Partition: Eine Partition, die in einer erweiterten Partition angelegt wurde. Die Nummern beginnen bei 5.

Also ist bei einer DOS/MBR-Partitionierung sda2 eine primäre oder eine erweiterte Partition, sda7 dagegen eine logische Partition.

Der Umgang mit Dateisystemen

Eine Partition ist nicht mehr als ein abgegrenzter Bereich der Festplatte. Um Dateien in diesen Bereich legen zu können, muss eine ordnende Struktur erzeugt werden. Diese Struktur bezeichnet man als Dateisystem. Auch wenn Dateisystem und Partition über die gleiche Gerätedatei angesprochen werden, sind es zwei unterschiedliche Strukturen.

Linux verwendet klassischerweise ext-Dateisysteme, die derzeitige Version heißt ext4. Wer auf Windows-Partitionen zugreifen will, der wird NTFS benötigen. USB-Sticks verwenden meist das alte Dateisystem FAT.

Dateisystem erstellen: mkfs

Der Befehl mkfs erzeugt ein Dateisystem auf der Partition, die ihm als Parameter angegeben wird. Der Dateisystemtyp kann als Option übergeben werden. Sie können aber auch direkt den passenden Befehl zum Dateisystem aufrufen. Der folgende Befehl erzeugt ein Dateisystem ext4 auf der Partition /dev/sda5:

# mkfs.ext4 /dev/sda5

Der Befehl wird ein paar Minuten arbeiten und dabei einige Informationen über das erstellte Dateisystem ausgeben. Irgendwann erscheint einfach wieder der Prompt.

Wenn Sie USB-Sticks einrichten, wird gern das alte Microsoft-Format FAT verwendet, weil dieses fast jedes Gerät vom Autoradios bis hin zum Satelliten-Receiver lesen und schreiben kann. Ein solches Dateisystem wird mit dem Befehl mkfs.vfat erzeugt.

Dateisystem einbinden: mount

Nun liegt das Dateisystem warm und trocken in seiner Partition. Aber der Anwender kann erst dann etwas damit anfangen, wenn es in den Verzeichnisbaum eingebunden ist. Dies erledigt der Befehl mount. Er benötigt zwei Parameter: die Gerätedatei der Partition oder genauer des Dateisystems und das Verzeichnis, in das das Dateisystem eingehängt wird.

Für das temporäre Einhängen wird üblicherweise das Verzeichnis /mnt verwendet. Dort sollte auf keinen Fall ein Speichermedium auf Dauer eingehängt bleiben. Es ist auch keine gute Idee, Unterverzeichnisse im Verzeichnis /mnt anzulegen, um dort mehrere Medien einzuhängen. Sobald jemand nämlich auf /mnt ein Dateisystem einhängt, werden alle Dateien und Unterverzeichnisse von /mnt überdeckt und damit unsichtbar.

Der folgende Befehl hängt das Dateisystem /dev/sdb1 im Verzeichnis /mnt ein. Dies könnte beispielsweise ein USB-Stick sein. Sobald Sie anschließend auf Dateien oder Verzeichnisse unterhalb von /mnt zugreifen, greifen Sie auf den USB-Stick zu.

# mount /dev/sdb1 /mnt

Soll ein Medium nur mal kurz eingehängt werden, wie das etwa bei USB-Sticks, DVDs oder externen Festplatten der Fall ist, führt dies der Desktop häufig automatisch selbst durch. Dazu wird das Verzeichnis /media verwendet. Darunter wird ein Verzeichnis für den aktuell angemeldeten Benutzer eingerichtet und darunter ein Verzeichnis für jedes angeschlossene Medium.

Dateisystem aushängen: umount

Eines Tages werden Sie Ihren USB-Stick auch wieder vom Computer abziehen wollen. Dazu sollten Sie Ihrem System mitteilen, dass es den USB-Stick freigeben soll. Dieses Aushängen des Mediums wird leicht unterschätzt. Insbesondere wenn noch Schreiboperationen ausstehen, kann ein verfrühtes Abziehen des Sticks zu einem inkonsistenten Zustand führen und damit auch oft zum Verlust der Daten.

Der Befehl dazu heißt umount und er erwartet als Parameter entweder die Gerätedatei des USB-Sticks oder das Verzeichnis, in dem der Stick eingehängt war.

Das System weigert sich übrigens, das Medium freizugeben, wenn noch ein Programm das Medium benutzt. Das kann auch eine Shell sein, über die Sie selbst per cd in ein Verzeichnis des Sticks gewechselt sind. Hier hilft Ihnen der Befehl fuser.

Große Feiglinge rufen den Befehl sync auf. Das führt zum Schreiben aller Puffer auf die Medien.

Festplatten in den Verzeichnisbaum integrieren

Wird der Speicherplatz eng, kauft man gern noch eine Festplatte hinzu. Der Administrator kann nun entscheiden, an welcher Stelle im Verzeichnisbaum der neu gewonnene Speicherraum nützlich werden soll. Abbildung 7.2 zeigt eine Installation, bei der das Wurzelverzeichnis im Dateisystem /dev/sda1 liegt, das Heimatverzeichnis /home mit den Anwenderdaten wurde auf ein separates Dateisystem /dev/sda5 geschafft.

Abbildung 7.2: Partitionseinbindung in den Verzeichnisbaum

Wir können annehmen, dass der Benutzer johanna wohl ein paar Daten mehr hat. Darum hat man ihr Verzeichnis auf eine neue Festplatte ausgelagert. Dort wurde dann auch ein Dateisystem für /var geschaffen. Dort liegen üblicherweise die Daten der Serverprozesse.

Mit dem Befehl mount kann /dev/sda5 in das Verzeichnis /home eingehängt werden.

# mount /dev/sda5 /home

Sollte es schon vor dem Einhängen von /dev/sda5 Benutzerverzeichnisse im Verzeichnis /home gegeben haben, wären diese nach dem Einhängen verschwunden. Ein Dateisystem verdeckt alle Dateien, die in dem Verzeichnis lagen, in das es eingehängt wird.

Nun wird das Verzeichnis für johanna angelegt und die erste Partition der zweiten Festplatte dort eingehängt.

# mkdir /home/johanna
# mount /dev/sdb1 /home/johanna

Aber beim nächsten Neustart des Systems sind die mount-Befehle vergessen. Damit Sie diese nicht ständig neu eintippen müssen, gibt es die Datei /etc/fstab.

/etc/fstab

Der Computer merkt sich in der Konfigurationsdatei /etc/fstab, welches Dateisystem an welcher Stelle im Verzeichnisbaum eingehängt wird. Die Konfiguration aus Abbildung 7.2 würde in der /etc/fstab so aussehen:

# /etc/fstab
/dev/sda1 / ext4 defaults 1 1
/dev/sda5 /home ext4 defaults 1 2
/dev/sdb1 /home/johanna ext4 defaults 1 3
/dev/sdb2 /var ext4 defaults 1 4

Sie können jede Zeile dieser Datei als Parameterliste des mount-Befehls verstehen, der beim Booten ausgeführt wird.

  • Die erste Spalte enthält die Dateisysteme.
  • Es folgen die Verzeichnisse, in die sie eingehängt werden sollen. Diese Verzeichnisse müssen existieren und sollten leer sein.
  • Die dritte Spalte gibt den Typ des Dateisystems an.
  • Es folgt eine Spalte, die Optionen aufnehmen kann. Hier steht einfach defaults, wenn keine besonderen Anforderungen vorliegen.
  • Die erste Zahl ist eine 1, wenn die Partition für die Datensicherung vorgesehen ist. Das Programm dump (siehe Kapitel 18) berücksichtigt beispielsweise diesen Eintrag.
  • Die letzte Zahl gibt an, in welcher Reihenfolge die Dateisysteme beim Booten geprüft werden sollen. Steht hier eine 0, wird das Dateisystem gar nicht geprüft.

Die Funktion der Datei /etc/fstab kann ohne Reboot vorgeprüft werden, indem Sie den Befehl mount mit der Option -a anweisen, alle Dateisysteme, die dort aufgeführt sind, einzuhängen:

# mount -a

Gibt es bei Ausführung dieses Befehls Fehlermeldungen, können Sie davon ausgehen, dass das betroffene Dateisystem bei einem Reboot auch nicht eingehängt werden wird. Das kann durchaus im Extremfall dazu führen, dass das System gar nicht hochfährt.

Für alle in der Datei /etc/fstab aufgeführten Dateisysteme gilt, dass sie mit einem vereinfachten mount-Befehl eingehängt werden können. Es reicht, als Argument allein den Einhängepfad oder das Dateisystem zu bezeichnen. Den anderen Parameter wird sich mount aus der Tabelle holen.

Gerätenamen der Partitionen und UUID

Bisher haben wir die Dateisysteme nach den Partitionen benannt, auf denen sie liegen. Das ist auch ganz praktisch und leicht zu merken. Schwieriger wird es, wenn sich die Reihenfolge der Festplatten plötzlich ändert. Das könnte passieren, wenn Sie eine neue Festplatte einbauen. Dann wäre vielleicht die Partition /dev/sdb1 plötzlich die Partition /dev/sdc1. Dumm nur, wenn sich darauf das Verzeichnis /usr befand.

Was man dagegen tun kann, sehen Sie, wenn Sie sich die Datei /etc/fstab direkt nach der Installation anschauen. Dort werden die Dateisysteme nämlich in eine UUID umbenannt.

# /dev/sdb1 /home ext4 ...
UUID=472bd8b8-5110-448b-b434-edf2b84db5e0 /home ext4 ...

So eine UUID (Universally Unique Identifier) ist eine weltweit eindeutige Kennung. Damit wird immer das richtige Dateisystem auf /home eingehängt, auch wenn sich die Laufwerksreihenfolge ändert.

Wenn Sie nun selbst eine neue Festplatte einhängen wollen und die UUID des Dateisystems bestimmen wollen, hilft Ihnen der Befehl blkid. Sie erhalten sofort eine Übersicht darüber, welche UUID Ihre Dateisysteme haben.

# blkid
/dev/sda6: UUID="20f6df1c-5702-4c9f-a76d-b4ed380fd5b7" ...
/dev/sda8: UUID="156e616f-3094-41e4-b72a-7245848e8224" ...
/dev/sda9: UUID="cc99dc54-f907-4317-be6e-93a36e4ffc5b" ...
/dev/sda5: UUID="c34e5165-59c9-4bff-97b7-b70e3789ca45" ...
/dev/sda7: UUID=“a693e514-d040-4715-ab3a-861d9fbb1989” ...
/dev/sdb1: UUID="8087a09f-97f2-4fa9-8f0b-abddbc453c3c" ...
/dev/sdc1: LABEL=“TrekStor” UUID=“5E76-D471” TYPE=“vfat”

Die Partition /dev/sdc1 enthält übrigens eine FAT-Wechselplatte, die über einen USB-Controller angeschlossen ist. Die haben eine etwas kleinere UUID. Hinzu kommt bei manchen Platten ein Label. Das ist der Name, den der Hersteller vergeben hat.

Die Partition auf /dev/sda5 würden Sie nun so in der Datei /etc/fstab eintragen:

UUID=c34e5165-59c9-4bff-97b7-b70e3789ca45 /home ...

Dateisysteme prüfen und reparieren: fsck

Defekte Dateisysteme sind übel, aber unentdeckt defekte Dateisysteme sind richtig bitter. Darum prüft Linux diese beim Booten gern einmal schnell durch. Werden bei dieser Prüfung Mängel festgestellt, stoppt der Bootprozess mit einer Fehlermeldung. Darin wird die Gerätebezeichnung des gerügten Dateisystems genannt. Ferner erhält der Administrator einen Eingabeprompt und damit die Gelegenheit, die Festplatte zu renovieren. Das ist der Moment, wo Administratoren zu Recht etwas nervös werden.

Sofern Sie nicht bereits ein aktuelles Backup des betroffenen Dateisystems besitzen, sollten Sie vor einem Reparaturversuch vielleicht erst einmal alle erreichbaren Daten sichern.

Zu diesem Zeitpunkt befindet sich das System im Single-User-Modus. Wenn Sie nicht gerade besondere Kenntnisse über den internen Aufbau des Dateisystems besitzen, können Sie nun nur noch hoffen, dass das Programm fsck das Dateisystem reparieren kann. Im folgenden Beispiel gehe ich davon aus, dass /dev/sda5 als defekt gemeldet wurde.

# fsck -fy /dev/sda5

Die Option -f bedeutet, dass das Programm auf jeden Fall die Struktur prüfen soll. Die Option -y bewirkt, dass es nicht jedes Mal fragt, ob es wirklich reparieren soll.

Datenblöcke, auf die durch die Reparatur oder durch den Schaden nicht mehr zugegriffen werden kann, werden in das Verzeichnis lost+found geschoben, das auf jedem Dateisystem direkt unter dessen Wurzelverzeichnis vorhanden ist. Auch Verzeichnisse, die sich nicht mehr zur Wurzel zurückverfolgen lassen, finden sich hier.

Besteht Anlass zu der Vermutung, dass ein Dateisystem nicht konsistent ist, lässt sich fsck auch im laufenden Betrieb starten. Allerdings sollte das bei einem mit umount abgehängten Dateisystem durchgeführt werden, da vermieden werden muss, dass andere Benutzer parallel darauf zugreifen können.

Swap

Alle Programme laufen im Hauptspeicher, dem RAM. Dieser ist relativ teuer, aber schnell. Wenn ein Prozess keinen Hauptspeicher mehr bekommt, muss er sterben. Damit dies möglichst nicht passiert, wird in diesem Augenblick das Betriebssystem schauen, welcher Speicherbereich eines älteren Prozesses nicht so intensiv genutzt wird, und diesen auf die deutlich langsamere Festplatte schreiben. Dieser Bereich kann nun von dem aktiven Prozess genutzt werden und er muss doch nicht sterben.

Im Idealfall werden inaktive Prozesse Stück für Stück ausgelagert und das System nutzt den kostbaren Hauptspeicher optimal. Wenn allerdings ständig ein- und ausgelagert wird, wird das System deutlich langsam, da klassische Festplatten etwa tausendmal langsamer sind als der Hauptspeicher.

Es gibt grundsätzlich zwei Varianten eines Swap-Bereichs: Man kann eine Partition oder eine Datei verwenden.

  • Die Partition ist in ihrer Größe fest und belegt auch dann Festplattenplatz, wenn der Hauptspeicher völlig ausreichend ist. Dafür sind Partitionen recht schnell.
  • Eine Swap-Datei kann wachsen und schrumpfen. Allerdings wird beim Auslagern das Dateisystem bemüht. Es läuft also deutlich langsamer.

Das System verwendet den Hauptspeicher nicht nur für die laufenden Programme, sondern auch als Puffer oder Cache für die Festplattenzugriffe. Da der Zugriff auf den Hauptspeicher wesentlich schneller ist als der Zugriff auf eine Festplatte, wird das System allen ungenutzten Speicher diesem Zweck zuführen.

Die Verwendung des Hauptspeichers und des Swap-Bereichs liefert Ihnen das Programm free.

$ free
total used free shared buffers cached
Mem: 6143268 1491400 4651868 0 128048 878300
-/+ buffers/cache: 485052 5658216
Swap: 4883724 0 4883724

Swap-Partition

Eine Swap-Partition hat ein spezielles Dateisystem, das auf das Auslagern von Speicherblöcken spezialisiert ist. Um dieses zu erzeugen, wird statt des Befehls mkfs der Befehl mkswap verwendet:

# mkswap /dev/sda6

Damit ist die Swap-Partition betriebsbereit. Mit dem Befehl swapon veranlassen Sie das System, die Swap-Partition auch zu benutzen:

# swapon /dev/sda6

Mit dem Befehl swapoff können Sie übrigens das Swapping auch stoppen. Als Argument erwartet das Programm die Swap-Partition:

# swapoff /dev/sda6

Schließlich werden Sie diese Information gern in der Datei /etc/fstab hinterlegen wollen. Ein typischer Swap-Eintrag sieht so aus:

#/etc/fstab
...
# swap was on /dev/sda7 during installation
UUID=6f5d1e8e-418a-4bb8-aeb8-8ee814d9991a none swap sw 0 0

Sie sehen, dass Sie auch bei Swap-Partitionen eine UUID einsetzen können.

Die Swap-Partition wird auch dazu genutzt, im Falle eines Kernel-Panics, also eines Betriebssystemzusammenbruchs, den Inhalt des kompletten Hauptspeicherinhalts dort zu hinterlegen. Daher stammt die alte Faustregel, dass die Swap-Partition immer so groß sein soll wie der Hauptspeicher. Wenn Sie in der Lage sind, einen solchen Dump zu lesen und daraus die Rückschlüsse zu ziehen, was die Ursache des Kernel-Panics war, sollten Sie diese Regel vielleicht tatsächlich befolgen. Da ein Kernel-Panic äußerst selten ist und ich einen solchen Dump nicht lesen kann, ignoriere ich diese Faustregel.

Swap-Datei statt Swap-Partition

Linux kann statt einer Swap-Partition auch eine Swap-Datei verwenden. Bei den neueren Ubuntu-Versionen ist das sogar der Standard. Die Swap-Datei unter Ubuntu heißt swapfile und befindet sich im Wurzelverzeichnis.

Eine Swap-Datei wird mit dem Befehl dd erzeugt. Es ist wichtig, dass ihr Inhalt leer ist.

# dd if=/dev/zero of=/var/swap bs=1024 count=524288

Die erzeugte Datei erhält durch den Befehl mkswap ihre Struktur und kann mit dem Befehl swapon aktiviert werden.

# mkswap /var/swap
# swapon /var/swap

Damit die Swap-Datei auch nach dem nächsten Boot noch da ist, muss ein Eintrag in der Datei /etc/fstab hinterlassen werden:

/var/swap swap swap defaults 0 0

Verbund mehrerer Partitionen

Dateisysteme sind an die Partitionen gebunden und damit relativ starr. Das muss nicht sein. Mit ein paar Tricks können Sie Partitionen schaffen, die sogar größer als die größte eingebaute Festplatte sind. Dazu werden Partitionen zu einem Volume zusammengefasst, das dann als Basis für das Dateisystem verwendet wird.

Logical Volume Manager

Der Logical Volume Manager (LVM) ermöglicht es, mehrere Partitionen zu einer logischen Partition zusammenzufassen, die dann Volume genannt wird.

Ein Vorteil der Logical Volumes ist, dass Partitionen nachträglich vergrößert oder verkleinert werden können, ohne dabei die Partitionstabelle verändern zu müssen. Es ist sogar möglich, ein darauf eingerichtetes ext-Dateisystem nachträglich zu vergrößern, ohne die darauf befindlichen Daten zu löschen.

Die Partitionen, die zu einer Volume Group zusammengefasst werden sollen, verwenden einen eigenen Partitionstyp mit der Nummer 0x8e für »Linux LVM« oder »lvm2«.

Zur Verwaltung der Logical Volumes benötigen Sie die Softwarepakete lvm-common und lvm2, die Sie mit dem folgenden Befehl nachinstallieren können:

# apt install lvm-common lvm2

Die Erzeugung eines Logical Volumes erfolgt in mehreren Stufen.

  1. Zunächst werden die beteiligten Partitionen als Volume eingerichtet.
  2. Ein oder mehrere der so entstandenen Volumes werden dann zu einer Volume Group zusammengefasst. Hier können nachträglich Partitionen hinzugefügt oder entfernt werden.
  3. Aus einer Volume Group wird daraufhin ein Logical Volume erstellt. Dieses kann in seiner Größe verändert werden. Maximal kann es natürlich so groß werden, wie die Volume Group Platz liefert.
  4. Auf dem Logical Volume wird anschließend ein Dateisystem eingerichtet.
  5. Das Dateisystem wird wie gewohnt eingehängt oder in der Datei /etc/fstab eingetragen.

Volumes erzeugen

Die Partitionen, die zu einem Volume zusammengefasst werden sollen, werden mit dem Befehl pvcreate vorbereitet:

# pvcreate /dev/sda7
Physical volume "/dev/sda7" successfully created
# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created

Der Befehl pvscan sucht auf den angeschlossenen Festplatten nach Partitionen, die für die Volume-Bildung vorbereitet wurden:

# pvscan
PV /dev/sda6 lvm2 [46,57 GiB]
PV /dev/sdb1 lvm2 [46,57 GiB]
Total: 2 [93,13 GiB]/in use: 0 [0 ]/in no VG: 2 [93,13 GiB]
#

Volume Group anlegen

Auf der Basis der Volumes kann nun eine Volume Group erzeugt werden. Sie verbindet die einzelnen Volumes zu einem großen Speicherpool, aus dem später die Logical Volumes gebildet werden:

# vgcreate volgrp /dev/sda7
Volume group "volgrp" successfully created
# vgextend volgrp /dev/sdb1
Volume group "volgrp" successfully extended
#

Der Befehl vgcreate legt eine Volume Group an. Der erste Parameter ist der Name, unter dem die Gruppe später weiterbearbeitet werden kann, hier volgrp. Der zweite Parameter ist die Partition, auf deren Basis die Gruppe entsteht.

Der Befehl vgextend erweitert die Volume Group, deren Name als erster Parameter angegeben wird, um eine Partition, deren Bezeichnung den zweiten Parameter stellt.

Analog zu pvscan gibt es mit dem Befehl vgscan die Möglichkeit, sich alle Volume Groups anzeigen zu lassen:

# vgscan
Reading all physical volumes. This may take a while...
Found volume group "volgrp" using metadata type lvm2
#

Logical Volume anlegen

Die Volume Group bildet nun quasi einen großen Topf voller Festplattenspeicher, aus dem beliebig viele und beinahe beliebig große Logical Volumes gebildet werden können.

Aus unserer knapp 100 GByte großen Volume Group wird mit dem Befehl lvcreate ein Logical Volume mit der Größe von 60 GByte gebildet:

# lvcreate --size 60G --name logvol volgrp
Logical volume "logvol" created

Damit ist das Logical Volume logvol auf der Basis der Volume Group volgrp eingerichtet worden. Sie können sich auch die Logical Volumes mit den Befehlen lvscan und lvdisplay näher ansehen:

# lvscan
ACTIVE '/dev/volgrp/logvol' [60,00 GiB] inherit
# lvdisplay
--- Logical volume ---
LV Name /dev/volgrp/logvol
VG Name volgrp
LV UUID iDdVbH-CWCh-JXKV-Y0CA-e7j7-Bec1-qsLwwX
LV Write Access read/write
LV Status available
# open 0
LV Size 60,00 GiB
Current LE 15360
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0

Anschließend kann auf der Basis dieses Logical Volumes ein weiteres Dateisystem eingerichtet werden:

# mkfs /dev/volgrp/logvol

Sie können auch ein weiteres Logical Volume einrichten und darauf ein Dateisystem installieren:

# lvcreate --size 10G --name logvol2 volgrp
Logical volume "logvol2" created
# mkfs /dev/volgrp/logvol2

Dateisystem einbinden

In der Datei /etc/fstab wird das Logical Volume wie eine gewöhnliche Partition eingetragen. Damit ist gesichert, dass das Logical Volume auch beim nächsten Reboot noch eingehängt ist.

/dev/volgrp/logvol /media/logvol ext4 defaults 0 2

Mit dem Befehl mount -a werden alle Einträge in der Datei /etc/fstab eingehängt. Auf diese Weise können Sie prüfen, ob nach einem Reboot alle Einträge wie gewünscht funktionieren.

Größe verändern

Sie können die Größe eines Logical Volumes nachträglich ändern, auch wenn darauf bereits ein Dateisystem installiert ist. Das Logical Volume /dev/volgrp/logvol soll im Weiteren von 60 GByte auf 70 GByte vergrößert werden. Zunächst betrachten wir die Ausgangssituation:

# mount /dev/volgrp/logvol /mnt
# df
Dateisystem 1K-Blöcke Benutzt Verfügbar Ben% Eingehängt
/dev/sda1 48062440 3896928 41724036 9% /
...
/dev/mapper/volgrp-logvol 61927420 53064 58728628 1% /mnt

Das Volume ist also etwa 60 GByte groß. Nun wird es mit dem Befehl lvextend auf 70 GByte erweitert. Der Befehl lvscan zeigt, dass dieser Vorgang erfolgreich war. Dagegen zeigt der Befehl df, dass sich das noch nicht auf das Dateisystem durchgeschlagen hat:

# lvextend -L 70G /dev/volgrp/logvol
Extending logical volume logvol to 70,00 GiB
Logical volume logvol successfully resized
# lvscan
ACTIVE '/dev/volgrp/logvol' [70,00 GiB] inherit
ACTIVE '/dev/volgrp/logvol2' [10,00 GiB] inherit
# df
Dateisystem 1K-Blöcke Benutzt Verfügbar Ben% Eingehängt auf
...
/dev/mapper/volgrp-logvol
61927420 53064 58728628 1% /mnt

Für die Erweiterung muss das Dateisystem zunächst aus dem Verzeichnisbaum ausgehängt werden. Daraufhin wird sicherheitshalber das Dateisystem auf Fehler untersucht. Mit dem Befehl resize2fs wird das Dateisystem auf die maximale Größe des Logical Volumes erweitert. Nun kann es wieder eingehängt werden, und der Befehl df zeigt, dass der Speicher dem System jetzt zur Verfügung steht:

# umount /mnt
# fsck -f /dev/volgrp/logvol
# resize2fs /dev/volgrp/logvol
# mount /dev/volgrp/logvol /mnt
# df
Dateisystem 1K-Blöcke Benutzt Verfügbar Ben% Eingehängt auf
...
/dev/mapper/volgrp-logvol
72248648 53012 68525620 1% /mnt

Auch mit dem Befehl vgdisplay können Sie sich den Speicherplatz einer Volume Group anzeigen lassen.

Beenden und auflösen

Um das Logical Volume zu beenden, verwenden Sie den Befehl vgchange -a n. Dieser bewirkt, dass das System beim Kernel abgemeldet wird. Vorher müssen Sie natürlich alle Dateisysteme, die auf dem Logical Volume installiert sind, aus dem Verzeichnisbaum aushängen.

# umount /dev/volgrp/logvol
# vgchange -a n

Sie können ein Logical Volume mit dem Befehl lvremove entfernen. Auch dazu muss natürlich jedes Dateisystem aus dem Verzeichnisbaum ausgehängt sein:

# umount /dev/volgrp/logvol
# lvremove /dev/volgrp/logvol

Zum Entfernen einer Volume Group wird diese zunächst mit dem Befehl vgchange auf inaktiv gesetzt. Anschließend kann sie dann mit dem Befehl vgremove entfernt werden:

# vgchange -a n /dev/volgrp
# vgremove /dev/volgrp

RAID-Systeme

RAID (Redundant Array of Independent Disks) ist ein Verfahren, bei dem mehrere Festplatten zu einer logischen Festplatte zusammengefasst werden. Durch Verzicht auf eine gewisse Kapazität wird eine Redundanz geschaffen, die einen Weiterbetrieb erlaubt, auch wenn eine Festplatte ausfällt.

RAID 1: Spiegelung

Die einfachste Redundanz wird bei RAID 1 durch das Spiegeln zweier Platten erreicht. Stirbt eine der beiden Platten, kann die andere noch alle Daten liefern.

Man benötigt die doppelte Kapazität an Festplatten und hat gewisse Verluste in der Geschwindigkeit bei den Schreiboperationen.

RAID 5: Fehlertoleranter Festplattenverbund

Drei bis fünf Festplatten werden bei RAID 5 so miteinander verbunden, dass jederzeit eine Festplatte ausfallen kann. Stellt der Controller fest, dass eine Festplatte zerstört ist, pfeift er üblicherweise. Die Festplatte kann im laufenden Betrieb gewechselt werden. Die verbleibenden Festplatten können aufgrund der Redundanz deren Inhalt liefern, bis der Administrator die defekte Festplatte durch eine neue ersetzt. Ist die neue Festplatte an Bord, können die verbleibenden Festplatten aus ihren Redundanzen den ursprünglichen Zustand der defekten Festplatte wieder herstellen.

Durch die Verteilung der Daten auf verschiedene Festplatten sind beim Lesen weniger Kopfbewegungen erforderlich, sodass sogar eine Durchsatzsteigerung erreicht wird. Dieser Vorteil ist allerdings beim Einsatz von SSDs nicht mehr gegeben.

RAID 0: Striping

RAID 0 fasst zwei Festplatten zu einer neuen zusammen. Man gewinnt so eine größere, zusammenhängende Festplatte. Die Blöcke sind immer im Wechsel auf den beiden Festplatten angeordnet. Bei mechanischen Festplatten führt das zu einer Geschwindigkeitssteigerung, weil Bewegungen der Köpfe optimiert werden können.

Allerdings gibt es hier keine Redundanz. Im Gegenteil sorgt der Ausfall einer Festplatte dafür, dass die Daten beider Festplatten zerstört sind.

Hardware RAID-Systeme

Klassischerweise wird ein RAID-System durch einen Controller gebildet, der die Details des RAIDS gegenüber der Hardware des Computers verbirgt. Ein »echter« RAID-Controller verbindet die angeschlossenen Festplatten zu einem Verbund, der aus Sicht des Mainboards wie eine einzige Festplatte aussieht. Dazu benötigt der Controller eine CPU und eigenen Speicher.

Die billigere Lösung sind die sogenannten Fake-RAID-Systeme, die Sie bereits bei einigen Mainboards eingebaut vorfinden. Hier können die SATA-Anschlüsse durch das BIOS zu einem RAID-System gekoppelt werden. Die logische Steuerung wird aber dem Betriebssystem überlassen. Typischerweise wird ein Windows-Treiber mitgeliefert, der dann erst aus den Festplatten das RAID bildet. Es ist also eigentlich ein Software-RAID, das oft nur Windows zur Verfügung steht. Eine Installation von Linux und selbst ein Dual-Boot sind dabei oft nicht möglich.

Ein Nachteil solcher RAID-Systeme ist, dass die Festplatten nur an einem RAID-Controller betrieben werden können, in manchen Fällen sogar nur an RAID-Controllern desselben Herstellers. Damit ist der schnelle Wechsel der Festplatte in einen anderen Computer nicht möglich und die Wiederherstellung der Daten bei einem Festplattencrash erfordert einen Spezialisten.

Software-RAID

Für Linux gibt es einen solchen Fake-RAID-Treiber schon deshalb nicht, weil Linux bereits von Haus aus ein RAID-System bilden kann. Hierbei wird ähnlich vorgegangen, wie Sie das bereits bei den Logical Volumes gesehen haben. Dazu benötigt Linux keine Unterstützung des BIOS und kann darum sein RAID auf der Ebene der Partitionen aufsetzen.

Beim Installieren einrichten

Bei einigen Distributionen können Sie bereits bei der Installation einen RAID-Verbund einrichten. Debian bietet Ihnen diese Option an, Ubuntu beispielsweise nicht. Ein entsprechender Menüpunkt wird bei der Partitionierung angeboten. Im weiteren Verlauf werden letztlich die Schritte durchlaufen, die im Weiteren beschrieben werden, nur dass Sie nun nicht die Programme selbst starten müssen, sondern von einem virtuellen Assistenten an die Hand genommen werden.

RAID-System nachträglich einrichten

Für die Arbeit mit Software-RAID müssen Sie das Paket mdadm installieren. Es ist nicht Bestandteil der Standardinstallation, sofern Sie nicht bereits bei der Installation ein RAID-System eingerichtet haben:

# apt install mdadm

Die Partitionen, die mit ins RAID sollen, benötigen den Typ fd für »Linux raid autodetect«. Starten Sie also fdisk und ändern Sie deren Typ mit dem Befehl t.

Die Einrichtung und Administration des RAIDs erfolgt über das Programm mdadm. Die Option --create richtet einen RAID-Verbund ein. Anschließend wird das Device benannt, über das der RAID-Verbund später angesprochen wird. Die Option --level=x richtet den RAID-Level ein. Danach wird noch die Liste der einzubindenden Partitionen benötigt. Im Parameter --raid-devices=x steht das x für die Anzahl der verwendeten Partitionen, die gleich im Anschluss aufgezählt werden.

Beispiel: RAID einrichten

Der folgende Befehl richtet eine Gerätedatei /dev/md0 für ein RAID-5-System ein und beteiligt die drei Partitionen /dev/sdc1 /dev/sdd1 und /dev/sde1. Der erste Befehl ist zu lang für die Breite einer Buchseite. Aber zum Glück kann man ja die Eingabe in der nächsten Zeile fortsetzen, wenn man an das Ende der Zeile einen Backslash setzt.

# mdadm --verbose --create /dev/md0 --level=5 \
--raid-devices=3 /dev/sdc1 /dev/sdd1 /dev/sde1
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 64K
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: size set to 117185984K
mdadm: array /dev/md0 started.
#

Die Option --verbose sorgt dafür, dass der Befehl ein wenig geschwätzig wird.

Schauen wir uns eine andere Konfiguration an: Der folgende Befehl erzeugt einen RAID-1-Verbund, also eine Spiegelung über zwei Partitionen, die aus naheliegenden Gründen in etwa gleich groß sein sollten:

mdadm --create /dev/md1
--level=mirror
--raid-devices=2 /dev/sde1 /dev/sdf1

Dateisystem auf dem RAID aufsetzen

Damit sind die Partitionen quasi zu einer neuen Partition zusammengebunden, die über mehrere Festplatten geht. Um diese Partition zu nutzen, muss das Dateisystem darauf eingerichtet werden. Das geschieht auf dem üblichen Wege mit dem Befehl mkfs:

# mkfs.ext4 /dev/md0

Sie können nun das neu geschaffene Dateisystem mit dem Befehl mount in den Verzeichnisbaum einhängen. Als Gerätedatei wird hier das RAID verwendet:

# mount /dev/md0 /mnt

Die Konfigurationsdatei

Bei Systemstart wird der RAID-Verbund erkannt, wenn er in der Konfigurationsdatei /etc/mdadm/mdadm.conf aufgeführt wird. Das Erstellen dieser Datei kann durch den Befehl mdadm automatisiert werden:

# mdadm --detail --scan >> /etc/mdadm/mdadm.conf

In der Datei mdadm.conf finden Sie nun folgende Zeilen:

ARRAY /dev/md0 level=raid5 num-devices=3 metadata=0.90 UUID=...
ARRAY /dev/md1 level=raid1 num-devices=2 metadata=0.60 UUID=...

Die UUID habe ich weggelassen, da sie aus naheliegenden Gründen bei jedem Rechner etwas anders ist.

Nun können Sie den Verbund wie ein normales Dateisystem behandeln. Einen RAID-Verbund wird wohl niemand einrichten, um ihn nicht dauerhaft einzubinden. Entsprechend sollte auch ein Eintrag in der Datei /etc/fstab erfolgen. Das folgende Beispiel zeigt die Zeile, die den RAID-Verbund für die Benutzerverzeichnisse einrichtet:

/dev/md0 /home ext4 defaults 1 2
/dev/md1 /var ext4 defaults 1 3

Stopp und Start

Sie können einen RAID-Verbund stoppen. Dazu muss er natürlich zuvor aus dem Verzeichnisbaum ausgehängt sein. Dies erreichen Sie mit dem Befehl umount. Den RAID-Verbund selbst stoppen Sie mit dem folgenden Befehl:

# mdadm --stop /dev/md0

Der gestoppte Verbund wird beim nächsten Reboot wieder starten. Sie können ihn aber auch von Hand mit dem folgenden Befehl starten:

# mdadm -As /dev/md0

Festplatten haben begrenzte Kapazitäten

Auch die beste Festplatte ist irgendwann einmal voll. Gut, wenn Sie als Administrator dies merken, bevor es zu spät ist.

Belegung ermitteln: df und du

Die Belegung einer Festplatte wird durch den Befehl df (disk free) ermittelt. Er zeigt alle eingehängten Dateisysteme mit ihrer Gesamtgröße, ihrem Füllgrad und der verfügbaren Größe an. Und damit man nicht selbst rechnen muss, wird sogar die prozentuale Belegung angezeigt.

$ df
Dateisystem 1K-Blöcke Benutzt Verfügbar Verw% Eingehängt auf
/dev/sda1 24034448 8809192 14004344 39% /
udev 1016440 4 1016436 1% /dev
tmpfs 410100 1804 408296 1% /run
none 5120 0 5120 0% /run/lock
none 1025248 156 1025092 1% /run/shm
/dev/sda7 191019692 118601416 62715008 66% /home

Sie sehen in der linken Spalte, dass nicht nur reale Dateisysteme angezeigt werden, die ihren Ort auf Festplattenpartitionen haben, sondern auch interne Strukturen.

Der Befehl du (disk usage) hilft bei der Suche nach den Speicherplatzverschwendern. Er zeigt ausgehend vom aktuellen Pfad alle Verzeichnisse und deren Unterverzeichnisse mit dem Platz, den sie belegen.

In den meisten Fällen hätten Sie aber gern eine Summe der Unterverzeichnisse, die Sie mit der Option -s erhalten. So liefert der folgende Befehl eine Aufstellung, welche Benutzer wie viel Platz beanspruchen. Die Option -h (human readable) zeigt die Dateigrößen nicht nur in Byte, sondern auch in KByte, MByte und TByte.

# du -sh /home/*

Sollte ein Benutzer aus dem Rahmen fallen, kann man dessen Verzeichnisse noch einmal mit einem weiteren du betrachten und so erkennen, ob er so viel arbeitet oder die Neuerscheinungen seiner Videothek speichert.

Festplattenplatz zuteilen: Quota

Mancher Administrator mag den Benutzern seines Servers am liebsten gar nicht verraten, wie viel Platz die Platte bietet. Kaum ist Platz da, wird er mit Unfug dichtgemacht. Eine wirksame Gegenmaßnahme ist das Setzen von Quota. Das bedeutet, dass jeder Benutzer ein gewisses Kontingent an Speicherplatz bekommt, und wer nicht aufräumt, darf halt nicht mehr weitersammeln.

Um solche Beschränkungen setzen zu können, müssen zunächst das Quota-Paket und die passenden Tools installiert werden:

# apt install quota quotatool

Die Limits

Die Quota grenzen den Festplattenplatz für einzelne Benutzer auf Dateisystemebene ein. Dazu wird dem Benutzer ein Limit gesetzt. Damit er aber nicht überraschend auf diese Grenze stößt, gibt es drei Parameter.

  • Softlimit: Das Softlimit ist die erste Grenze. Sie darf aber für eine gewisse Zeit übertreten werden.
  • Gnadenfrist: Die als grace limit bezeichnete Frist legt fest, wie lange der Benutzer über seinem Softlimit arbeiten darf.
  • Hardlimit: Mit dem Hardlimit wird festgelegt, wo endgültig Schluss ist.

Die Limits werden einmal für die Anzahl der belegten Blöcke und andererseits für die Anzahl der verfügbaren Dateien gesetzt. Der letztere Wert bezieht sich auf die Inodes, eine interne Verwaltungseinheit. Konkret bedeutet das, dass mehrere Links auf Dateien nicht mehrfach gezählt werden.

Aktivierung

Dass ein Dateisystem mit Quota arbeitet, muss in der Datei /etc/fstab hinterlegt werden. Dazu wird die Option usrquota hinterlegt:

/dev/sdb1 /home ext4 errors=remount-ro,usrquota 0 0

Die Einträge in der Datei /etc/fstab werden erst beim nächsten Einhängen übernommen. Dies können Sie mit dem folgenden Befehl erzwingen:

# mount -o remount /home

Nachdem das Quoting für das Dateisystem aktiviert ist, wird mit dem Befehl quotacheck das Dateisystem durchsucht. Dabei werden die Quota-Dateien alquota.user und alquota.group im Wurzelverzeichnis des Dateisystems, also hier /home, angelegt. Die Option -ma sorgt dafür, dass alle eingehängten Festplatten-Dateisysteme geprüft werden, ohne extra schreibgeschützt neu eingehängt werden zu müssen:

# quotacheck -ma

Mit dem Befehl quotaon wird dann das Quotasystem aktiviert. Sie können es mit dem Befehl quotaoff wieder stoppen.

# quotaon -a

Benutzereinstellungen

Nun können den einzelnen Benutzern Grenzen für ihre Festplattennutzung gesetzt werden. Wir werden dem Benutzer georg nun vorschreiben, dass er nur noch 25 MByte an Platz nutzen kann:

# quotatool -u georg -b -l 25M /home

Der Befehl quotatool ermöglicht alle Einstellungen für die Quotas der verschiedenen Benutzer. Die Optionen sind in Tabelle 7.1 zusammengefasst.

Option

Bedeutung

-u Benutzer

Setze die Quotas des Benutzers.

-g Gruppe

Setze die Quotas der Gruppe.

-b

Verwende Blöcke, also Datenmenge.

-i

Verwende i-nodes, also die Dateienzahl.

-t Sekunden

Setze die Gnadenfrist.

-l Größe

Setze das harte Limit.

-q Größe

Setze das weiche Limit.

Tabelle 7.1: Optionen von quotatool

Damit das Quota korrekt gesetzt werden kann, muss natürlich angegeben werden, wen es betrifft. Dazu muss der Benutzer mit -u oder die Gruppe mit -g angegeben werden. Als weitere Option muss festgelegt werden, ob sich die Grenze auf den Festplattenplatz bezieht oder ob die Anzahl der Dateien beschränkt werden soll. Der Festplattenplatz wird durch -b und die Dateienzahl durch -i angegeben.

Die weiteren Parameter geben an, ob das Softlimit, das Hardlimit oder die Gnadenfrist gesetzt wird.

Mit dem Befehl edquota können Sie einen Editor starten, um die derzeitigen Grenzen von georg im Ganzen zu betrachten und zu verändern:

# edquota -u georg

Im Editor finden Sie nun folgende Informationen:

Datenträgerquotas für user georg (uid 1006):
Dateisystem Blöcke weich hart Inodes weich hart
/dev/sdb1 25600 0 25600 219 0 0

Durch eine Änderung der Werte werden das Soft- und das Hardlimit des Benutzers für die jeweilige Festplatte eingestellt.

Der Befehl quotatool -t dient zur Einstellung der Gnadenfrist. Als Parameter wird die Zeit in Sekunden angegeben. Sie können aber auch Einheiten hinzufügen wie h oder hours für Stunden. Eine weiche Grenze wird innerhalb der Gnadenfrist nur gemeldet. Der Anwender kann bis zum Verstreichen der Frist normal weiterarbeiten. Ist diese verstrichen, darf er keine weiteren Dateien mehr beschreiben, bis das Softlimit wieder unterschritten wurde.

Kleiner Test

Probieren wir, was passiert, wenn der Benutzer über die Stränge schlägt. Beispielsweise versucht hier georg, einen Spielfilm von Benutzer johanna zu kopieren: Ist ein Softlimit überschritten, erhält er eine Warnmeldung. Der Vorgang wird aber korrekt abgeschlossen.

cp /home/johanna/Videos/Titanic.avi.
sdb1: warning, user block quota exceeded.

Nach Ablauf der Gnadenfrist erfolgt ohne weiteren Kommentar eine Schreibsperre für den Benutzer, die erst wieder aufgehoben wird, sobald sein Limit unterschritten wird. Nun kommt es zu einem Schreibfehler.

$ cp /home/johanna/Videos/Titanic.avi.
sdb1: write failed, user block limit reached.
cp: Schreiben von "./Titanic\: Der zugewiesene Plattenplatz

(Quota) ist überschritten

Der Bootmanager GRUB

Linux verfügt über einen Bootmanager, der in der Regel im Master Boot Record (MBR) der Festplatte installiert wird. Seine Hauptaufgabe ist es, ein Menü anzubieten, mit dem der Anwender zwischen mehreren auf dem Computer installierten Systemen auswählen kann. Nun wird man bei einem Server, der mehr oder weniger dauernd läuft, auf parallel installierte Betriebssysteme verzichten. Aber auch dann wird der Bootmanager aktiv und startet für den Anwender unsichtbar das einzig verfügbare System.

Installation eines Bootmanagers von Hand

Wenn Sie einen Bootmanager selbst einrichten wollen, müssen Sie im ersten Schritt die Konfiguration des Bootmanagers GRUB erstellen. Sie befindet sich in der Datei grub.cfg im Verzeichnis /boot/grub. Sie wird vom Skript grub-mkconfig erstellt. Es ermittelt die auf dem Rechner installierten Systeme und erstellt daraus eine fertige Konfiguration, die es auf der Standardausgabe anzeigt. Dort nutzt sie uns aber wenig. Mit der Option -o kann sie in die Konfigurationsdatei umgelenkt werden:

# grub-mkconfig -o /boot/grub/grub.cfg

Das Skript grub-install erzeugt aus der vorbereiteten Konfiguration einen MBR (Master Boot Record). Als Parameter benötigt das Skript die Gerätedatei der Festplatte, in deren MBR geschrieben werden soll:

# grub-install /dev/sda

In der Regel meldet das Programm nun, dass es keine Fehler gibt. Beim nächsten Booten sollte also ein aktualisiertes Menü vorliegen.

Bootprobleme

Wenn ein System nicht von selbst bootet, können Sie den Rechner immer noch mit einem Linux von einer anderen Quelle starten.

Linux ohne Festplatte starten

Zum Start eines nicht bootfähigen PC eignet sich beispielsweise die Installations-Medium von Linux Mint. Nach dem Start haben Sie ein vollständig arbeitendes Linux vor sich.

Dort können Sie ein Terminal öffnen, sich Administrationsrechte mit sudo -s verschaffen, ohne dass Sie ein Passwort benötigen. So können Sie mit dem Befehl mount die Partition einhängen, auf der sich Ihre Installation befindet. Hier gehen wir davon aus, dass sie auf sda1 liegt.

# mount /dev/sda1 /mnt

Damit haben Sie das komplette Dateisystem im Verzeichnis /mnt vor sich und können Änderungen darauf durchführen. Sie wollen den MBR dieser Festplatte wieder herstellen, also reicht es aus, dass Sie grub-install so aufrufen, dass die auf dem jetzt eingebundenen Dateisystem befindliche Konfigurationsdatei verwendet wird. Das können Sie dem Skript grub-install über die Option --root-directory mitteilen:

# grub-install --root-directory=/mnt /dev/sda

Die Option --root-directory sorgt dafür, dass die Konfiguration verwendet wird, die ab dem Verzeichnis /mnt eingehängt ist und die als Basis des Master Boot Record verwendet wird, und nicht etwa die bisher ja noch gar nicht vorliegende Version des Installations-Mediums. Nun können Sie den Rechner neu starten, und Sie sollten anschließend wieder das vertraute Auswahlmenü vorfinden.

Sie können mit dem Befehl chroot sogar die Wurzel des Verzeichnisbaums auf das Verzeichnis /mnt setzen. So arbeiten Sie komplett auf dem eingebundenen Dateisystem, ohne es gestartet zu haben. Beispielsweise könnten Sie nun das Passwort des Administrators auf der Festplatte ändern. Wird das System neu gebootet, ist das neue Passwort aktiv:

# chroot /mnt
# passwd

Die Möglichkeit, mit einem anderen Medium zu booten, ist der Grund, warum es durchaus sinnvoll ist, den Serverraum verschlossen zu halten. Letztlich ist ein System, dem der Angreifer mit dem Schraubenzieher in der Hand gegenübersteht, immer angreifbar. Er kann einfach die Festplatte herausnehmen und von einem anderen Computer aus lesen und schreiben.