Kapitel 7
IN DIESEM KAPITEL
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.
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
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.
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.
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.
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.
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.
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.
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:
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.
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:
Also ist bei einer DOS/MBR-Partitionierung sda2 eine primäre oder eine erweiterte Partition, sda7 dagegen eine logische Partition.
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.
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.
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.
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.
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
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.
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.
defaults
, wenn keine besonderen Anforderungen vorliegen.dump
(siehe Kapitel 18) berücksichtigt beispielsweise diesen Eintrag.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.
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 ...
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.
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.
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.
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
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.
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
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.
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.
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]
#
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
#
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
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.
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.
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 (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.
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.
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 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.
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.
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.
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.
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.
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
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
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
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
Auch die beste Festplatte ist irgendwann einmal voll. Gut, wenn Sie als Administrator dies merken, bevor es zu spät ist.
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.
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 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.
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.
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
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 |
---|---|
| Setze die Quotas des Benutzers. |
| Setze die Quotas der Gruppe. |
| Verwende Blöcke, also Datenmenge. |
| Verwende i-nodes, also die Dateienzahl. |
| Setze die Gnadenfrist. |
| Setze das harte Limit. |
| 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.
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
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.
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.
Wenn ein System nicht von selbst bootet, können Sie den Rechner immer noch mit einem Linux von einer anderen Quelle 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