Index: head/de_DE.ISO8859-1/books/handbook/basics/chapter.xml =================================================================== --- head/de_DE.ISO8859-1/books/handbook/basics/chapter.xml (revision 48784) +++ head/de_DE.ISO8859-1/books/handbook/basics/chapter.xml (revision 48785) @@ -1,3814 +1,3840 @@ Grundlagen des UNIX Betriebssystems Übersicht Dieses Kapitel umfasst die grundlegenden Kommandos und Funktionsweisen des &os;-Betriebssystems. Viel von diesem Material gilt auch für jedes andere &unix;-artige System. Neue Benutzer von &os; sollten dieses Kapitel aufmerksam lesen. Dieser Abschnitt behandelt die folgenden Themen: virtuelle Konsolen, Erstellung und Verwaltung von Benutzern und Gruppen in &os;, Zugriffsrechte unter &unix; sowie Datei-Flags unter &os;, Zugriffskontrolllisten für Dateisysteme, die Verzeichnisstruktur von &os;, Organisation von Dateisystemen unter &os;, Ein- und Abhängen von Dateisystemen, Prozesse, Dämonen und Signale, Shells und die Login-Umgebung, Texteditoren, Geräte und Gerätedateien, wie Sie in den Manualpages nach weiteren Informationen suchen können. Virtuelle Konsolen und Terminals virtuelle Konsole Terminals Konsole Wenn das &os;-System so konfiguriert wurde, dass es ohne eine grafische Benutzeroberfläche startet, wird das System nach dem Start einen Anmeldeprompt ausgeben, wie in diesem Beispiel zu sehen: FreeBSD/amd64 (pc3.example.org) (ttyv0) login: Die erste Zeile enthält einige Informationen über das System. amd64 zeigt an, dass auf dem System in diesem Beispiel eine 64-Bit Version von &os; läuft. Der Hostname ist pc3.example.org und ttyv0 gibt an, dass dies die Systemkonsole ist. Die zweite Zeile zeigt den Anmeldeprompt. Da &os; ein Mehrbenutzersystem ist, muss es die verschiedenen Benutzer voneinander unterscheiden können. Dies wird dadurch erreicht, dass sich jeder Benutzer zuerst am System anmelden muss, um Zugriff auf die Programme zu bekommen. Jeder Benutzer hat einen eindeutigen Benutzernamen und ein persönliches Kennwort. Um sich auf der Systemkonsole anzumelden, geben Sie den Benutzernamen ein, der während der Systeminstallation, wie in beschrieben, konfiguriert wurde und drücken Sie Enter. Geben Sie dann das zum Benutzernamen zugeordnete Passwort ein und drücken Enter. Das Passwort wird aus Sicherheitsgründen nicht angezeigt. Sobald das richtige Passwort eingegeben wird, wird die Nachricht des Tages (MOTD) gefolgt von einer Eingabeaufforderung ausgegeben. In Abhängigkeit der verwendeten Shell des Benutzers wird der Prompt mit dem Zeichen #, $ oder % dargestellt. Der Prompt zeigt an, dass der Benutzer jetzt an der &os; Systemkonsole angemeldet ist und nun alle verfügbaren Befehle probieren kann. Virtuelle Konsolen Obwohl die Systemkonsole dazu verwendet werden kann, um mit dem System zu interagieren, wird sich ein Benutzer in der Regel an einer virtuellen Konsole im &os;-System anmelden. Das liegt daran, dass die Systemmeldungen standardmäßig auf der Systemkonsole angezeigt werden und somit die Meldungen des Befehls oder einer Datei, die der Benutzer gerade bearbeitet, überschrieben werden. In der Voreinstellung ist &os; so konfiguriert, dass viele virtuelle Konsolen zur Eingabe von Befehlen zur Verfügung stehen. Jede virtuelle Konsole verfügt über einen eigenen Anmeldeprompt und eine Shell. Sie können ganz einfach zwischen den virtuellen Konsolen umschalten. Dies ist vergleichbar mit mehreren geöffneten Fenstern in einer graphischen Umgebung. Die Tastenkombinationen AltF1 bis AltF8 sind in &os; zum Umschalten zwischen virtuellen Konsolen reserviert. Verwenden Sie AltF1 um auf die Systemkonsole (ttyv0) zu wechseln, AltF2 für die erste virtuelle Konsole (ttyv1, AltF3 für die zweite virtuelle Konsole (ttyv2, und so weiter. Beim Wechsel von einer Konsole zur nächsten wird die Bildschirmausgabe von &os; verwaltet. Dies erzeugt die Illusion mehrerer Bildschirme und Tastaturen, an denen Kommandos abgesetzt werden können. Die Programme, die in einer virtuellen Konsole gestartet werden, laufen auch dann weiter, wenn der Benutzer auf eine andere virtuelle Konsole wechselt. Lesen Sie &man.syscons.4;, &man.atkbd.4;, &man.vidcontrol.1; und &man.kbdcontrol.1; für eine recht technische Beschreibung der &os;-Konsole und der Tastatur-Treiber. In &os; wird die Anzahl der verfügbaren virtuellen Konsolen in diesem Abschnitt von /etc/ttys konfiguriert: # name getty type status comments # ttyv0 "/usr/libexec/getty Pc" cons25 on secure # Virtual terminals ttyv1 "/usr/libexec/getty Pc" cons25 on secure ttyv2 "/usr/libexec/getty Pc" cons25 on secure ttyv3 "/usr/libexec/getty Pc" cons25 on secure ttyv4 "/usr/libexec/getty Pc" cons25 on secure ttyv5 "/usr/libexec/getty Pc" cons25 on secure ttyv6 "/usr/libexec/getty Pc" cons25 on secure ttyv7 "/usr/libexec/getty Pc" cons25 on secure ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure Um eine virtuelle Konsole zu deaktivieren, setzen Sie ein Kommentarzeichen (# an den Anfang der Zeile für die entsprechende Konsole. Um bspw. die Anzahl der verfügbaren virtuellen Konsolen von acht auf vier zu reduzieren, setzen Sie ein # an den Anfang der letzten vier Zeilen, den virtuellen Konsolen ttyv5 bis ttyv8. Kommentieren Sie nicht die Zeile für die Systemkonsole ttyv0 aus! Beachten Sie, dass die letzte virtuelle Konsole (ttyv8) zum Wechsel auf die graphische Oberfläche gedacht ist, wenn &xorg; wie im installiert und konfiguriert ist. &man.ttys.5; enthält eine ausführliche Beschreibung der Spalten dieser Datei und der verfügbaren Optionen für virtuelle Konsolen. Single-User-Modus Das &os; Boot-Menü verfügt über eine Option Boot Single User. Wird diese Option gewählt, bootet das System in einen speziellen Modus, der als Single-User-Modus bekannt ist. Dieser Modus wird normalerweise zur Reparatur des Systems verwendet, bspw. wenn das System nicht mehr startet, oder das root-Passwort zurückgesetzt werden muss. Im Single-User-Modus haben Sie keinen Zugriff auf das Netzwerk und es stehen Ihnen keine weiteren virtuellen Konsolen zur Verfügung. Allerdings haben Sie vollen Zugriff auf das System und in der Voreinstellung wird das root-Passwort nicht benötigt. Aus diesem Grund wird ein physischer Zugriff auf die Tastatur benötigt, um in diesem Modus zu booten. Zur Absicherung eines &os;-Systems sollte ermittelt werden, welche Personen physischen Zugriff auf die Tastatur bekommen sollen. Die Einstellungen für den Single-User-Modus befinden sich diesem Abschnitt von /etc/ttys: # name getty type status comments # # If console is marked "insecure", then init will ask for the root password # when going to single-user mode. console none unknown off secure In der Voreinstellung ist der Status auf secure eingestellt. Das setzt voraus, dass der physische Zugriff auf die Tastatur entweder unwichtig ist, oder über eine Sicherheitsrichtlinie geregelt wird. Wenn der Status auf insecure eingestellt wird, wird davon ausgegangen, dass die Umgebung selbst unsicher ist, da jeder Zugriff auf die Tastatur hat. &os; wird dann nach dem root-Passwort fragen, wenn ein Benutzer versucht in den Single-User-Modus zu booten. Setzen Sie insecure nicht leichtfertig ein! Wenn das root-Passwort vergessen wird, wird es schwierig in den Single-User-Modus zu gelangen, wenn man den Bootprozess von &os; nicht genau versteht. Den Videomodus der Konsole anpassen Der Standard-Videomodus der &os;-Konsole kann auf jeden Modus eingestellt werden, der von der Grafikkarte und dem Monitor unterstützt wird (beispielsweise 1024x768 oder 1280x1024). Um eine andere Einstellung zu verwenden, muss das VESA-Modul geladen werden: &prompt.root; kldload vesa Um festzustellen, welche Video-Modi von der Hardware unterstützt werden, nutzen Sie &man.vidcontrol.1;. Um eine Liste aller unterstützten Modi zu sehen, verwenden Sie diesen Befehl: &prompt.root; vidcontrol -i mode Die Ausgabe dieses Befehls listet alle Videomodi, die von der Hardware unterstützt werden. Um einen neuen Video-Modi zu wählen, wird der entsprechende Modus als root-Benutzer an &man.vidcontrol.1; übergeben: &prompt.root; vidcontrol MODE_279 Um diese Einstellung dauerhaft zu speichern, muss folgende Zeile in /etc/rc.conf hinzugefügt werden: allscreens_flags="MODE_279" Benutzer und grundlegende Account-Verwaltung &os; ermöglicht es mehreren Benutzern, den Computer zur selben Zeit zu benutzen. Es kann immer nur ein Benutzer vor der Konsole sitzen, aber es können sich beliebig viele Benutzer über das Netzwerk am System anmelden. Jeder Benutzer muss einen Account haben, um das System benutzen zu können. Nachdem Sie dieses Kapitel gelesen haben, werden Sie die verschiedenen Account-Typen von &os; kennen, wissen, wie Sie Accounts angelegen, verändern oder löschen, wissen, wie Sie Limits für einen Benutzer oder eine Gruppe setzen, um beispielsweise Ressourcen, wie Speicher oder CPU-Zeit einzuschränken, wissen, wie Sie Gruppen erstellen und Benutzer zu diesen Gruppen hinzufügen. Account-Typen Jeder Zugriff auf das &os;-System geschieht über Accounts und alle Prozesse werden von Benutzern gestartet, also sind Benutzer- und Account-Verwaltung von wesentlicher Bedeutung. Es gibt drei Haupttypen von Accounts: Systembenutzer, Benutzer-Accounts und der Superuser-Account. Systembenutzer Accounts System-Accounts Systembenutzer starten Dienste wie DNS, Mail-Server und Web-Server. Der Grund dafür ist die Sicherheit; wenn die Programme von dem Superuser gestartet werden, können Sie ohne Einschränkungen handeln. Accounts daemon Accounts operator Beispiele von Systembenutzern sind daemon, operator, bind, news und www. Accounts nobody nobody ist der generische unprivilegierte Systembenutzer. Bedenken Sie aber, dass je mehr Dienste nobody benutzen, desto mehr Dateien und Prozesse diesem Benutzer gehören und dieser Benutzer damit umso privilegierter wird. Benutzer-Accounts Accounts Benutzer-Accounts Benutzer-Accounts sind realen Personen zugeordnet und sind das primäre Mittel des Zugriffs das System. Jede Person, die Zugriff auf das System bekommt, sollte einen eindeutigen Benutzer-Account besitzen. Dies erlaubt es dem Administrator herauszufinden, wer was macht. Gleichzeitig werden die Benutzer daran gehindert, die Einstellungen anderer Benutzer zu zerstören. Jeder Benutzer kann die eigene Umgebung anpassen, bspw. seine voreingestellte Shell, Editor, Tastenbelegungen und Spracheinstellungen. Mit jedem Account eines &os;-Systems sind bestimmte Informationen verknüpft: Loginnamen Der Loginname wird am login: Prompt eingegeben. Jeder Benutzer muss einen eindeutigen Benutzernamen haben. Es gibt eine Reihe von Regeln für die Erstellung von gültigen Loginnamen, die in &man.passwd.5; dokumentiert sind. Es wird aus Kompatibilitätsgründen empfohlen, Benutzernamen zu verwenden, die aus Kleinbuchstaben bestehen und bis zu acht Zeichen lang sind. Passwort Jeder Account ist mit einem Passwort verknüpft. User ID (UID) Die User ID (UID) ist eine Zahl, die verwendet wird, um die Benutzer auf dem &os;-System eindeutig zu identifizieren. Programme, die einen Loginnamen akzeptieren, wandeln diesen zuerst in eine UID um. Es wird empfohlen, nur UIDs kleiner 65535 zu verwenden, da höhere Werte Kompatibilitätsprobleme mit einigen Anwendungen verursachen können. Group ID (GID) Die Group ID (GID) ist eine Zahl, die verwendet wird, um die primäre Gruppe eines Benutzers eindeutig zu identifizieren. Gruppen sind ein Mechanismus zur Steuerung des Zugriffs auf Ressourcen über die GID eines Benutzers anstelle der UID. Dies kann die Größe einiger Konfigurationsdateien signifikant reduzieren und ermöglicht es Benutzern, Mitglied mehreren Gruppen zu sein. Es wird empfohlen, GIDs kleiner 65535 zu verwenden, da höhere Werte bei einigen Anwendungen große Probleme verursachen können. Login-Klasse Login-Klassen erweitern das Gruppenkonzept. Sie erhöhen die Flexibilität des Systems in der Handhabung der verschiedenen Accounts. Login-Klassen werden auch im diskutiert. Gültigkeit von Passwörtern In der Voreinstellung verfallen Passwörter nicht. Allerdings können Passwortwechsel nach einer gewissen Zeit auf Basis einzelner Accounts erzwungen werden. Verfallszeit eines Accounts In der Voreinstellung verfallen unter &os; keine Accounts. Wenn Sie Accounts einrichten, die nur für eine bestimmte Zeit gültig sein sollen, beispielsweise Accounts für Teilnehmer eines Praktikums, können Sie mit &man.pw.8; die Gültigkeitsdauer des Accounts angeben. Nachdem die angegebene Zeitspanne verstrichen ist, kann dieser Account nicht mehr zum Anmelden verwendet werden, obwohl alle Verzeichnisse und Dateien, die diesem Account gehören, noch vorhanden sind. vollständiger Benutzername &os; identifiziert einen Account eindeutig über den Loginnamen, der aber keine Ähnlichkeit mit dem richtigen Namen des Benutzers haben muss. Ähnlich wie bei einem Kommentar, kann diese Information Leerzeichen, Großbuchstaben und mehr als 8 Zeichen enthalten. Heimatverzeichnis Das Heimatverzeichnis gibt den vollständigen Pfad zu dem Verzeichnis an, in dem sich der Benutzer nach erfolgreicher Anmeldung befindet. Es ist üblich, alle Heimatverzeichnisse unter /home/Loginname oder /usr/home/Loginname anzulegen. Im Heimatverzeichnis oder in dort angelegten Verzeichnissen werden die Dateien eines Benutzers gespeichert. Login-Shell Grundsätzlich ist die Shell, von denen es viele unterschiedliche gibt, eine Schnittstelle zum System. Die bevorzugte Shell eines Benutzers kann seinem Account zugeordnet werden. Der Superuser-Account Accounts Superuser (root) Der Superuser-Account, normalerweise root genannt, ist vorkonfiguriert und erleichtert die Systemverwaltung, sollte aber nicht für alltägliche Aufgaben wie das Verschicken und Empfangen von Mails, Erforschen des Systems oder Programmierung benutzt werden. Der Superuser kann, im Gegensatz zu normalen Benutzer-Accounts, ohne Beschränkungen operieren und die falsche Anwendung des Superuser-Accounts kann in spektakulären Katastrophen resultieren. Benutzer-Accounts sind nicht in der Lage, das System versehentlich zu zerstören, deswegen wird empfohlen, normale Benutzer-Accounts zu verwenden, solange nicht zusätzliche Privilegien benötigt werden. Kommandos, die Sie als Superuser eingeben, sollten Sie immer doppelt und dreifach überprüfen, da ein zusätzliches Leerzeichen oder ein fehlender Buchstabe irreparablen Datenverlust bedeuten kann. Es gibt mehrere Möglichkeiten Superuser-Rechte zu bekommen. Obwohl man sich direkt als root anmelden kann, wird von dieser Methode dringend abgeraten. Verwenden Sie stattdessen &man.su.1; um zum Superuser zu werden. Wenn Sie noch ein - eingeben, wird der Benutzer auch die Umgebung des Root-Benutzers erben. Der Benutzer, der diesen Befehl ausführt muss Mitglied der Gruppe wheel sein, oder der Befehl schlägt fehl. Zudem muss der Benutzer das Kennwort für den Benutzer-Account root kennen. In diesem Besipiel wird der Benutzer nur zum Superuser, um make install auszuführen, da dieser Befehl Superuser-Rechte erfordert. Nachdem der Befehl ausgeführt wurde, kann der Benutzer exit eingeben, um den Superuser-Account zu verlassen und zu den Privilegien des Benutzer-Accounts zurückkehren. Ein Programm als Superuser installieren &prompt.user; configure &prompt.user; make &prompt.user; su - Password: &prompt.root; make install &prompt.root; exit &prompt.user; Das in &os; enthaltene &man.su.1; funktioniert gut für einzelne Systeme oder in kleineren Netzwerken, mit nur einem Administrator. Eine Alternative ist es, das Paket oder den Port security/sudo zu installieren. Diese Software bietet eine Protokollierung von Aktivitäten und ermöglicht es dem Administrator zu bestimmen, welche Benutzer welche Befehle als Superuser ausführen dürfen. Accounts verändern Accounts verändern &os; stellt eine Vielzahl an Programmen bereit, um Accounts zu verändern. Die gebräuchlichsten Kommandos sind in gefolgt von einer detaillierten Beschreibung, zusammengefasst. Weitere Informationen und Anwendungsbeispiele finden Sie in der Manualpage des jeweiligen Programms. Programme zur Verwaltung von Benutzer-Accounts Programm Zusammenfassung &man.adduser.8; Das empfohlene Werkzeug, um neue Accounts zu erstellen. &man.rmuser.8; Das empfohlene Werkzeug, um Accounts zu löschen. &man.chpass.1; Ein flexibles Werkzeug, um Informationen in der Account-Datenbank zu verändern. &man.passwd.1; Ein Werkzeug, um Passwörter von Accounts zu ändern. &man.pw.8; Ein mächtiges und flexibles Werkzeug um alle Informationen über Accounts zu ändern.
<command>adduser</command> Accounts erstellen adduser /usr/share/skel Das empfohlene Programm zum Hinzufügen neuer Benutzer ist &man.adduser.8;. Wenn ein neuer Benutzer hinzugefügt wird, aktualisiert das Programm automatisch /etc/passwd und /etc/group. Es erstellt auch das Heimatverzeichnis für den Benutzer, kopiert die Standardkonfigurationsdateien aus /usr/share/skel und kann optional eine ,,Willkommen``-Nachricht an den neuen Benutzer versenden. Das Programm muss als Superuser ausgeführt werden. Das Werkzeug &man.adduser.8; arbeitet interaktiv und führt durch die einzelnen Schritte, wenn ein neues Benutzerkonto erstellt wird. Wie in zu sehen ist, müssen Sie entweder die benötigte Information eingeben oder Return drücken, um den Vorgabewert in eckigen Klammern zu akzeptieren. In diesem Beispiel wird der Benutzer in die Gruppe wheel aufgenommen, was es ihm erlaubt mit &man.su.1; zum Superuser zu werden. Wenn Sie fertig sind, können Sie entweder einen weiteren Benutzer erstellen oder das Programm beenden. Einen Benutzer unter &os; anlegen &prompt.root; adduser Username: jru Full name: J. Random User Uid (Leave empty for default): Login group [jru]: Login group is jru. Invite jru into other groups? []: wheel Login class [default]: Shell (sh csh tcsh zsh nologin) [sh]: zsh Home directory [/home/jru]: Home directory permissions (Leave empty for default): Use password-based authentication? [yes]: Use an empty password? (yes/no) [no]: Use a random password? (yes/no) [no]: Enter password: Enter password again: Lock out the account after creation? [no]: Username : jru Password : **** Full Name : J. Random User Uid : 1001 Class : Groups : jru wheel Home : /home/jru Shell : /usr/local/bin/zsh Locked : no OK? (yes/no): yes adduser: INFO: Successfully added (jru) to the user database. Add another user? (yes/no): no Goodbye! &prompt.root; Wenn Sie das Passwort eingeben, werden weder Passwort noch Sternchen angezeigt. Passen Sie auf, dass Sie das Passwort korrekt eingeben. <command>rmuser</command> rmuser Accounts löschen Benutzen Sie &man.rmuser.8; als Superuser, um einen Account vollständig aus dem System zu entfernen. Dieses Programm führt die folgenden Schritte durch: Entfernt den &man.crontab.1; Eintrag des Benutzers, wenn dieser existiert. Entfernt alle &man.at.1; jobs, die dem Benutzer gehören. Schließt alle Prozesse des Benutzers. Entfernt den Benutzer aus der lokalen Passwort-Datei des Systems. Entfernt optional das Heimatverzeichnis des Benutzers, falls es dem Benutzer gehört. Entfernt eingegangene E-Mails des Benutzers aus /var/mail. Entfernt alle Dateien des Benutzers aus temporären Dateispeicherbereichen wie /tmp. Entfernt den Loginnamen von allen Gruppen, zu denen er gehört, aus /etc/group. Wenn eine Gruppe leer wird und der Gruppenname mit dem Loginnamen identisch ist, wird die Gruppe entfernt. Das ergänzt sich mit den einzelnen Benutzer-Gruppen, die von &man.adduser.8; für jeden neuen Benutzer erstellt werden. Der Superuser-Account kann nicht mit &man.rmuser.8; entfernt werden, da dies in den meisten Fällen das System unbrauchbar macht. Als Vorgabe wird ein interaktiver Modus benutzt. Interaktives Löschen von Accounts mit <command>rmuser</command> &prompt.root; rmuser jru Matching password entry: jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh Is this the entry you wish to remove? y Remove user's home directory (/home/jru)? y Removing user (jru): mailspool home passwd. &prompt.root; <command>chpass</command> chpass Jeder Benutzer kann &man.chpass.1; verwenden, um die Shell und persönliche Informationen des Benutzerkontos zu verändern. Der Superuser kann dieses Werkzeug benutzen, um zusätzliche Kontoinformationen für alle Benutzer zu ändern. Werden neben dem optionalen Loginnamen keine weiteren Optionen angegeben, zeigt &man.chpass.1; einen Editor mit Account-Informationen an. Wenn der Benutzer den Editor verlässt, wird die Account-Datenbank mit den neuen Informationen aktualisiert. Dieses Programm fragt nach dem Verlassen des Editors nach dem Passwort, es sei denn, man ist als Superuser angemeldet. In hat der Superuser chpass jru eingegeben. Es werden die Felder ausgegeben, die für diesen Benutzer geändert werden können. Wenn stattdessen jru diesen Befehl aufruft, werden nur die letzten sechs Felder ausgegeben. Dies ist in zu sehen. <command>chpass</command> als Superuser verwenden #Changing user database information for jru. Login: jru Password: * Uid [#]: 1001 Gid [# or name]: 1001 Change [month day year]: Expire [month day year]: Class: Home directory: /home/jru Shell: /usr/local/bin/zsh Full Name: J. Random User Office Location: Office Phone: Home Phone: Other information: <command>chpass</command> als normaler Benutzer verwenden #Changing user database information for jru. Shell: /usr/local/bin/tcsh Full Name: J. Random User Office Location: Office Phone: Home Phone: Other information: Die Kommandos &man.chfn.1; und &man.chsh.1; sind nur Verweise auf &man.chpass.1;, genauso wie &man.ypchpass.1;, &man.ypchfn.1; und &man.ypchsh.1;. Da NIS automatisch unterstützt wird, ist es nicht notwendig das yp vor dem Kommando einzugeben. NIS wird später im besprochen. <application>passwd</application> passwd Accounts Passwort wechseln Jeder Benutzer kann mit &man.passwd.1; einfach sein Passwort ändern. Um eine versehentliche oder unbefugte Änderung zu verhindern, muss bei einem Passwortwechsel zunächst das ursprüngliche Passwort eingegeben werden, bevor das neue Passwort festgelegt werden kann. Das eigene Passwort wechseln &prompt.user; passwd Changing local password for jru. Old password: New password: Retype new password: passwd: updating the database... passwd: done Der Superuser kann jedes beliebige Passwort ändern, indem er den Benutzernamen an &man.passwd.1; übergibt. Das Programm fordert den Superuser nicht dazu auf, das aktuelle Passwort des Benutzers einzugeben. Dadurch kann das Passwort geändert werden, falls der Benutzer sein ursprüngliches Passwort vergessen hat. Als Superuser das Passwort eines anderen Accounts verändern &prompt.root; passwd jru Changing local password for jru. New password: Retype new password: passwd: updating the database... passwd: done Wie bei &man.chpass.1; ist &man.yppasswd.1; nur ein Verweis auf &man.passwd.1;. NIS wird von jedem dieser Kommandos unterstützt. <command>pw</command> pw Mit dem Werkzeug &man.pw.8; können Accounts und Gruppen erstellt, entfernt, verändert und angezeigt werden. Dieses Kommando dient als Schnittstelle zu den Benutzer- und Gruppendateien des Systems. &man.pw.8; besitzt eine Reihe mächtiger Kommandozeilenschalter, die es für die Benutzung in Shell-Skripten geeignet machen, doch finden neue Benutzer die Bedienung des Kommandos komplizierter, als die der anderen hier vorgestellten Kommandos.
Benutzer einschränken Benutzer einschränken Accounts einschränken &os; bietet dem Systemadministrator mehrere Möglichkeiten die System-Ressourcen, die ein einzelner Benutzer verwenden kann, einzuschränken. Diese Limitierungen sind in zwei Kategorien eingeteilt: Festplattenkontingente und andere Ressourcenbeschränkungen. Quotas Benutzer einschränken Quotas Festplatten Quotas Festplatten-Kontingente schränken den Plattenplatz, der einem Benutzer zur Verfügung steht, ein. Sie bieten zudem, ohne aufwändige Berechnung, einen schnellen Überblick über den verbrauchten Plattenplatz. Kontingente werden im diskutiert. Die anderen Ressourcenbeschränkungen umfassen die Begrenzung von CPU, Speicher und weitere Ressourcen, die ein Benutzer verbrauchen kann. /etc/login.conf Login-Klassen werden in /etc/login.conf und sind in &man.login.conf.5; im Detail beschrieben.n. Jeder Benutzer wird einer Login-Klasse zugewiesen (standardmäßig default) und jede Login-Klasse ist mit einem Satz von Login-Fähigkeiten verbunden. Eine Login-Fähigkeit ist ein Name=Wert Paar, in dem Name die Fähigkeit bezeichnet und Wert ein beliebiger Text ist, der in Abhänigkeit von Name entsprechend verarbeitet wird. Login-Klassen und -Fähigkeiten zu definieren ist ziemlich einfach und wird auch in &man.login.conf.5; beschrieben. &os; liest die Konfiguration aus /etc/login.conf normalerweise nicht direkt, sondern nur über die Datenbank /etc/login.conf.db, da diese eine schnellere Abfrage erlaubt. Wenn /etc/login.conf verändert wurde, muss die /etc/login.conf.db mit dem folgenden Kommando aktualisiert werden: &prompt.root; cap_mkdb /etc/login.conf Ressourcenbeschränkungen unterscheiden sich von normalen Login-Fähigkeiten zweifach. Erstens gibt es für jede Beschränkung ein aktuelles und ein maximales Limit. Das aktuelle Limit kann vom Benutzer oder einer Anwendung beliebig bis zum maximalen Limit verändert werden. Letzteres kann der Benutzer nur heruntersetzen. Zweitens gelten die meisten Ressourcenbeschränkungen für jeden vom Benutzer gestarteten Prozess, nicht für den Benutzer selbst. Beachten Sie jedoch, dass diese Unterschiede durch das spezifische Einlesen der Limits und nicht durch das System der Login-Fähigkeiten entstehen (das heißt, Ressourcenbeschränkungen sind keine Login-Fähigkeiten). Hier befinden sich die am häufigsten benutzten Ressourcenbeschränkungen. Der Rest kann zusammen mit den anderen Login-Fähigkeiten in &man.login.conf.5; gefunden werden: coredumpsize coredumpsize Benutzer einschränken coredumpsize Das Limit der Größe einer core-Datei, die von einem Programm generiert wird, unterliegt aus offensichtlichen Gründen anderen Limits der Festplattenbenutzung, zum Beispiel filesize oder Festplattenkontingenten. Es wird aber trotzdem oft als weniger harte Methode zur Kontrolle des Festplattenplatz-Verbrauchs verwendet: Da Benutzer die core-Dateien nicht selbst erstellen und sie oft nicht löschen, kann sie diese Option davor retten, dass kein Festplattenspeicher mehr zur Verfügung steht, sollte ein großes Programm abstürzen. cputime cputime Benutzer einschränken cputime Die maximale Rechenzeit, die ein Prozess eines Benutzers verbrauchen darf. Überschreitet der Prozess diesen Wert, wird er vom Kernel beendet. Die Rechenzeit wird limitiert, nicht die prozentuale Prozessorenbenutzung, wie es in einigen Feldern in &man.top.1; und &man.ps.1; dargestellt wird. filesize filesize Benutzer einschränken filesize Hiermit lässt sich die maximale Größe einer Datei bestimmen, die der Benutzer besitzen darf. Im Gegensatz zu Festplattenkontingenten ist diese Beschränkung nur für jede einzelne Datei gültig und nicht für den Platz, den alle Dateien eines Benutzers verwenden. maxproc maxproc Benutzer einschränken maxproc Das ist die maximale Anzahl von Prozessen, die ein Benutzer starten darf, und beinhaltet sowohl Vordergrund- als auch Hintergrundprozesse. Natürlich darf dieser Wert nicht höher sein als das System-Limit, das in kern.maxproc angegeben ist. Vergessen Sie auch nicht, dass ein zu kleiner Wert den Benutzer in seiner Produktivität einschränken könnte; es ist oft nützlich, mehrfach eingeloggt zu sein, oder Pipelines Pipeline = Leitung. Mit Pipes sind Verbindungen zwischen zwei Sockets in meistens zwei verschiedenen Prozessen gemeint. zu verwenden. Ein paar Aufgaben, wie die Kompilierung eines großen Programms, starten mehrere Prozesse. memorylocked memorylocked Benutzer einschränken memorylocked Dieses Limit gibt an, wie viel virtueller Speicher von einem Prozess maximal im Arbeitsspeicher festgesetzt werden kann (siehe auch &man.mlock.2;). Ein paar systemkritische Programme, wie &man.amd.8;, verhindern damit einen Systemzusammenbruch, der auftreten könnte, wenn sie aus dem Speicher genommen werden. memoryuse memoryuse Benutzer einschränken memoryuse Bezeichnet den maximalen Speicher, den ein Prozess benutzen darf und beinhaltet sowohl Arbeitsspeicher-, als auch Swap- Benutzung. Es ist kein allübergreifendes Limit für den Speicherverbrauch, aber ein guter Anfang. openfiles openfiles Benutzer einschränken openfiles Mit diesem Limit lässt sich die maximale Anzahl der von einem Prozess des Benutzers geöffneten Dateien festlegen. In &os; werden Dateien auch verwendet, um Sockets und IPC-Kanäle IPC steht für Interprocess Communication. darzustellen. Setzen Sie es deshalb nicht zu niedrig. Das System-Limit ist im kern.maxfiles &man.sysctl.8; definiert. sbsize sbsize Benutzer einschränken sbsize Dieses Limit beschränkt den Netzwerk-Speicher und damit die mbufs, die ein Benutzer verbrauchen darf. Es stammt aus einer Antwort auf einen DoS-Angriff, bei dem viele Netzwerk-Sockets geöffnet wurden, kann aber generell dazu benutzt werden Netzwerk-Verbindungen zu beschränken. stacksize Das ist die maximale Größe, auf die der Stack eines Prozesses heranwachsen darf. Das allein ist natürlich nicht genug, um den Speicher zu beschränken, den ein Programm verwenden darf. Es sollte deshalb in Verbindung mit anderen Limits gesetzt werden. Beim Setzen von Ressourcenbeschränkungen sind noch andere Dinge zu beachten. Nachfolgend ein paar generelle Tipps, Empfehlungen und verschiedene Kommentare. Von /etc/rc beim Hochfahren des Systems gestartete Prozesse werden der daemon Login-Klasse zugewiesen. Obwohl das mitgelieferte /etc/login.conf eine Quelle von vernünftigen Limits darstellt, können nur Sie, der Administrator, wissen, was für Ihr System angebracht ist. Ein Limit zu hoch anzusetzen könnte Ihr System für Missbrauch öffnen, und ein zu niedriges Limit der Produktivität einen Riegel vorschieben. Benutzer des &xorg; sollten wahrscheinlich mehr Ressourcen zugeteilt bekommen als andere Benutzer. &xorg; beansprucht selbst schon eine Menge Ressourcen, verleitet die Benutzer aber auch, mehrere Programme gleichzeitig laufen zu lassen. Bedenken Sie, dass viele Limits für einzelne Prozesse gelten und nicht für den Benutzer selbst. Setzt man zum Beispiel openfiles auf 50, kann jeder Prozess des Benutzers bis zu 50 Dateien öffnen. Dadurch ist die maximale Anzahl von Dateien, die von einem Benutzer geöffnet werden können, openfiles mal maxproc. Das gilt auch für den Speicherverbrauch. Weitere Informationen über Ressourcenbeschränkungen, Login-Klassen und -Fähigkeiten finden Sie in &man.cap.mkdb.1;, &man.getrlimit.2; und &man.login.conf.5;. Gruppen Gruppen /etc/groups Accounts Gruppen Eine Gruppe ist einfach eine Zusammenfassung von Accounts. Gruppen werden durch den Gruppennamen und die GID identifiziert. Der Kernel von &os; entscheidet anhand der UID und der Gruppenmitgliedschaft eines Prozesses, ob er dem Prozess etwas erlaubt oder nicht. Wenn jemand von der GID eines Benutzers oder Prozesses spricht, meint er damit meistens die erste Gruppe der Gruppenliste. Die Zuordnung von Gruppennamen zur GID steht in /etc/group, einer Textdatei mit vier durch Doppelpunkte getrennten Feldern. Im ersten Feld steht der Gruppenname, das zweite enthält ein verschlüsseltes Passwort, das dritte gibt die GID an und das vierte besteht aus einer Komma separierten Liste der Mitglieder der Gruppe. Eine ausführliche Beschreibung der Syntax dieser Datei finden Sie in &man.group.5;. Wenn Sie /etc/group nicht händisch editieren möchten, können Sie &man.pw.8; zum Editieren benutzen. Das folgende Beispiel zeigt das Hinzufügen einer Gruppe mit dem Namen teamtwo: Setzen der Mitgliederliste einer Gruppe mit &man.pw.8; &prompt.root; pw groupadd teamtwo &prompt.root; pw groupshow teamtwo teamtwo:*:1100: 1100 ist die GID der Gruppe teamtwo. Momentan hat teamtwo noch keine Mitglieder. Mit dem folgenden Kommando wird der Benutzer jru in die Gruppe teamtwo aufgenommen. Ein Gruppenmitglied mit &man.pw.8; hinzufügen &prompt.root; pw groupmod teamtwo -M jru &prompt.root; pw groupshow teamtwo teamtwo:*:1100:jru Als Argument von geben Sie eine Komma separierte Liste von Mitgliedern an, die in die Gruppe aufgenommen werden sollen. Aus den vorherigen Abschnitten ist bekannt, dass die Passwort-Datei ebenfalls eine Gruppe für jeden Benutzer enthält. Das System teilt dem Benutzer automatisch eine Gruppe zu, die aber vom Kommando von &man.pw.8; nicht angezeigt wird. Diese Information wird allerdings von &man.id.1; und ähnlichen Werkzeugen angezeigt. Das heißt, dass &man.pw.8; nur /etc/group manipuliert, es wird nicht versuchen, zusätzliche Informationen aus /etc/passwd zu lesen. Hinzufügen eines neuen Gruppenmitglieds mittels &man.pw.8; &prompt.root; pw groupmod teamtwo -m db &prompt.root; pw groupshow teamtwo teamtwo:*:1100:jru,db Die Argumente zur Option ist eine durch Komma getrennte Liste von Benutzern, die der Gruppe hinzugefügt werden sollen. Anders als im vorherigen Beispiel werden diese Benutzer in die Gruppe aufgenommen und ersetzen nicht die bestehenden Benutzer in der Gruppe. Mit <command>id</command> die Gruppenzugehörigkeit bestimmen &prompt.user; id jru uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo) In diesem Beispiel ist jru Mitglied von jru und teamtwo. Weitere Informationen zu diesem Befehl und dem Format von /etc/group finden Sie in &man.pw.8; und &man.group.5;.
Zugriffsrechte UNIX In &os; besitzt jede Datei und jedes Verzeichnis einen Satz von Zugriffsrechten. Es stehen mehrere Programme zum Anzeigen und Bearbeiten dieser Rechte zur Verfügung. Ein Verständnis für die Funktionsweise von Zugriffsrechten ist notwendig, um sicherzustellen, dass Benutzer nur auf die von ihnen benötigten Dateien zugreifen können und nicht auf die Dateien des Betriebssystems oder von anderen Benutzern. In diesem Abschnitt werden die traditionellen Zugriffsrechte von &unix; beschrieben. Informationen zu feingranularen Zugriffsrechten für Dateisysteme finden Sie im . In &unix; werden die grundlegenden Zugriffsrechte in drei Typen unterteilt: Lesen, Scheiben und Ausführen. Diese Zugriffstypen werden verwendet, um den Dateizugriff für den Besitzer der Datei, die Gruppe und alle anderen zu bestimmen. Die Lese-, Schreib- und Ausführungsberechtigungen werden mit den Buchstaben r, w und x dargestellt. Alternativ können die Berechtigungen als binäre Zahlen dargestellt werden, da jede Berechtigung entweder aktiviert oder deaktiviert (0) ist. Wenn die Berechtigung als Zahl dargestellt wird, ist die Reihenfolge immer als rwx zu lesen, wobei r den Wert 4 hat, w den Wert 2 und x den Wert 1. In Tabelle 4.1 sind die einzelnen nummerischen und alphabetischen Möglichkeiten zusammengefasst. Das Zeichen - in der Spalte Auflistung im Verzeichnis besagt, dass eine eine Berechtigung deaktiviert ist. Zugriffsrechte Dateizugriffsrechte &unix; Zugriffsrechte Wert Zugriffsrechte Auflistung im Verzeichnis 0 Kein Lesen, Kein Schreiben, Kein Ausführen --- 1 Kein Lesen, Kein Schreiben, Ausführen --x 2 Kein Lesen, Schreiben, Kein Ausführen -w- 3 Kein Lesen, Schreiben, Ausführen -wx 4 Lesen, Kein Schreiben, Kein Ausführen r-- 5 Lesen, Kein Schreiben, Ausführen r-x 6 Lesen, Schreiben, Kein Ausführen rw- 7 Lesen, Schreiben, Ausführen rwx
&man.ls.1; Verzeichnisse Benutzen Sie das Argument mit &man.ls.1;, um eine ausführliche Verzeichnisauflistung zu sehen, die in einer Spalte die Zugriffsrechte für den Besitzer, die Gruppe und alle anderen enthält. Die Ausgabe von ls -l könnte wie folgt aussehen: &prompt.user; ls -l total 530 -rw-r--r-- 1 root wheel 512 Sep 5 12:31 myfile -rw-r--r-- 1 root wheel 512 Sep 5 12:31 otherfile -rw-r--r-- 1 root wheel 7680 Sep 5 12:31 email.txt Das erste Zeichen (ganz links) der ersten Spalte zeigt an, ob es sich um eine normale Datei, ein Verzeichnis, ein zeichenorientiertes Gerät, ein Socket oder irgendeine andere Pseudo-Datei handelt. In diesem Beispiel zeigt - eine normale Datei an. Die nächsten drei Zeichen, dargestellt als rw-, ergeben die Rechte für den Datei-Besitzer. Die drei Zeichen danach r-- die Rechte der Gruppe, zu der die Datei gehört. Die letzten drei Zeichen, r--, geben die Rechte für den Rest der Welt an. Ein Minus bedeutet, dass das Recht nicht gegeben ist. In diesem Beispiel sind die Zugriffsrechte also: der Eigentümer kann die Datei lesen und schreiben, die Gruppe kann lesen und alle anderen können auch nur lesen. Entsprechend obiger Tabelle wären die Zugriffsrechte für diese Datei 644, worin jede Ziffer die drei Teile der Zugriffsrechte dieser Datei verkörpert. Wie kontrolliert das System die Rechte von Hardware-Geräten? &os; behandelt die meisten Hardware-Geräte als Dateien, welche Programme öffnen, lesen und mit Daten beschreiben können. Diese speziellen Gerätedateien sind in /dev gespeichert. Verzeichnisse werden ebenfalls wie Dateien behandelt. Sie haben Lese-, Schreib- und Ausführ-Rechte. Das Ausführungs-Bit hat eine etwas andere Bedeutung für ein Verzeichnis als für eine Datei. Die Ausführbarkeit eines Verzeichnisses bedeutet, dass in das Verzeichnis, zum Beispiel mit &man.cd.1;, gewechselt werden kann. Das bedeutet auch, dass in dem Verzeichnis auf Dateien, deren Namen bekannt sind, zugegriffen werden kann, vorausgesetzt die Zugriffsrechte der Dateien lassen dies zu. Das Leserecht auf einem Verzeichnis erlaubt es, sich den Inhalt des Verzeichnisses anzeigen zu lassen. Um eine Datei mit bekanntem Namen in einem Verzeichnis zu löschen, müssen auf dem Verzeichnis Schreib- und Ausführ-Rechte gesetzt sein. Es gibt noch mehr Rechte, aber die werden vor allem in speziellen Umständen benutzt, wie zum Beispiel bei SetUID-Binaries und Verzeichnissen mit gesetztem Sticky-Bit. Mehr über Zugriffsrechte von Dateien und wie sie gesetzt werden, finden Sie in &man.chmod.1;. Symbolische Zugriffsrechte TomRhodesBeigesteuert von Zugriffsrechte symbolische Symbolische Zugriffsrechte verwenden Zeichen anstelle von oktalen Werten, um die Berechtigungen für Dateien oder Verzeichnisse festzulegen. Zugriffsrechte verwenden die Syntax Wer, Aktion und Berechtigung. Die folgenden Werte stehen zur Auswahl: Option Symbol Bedeutung Wer u Benutzer (user) Wer g Gruppe (group) Wer o Andere (other) Wer a Alle Aktion + Berechtigungen hinzufügen Aktion - Berechtigungen entziehen Aktion = Berechtigungen explizit setzen Berechtigung r lesen (read) Berechtigung w schreiben (write) Berechtigung x ausführen (execute) Berechtigung t Sticky-Bit Berechtigung s Set-UID oder Set-GID Diese symbolischen Werte werden zusammen mit &man.chmod.1; verwendet. Beispielsweise würde der folgende Befehl den Zugriff auf FILE für alle anderen Benutzer verbieten: &prompt.user; chmod go= FILE Wenn Sie mehr als eine Änderung der Rechte einer Datei vornehmen wollen, können Sie eine durch Kommata getrennte Liste der Rechte angeben. Das folgende Beispiel entzieht der Gruppe und der Welt die Schreibberechtigung auf FILE und fügt für jeden Ausführungsrechte hinzu: &prompt.user; chmod go-w,a+x FILE &os; Datei-Flags TomRhodesBeigetragen von Zusätzlich zu den Zugriffsrechten unterstützt &os; auch die Nutzung von Datei-Flags. Diese erhöhen die Sicherheit des Systems, indem sie eine verbesserte Kontrolle von Dateien erlauben. Verzeichnisse werden allerdings nicht unterstützt. Mit dem Einsatz von Datei-Flags kann sogar root daran gehindert werden, Dateien zu löschen oder zu verändern. Datei-Flags werden mit &man.chflags.1; verändert. Um beispielsweise auf der Datei file1 das unlöschbar-Flag zu aktivieren, geben Sie folgenden Befehl ein: &prompt.root; chflags sunlink file1 Um dieses Flag zu deaktivieren, setzen Sie ein no vor : &prompt.root; chflags nosunlink file1 Um die Flags einer Datei anzuzeigen, verwenden Sie &man.ls.1; zusammen mit : &prompt.root; ls -lo file1 -rw-r--r-- 1 trhodes trhodes sunlnk 0 Mar 1 05:54 file1 Einige Datei-Flags können nur vom root-Benutzer gesetzt oder gelöscht werden. Andere wiederum können auch vom Eigentümer der Datei gesetzt werden. Weitere Informationen hierzu finden sich in &man.chflags.1; und &man.chflags.2;. Die Berechtigungen <literal>setuid</literal>, <literal>setgid</literal>, und <literal>sticky</literal> TomRhodesBeigetragen von Anders als die Berechtigungen, die bereits angesprochen wurden, existieren drei weitere Einstellungen, über die alle Administratoren Bescheid wissen sollten. Dies sind die Berechtigungen setuid, setgid und sticky. Diese Einstellungen sind wichtig für manche &unix;-Operationen, da sie Funktionalitäten zur Verfügung stellen, die normalerweise nicht an gewöhnliche Anwender vergeben wird. Um diese zu verstehen, muss der Unterschied zwischen der realen und der effektiven Benutzer-ID erwähnt werden. Die reale Benutzer-ID ist die UID, welche den Prozess besitzt oder gestartet hat. Die effektive UID ist diejenige, als die der Prozess läuft. Beispielsweise wird &man.passwd.1; mit der realen ID des Benutzers ausgeführt, der sein Passwort ändert. Um jedoch die Passwortdatenbank zu bearbeiten, wird es effektiv als root-Benutzer ausgeführt. Das ermöglicht es normalen Benutzern, ihr Passwort zu ändern, ohne einen Permission Denied-Fehler angezeigt zu bekommen. Die setuid-Berechtigung kann durch das Voranstellen bei einer Berechtigungsgruppe mit der Nummer Vier (4) gesetzt werden, wie im folgenden Beispiel gezeigt wird: &prompt.root; chmod 4755 suidexample.sh Die Berechtigungen auf suidexample.sh sehen jetzt wie folgt aus: -rwsr-xr-x 1 trhodes trhodes 63 Aug 29 06:36 suidexample.sh Beachten Sie, dass ein s jetzt Teil der Berechtigungen des Dateibesitzers geworden ist, welches das Ausführen-Bit ersetzt. Dies ermöglicht es Werkzeugen mit erhöhten Berechtigungen zu laufen, wie z.B. passwd. Die nosuid &man.mount.8;-Option bewirkt, dass solche Anwendungen stillschweigend scheitern, ohne den Anwender darüber zu informieren. Diese Option ist nicht völlig zuverlässig, da ein nosuid-Wrapper in der Lage wäre, dies zu umgehen. Um dies in Echtzeit zu beobachten, öffnen Sie zwei Terminals. Starten Sie auf einem passwd als normaler Benutzer. Während es auf die Passworteingabe wartet, überprüfen Sie die Prozesstabelle und sehen Sie sich die Informationen für &man.passwd.1; an: Im Terminal A: Changing local password for trhodes Old Password: Im Terminal B: &prompt.root; ps aux | grep passwd trhodes 5232 0.0 0.2 3420 1608 0 R+ 2:10AM 0:00.00 grep passwd root 5211 0.0 0.2 3620 1724 2 I+ 2:09AM 0:00.01 passwd Obwohl &man.passwd.1; als normaler Benutzer ausgeführt wird, benutzt es die effektive UID von root. Die setgid-Berechtigung führt die gleiche Aktion wie die setuid-Berechtigung durch, allerdings verändert sie die Gruppenberechtigungen. Wenn eine Anwendung oder ein Werkzeug mit dieser Berechtigung ausgeführt wird, erhält es die Berechtigungen basierend auf der Gruppe, welche die Datei besitzt und nicht die des Benutzers, der den Prozess gestartet hat. Um die setgid-Berechtigung auf einer Datei zu setzen, geben Sie &man.chmod.1; eine führende Zwei (2) mit: &prompt.root; chmod 2755 sgidexample.sh Beachten Sie in der folgenden Auflistung, dass das s sich jetzt in dem Feld befindet, das für die Berechtigungen der Gruppe bestimmt ist: -rwxr-sr-x 1 trhodes trhodes 44 Aug 31 01:49 sgidexample.sh Obwohl es sich bei dem in diesen Beispielen gezeigten Shellskript um eine ausführbare Datei handelt, wird es nicht mit einer anderen EUID oder effektiven Benutzer-ID ausgeführt. Das ist so, weil Shellskripte keinen Zugriff auf &man.setuid.2;-Systemaufrufe erhalten. Die setuid und setgid Berechtigungs-Bits können die Systemsicherheit verringern, da sie erhöhte Rechte ermöglichen. Das dritte Berechtigungs-Bit, das sticky bit kann die Sicherheit eines Systems erhöhen. Wenn das sticky bit auf einem Verzeichnis angewendet wird, erlaubt es das Löschen von Dateien nur durch den Besitzer der Datei. Dies ist nützlich, um die Löschung von Dateien in öffentlichen Verzeichnissen wie /tmp, durch Benutzer denen diese Dateien nicht gehören, zu verhindern. Um diese Berechtigung anzuwenden, stellen Sie der Berechtigung eine Eins (1) voran: &prompt.root; chmod 1777 /tmp Das sticky bit kann anhand des t ganz am Ende der Berechtigungen abgelesen werden. &prompt.root; ls -al / | grep tmp drwxrwxrwt 10 root wheel 512 Aug 31 01:49 tmp
Verzeichnis-Strukturen Verzeichnis Hierarchien Die &os;-Verzeichnishierarchie ist die Grundlage, um ein umfassendes Verständnis des Systems zu erlangen. Das wichtigste Verzeichnis ist das Root-Verzeichnis /. Dieses Verzeichnis ist das erste, das während des Bootens eingehangen wird. Es enthält das notwendige Basissystem, um das Betriebssystem in den Mehrbenutzerbetrieb zu bringen. Das Root-Verzeichnis enthält auch die Mountpunkte für Dateisysteme, die beim Wechsel in den Multiuser-Modus eingehängt werden. Ein Mountpunkt ist ein Verzeichnis, in das zusätzliche Dateisysteme (in der Regel unterhalb des Wurzelverzeichnisses) eingehängt werden können. Dieser Vorgang wird in ausführlich beschrieben. Standard-Mountpunkte sind /usr, /var, /tmp, /mnt sowie /cdrom. Auf diese Verzeichnisse verweisen üblicherweise Einträge in /etc/fstab. Diese Datei ist eine Tabelle mit verschiedenen Dateisystemen und Mountpunkten, vom System gelesen werden. Die meisten der Dateisysteme in /etc/fstab werden beim Booten automatisch durch das Skript &man.rc.8; gemountet, wenn die zugehörigen Einträge nicht mit versehen sind. Weitere Informationen zu diesem Thema finden Sie im . Eine vollständige Beschreibung der Dateisystem-Hierarchie finden Sie in &man.hier.7;. Die folgende Aufstellung gibt einen kurzen Überblick über die am häufigsten verwendeten Verzeichnisse: Verzeichnis Beschreibung / Wurzelverzeichnis des Dateisystems. /bin/ Grundlegende Werkzeuge für den Single-User-Modus sowie den Mehrbenutzerbetrieb. /boot/ Programme und Konfigurationsdateien, die während des Bootens benutzt werden. /boot/defaults/ Vorgaben für die Boot-Konfiguration. Weitere Details finden Sie in &man.loader.conf.5;. /dev/ Gerätedateien. Weitere Details finden Sie in &man.intro.4;. /etc/ Konfigurationsdateien und Skripten des Systems. /etc/defaults/ Vorgaben für die System Konfigurationsdateien. Weitere Details finden Sie in &man.rc.8;. /etc/mail/ Konfigurationsdateien von MTAs wie &man.sendmail.8;. /etc/namedb/ Konfigurationsdateien von &man.named.8;. /etc/periodic/ Täglich, wöchentlich oder monatlich laufende Skripte, die von &man.cron.8; gestartet werden. Weitere Details finden Sie in &man.periodic.8;. /etc/ppp/ Konfigurationsdateien von &man.ppp.8;. /mnt/ Ein leeres Verzeichnis, das von Systemadministratoren häufig als temporärer Mountpunkt genutzt wird. /proc/ Prozess Dateisystem. Weitere Details finden Sie in &man.procfs.5; und &man.mount.procfs.8;. /rescue/ Statisch gelinkte Programme zur Wiederherstellung des Systems, wie in &man.rescue.8; beschrieben. /root/ Home Verzeichnis von root. /sbin/ Systemprogramme und administrative Werkzeuge, die grundlegend für den Single-User-Modus und den Mehrbenutzerbetrieb sind. /tmp/ Temporäre Dateien, die für gewöhnlich bei einem Neustart des Systems verloren gehen. Häufig wird ein speicherbasiertes Dateisystem unter /tmp eingehängt. Dieser Vorgang kann automatisiert werden, wenn tmpmfs-bezogene Variablen von &man.rc.conf.5; verwendet werden, oder ein entsprechender Eintrag in /etc/fstab existiert. Weitere Informationen finden Sie in &man.mdmfs.8;. /usr/ Der Großteil der Benutzerprogramme und Anwendungen. /usr/bin/ Gebräuchliche Werkzeuge, Programmierhilfen und Anwendungen. /usr/include/ Standard C include-Dateien. /usr/lib/ Bibliotheken. /usr/libdata/ Daten verschiedener Werkzeuge. /usr/libexec/ System-Dämonen und System-Werkzeuge, die von anderen Programmen ausgeführt werden. /usr/local/ Lokale Programme und Bibliotheken. Die Ports-Sammlung von &os; benutzt dieses Verzeichnis als Zielverzeichnis für Anwendungen. Innerhalb von /usr/local sollte das von &man.hier.7; beschriebene Layout für /usr benutzt werden. Das man Verzeichnis wird direkt unter /usr/local anstelle unter /usr/local/share angelegt. Die Dokumentation der Ports findet sich in share/doc/port. /usr/obj/ Von der Architektur abhängiger Verzeichnisbaum, der durch das Bauen von /usr/src entsteht. /usr/ports/ Die &os;-Ports-Sammlung (optional). /usr/sbin/ System-Dämonen und System-Werkzeuge, die von Benutzern ausgeführt werden. /usr/share/ Von der Architektur unabhängige Dateien. /usr/src/ Quelldateien von BSD und/oder lokalen Ergänzungen. /var/ Wird für mehrere Zwecke genutzt und enthält Logdateien, temporäre Daten und Spooldateien. Manchmal wird ein speicherbasiertes Dateisystem unter /var eingehängt. Dieser Vorgang kann automatisiert werden, wenn die varmfs-bezogenen Variablen von &man.rc.conf.5; verwendet werden, oder ein entsprechender Eintrag in /etc/fstab existiert. Weitere Informationen finden Sie in &man.mdmfs.8;. /var/log/ Verschiedene Logdateien des Systems. /var/mail/ Postfächer der Benutzer. /var/spool/ Verschiedene Spool-Verzeichnisse der Drucker- und Mailsysteme. /var/tmp/ Temporäre Dateien, die in der Regel auch bei einem Neustart des Systems erhalten bleiben, es sei denn, bei /var handelt es sich um ein speicherbasiertes Dateisystem. /var/yp/ NIS maps. Festplatten, Slices und Partitionen &os; identifiziert Dateien anhand eines Dateinamens. In Dateinamen wird zwischen Groß- und Kleinschreibung unterschieden: readme.txt und README.TXT bezeichnen daher zwei verschiedene Dateien. &os; benutzt keine Dateiendungen, um den Typ der Datei zu bestimmen, egal ob es sich um ein Programm, ein Dokument oder um andere Daten handelt. Dateien werden in Verzeichnissen gespeichert. In einem Verzeichnis können sich keine oder hunderte Dateien befinden. Ein Verzeichnis kann auch andere Verzeichnisse enthalten und so eine Hierarchie von Verzeichnissen aufbauen, die die Ablage von Daten erleichtert. In Dateinamen werden Verzeichnisse durch einen Schrägstrich (/, Slash) getrennt. Wenn z.B. das Verzeichnis foo ein Verzeichnis bar enthält, in dem sich die Datei readme.txt befindet, lautet der vollständige Name der Datei (oder der Pfad zur Datei) foo/bar/readme.txt. Beachten Sie, dass sich dies von &windows; unterscheidet, wo der \ (Backslash für die Trennung von Datei- und Verzeichnisnamen verwendet wird. &os; benutzt keine Laufwerkbuchstaben oder Laufwerknamen im Pfad. Beispielsweise würde man unter &os; nicht c:\foo\bar\readme.txt eingeben. Verzeichnisse und Dateien werden in einem Dateisystem gespeichert. Jedes Dateisystem besitzt genau ein Wurzelverzeichnis, das so genannte Root-Directory. Dieses Wurzelverzeichnis kann weitere Verzeichnisse enthalten. Ein Dateisystem wird als Wurzeldateisystem festgelegt, und jedes weitere Dateisystem wird unter dem Wurzeldateisystem eingehangen. Daher scheint jedes Verzeichnis, unabhängig von der Anzahl der Platten, auf der selben Platte zu liegen. Betrachten wir die drei Dateisysteme A, B und C. Jedes Dateisystem besitzt ein eigenes Wurzelverzeichnis, das zwei andere Verzeichnisse enthält: A1, A2, B1, B2, C1 und C2. Das Wurzeldateisystem soll A sein. &man.ls.1; zeigt darin die beiden Verzeichnisse A1 und A2 an. Der Verzeichnisbaum sieht wie folgt aus: / | +--- A1 | `--- A2 Ein Dateisystem wird in einem Verzeichnis eines anderen Dateisystems eingehangen. Wir hängen nun das Dateisystem B in das Verzeichnis A1 ein. Das Wurzelverzeichnis von B ersetzt nun das Verzeichnis A1 und die Verzeichnisse des Dateisystems B werden sichtbar: / | +--- A1 | | | +--- B1 | | | `--- B2 | `--- A2 Jede Datei in den Verzeichnissen B1 oder B2 kann über den Pfad /A1/B1 oder /A1/B2 erreicht werden. Dateien aus dem Verzeichnis /A1 sind jetzt verborgen. Wenn das Dateisystem B wieder abgehangen wird (umount), erscheinen die verborgenen Dateien wieder. Wenn das Dateisystem B unter dem Verzeichnis A2 eingehangen würde, sähe der Verzeichnisbaum so aus: / | +--- A1 | `--- A2 | +--- B1 | `--- B2 Die Dateien des Dateisystems B wären unter den Pfaden /A2/B1 und /A2/B2 erreichbar. Dateisysteme können übereinander eingehangen werden. Der folgende Baum entsteht, wenn im letzten Beispiel das Dateisystem C in das Verzeichnis B1 des Dateisystems B eingehangen wird: / | +--- A1 | `--- A2 | +--- B1 | | | +--- C1 | | | `--- C2 | `--- B2 C könnte auch im Verzeichnis A1 eingehangen werden: / | +--- A1 | | | +--- C1 | | | `--- C2 | `--- A2 | +--- B1 | `--- B2 Sie können sogar mit nur einem großen Dateisystem auskommen. Dies hat mehrere Nachteile und einen Vorteil. Vorteile mehrerer Dateisysteme Die Dateisysteme können mit unterschiedlichen Optionen (mount options) eingehangen werden. Beispielsweise kann das Wurzeldateisystem schreibgeschützt eingehangen werden, sodass es für Benutzer nicht möglich ist, versehentlich kritische Dateien zu editieren oder zu löschen. Von Benutzern beschreibbare Dateisysteme wie /home können mit der Option nosuid eingehangen werden, wenn sie von anderen Dateisystemen getrennt sind. Die SUID- und GUID-Bits verlieren auf solchen Dateisystemen ihre Wirkung und die Sicherheit des Systems kann dadurch erhöht werden. Die Lage von Dateien im Dateisystem wird, abhängig vom Gebrauch des Dateisystems, automatisch von &os; optimiert. Ein Dateisystem mit vielen kleinen Dateien, die häufig geschrieben werden, wird anders behandelt als ein Dateisystem mit wenigen großen Dateien. Mit nur einem Dateisystem ist diese Optimierung unmöglich. In der Regel übersteht ein &os;-Dateisystem auch einen Stromausfall. Allerdings kann ein Stromausfall zu einem kritischen Zeitpunkt das Dateisystem beschädigen. Wenn die Daten über mehrere Dateisysteme verteilt sind, lässt sich das System mit hoher Wahrscheinlichkeit noch starten. Dies erleichtert das Zurückspielen von Datensicherungen. Vorteil eines einzelnen Dateisystems Dateisysteme haben eine festgelegte Größe. Es kann passieren, dass Sie eine Partition vergrößern müssen. Dies ist nicht leicht: Sie müssen die Daten sichern, das Dateisystem vergrößert anlegen und die gesicherten Daten zurückspielen. &os; kennt den Befehl &man.growfs.8;, mit dem man Dateisysteme im laufenden Betrieb vergrößern kann. Dateisysteme befinden sich in Partitionen (damit sind nicht die normalen &ms-dos;-Partitionen gemeint). Jede Partition wird mit einem Buchstaben von a bis h bezeichnet und kann nur ein Dateisystem enthalten. Dateisysteme können daher über ihren Mount-Point, den Punkt an dem sie eingehangen sind, oder den Buchstaben der Partition, in der sie liegen, identifiziert werden. &os; benutzt einen Teil der Platte für den Swap-Bereich, um virtuellen Speicher zur Verfügung zu stellen. Dadurch kann der Rechner Anwendungen mehr Speicher zur Verfügung stellen als tatsächlich eingebaut ist. Wenn der Speicher knapp wird, kann &os; nicht benutzte Daten in den Swap-Bereich auslagern. Die ausgelagerten Daten können später wieder in den Speicher geholt werden (dafür werden dann andere Daten ausgelagert). Für einige Partitionen gelten besondere Konventionen: Partition Konvention a Enthält normalerweise das Wurzeldateisystem. b Enthält normalerweise den Swap-Bereich. c Ist normalerweise genauso groß wie die Slice in der die Partition liegt. Werkzeuge, die auf der kompletten Slice arbeiten, wie ein Bad-Block-Scanner, können so die c-Partition benutzen. Für gewöhnlich wird in dieser Partition kein Dateisystem angelegt. d Früher hatte die d-Partition eine besondere Bedeutung. Heute ist dies nicht mehr der Fall und die Partition d kann wie jede andere Partition auch verwendet werden. In &os; werden Festplatten in Slices, welche in &windows; als Partitionen bekannt sind, aufgeteilt und von 1 bis 4 durchnummeriert. Diese werden dann in Partitionen unterteilt, welche wiederum Dateisysteme enthalten und mit Buchstaben benannt werden. Slices Partitionen dangerously dedicated Die Slice-Nummern werden mit vorgestelltem s hinter den Gerätenamen gestellt: da0s1 ist die erste Slice auf dem ersten SCSI-Laufwerk. Auf einer Festplatte gibt es höchstens vier Slices. In einer Slice des passenden Typs kann es weitere logische Slices geben. Diese erweiterten Slices werden ab fünf durchnummeriert: ad0s5 ist die erste erweiterte Slice auf einer IDE-Platte. Diese Geräte werden von Dateisystemen benutzt, die sich in einer kompletten Slice befinden müssen. Slices, dangerously dedicated-Festplatten und andere Platten enthalten Partitionen, die mit Buchstaben von a bis h bezeichnet werden. Der Buchstabe wird an den Gerätenamen gehangen: da0a ist die a-Partition des ersten da-Laufwerks. Dieses Laufwerk ist dangerously dedicated. ad1s3e ist die fünfte Partition in der dritten Slice der zweiten IDE-Platte. Schließlich wird noch jede Festplatte des Systems eindeutig bezeichnet. Der Name einer Festplatte beginnt mit einem Code, der den Typ der Platte bezeichnet. Es folgt eine Nummer, die angibt, um welche Festplatte es sich handelt. Anders als bei Slices werden Festplatten von Null beginnend durchnummeriert. Gängige Festplatten-Namen sind in - aufgeführt. + aufgeführt. Wenn Sie eine Partition angeben, beinhaltet das den Plattennamen, s, die Slice-Nummer und den Buchstaben der Partition. Einige Beispiele finden Sie in . Der Aufbau einer Festplatte wird in dargestellt. Bei der Installation von &os; legen Sie Slices auf der Festplatte an, erstellen Partitionen für &os; innerhalb der Slice, erstellen ein Dateisystem oder Auslagerungsbereiche und entscheiden, welche Dateisysteme wo eingehangen werden. - +
Laufwerk-Codes - Code - - Bedeutung + Laufwerkstyp + Gerätename - ad - - ATAPI (IDE) Festplatte + IDE- und + SATA-Festplatten + ad oder + ada - da + SCSI-Festplatten und + USB-Speichermedien + da + - SCSI-Festplatte + + IDE- und + SATA-CD-ROM-Laufwerke + acd oder + cd - acd + SCSI-CD-ROM-Laufwerke + cd + - ATAPI (IDE) CD-ROM + + Diskettenlaufwerke + fd - cd + Verschiedene proprietäre + CD-ROM-Laufwerke + mcd für Mitsumi + CD-ROM und scd + für Sony CD-ROM + - SCSI-CD-ROM + + SCSI-Bandlaufwerke + sa - fd + IDE-Bandlaufwerke + ast + - Disketten-Laufwerk + + RAID-Laufwerke + Beispiele sind aacd für + &adaptec; AdvancedRAID, mlxd für + &mylex;, amrd für AMI &megaraid;, + idad für Compaq Smart RAID, + twed für &tm.3ware; RAID.
Namen von Platten, Slices und Partitionen Name Bedeutung ad0s1a Die erste Partition (a) in der ersten Slice (s1) der ersten IDE-Festplatte (ad0). da1s2e Die fünfte Partition (e) der zweiten Slice (s2) auf der zweiten SCSI-Festplatte (da1). Aufteilung einer Festplatte Das folgende Diagramm zeigt die Sicht von &os; auf die erste IDE-Festplatte des Systems. Die Platte soll 4 GB groß sein und zwei Slices (&ms-dos;-Partitionen) mit je 2 GB besitzen. Die erste Slice enthält ein &ms-dos;-Laufwerk (C:), die zweite Slice wird von &os; benutzt. Die &os;-Installation in diesem Beispiel verwendet drei Datenpartitionen und einen Auslagerungsbereich. Jede der drei Partitionen enthält ein Dateisystem. Das Wurzeldateisystem ist die a-Partition. In der e-Partition befindet sich der /var-Verzeichnisbaum und in der f-Partition befindet sich der Verzeichnisbaum unterhalb von /usr. .-----------------. --. | | | | DOS / Windows | | : : > First slice, ad0s1 : : | | | | :=================: ==: --. | | | Partition a, mounted as / | | | > referred to as ad0s2a | | | | | :-----------------: ==: | | | | Partition b, used as swap | | | > referred to as ad0s2b | | | | | :-----------------: ==: | Partition c, no | | | Partition e, used as /var > file system, all | | > referred to as ad0s2e | of FreeBSD slice, | | | | ad0s2c :-----------------: ==: | | | | | : : | Partition f, used as /usr | : : > referred to as ad0s2f | : : | | | | | | | | --' | `-----------------' --'
Anhängen und Abhängen von Dateisystemen Ein Dateisystem wird am besten als ein Baum mit der Wurzel / veranschaulicht. /dev, /usr, und die anderen Verzeichnisse im Rootverzeichnis sind Zweige, die wiederum eigene Zweige wie /usr/local haben können. Root-Dateisystem Es gibt verschiedene Gründe, bestimmte dieser Verzeichnisse auf eigenen Dateisystemen anzulegen. /var enthält log/, spool/ sowie verschiedene andere temporäre Dateien und kann sich daher schnell füllen. Es empfiehlt sich, /var von / zu trennen, da es schlecht ist, wenn das Root-Dateisystem voll läuft. Ein weiterer Grund bestimmte Verzeichnisbäume auf andere Dateisysteme zu legen, ist gegeben, wenn sich die Verzeichnisbäume auf gesonderten physikalischen oder virtuellen Platten, wie Network File System oder CD-ROM-Laufwerken, befinden. Die <filename>fstab</filename> Datei Dateisysteme fstab Während des Boot-Prozesses () werden in /etc/fstab aufgeführte Verzeichnisse, sofern sie nicht mit der Option versehen sind, automatisch angehangen. Diese Datei enthält Einträge in folgendem Format: device /mount-point fstype options dumpfreq passno device Ein existierender Gerätename wie in beschrieben. mount-point Ein existierendes Verzeichnis, auf dem das Dateisystem gemountet wird. fstype Der Typ des Dateisystems, der an &man.mount.8; weitergegeben wird. &os;s Standarddateisystem ist ufs. options Entweder für beschreibbare Dateisysteme oder für schreibgeschützte Dateisysteme, gefolgt von weiteren benötigten Optionen. Eine häufig verwendete Option ist für Dateisysteme, die während der normalen Bootsequenz nicht angehangen werden sollen. Weitere Optionen finden sich in &man.mount.8;. dumpfreq Wird von &man.dump.8; benutzt, um bestimmen zu können, welche Dateisysteme gesichert werden müssen. Fehlt der Wert, wird 0 angenommen. passno Bestimmt die Reihenfolge, in der die Dateisysteme überprüft werden sollen. Für Dateisysteme, die übersprungen werden sollen, ist passno auf 0 zu setzen. Für das Root-Dateisystem, das vor allen anderen überprüft werden muss, sollte der Wert von passno 1 betragen. Allen anderen Dateisystemen sollten Werte größer 1 zugewiesen werden. Wenn mehrere Dateisysteme den gleichen Wert besitzen, wird &man.fsck.8; versuchen, diese parallel zu überprüfen. Lesen Sie &man.fstab.5; für weitere Informationen über das Format von /etc/fstab und dessen Optionen. Verwendung von &man.mount.8; Dateisysteme anhängen Dateisysteme werden mit &man.mount.8; eingehängt. In der grundlegenden Form wird es wie folgt benutzt: &prompt.root; mount device mountpoint Dieser Befehl bietet viele Optionen, die in &man.mount.8; beschrieben werden. Die am häufigsten verwendeten Optionen sind: Optionen von <command>mount</command> Hängt alle Dateisysteme aus /etc/fstab an. Davon ausgenommen sind Dateisysteme, die mit noauto markiert sind, die mit der Option ausgeschlossen wurden und Dateisysteme, die schon angehangen sind. Führt alles bis auf den mount-Systemaufruf aus. Nützlich ist diese Option in Verbindung mit . Damit wird angezeigt, was &man.mount.8; tatsächlich versuchen würde, um das Dateisystem anzuhängen. Erzwingt das Anhängen eines unsauberen Dateisystems (riskant) oder die Rücknahme des Schreibzugriffs, wenn der Status des Dateisystems von beschreibbar auf schreibgeschützt geändert wird. Hängt das Dateisystem schreibgeschützt ein. Dies kann auch durch Angabe von erreicht werden. fstype Hängt das Dateisystem mit dem angegebenen Typ an, oder hängt nur Dateisysteme mit dem angegebenen Typ an, wenn angegeben wurde. ufs ist das Standarddateisystem. Aktualisiert die Mountoptionen des Dateisystems. Geschwätzig sein. Hängt das Dateisystem beschreibbar an. Die folgenden Optionen können durch eine Kommata separierte Liste an übergeben werden: nosuid SetUID und SetGID Bits werden auf dem Dateisystem nicht beachtet. Dies ist eine nützliche Sicherheitsfunktion. Verwendung von &man.umount.8; Dateisysteme abhängen &man.umount.8; hängt ein Dateisysstem ab. Dieser Befehl akzeptiert als Parameter entweder einen Mountpoint, einen Gerätenamen, oder . Jede Form akzeptiert , um das Abhängen zu erzwingen, und , um etwas geschwätziger zu sein. Seien Sie bitte vorsichtig mit , da der Computer abstürzen kann oder es können Daten auf dem Dateisystem beschädigt werden. Um alle Dateisysteme abzuhängen, oder nur diejenigen, die mit gelistet werden, wird oder benutzt. Beachten Sie, dass das Root-Dateisystem nicht aushängt. Prozesse und Dämonen &os; ist ein Multitasking-Betriebssystem. Jedes Programm, das zu irgendeiner Zeit läuft wird als Prozess bezeichnet. Jedes laufende Kommando startet mindestens einen neuen Prozess. Dazu gibt es eine Reihe von Systemprozessen, die von &os; ausgeführt werden. Jeder Prozess wird durch eine eindeutige Nummer identifiziert, die Prozess-ID (PID) genannt wird. Prozesse haben ebenso wie Dateien einen Besitzer und eine Gruppe, die festlegen, welche Dateien und Geräte der Prozess benutzen kann. Die meisten Prozesse haben auch einen Elternprozess, der sie gestartet hat. Beispielsweise ist die Shell ein Prozess. Jedes in Shell gestartete Kommando ist dann ein neuer Prozess, der die Shell als Elternprozess besitzt. Die Ausnahme hiervon ist ein spezieller Prozess namens &man.init.8;, der beim booten immer als erstes gestartet wird und der immer die PID 1 hat. Manche Programme erwarten keine Eingaben vom Benutzer und lösen sich bei erster Gelegenheit von ihrem Terminal. Ein Webserver zum Beispiel antwortet auf Web-Anfragen und nicht auf Benutzereingaben. Mail-Server sind ein weiteres Beispiel für diesen Typ von Anwendungen. Diese Programme sind als Dämonen bekannt. Der Begriff Dämon stammt aus der griechischen Mythologie und bezeichnet ein Wesen, das weder gut noch böse ist und welches unsichtbar nützliche Aufgaben verrichtet. Deshalb ist das BSD Maskottchen dieser fröhlich aussehende Dämon mit Turnschuhen und Dreizack. Programme, die als Dämon laufen, werden entsprechend einer Konvention mit einem d am Ende benannt. BIND steht beispielsweise für Berkeley Internet Name Domain, das tatsächlich laufende Programm heißt aber named. Der Apache Webserver wird httpd genannt und der Druckerspool-Dämon heißt &man.lpd.8;. Dies ist allerdings nur eine Konvention. Der Dämon der Anwendung Sendmail heißt beispielsweise sendmail und nicht maild. Prozesse beobachten Um die Prozesse auf dem System zu sehen, benutzen Sie &man.ps.1; und &man.top.1;. Eine statische Liste der laufenden Prozesse, deren PIDs, Speicherverbrauch und die Kommandozeile, mit der sie gestartet wurden, erhalten Sie mit &man.ps.1;. Um alle laufenden Prozesse in einer Anzeige zu sehen, die alle paar Sekunden aktualisiert wird, so dass Sie interaktiv sehen können was der Computer macht, benutzen Sie &man.top.1;. In der Voreinstellung zeigt &man.ps.1; nur die laufenden Prozesse, die dem Benutzer gehören. Zum Beispiel: &prompt.user; ps PID TT STAT TIME COMMAND 8203 0 Ss 0:00.59 /bin/csh 8895 0 R+ 0:00.00 ps Die Ausgabe von &man.ps.1; ist in einer Anzahl von Spalten organisiert. Die PID Spalte zeigt die Prozess-ID. PIDs werden von 1 beginnend bis 99999 zugewiesen und fangen wieder von vorne an. Ist eine PID bereits vergeben, wird diese allerdings nicht erneut vergeben. Die Spalte TT zeigt den Terminal, auf dem das Programm läuft. STAT zeigt den Status des Programms und TIME gibt die Zeit an, die das Programm auf der CPU gelaufen ist. Dies ist nicht unbedingt die Zeit, die seit dem Start des Programms vergangen ist, da die meisten Programme hauptsächlich auf bestimmte Dinge warten, bevor sie wirklich CPU-Zeit verbrauchen. Unter der Spalte COMMAND findet sich schließlich die Kommandozeile, mit der das Programm gestartet wurde. &man.ps.1; besitzt viele Optionen, um die angezeigten Informationen zu beeinflussen. Eine nützliche Kombination ist auxww. zeigt Information über alle laufenden Prozesse aller Benutzer. Der Name des Besitzers des Prozesses, sowie Informationen über den Speicherverbrauch werden mit angezeigt. zeigt auch Dämonen-Prozesse an, und veranlasst &man.ps.1; die komplette Kommandozeile für jeden Befehl anzuzeigen, anstatt sie abzuschneiden, wenn sie zu lang für die Bildschirmausgabe wird. Die Ausgabe von &man.top.1; sieht ähnlich aus: &prompt.user; top last pid: 9609; load averages: 0.56, 0.45, 0.36 up 0+00:20:03 10:21:46 107 processes: 2 running, 104 sleeping, 1 zombie CPU: 6.2% user, 0.1% nice, 8.2% system, 0.4% interrupt, 85.1% idle Mem: 541M Active, 450M Inact, 1333M Wired, 4064K Cache, 1498M Free ARC: 992M Total, 377M MFU, 589M MRU, 250K Anon, 5280K Header, 21M Other Swap: 2048M Total, 2048M Free PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND 557 root 1 -21 r31 136M 42296K select 0 2:20 9.96% Xorg 8198 dru 2 52 0 449M 82736K select 3 0:08 5.96% kdeinit4 8311 dru 27 30 0 1150M 187M uwait 1 1:37 0.98% firefox 431 root 1 20 0 14268K 1728K select 0 0:06 0.98% moused 9551 dru 1 21 0 16600K 2660K CPU3 3 0:01 0.98% top 2357 dru 4 37 0 718M 141M select 0 0:21 0.00% kdeinit4 8705 dru 4 35 0 480M 98M select 2 0:20 0.00% kdeinit4 8076 dru 6 20 0 552M 113M uwait 0 0:12 0.00% soffice.bin 2623 root 1 30 10 12088K 1636K select 3 0:09 0.00% powerd 2338 dru 1 20 0 440M 84532K select 1 0:06 0.00% kwin 1427 dru 5 22 0 605M 86412K select 1 0:05 0.00% kdeinit4 Die Ausgabe ist in zwei Abschnitte geteilt. In den ersten fünf Kopfzeilen finden sich die zuletzt zugeteilte PID, die Systemauslastung (engl. load average), die Systemlaufzeit (die Zeit seit dem letzten Reboot) und die momentane Zeit. Die weiteren Zahlen im Kopf beschreiben wie viele Prozesse momentan laufen, wie viel Speicher und Swap verbraucht wurde und wie viel Zeit das System in den verschiedenen CPU-Modi verbringt. Wenn das ZFS-Kernelmodul geladen ist, dann zeigt die Zeile ARC, wie viele Daten aus dem Cache gelesen wurden. Darunter befinden sich einige Spalten mit ähnlichen Informationen wie in der Ausgabe von &man.ps.1;, beispielsweise die PID, den Besitzer, die verbrauchte CPU-Zeit und das Kommando, das den Prozess gestartet hat. &man.top.1; zeigt in zwei Spalten den Speicherverbrauch des Prozesses an. Die erste Spalte gibt den gesamten Speicherverbrauch des Prozesses an, in der zweiten Spalte wird der aktuelle Verbrauch angegeben. Die Anzeige wird von &man.top.1; automatisch alle zwei Sekunden aktualisiert. Ein anderer Intervall kann mit spezifiziert werden. Stoppen von Prozessen Eine Möglichkeit mit einem laufenden Prozess zu kommunizieren, ist über das Versenden von Signalen mittels &man.kill.1;. Es gibt eine Reihe von verschiedenen Signalen. Manche haben eine feste Bedeutung, während andere in der Dokumentation der Anwendung beschrieben sind. Ein Benutzer kann ein Signal nur an einen Prozess senden, welcher ihm gehört. Wird versucht ein Signal an einen Prozess eines anderen Benutzers zu senden, resultiert dies in einem Zugriffsfehler mangels fehlender Berechtigungen. Die Ausnahme ist der root-Benutzer, welcher jedem Prozess Signale senden kann. &os; kann auch ein Signal an einen Prozess senden. Wenn eine Anwendung schlecht geschrieben ist und auf Speicher zugreift, auf den sie nicht zugreifen soll, so sendet &os; dem Prozess das Segmentation Violation Signal (SIGSEGV). Wenn eine Anwendung programmiert wurde, den &man.alarm.3; Systemaufruf zu benutzen, um nach einiger Zeit benachrichtigt zu werden, bekommt sie das Alarm-Signal (SIGALRM) gesendet. Zwei Signale können benutzt werden, um einen Prozess zu stoppen: SIGTERM und SIGKILL. SIGTERM fordert den Prozess höflich zum Beenden auf. Der Prozess kann das Signal abfangen und hat dann Gelegenheit Logdateien zu schließen und die Aktion, die er durchführte, abzuschließen. In manchen Situationen kann der Prozess SIGTERM ignorieren, wenn er eine Aktion durchführt, die nicht unterbrochen werden darf. SIGKILL kann von keinem Prozess ignoriert werden. Wird einem Prozess SIGKILL geschickt, dann wird &os; diesen sofort beenden Es gibt Fälle, in denen ein Prozess nicht unterbrochen werden kann. Wenn ein Prozess zum Beispiel eine Datei von einem anderen Rechner auf dem Netzwerk liest und dieser Rechner nicht erreichbar ist, dann ist der Prozess nicht zu unterbrechen. Wenn der Prozess den Lesezugriff nach einem Timeout von typischerweise zwei Minuten aufgibt, dann wird er beendet. . Andere häufig verwendete Signale sind SIGHUP, SIGUSR1 und SIGUSR2. Da diese Signale für allgemeine Zwecke vorgesehen sind, werden verschiedene Anwendungen unterschiedlich auf diese Signale reagieren. Ändern Sie beispielsweise die Konfiguration eines Webservers, so muss dieser angewiesen werden, seine Konfiguration neu zu lesen. Ein Neustart von httpd würde dazu führen, dass der Server für kurze Zeit nicht erreichbar ist. Senden Sie dem Dämon stattdessen das SIGHUP-Signal. Es sei erwähnt, dass verschiedene Dämonen sich anders verhalten. Lesen Sie bitte die Dokumentation des entsprechenden Dämonen um zu überprüfen, ob der Dämon bei einem SIGHUP die gewünschten Ergebnisse erzielt. Verschicken von Signalen Das folgende Beispiel zeigt, wie Sie &man.inetd.8; ein Signal schicken. Die Konfigurationsdatei von &man.inetd.8; ist /etc/inetd.conf. Diese Konfigurationsdatei liest &man.inetd.8; ein, wenn er SIGHUP empfängt. Suchen Sie mit &man.pgrep.1; die PID des Prozesses, dem Sie ein Signal schicken wollen. In diesem Beispiel ist die PID von &man.inetd.8; 198: &prompt.user; pgrep -l inetd 198 inetd -wW Benutzen Sie &man.kill.1;, um ein Signal zu senden. Da &man.inetd.8; dem Benutzer root gehört, müssen Sie zuerst mit &man.su.1; root werden: &prompt.user; su Password: &prompt.root; /bin/kill -s HUP 198 &man.kill.1; wird, wie andere &unix; Kommandos auch, keine Ausgabe erzeugen, wenn das Kommando erfolgreich war. Wird versucht, einem Prozess der nicht dem Benutzer gehört, ein Signal zu senden, dann wird die Meldung kill: PID: Operation not permitted ausgegeben. Ein Tippfehler bei der Eingabe der PID führt dazu, dass das Signal an einen falschen Prozess gesendet wird, was zu negativen Ergebnissen führen kann, oder das Signal wird an eine PID gesendet die derzeit nicht in Gebrauch ist, was zu dem Fehler kill: PID: No such process führt. Warum sollte man <command>/bin/kill</command> benutzen? Viele Shells stellen kill als internes Kommando zur Verfügung, das heißt die Shell sendet das Signal direkt, anstatt /bin/kill zu starten. Beachten Sie, dass die unterschiedlichen Shells eine andere Syntax benutzen, um die Namen der Signale anzugeben. Anstatt jede Syntax zu lernen, kann es einfacher sein, /bin/kill direkt aufzurufen. Beim Versenden von anderen Signalen, ersetzen Sie TERM oder KILL in der Kommandozeile mit dem Namen des Signals. Das zufällige Beenden eines Prozesses kann gravierende Auswirkungen haben. Insbesondere &man.init.8;, mit der PID 1, ist ein Spezialfall. /bin/kill -s KILL 1 ist ein schneller, jedoch nicht empfohlener Weg, das System herunterzufahren. Überprüfen Sie die Argumente von &man.kill.1; immer zweimal bevor Sie Return drücken. Shells Shells Kommandozeile Eine Shell stellt eine Kommandozeilen-Schnittstelle zur Interaktion mit dem Betriebssystem zur Verfügung. Sie empfängt Befehle von einem Eingabekanal und führt diese aus. Viele Shells bieten eingebaute Funktionen, die die tägliche Arbeit erleichtern, beispielsweise eine Dateiverwaltung, die Vervollständigung von Dateinamen (Globbing), Kommandozeilen-Editor, sowie Makros und Umgebungsvariablen. &os; enthält einige Shells, darunter die Bourne Shell (&man.sh.1;) und die verbesserte C-Shell (&man.tcsh.1;). Weitere Shells, wie zsh oder bash, befinden sich in der Ports-Sammlung. Die verwendete Shell ist letztlich eine Frage des Geschmacks. Ein C-Programmierer, findet vielleicht eine C-artige Shell wie &man.tcsh.1; angenehmer. Ein &linux;-Benutzer bevorzugt vielleicht bash. Jede Shell hat ihre speziellen Eigenschaften, die mit der bevorzugten Arbeitsumgebung des Benutzers harmonieren kann oder nicht. Deshalb stehen mehrere Shells zur Auswahl. Ein verbreitetes Merkmal in Shells ist die Dateinamen-Vervollständigung. Nachdem der Benutzer einige Buchstaben eines Kommandos oder eines Dateinamen eingeben hat, vervollständigt die Shell den Rest durch drücken der Tab-Taste. Angenommen, Sie haben zwei Dateien foobar und football. Um foobar zu löschen, kann der Benutzer rm foo eingeben und Tab drücken um den Dateinamen zu vervollständigen. Die Shell wird lediglich rm foo anzeigen. Sie konnte den Dateinamen nicht vervollständigen, da sowohl foobar als auch football mit foo anfangen. Einige Shells geben einen Signalton aus, oder zeigen alle Möglichkeiten an, wenn mehr als ein Name mit dem gegebenen Muster übereinstimmt. Der Benutzer muss dann weitere Zeichen eingeben, damit die Shell den gewünschten Dateinamen bestimmen kann. Durch Eingabe von t und erneutes Drücken von Tab ist die Shell in der Lage, den gewünschten Dateinamen zu vervollständigen. Umgebungsvariablen Ein weiteres Merkmal der Shell ist der Gebrauch von Umgebungsvariablen. Dies sind veränderbare Schlüsselpaare im Umgebungsraum der Shell, die jedes von der Shell aufgerufene Programm lesen kann. Daher enthält der Umgebungsraum viele Konfigurationsdaten für Programme. zeigt verbreitete Umgebungsvariablen und deren Bedeutung. Beachten Sie, dass die Namen der Umgebungsvariablen immer in Großbuchstaben geschrieben sind: Gebräuchliche Umgebungsvariablen Variable Beschreibung USER Name des angemeldeten Benutzers. PATH Liste mit Verzeichnissen (getrennt durch Doppelpunkt) zum Suchen nach Programmen. DISPLAY Der Name des Xorg-Bildschirms, auf dem Ausgaben erfolgen sollen. SHELL Die aktuelle Shell. TERM Name des Terminaltyps des Benutzers. Benutzt, um die Fähigkeiten des Terminals zu bestimmen. TERMCAP Datenbankeintrag der Terminal Escape Codes, benötigt um verschieden Terminalfunktionen auszuführen. OSTYPE Typ des Betriebssystems. MACHTYPE Die CPU-Architektur des Systems. EDITOR Vom Benutzer bevorzugter Text-Editor. PAGER Vom Benutzer bevorzugter Text-Betrachter. MANPATH Liste mit Verzeichnissen (getrennt durch Doppelpunkt) zum Suchen nach Manualpages.
Shells Bourne Shell Das Setzen von Umgebungsvariablen unterscheidet sich von Shell zu Shell. In &man.tcsh.1; und &man.csh.1; wird dazu setenv benutzt. &man.sh.1; und bash benutzen export um Umgebungsvariablen zu setzen. Dieses Beispiel für die &man.tcsh.1;-Shell setzt die Variable EDITOR auf /usr/local/bin/emacs: &prompt.user; setenv EDITOR /usr/local/bin/emacs Der entsprechende Befehl für bash wäre: &prompt.user; export EDITOR="/usr/local/bin/emacs" Um eine Umgebungsvariable zu expandieren, geben Sie in der Kommandozeile das Zeichen $ vor dessen Namen ein. Zum Beispiel gibt echo $TERM den aktuellen Wert von$TERM aus. Shells behandeln Spezialzeichen, so genannte Metazeichen, als besondere Darstellungen für Daten. Das häufigste Zeichen ist *, das eine beliebige Anzahl Zeichen in einem Dateinamen repräsentiert. Metazeichen können zur Vervollständigung von Dateinamen (Globbing) benutzt werden. Beispielsweise liefert echo * nahezu das gleiche wie ls, da die Shell alle Dateinamen die mit * übereinstimmen, an echo weitergibt. Um zu verhindern, dass die Shell ein Sonderzeichen interpretiert, schützt man es, indem man einen Backslash (\) voranstellt. Zum Beispiel zeigt echo $TERM die Einstellung des Terminals an, wohingegen echo \$TERM einfach die Zeichenfolge $TERM ausgibt. Ändern der Shell Der einfachste Weg die Standard Shell zu ändern, ist chsh zu benutzen. chsh startet den Editor, welcher durch die Umgebungsvariable EDITOR gesetzt ist. Standardmäßig ist dies &man.vi.1;. Tragen Sie in die Zeile die mit Shell: beginnt, den absoluten Pfad der neuen Shell ein. Alternativ setzt chsh -s die Shell, ohne dabei einen Editor aufzurufen. Um die Shell zum Beispiel auf bash zu ändern, geben Sie folgenden Befehl ein: &prompt.user; chsh -s /usr/local/bin/bash Die neue Shell muss in /etc/shells aufgeführt sein. Wurde die Shell aus der &os; Ports-Sammlung installiert, so wie in beschrieben, sollte sie automatisch zu dieser Datei hinzugefügt worden sein. Wenn der Eintrag fehlt, nutzen Sie folgenden Befehl, und ersetzen Sie den Pfad mit dem Pfad zur gewünschten Shell: &prompt.root; echo /usr/local/bin/bash >> /etc/shells Danach kann &man.chsh.1; erneut aufgerufen werden. Fortgeschrittene Shell Techniken Tom Rhodes Geschrieben von Die &unix;-Shell ist nicht nur ein Kommandozeileninterpreter, sie ist ein leistungsfähiges Werkzeug, das Benutzern die Ausführung von Befehlen ermöglicht. Es kann die Ein- und Ausgabe umleiten und Befehle miteinander verketten, um die finale Ausgabe zu verbessern. Diese Funktionalität, gepaart mit den eingebauten Befehlen, bietet dem Benutzer eine Umgebung, welche die Effizienz erheblich steigern kann. Als Redirection bezeichnet man die Umleitung der Ein- oder Ausgabe in einen anderen Befehl oder Datei. Um beispielsweise die Ausgabe des Befehls &man.ls.1; in eine Datei zu schreiben, muss die Ausgabe umgeleitet werden: &prompt.user; ls > Verzeichnis_Ausgabe.txt Die Datei Verzeichnis_Ausgabe.txt enthält nun den Verzeichnisinhalt. Einige Befehle, wie beispielsweise &man.sort.1;, können verwendet werden um von der Eingabe zu lesen. Wenn Sie die Ausgabe sortieren möchten, müssen Sie die Eingabe umleiten: &prompt.user; sort < Verzeichnis_Ausgabe.txt Die Eingabe wird sortiert und auf dem Bildschirm ausgegeben. Um diese Ausgabe wiederum in eine Datei umzuleiten, kann die Ausgabe von &man.sort.1; umgeleitet werden: &prompt.user; sort < Verzeichnis_Ausgabe.txt > Sortierte_Ausgabe.txt In den bisherigen Beispielen wurden für die Umleitung Dateideskriptoren verwendet. Jedes &unix;-System verfügt über drei Dateideskriptoren: Standardeingabe (stdin), Standardausgabe (stdout) und Stardardfehlerausgabe (stderr). Jeder Deskriptor hat einen bestimmten Zweck. Die Eingabe könnte von einer Tastatur, einer Maus oder einem anderen Eingabegerät stammen. Die Ausgabe könnte der Bildschirm oder ein Drucker sein. Die Standardfehlerausgabe wird zur Diagnose und für Fehlermeldungen verwendet. Alle drei Deskriptoren arbeiten I/O basiert und werden häufig als Streams bezeichnet. Die Verwendung von Deskriptoren erlaubt es der Shell, die Ein- und Ausgabe von verschiedenen Kommandos umzuleiten und zu teilen. Eine weitere Möglichkeit zur Umleitung bietet der Pipe-Operator. Der &unix; Pipe-Operator | wird verwendet, um die Ausgabe eines Kommandos an ein anderes Programm zu übergeben. Grundsätzlich bedeutet dies, dass die Standardausgabe eines Programms als Standardeingabe für ein weiteres Programm verwendet wird. Ein Beispiel: &prompt.user; cat Verzeichnis_Auflistung.txt | sort | less In diesem Beispiel wird der Inhalt von Verzeichnis_Auflistung.txt sortiert und die Ausgabe an &man.less.1; übergeben. Dies erlaubt es dem Benutzer, die Ausgabe Schritt für Schritt und im eigenen Tempo zu betrachten.
Text-Editoren Text Editoren Editoren Die meiste Konfiguration unter &os; wird durch das Editieren von Textdateien erledigt. Deshalb ist es eine gute Idee, mit einem Texteditor vertraut zu werden. &os; hat ein paar davon im Basissystem und sehr viel mehr in der Ports-Sammlung. &man.ee.1; Text Editoren ee Ein einfach zu erlernender Editor ist &man.ee.1;, was für easy editor steht. Um diesen Editor zu starten, gibt man in der Kommandozeile ee filename ein, wobei filename den Namen der zu editierenden Datei darstellt. Einmal im Editor, finden sich alle Editor-Funktionen oben im Display aufgelistet. Das Einschaltungszeichen (^) steht für die Ctrl (oder Strg) Taste, mit ^e ist also die Tastenkombination Ctrle gemeint. Um &man.ee.1; zu verlassen, drücken Sie Esc und wählen dann im Hauptmenü aus. Der Editor fragt nach, ob Sie speichern möchten, wenn die Datei verändert wurde. vi Text Editoren emacs &os; verfügt über leistungsfähigere Editoren wie &man.vi.1; als Teil des Basissystems. Andere Editoren wie editors/emacs und editors/vim sind Teil der Ports-Sammlung. Diese Editoren bieten höhere Funktionalität, jedoch auf Kosten einer etwas schwierigeren Erlernbarkeit. Das Erlernen eines leistungsfähigeren Editors, wie vim oder Emacs, kann auf lange Sicht Zeit einsparen. Viele Anwendungen, die Dateien verändern oder Texteingabe erwarten, werden automatisch einen Texteditor öffnen. Um den Standardeditor zu ändern, wird die Umgebungsvariable EDITOR gesetzt, wie im Abschnitt beschrieben. Geräte und Gerätedateien Der Begriff Gerät wird meist in Verbindung mit Hardware wie Laufwerken, Druckern, Grafikkarten oder Tastaturen gebraucht. Der Großteil der Meldungen, die beim Booten von &os; angezeigt werden, beziehen sich auf gefundene Geräte. Eine Kopie dieser Bootmeldungen wird in /var/run/dmesg.boot gespeichert. Jedes Gerät verfügt über einen Gerätenamen und Gerätenummer. Zum Beispiel steht acd0 für das erste IDE CD-ROM Laufwerk, während kbd0 die Tastatur repräsentiert. Auf die meisten Geräte wird unter &os; über spezielle Gerätedateien im /dev Verzeichnis zugegriffen. Manualpages Manualpages Manualpages Die umfassendste Dokumentation rund um &os; gibt es in Form von Manualpages. Annähernd jedes Programm im System bringt eine kurze Referenzdokumentation mit, die die grundsätzliche Funktion und verschiedene Parameter erklärt. Diese Manuals können mit man eingesehen werden: &prompt.user; man Kommando Kommando ist der Name des Kommandos, über das man etwas erfahren will. Um beispielsweise mehr über das Kommando &man.ls.1; zu erfahren, geben Sie ein: &prompt.user; man ls Die Manualpages sind in nummerierte Sektionen unterteilt, die jeweils ein Thema darstellen. In &os; sind die folgenden Sektionen verfügbar: Benutzerkommandos. Systemaufrufe und Fehlernummern. Funktionen der C Bibliothek. Gerätetreiber. Dateiformate. Spiele und andere Unterhaltung. Verschiedene Informationen. Systemverwaltung und -Kommandos. Kernel Schnittstellen. In einigen Fällen kann dasselbe Thema in mehreren Sektionen auftauchen. Es gibt zum Beispiel ein chmod Benutzerkommando und einen chmod() Systemaufruf. Um &man.man.1; mitzuteilen, aus welcher Sektion die Information angezeigt werden soll, kann die Sektionsnummer mit angeben werden: &prompt.user; man 1 chmod Dies wird Ihnen die Manualpage für das Benutzerkommando &man.chmod.1; zeigen. Verweise auf eine Sektion der Manualpages werden traditionell in Klammern gesetzt. So bezieht sich &man.chmod.1; auf das Benutzerkommando und &man.chmod.2; auf den Systemaufruf. Wenn das Kommandos nicht bekannt ist, kann man -k benutzt werden, um nach Schlüsselbegriffen in den Kommandobeschreibungen zu suchen: &prompt.user; man -k mail Dieser Befehl zeigt eine Liste von Kommandos, deren Beschreibung das Schlüsselwort mail enthält. Die gleiche Funktionalität erhalten Sie auch, wenn Sie &man.apropos.1; benutzen. Um die Beschreibungen der Kommandos in /usr/bin zu lesen, geben Sie ein: &prompt.user; cd /usr/bin &prompt.user; man -f * | more Dasselbe erreichen Sie durch Eingabe von: &prompt.user; cd /usr/bin &prompt.user; whatis * | more GNU Info Dateien &os; enthält viele Anwendungen und Utilities der Free Software Foundation (FSF). Zusätzlich zu den Manualpages können diese Programme Hypertext-Dokumente enthalten, die info-Seiten genannt werden. Diese Dokumente können mit &man.info.1; ansehen kann. Wenn editors/emacs installiert ist, kann auch der info-Modus von emacs benutzt werden. Um &man.info.1; zu benutzen, geben Sie ein: &prompt.user; info Eine kurze Einführung gibt es mit h; eine Befehlsreferenz erhalten Sie durch Eingabe von: ?.
Index: head/de_DE.ISO8859-1/books/handbook/disks/chapter.xml =================================================================== --- head/de_DE.ISO8859-1/books/handbook/disks/chapter.xml (revision 48784) +++ head/de_DE.ISO8859-1/books/handbook/disks/chapter.xml (revision 48785) @@ -1,3789 +1,3695 @@ Speichermedien BerndWarkenÜbersetzt von MartinHeinen Übersicht Dieses Kapitel behandelt die Benutzung von Laufwerken unter &os;. Hierzu zählen SCSI- und IDE-Geräte, CD- und DVD-Medien, speicherbasierte Laufwerke und USB-Geräte. Nachdem Sie dieses Kapitel gelesen haben, werden Sie Folgendes wissen: Wie Sie zusätzliche Laufwerke zu einem &os;-System hinzufügen. Wie Sie unter &os; die Partition einer Festplatte vergrößern. Wie Sie &os; zur Verwendung von USB-Speichermedien konfigurieren. Wie Sie CD- und DVD-Medien unter &os; benutzen. Wie Sie die unter &os; erhältlichen Backup-Programme benutzen. Wie Sie RAM-Disks einrichten. Was Dateisystem-Schnappschüsse sind und wie sie effizient eingesetzt werden. Wie Sie mit Quotas die Benutzung von Laufwerken einschränken können. Wie Sie Festplatten und Swap verschlüsseln, um Daten vor Angreifern zu schützen. Wie Sie ein hochverfügbares Speichernetzwerk konfigurieren. Bevor Sie dieses Kapitel lesen, sollten Sie wissen, wie Sie einen neuen &os;-Kernel konfigurieren und installieren können. - - - - Gerätenamen - - Die folgende Tabelle zeigt die von &os; unterstützten - Speichergeräte und deren Gerätenamen. - - - Namenskonventionen von physikalischen Laufwerken - - - - - Laufwerkstyp - Gerätename - - - - - IDE-Festplatten - ad oder - ada - - - - IDE-CD-ROM-Laufwerke - acd oder - cd - - - - SATA-Festplatten - ad oder - ada - - - - SATA-CD-ROM-Laufwerke - acd oder - cd - - - - SCSI-Festplatten und - USB-Speichermedien - da - - - - SCSI-CD-ROM-Laufwerke - cd - - - - Verschiedene proprietäre CD-ROM-Laufwerke - mcd für Mitsumi - CD-ROM und scd für - Sony CD-ROM - - - - Diskettenlaufwerke - fd - - - - SCSI-Bandlaufwerke - sa - - - - IDE-Bandlaufwerke - ast - - - - Flash-Laufwerke - fla für &diskonchip; - Flash-Device - - - - RAID-Laufwerke - aacd für &adaptec; AdvancedRAID, - mlxd und mlyd - für &mylex;, - amrd für AMI &megaraid;, - idad für Compaq Smart RAID, - twed für &tm.3ware; RAID. - - - -
Hinzufügen von Laufwerken DavidO'BrianIm Original von Laufwerke hinzufügen Dieser Abschnitt beschreibt, wie Sie ein neues SATA-Laufwerk zu einer Maschine hinzufügen, die momentan nur ein Laufwerk hat. Dazu schalten Sie zuerst den Rechner aus und installieren das Laufwerk entsprechend der Anleitungen Ihres Rechners, Ihres Controllers und des Laufwerkherstellers. Starten Sie das System neu und melden Sie sich als Benutzer root an. Kontrollieren Sie /var/run/dmesg.boot, um sicherzustellen, dass das neue Laufwerk gefunden wurde. In diesem Beispiel erscheint das neu hinzugefügte SATA-Laufwerk als ada1. Partitionen gpart In diesem Beispiel wird eine einzige große Partition auf der Festplatte erstellt. Verwendet wird das GPT-Partionsschema, welches gegenüber dem älteren und weniger vielseitigen MBR-Schema bevorzug wird. Wenn die hinzugefügte Festplatte nicht leer ist, können alte Partitionsinformationen mit gpart delete entfernt werden. Details finden Sie in &man.gpart.8;. Zuerst wird das Partitionsschema erstellt und dann eine einzelne Partition angefügt: &prompt.root; gpart create -s GPT ada1 &prompt.root; gpart add -t freebsd-ufs ada1 Je nach Anwendung kann es wünschenswert sein, mehrere kleinere Partitionen zu haben. In &man.gpart.8; finden Sie Optionen zum Erstellen von kleineren Partitionen. Ein Dateisystem wird auf der neuen, leeren Festplatte erstellt: &prompt.root; newfs -U /dev/ada1p1 Ein leeres Verzeichnis wird als Mountpunkt erstellt, also ein Speicherort für die Montage der neuen Festplatte im originalen Dateisystem: &prompt.root; mkdir /newdisk Abschließend wird ein Eintrag in /etc/fstab hinzugefügt, damit die neue Festplatte automatisch beim Start eingehängt wird: /dev/ada1p1 /newdisk ufs rw 2 2 Die neue Festplatte kann manuell montiert werden, ohne das System neu zu starten: &prompt.root; mount /newdisk Partitionen vergrößern Allan Jude Beigetragen von Björn Heidotting Übersetzt von Partitionen vergrößern Die Kapazität einer Festplatte kann sich ohne Änderungen an bereits vorhandenen Daten erhöhen. Dies geschieht üblicherweise mit virtuellen Maschinen, wenn sich herausstellt, dass die virtuelle Festplatte zu klein ist und vergrößert werden soll. Zuweilen wird auch ein Abbild einer Platte auf einen USB-Stick geschrieben, ohne dabei die volle Kapazität zu nutzen. Dieser Abschnitt beschreibt, wie man Platten vergrößert, bzw. erweitert, um die Vorteile der erhöhten Kapazität zu nutzen. Überprüfen Sie /var/run/dmesg.boot, um den Gerätenamen der Festplatte zu bestimmen, die vergrößert werden soll. In diesem Beispiel gibt es nur eine SATA-Festplatte im System, so dass die Platte als ada0 angezeigt wird. Partitionen gpart Um die aktuelle Konfiguration der Partitionen auf der Festplatte anzuzeigen: &prompt.root; gpart show ada0 => 34 83886013 ada0 GPT (48G) [CORRUPT] 34 128 1 freebsd-boot (64k) 162 79691648 2 freebsd-ufs (38G) 79691810 4194236 3 freebsd-swap (2G) 83886046 1 - free - (512B) Wenn die Festplatte mit dem GPT-Partitionsschema formatiert wurde kann es vorkommen, dass sie als corrupted angezeigt wird, weil sich die Sicherung der GPT-Partitionstabellen nicht mehr am Ende des Laufwerks befinden. Reparieren Sie in so einem Fall die Partitionstabelle mit gpart: &prompt.root; gpart recover ada0 ada0 recovered Nun steht der zusätzliche Speicherplatz zur Verfügung und kann verwendet werden, um eine neue Partition anzulegen oder eine bestehende Partition zu erweitern: &prompt.root; gpart show ada0 => 34 102399933 ada0 GPT (48G) 34 128 1 freebsd-boot (64k) 162 79691648 2 freebsd-ufs (38G) 79691810 4194236 3 freebsd-swap (2G) 83886046 18513921 - free - (8.8G) Partitionen können nur auf zusammenhängenden, freien Speicherplatz vergrößert werden. In diesem Beispiel wird die letzte Partition der Platte als Swap-Speicher genutzt, aber die zweite Partition ist die, dessen Größe verändert werden soll. Weil der Swap-Speicher nur temporäre Daten enthält, kann er gefahrlos ausgehangen, gelöscht und nachdem die Partition vergrößert wurde, neu erstellt werden. &prompt.root; swapoff /dev/ada0p3 &prompt.root; gpart delete -i 3 ada0 ada0p3 deleted &prompt.root; gpart show ada0 => 34 102399933 ada0 GPT (48G) 34 128 1 freebsd-boot (64k) 162 79691648 2 freebsd-ufs (38G) 79691810 22708157 - free - (10G) Es besteht die Gefahr von Datenverlust, wenn die Partitionstabelle eines eingehangenen Dateisystems verändert wird. Es empfiehlt sich daher, die folgenden Schritte auf einem ausgehangenen Dateisystem durchzuführen, während die Umsetzung über eine Live-CD-ROM oder von einem USB-Gerät erfolgt. Wenn es jedoch absolut notwendig ist, kann ein eingehangenes Dateisystem auch vergrößert werden, nachdem die Sicherheitsfunktionen von GEOM deaktiviert wurden: &prompt.root; sysctl kern.geom.debugflags=16 Vergrößern Sie die Partition und lassen Sie Platz, um die Swap-Partition in der gewünschten Größe neu erstellen zu können. Dies ändert nur die Größe der Partition. Das Dateisystem innerhalb der Partition wird in einem separaten Schritt erweitert. &prompt.root; gpart resize -i 2 -a 4k -s 47G ada0 ada0p2 resized &prompt.root; gpart show ada0 => 34 102399933 ada0 GPT (48G) 34 128 1 freebsd-boot (64k) 162 98566144 2 freebsd-ufs (47G) 98566306 3833661 - free - (1.8G) Erstellen Sie die Swap-Partition neu: &prompt.root; gpart add -t freebsd-swap -a 4k ada0 ada0p3 added &prompt.root; gpart show ada0 => 34 102399933 ada0 GPT (48G) 34 128 1 freebsd-boot (64k) 162 98566144 2 freebsd-ufs (47G) 98566306 3833661 3 freebsd-swap (1.8G) &prompt.root; swapon /dev/ada0p3 Erweitern Sie das UFS-Dateisystem, um die Kapazität der vergrößerten Partition zu nutzen: Ab &os; 10.0-RELEASE ist es möglich, ein eingehangenes Dateisystem zu erweitern. Bei älteren Versionen muss das Dateisystem zuvor ausgehangen werden. &prompt.root; growfs /dev/ada0p2 Device is mounted read-write; resizing will result in temporary write suspension for /. It's strongly recommended to make a backup before growing the file system. OK to grow file system on /dev/ada0p2, mounted on /, from 38GB to 47GB? [Yes/No] Yes super-block backups (for fsck -b #) at: 80781312, 82063552, 83345792, 84628032, 85910272, 87192512, 88474752, 89756992, 91039232, 92321472, 93603712, 94885952, 96168192, 97450432 Sowohl die Partition als auch das Dateisystem wurden jetzt vergrößert, um den neu zur Verfügung stehenden Speicherplatz zu nutzen. <acronym>USB</acronym> Speichermedien MarcFonvieilleBeigetragen von USB Speichermedien Der Universal Serial Bus (USB) wird von vielen externen Speichern benutzt: Festplatten, USB-Thumbdrives sowie von CD- und DVD-Brennern. &os; bietet Unterstützung für Geräte mit USB 1.x, 2.0 und 3.0. Die Unterstützung fürUSB 3.0 ist mit einiger Hardware, einschließlich Haswell (Lynx Point) Chipsätzen, nicht kompatibel. Wenn &os; beim Booten mit dem Fehler failed with error 19 abbricht, müssen Sie xHCI/USB3 im BIOS deaktivieren. Unterstützung für USB-Massenspeicher ist im GENERIC-Kernel enthalten. Für einen angepassten Kernel müssen die nachstehenden Zeilen in der Kernelkonfigurationsdatei enthalten sein: device scbus>>>>>>># SCSI bus (required for ATA/SCSI) device da>>>>>>># Direct Access (disks) device pass>>>>># Passthrough device (direct ATA/SCSI access) device uhci>>>>># provides USB 1.x support device ohci>>>>># provides USB 1.x support device ehci>>>>># provides USB 2.0 support device xhci>>>>># provides USB 3.0 support device usb>>>>>># USB Bus (required) device umass>>>># Disks/Mass storage - Requires scbus and da device cd>>>>>>># needed for CD and DVD burners &os; benutzt den &man.umass.4;-Treiber, der das SCSI-Subsystem verwendet um auf USB-Geräte zuzugreifen. Da alle USB-Geräte vom System als SCSI-Geräte erkannt werden, dürfen Sie nicht in die Kernelkonfigurationsdatei aufnehmen, wenn es sich bei dem Gerät um einen CD- oder DVD-Brenner handelt. Der übrige Abschnitt beschreibt, wie Sie überprüfen können ob ein USB-Gerät von &os; erkannt wird und wie Sie das Gerät so konfigurieren, dass es verwendet werden kann. Konfiguration von Geräten Um die USB-Konfiguration zu testen, schließen Sie das USB-Gerät an. Verwenden Sie dmesg um zu überprüfen, ob das Gerät in den Systemmeldungen erscheint. Dies sollte in etwa so aussehen: umass0: <STECH Simple Drive, class 0/0, rev 2.00/1.04, addr 3> on usbus0 umass0: SCSI over Bulk-Only; quirks = 0x0100 umass0:4:0:-1: Attached to scbus4 da0 at umass-sim0 bus 0 scbus4 target 0 lun 0 da0: <STECH Simple Drive 1.04> Fixed Direct Access SCSI-4 device da0: Serial Number WD-WXE508CAN263 da0: 40.000MB/s transfers da0: 152627MB (312581808 512 byte sectors: 255H 63S/T 19457C) da0: quirks=0x2<NO_6_BYTE> Fabrikat, Gerätedatei (da0), Geschwindigkeit und Kapazität werden je nach Gerät unterschiedlich sein. Da ein USB-Gerät als SCSI-Gerät erkannt wird, kann camcontrol benutzt werden, um die mit dem System verbundenen USB-Massenspeicher anzuzeigen: &prompt.root; camcontrol devlist <STECH Simple Drive 1.04> at scbus4 target 0 lun 0 (pass3,da0) Alternativ kann usbconfig benutzt werden, um die Geräte aufzulisten. Weitere Informationen zu diesem Kommando finden Sie in &man.usbconfig.8;. &prompt.root; usbconfig ugen0.3: <Simple Drive STECH> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (2mA) Wenn das Gerät noch nicht formatiert ist, finden Sie in Informationen, wie Sie USB-Laufwerke formatieren und Partitionen einrichten. Wenn das Laufwerk bereits ein Dateisystem enthält, kann es von root nach den Anweisungen in eingehängt werden. Aus Sicherheitsgründen sollten Sie Benutzern, denen Sie nicht vertrauen, das Einhängen (z.B. durch die unten beschriebene Aktivierung von vfs.usermount) beliebiger Medien verbieten. Die meisten Dateisysteme wurden nicht entwickelt, um sich vor böswilligen Geräten zu schützen. Um auch normalen Anwendern das Einhängen des Laufwerks zu gestatten, könnten Sie beispielsweise mit &man.pw.8; alle potentiellen Benutzer dieser Gerätedateien in die Gruppe operator aufnehmen. Außerdem muss sichergestellt werden, dass operator Schreib- und Lesezugriff auf diese Gerätedateien haben. Hierfür werden die folgenden Zeilen in /etc/devfs.rules hinzugefügt: [localrules=5] add path 'da*' mode 0660 group operator Verfügt das System über interne SCSI-Laufwerke, so verändern Sie die zweite Zeile wie folgt: add path 'da[3-9]*' mode 0660 group operator Dies wird die ersten drei SCSI-Laufwerke (da0 bis da2) davon ausschließen, in die Gruppe operator aufgenommen zu werden. Ersetzen Sie 3 durch die Anzahl der SCSI-Laufwerke. Weitere Informationen zu dieser Datei finden Sie in &man.devfs.rules.5;. Aktivieren Sie nun die Regeln in /etc/rc.conf: devfs_system_ruleset="localrules" Als nächstes müssen Sie das System anweisen, auch normalen Benutzern das mounten von Dateisystemen zu erlauben, indem Sie die folgende Zeile in /etc/sysctl.conf hinzufügen: vfs.usermount=1 Da diese Einstellung erst nach einem Neustart wirksam wird, können Sie diese Variable mit sysctl auch direkt setzen: &prompt.root; sysctl vfs.usermount=1 vfs.usermount: 0 -> 1 Zuletzt müssen Sie noch ein Verzeichnis anlegen, in das das USB-Laufwerk eingehängt werden soll. Dieses Verzeichnis muss dem Benutzer gehören, der das USB-Laufwerk in den Verzeichnisbaum einhängen will. Dazu legen Sie als root ein Unterverzeichnis /mnt/username an, wobei Sie username durch den Login des jeweiligen Benutzers sowie usergroup durch die primäre Gruppe des Benutzers ersetzen: &prompt.root; mkdir /mnt/username &prompt.root; chown username:usergroup /mnt/username Wenn Sie nun beispielsweise einen USB-Stick anschließen, wird automatisch die Gerätedatei /dev/da0s1 erzeugt. Ist das Gerät mit einem FAT-Dateisystem formatiert, kann es der Benutzer mit dem folgenden Befehl in den Verzeichnisbaum einhängen: &prompt.user; mount -t msdosfs -o -m=644,-M=755 /dev/da0s1 /mnt/username Bevor das Gerät entfernt werden kann, muss es abgehängt werden: &prompt.root; umount /mnt/username Nach Entfernen des Geräts stehen in den Systemmeldungen Einträge, ähnlich der folgenden: umass0: at uhub3, port 2, addr 3 (disconnected) da0 at umass-sim0 bus 0 scbus4 target 0 lun 0 da0: <STECH Simple Drive 1.04> s/n WD-WXE508CAN263 detached (da0:umass-sim0:0:0:0): Periph destroyed Erstellen und Verwenden von <acronym>CD</acronym>s Mike Meyer Beigesteuert von CD-ROMs brennen CDs besitzen einige Eigenschaften, die sie von konventionellen Laufwerken unterscheiden. Sie wurden so entworfen, dass sie ununterbrochen, ohne Verzögerungen durch Kopfbewegungen zwischen den Spuren, gelesen werden können. CDs besitzen Spuren, aber damit ist der Teil Daten gemeint, der ununterbrochen gelesen wird, und nicht eine physikalische Eigenschaft der CD. Das ISO 9660-Dateisystem wurde entworfen, um mit diesen Unterschieden umzugehen. ISO 9660 Dateisysteme ISO 9660 CD-Brenner ATAPI Die &os; Ports-Sammlung bietet einige Werkzeuge zum Brennen und Kopieren von Audio- und Daten-CDs. Dieses Kapitel beschreibt die Verwendung von mehreren Kommandozeilen-Werkzeugen. Wenn Sie eine graphische Oberfläche zum Brennen von CDs benutzen, können Sie sysutils/xcdroast oder sysutils/k3b installieren. Unterstützte Geräte Marc Fonvielle Beigetragen von CD-Brenner ATAPI/CAM Treiber Der GENERIC-Kernel enthält Unterstützung für SCSI, USB und ATAPI CD Lesegeräte und Brenner. Wird ein angepasster Kernel erstellt, unterscheiden sich die Optionen für die Kernelkonfigurationsdatei je nach Art des Geräts. Für einen SCSI-Brenner müssen folgende Optionen vorhanden sein: device scbus # SCSI bus (required for ATA/SCSI) device da # Direct Access (disks) device pass # Passthrough device (direct ATA/SCSI access) device cd # needed for CD and DVD burners Für einen USB-Brenner müssen folgende Optionen vorhanden sein: device scbus # SCSI bus (required for ATA/SCSI) device da # Direct Access (disks) device pass # Passthrough device (direct ATA/SCSI access) device cd> # needed for CD and DVD burners device uhci # provides USB 1.x support device ohci # provides USB 1.x support device ehci # provides USB 2.0 support device xhci # provides USB 3.0 support device usb # USB Bus (required) device umass # Disks/Mass storage - Requires scbus and da Für einen ATAPI-Brenner müssen folgende Optionen vorhanden sein: device ata # Legacy ATA/SATA controllers device scbus # SCSI bus (required for ATA/SCSI) device pass # Passthrough device (direct ATA/SCSI access) device cd # needed for CD and DVD burners Unter &os; Versionen kleiner 10.x wird auch diese Option in der Kernelkonfigurationsdatei benötigt, falls der Brenner ein ATAPI-Gerät ist: device atapicam Alternativ kann folgende Zeile in /boot/loader.conf hinzugefügt werden, um den Treiber beim Booten automatisch zu laden: atapicam_load="YES" Hierzu ist ein Neustart des Systems erforderlich, da dieser Treiber nur beim Booten geladen werden kann. Mit dmesg können Sie prüfen, ob das Gerät von &os; erkannt wurde. Unter &os; Versionen kleiner 10.x lautet der Gerätename acd0 anstelle von cd0. &prompt.user; dmesg | grep cd cd0 at ahcich1 bus 0 scbus1 target 0 lun 0 cd0: <HL-DT-ST DVDRAM GU70N LT20> Removable CD-ROM SCSI-0 device cd0: Serial Number M3OD3S34152 cd0: 150.000MB/s transfers (SATA 1.x, UDMA6, ATAPI 12bytes, PIO 8192bytes) cd0: Attempt to query device size failed: NOT READY, Medium not present - tray closed Eine <acronym>CD</acronym> brennen Unter &os; kann cdrecord zum Brennen von CDs benutzt werden. Dieses Programm wird aus dem Port oder Paket sysutils/cdrecordinstalliert. Obwohl cdrecord viele Optionen besitzt, ist die grundlegende Benutzung sehr einfach. Geben Sie den Namen der zu brennenden ISO-Datei an. Wenn das System über mehrere Brenner verfügt, müssen Sie auch den Namen des Gerätes angeben: &prompt.root; cdrecord dev=device imagefile.iso Benutzen Sie um den Gerätenamen des Brenners zu bestimmen. Die Ausgabe könnte wie folgt aussehen: CD-ROM brennen &prompt.root; cdrecord -scanbus ProDVD-ProBD-Clone 3.00 (amd64-unknown-freebsd10.0) Copyright (C) 1995-2010 Jörg Schilling Using libscg version 'schily-0.9' scsibus0: 0,0,0 0) 'SEAGATE ' 'ST39236LW ' '0004' Disk 0,1,0 1) 'SEAGATE ' 'ST39173W ' '5958' Disk 0,2,0 2) * 0,3,0 3) 'iomega ' 'jaz 1GB ' 'J.86' Removable Disk 0,4,0 4) 'NEC ' 'CD-ROM DRIVE:466' '1.26' Removable CD-ROM 0,5,0 5) * 0,6,0 6) * 0,7,0 7) * scsibus1: 1,0,0 100) * 1,1,0 101) * 1,2,0 102) * 1,3,0 103) * 1,4,0 104) * 1,5,0 105) 'YAMAHA ' 'CRW4260 ' '1.0q' Removable CD-ROM 1,6,0 106) 'ARTEC ' 'AM12S ' '1.06' Scanner 1,7,0 107) * Benutzen Sie die drei durch Kommas separierten Zahlen, die für den CD-Brenner angegeben sind, als Argument für . Im Beispiel ist das Yamaha-Gerät 1,5,0, so dass die passende Eingabe ist. Einfachere Wege das Argument anzugeben, sowie Informationen über Audiospuren und das Einstellen der Geschwindigkeit, sind in der Manualpage von cdrecord beschrieben. Alternativ können Sie den folgenden Befehl ausführen, um die Geräteadresse des Brenners zu ermitteln: &prompt.root; camcontrol devlist <MATSHITA CDRW/DVD UJDA740 1.00> at scbus1 target 0 lun 0 (cd0,pass0) Verwenden Sie die numerischen Werte für scbus, target und lun. Für dieses Beispiel wäre 1,0,0 als Gerätename zu verwenden. Daten auf <acronym>ISO</acronym>-Dateisystem schreiben Die Datendateien müssen vorbereitet sein, bevor sie auf eine CD gebrannt werden. In &os; wird mkisofs vom Paket oder Port sysutils/cdrtools installiert. Dieses Programm kann aus einem &unix; Verzeichnisbaum ein ISO 9660-Dateisystem erzeugen. Im einfachsten Fall müssen Sie lediglich den Namen der zu erzeugenden ISO-Datei und den Pfad zu den Dateien angeben, die auf dem ISO 9660-Dateisystem platziert werden: &prompt.root; mkisofs -o imagefile.iso /path/to/tree Dateisysteme ISO 9660 Bei diesem Kommando werden die Dateinamen auf Namen abgebildet, die den Restriktionen des ISO 9660-Dateisystem entsprechen. Dateien, die diesem Standard nicht entsprechen bleiben unberücksichtigt. Dateisysteme Joliet Es gibt einige Optionen, um die Beschränkungen dieses Standards zu überwinden. Die unter &unix; Systemen üblichen Rock-Ridge-Erweiterungen werden durch aktiviert und aktiviert die von µsoft; Systemen benutzten Joliet-Erweiterungen. Für CDs, die nur auf &os;-Systemen verwendet werden sollen, kann genutzt werden, um alle Beschränkungen für Dateinamen aufzuheben. Zusammen mit wird ein Abbild des Dateisystems, identisch zu angegebenen &os;-Dateibaum erstellt, selbst wenn dies den ISO 9660 Standard verletzt. CD-ROM bootbare erstellen Die letzte übliche Option ist . Sie wird benutzt, um den Ort eines Bootimages einer El Torito bootbaren CD anzugeben. Das Argument zu dieser Option ist der Pfad zu einem Bootimage ausgehend von der Wurzel des Baumes, der auf die CD geschrieben werden soll. In der Voreinstellung erzeugt mkisofs ein ISO-Image im Diskettenemulations-Modus. Dabei muss das Image genau 1200, 1440 oder 2880 KB groß sein. Einige Bootloader, darunter der auf den &os; Installationsmedien verwendete, kennen keinen Emulationsmodus. Daher sollte in diesen Fällen verwendet werden. Wenn /tmp/myboot ein bootbares &os;-System enthält, dessen Bootimage sich in /tmp/myboot/boot/cdboot befindet, dann würde folgendes Kommando /tmp/bootable.iso erstellen: &prompt.root; mkisofs -R -no-emul-boot -b boot/cdboot -o /tmp/bootable.iso /tmp/myboot Das resultierende ISO-Abbild kann als speicherbasiertes Laufwerk eingehängt werden: &prompt.root; mdconfig -a -t vnode -f /tmp/bootable.iso -u 0 &prompt.root; mount -t cd9660 /dev/md0 /mnt Jetzt können Sie überprüfen, dass /mnt und /tmp/myboot identisch sind. Sie können das Verhalten von mkisofs mit einer Vielzahl von Optionen beeinflussen. Details dazu entnehmen Sie bitte &man.mkisofs.8;. Es ist möglich eine Daten-CD in eine Datei zu kopieren, die einem Image entspricht, das mit mkisofs erstellt wurde. Verwenden Sie dazu dd mit dem Gerätenamen als Eingabedatei und den Namen der ISO als Ausgabedatei: &prompt.root; dd if=/dev/cd0 of=file.iso bs=2048 Das resultierende Abbild kann auf eine CD gebrannt werden, wie in beschrieben. Einhängen von Daten-<acronym>CD</acronym>s Sobald ein Abbild auf eine CD gebrannt wurde, kann es durch Angabe des Dateisystemtyp, des CD-Laufwerks und des Mountpunktes eingehangen werden: &prompt.root; mount -t cd9660 /dev/cd0 /mnt Da mount davon ausgeht, dass ein Dateisystem vom Typ ufs ist, würde die Fehlermeldung Incorrect super block erscheinen, wenn Sie beim Einhängen einer Daten-CD auf die Angabe -t cd9660 verzichten. Auf diese Weise können Daten-CDs von jedem Hersteller verwendet werden. Es kann allerdings zu Problemen mit CDs kommen, die verschiedene ISO 9660-Erweiterungen benutzen. So speichern Joliet-CDs alle Dateinamen unter Verwendung von zwei Byte langen Unicode-Zeichen. Tauchen statt bestimmter Zeichen nur Fragezeichen auf, so muss über die Option der benötigte Zeichensatz angegeben werden. Weitere Informationen zu diesem Problem finden Sie in &man.mount.cd9660.8;. Damit der Kernel diese Zeichenkonvertierung (festgelegt durch die Option ) erkennt, müssen Sie das Kernelmodul cd9660_iconv.ko laden. Dazu fügen Sie folgende Zeile in loader.conf ein: cd9660_iconv_load="YES" Danach müssen Sie allerdings Ihr System neu starten. Alternativ können Sie das Kernelmodul auch direkt über kldload laden. Manchmal werden Sie die Meldung Device not configured erhalten, wenn Sie versuchen, eine DatenCD einzuhängen. Für gewöhnlich liegt das daran, dass das Laufwerk meint es sei keine CD eingelegt, oder dass das Laufwerk auf dem Bus nicht erkannt wird. Es kann einige Sekunden dauern, bevor das Laufwerk merkt, dass eine CD eingelegt wurde. Seien Sie also geduldig. Manchmal wird ein SCSI-CD nicht erkannt, weil es keine Zeit hatte, auf das Zurücksetzen des Busses zu antworten. Um dieses Problem zu lösen, fügen Sie die folgende Zeile in die Kernelkonfiguration ein und erstellen Sie einen angepassten Kernel nach den Anweisungen in : options SCSI_DELAY=15000 Die Zeile bewirkt, dass nach dem Zurücksetzen des SCSI-Busses beim Booten 15 Sekunden gewartet wird, um dem CD-Laufwerk genügend Zeit zu geben, darauf zu antworten. Es ist möglich eine Datei auch direkt auf eine CD zu brennen, ohne vorher auf ihr ein ISO 9660-Dateisystem einzurichten. Man sagt auch, Daten werden roh auf die CD gebrannt. Einige Leute nutzen dies, um Datensicherungen durchzuführen. Eine auf diese Weise gefertigte Daten-CD kann nicht in das Dateisystem eingehangen werden. Um auf die Daten einer solchen CD zuzugreifen, müssen die Daten vom rohen Gerät gelesen werden. Beispielsweise würde dieser Befehl eine komprimierte tar-Datei auf dem zweiten CD-Laufwerk in das aktuelle Verzeichnis extrahieren: &prompt.root; tar xzvf /dev/cd1 Um eine Daten-CD in das System einzuhängen, müssen die Daten mit mkisofs geschrieben werden. Kopieren von Audio-<acronym>CD</acronym>s Um eine Kopie einer Audio-CD zu erstellen, kopieren Sie die Stücke der CD in einzelne Dateien und brennen diese Dateien dann auf eine leere CD. beschreibt, wie eine Audio-CD kopiert und gebrannt wird. Wenn die Version älter als &os; 10.0 ist und ein ATAPI-Gerät verwendet wird, muss zunächst das Modul nach den Anweisungen in geladen werden. Eine Audio-<acronym>CD</acronym> kopieren Der Port oder das Paket sysutils/cdrtools installiert cdda2wav. Mit diesem Kommando können Audiodaten in das aktuelle Verzeichnis extrahiert werden, wobei jede Datei in eine separate WAV-Datei geschrieben wird: &prompt.user; cdda2wav -vall -B -Owav Wenn das System nur über ein CD-Laufwerk verfügt, muss der Gerätename nicht angegeben werden. Lesen Sie die Manualpage von cdda2wav für Anweisungen, wie ein Gerät spezifiziert wird und weitere verfügbare Optionen für dieses Kommando. Die erzeugten .wav Dateien schreiben Sie mit cdrecord auf eine leere CD: &prompt.user; cdrecord -v dev=2,0 -dao -useinfo *.wav Das Argument von gibt das verwendete Gerät an, das wie in ermittelt werden kann. <acronym>DVD</acronym>s benutzen MarcFonvieilleBeigetragen von AndyPolyakovMit Beiträgen von DVD brennen Nach der CD ist die DVD die nächste Generation optischer Speichermedien. Auf einer DVD können mehr Daten als auf einer CD gespeichert werden. DVDs werden als Standardmedium für Videos verwendet. Für beschreibbare DVDs existieren fünf Medienformate: DVD-R: Dies war das erste verfügbare Format. Das Format wurde vom DVD-Forum festgelegt. Die Medien sind nur einmal beschreibbar. DVD-RW: Dies ist die wiederbeschreibbare Version des DVD-R Standards. Eine DVD-RW kann ungefähr 1000 Mal beschrieben werden. DVD-RAM: Dies ist ein wiederbeschreibbares Format, das wie ein Wechsellaufwerk betrachtet werden kann. Allerdings sind die Medien nicht kompatibel zu den meisten DVD-ROM-Laufwerken und DVD-Video-Spielern, da das DVD-RAM-Format nur von wenigen Brennern unterstützt wird. Informationen zur Nutzung von DVD-RAM finden Sie in . DVD+RW: Ist ein wiederbeschreibbares Format, das von der DVD+RW Alliance festgelegt wurde. Eine DVD+RW kann ungefähr 1000 Mal beschrieben werden. DVD+R: Dieses Format ist die nur einmal beschreibbare Variante des DVD+RW Formats. Auf einer einfach beschichteten DVD können 4.700.000.000 Bytes gespeichert werden. Das sind 4,38 GB oder 4485 MB (1 Kilobyte sind 1024 Bytes). Die physischen Medien sind unabhängig von der Anwendung. Ein DVD-Video ist eine spezielle Anordnung von Dateien, die auf irgendein Medium, beispielsweise DVD-R, DVD+R oder DVD-RW geschrieben werden kann. Bevor Sie ein Medium auswählen, müssen Sie sicherstellen, dass der Brenner und der DVD-Spieler mit dem Medium umgehen können. Konfiguration Benutzen Sie &man.growisofs.1;, um DVDs zu beschreiben. Das Kommando ist Bestandteil von sysutils/dvd+rw-tools, und kann mit allen DVD-Medien umgehen. Diese Werkzeuge verwenden das SCSI-Subsystem, um auf die Geräte zuzugreifen. Daher muss ATAPI/CAM-Unterstützung geladen, oder statisch in den Kernel kompiliert werden. Sollte der Brenner jedoch die USB-Schnittstelle nutzen, wird diese Unterstützung nicht benötigt. Weitere Informationen zur Konfiguration von USB-Geräten finden Sie in . Für ATAPI-Geräte müssen ebenfalls DMA-Zugriffe aktiviert werden. Dazu wird die folgende Zeile in /boot/loader.conf eingefügt: hw.ata.atapi_dma="1" Bevor Sie dvd+rw-tools benutzen, lesen Sie bitte die Hardware-Informationen auf der Seite Hardware Compatibility Notes. Für eine grafische Oberfläche sollten Sie sich sysutils/k3b ansehen, das eine benutzerfreundliche Schnittstelle zu &man.growisofs.1; und vielen anderen Werkzeugen bietet. Daten-<acronym>DVD</acronym>s brennen &man.growisofs.1; erstellt mit dem Programm mkisofs das Dateisystem und brennt anschließend die DVD. Vor dem Brennen braucht daher kein Abbild der Daten erstellt zu werden. Wenn Sie von den Daten im Verzeichnis /path/to/data eine DVD+R oder eine DVD-R brennen wollen, benutzen Sie das nachstehende Kommando: &prompt.root; growisofs -dvd-compat -Z /dev/cd0 -J -R /path/to/data In diesem Beispiel wird an &man.mkisofs.8; durchgereicht und dient zum Erstellen des Dateisystems (hier: ein ISO-9660-Dateisystem mit Joliet- und Rock-Ridge-Erweiterungen). Weiteres entnehmen Sie bitte der Hilfeseite &man.mkisofs.8;. Die Option wird für die erste Aufnahme einer Single- oder Multisession benötigt. Ersetzen Sie /dev/cd0 mit dem Gerätenamen des DVD-Gerätes. Die Nutzung von schließt das Medium, weitere Daten können danach nicht mehr angehängt werden. Dies sollte auch eine eine bessere Kompatibilität mit anderen DVD-ROM-Laufwerken bieten. Um ein vorher erstelltes Abbild der Daten zu brennen, beispielsweise imagefile.iso, verwenden Sie: &prompt.root; growisofs -dvd-compat -Z /dev/cd0=imagefile.iso Die Schreibgeschwindigkeit hängt von den verwendeten Medium sowie dem verwendeten Gerät ab und sollte automatisch gesetzt werden. Um die Schreibgeschwindigkeit vorzugeben, verwenden Sie . Beispiele finden Sie in &man.growisofs.1;. Um größere Dateien als 4.38GB zu unterstützen, ist es notwendig ein UDF/ISO-9660 Hybrid-Dateisystem zu erstellen. Dieses Dateisystem muss mit zusätzlichen Parametern bei &man.mkisofs.8; und allen relevanten Programmen, wie beispielsweise &man.growisofs.1;) erzeugt werden. Dies ist nur notwendig, wenn Sie ein ISO-Image erstellen oder direkt auf eine DVD schreiben wollen. DVDs, die in dieser Weise hergestellt worden sind, müssen als UDF-Dateisystem mit &man.mount.udf.8; eingehangen werden. Sie sind nur auf Betriebssystemen, die UDF unterstützen brauchbar, ansonsten sieht es so aus, als ob sie kaputte Dateien enthalten würden. Um diese Art von ISO-Datei zu erstellen: &prompt.user; mkisofs -R -J -udf -iso-level 3 -o imagefile.iso /path/to/data Um Daten direkt auf eine DVD zu brennen, geben Sie den folgenden Befehl ein: &prompt.root; growisofs -dvd-compat -udf -iso-level 3 -Z /dev/cd0 -J -R /path/to/data Wenn ein ISO-Abbild bereits große Dateien enthält, sind keine weiteren Optionen für &man.growisofs.1; notwendig, um das Abbild auf die DVD zu brennen. Achten Sie darauf, eine aktuelle Version von sysutils/cdrtools zu verwenden, welche &man.mkisofs.8; enthält, da ältere Versionen keinen Support für große Dateien enthalten. Falls die neueste Version nicht funktioniert, installieren Sie sysutils/cdrtools-devel und lesen Sie &man.mkisofs.8;. <acronym>DVD</acronym>-Videos brennen DVD DVD-Video Ein DVD-Video ist eine spezielle Anordnung von Dateien, die auf den ISO-9660 und den micro-UDF (M-UDF) Spezifikationen beruht. Da DVD-Video auf eine bestimmte Datei-Hierarchie angewiesen ist, müssen DVDs mit speziellen Programmen wie multimedia/dvdauthor erstellt werden. Ist bereits ein Abbild des Dateisystems eines DVD-Videos vorhanden, kann es auf die gleiche Weise wie jedes andere Abbild gebrannt werden. Wenn dvdauthor verwendet wurde, um die DVD zu erstellen und die Resultate in /path/to/video liegen, kann das folgende Kommando verwendet werden, um ein DVD-Video zu brennen: &prompt.root; growisofs -Z /dev/cd0 -dvd-video /path/to/video wird an &man.mkisofs.8; weitergereicht, um die Datei-Hierarchie für ein DVD-Video zu erstellen. Weiterhin bewirkt diese Option, dass &man.growisofs.1; mit aufgerufen wird. <acronym>DVD+RW</acronym>-Medien benutzen DVD DVD+RW Im Gegensatz zu CD-RW-Medien müssen DVD+RW-Medien erst formatiert werden, bevor sie benutzt werden können. Es wird empfohlen &man.growisofs.1; einzusetzen, da das Programm Medien automatisch formatiert, wenn es erforderlich ist. Es ist jedoch möglich, auch dvd+rw-format zu nutzen, um die DVD+RW zu formatieren: &prompt.root; dvd+rw-format /dev/cd0 Dieser Vorgang muss nur einmal durchgeführt werden. Denken Sie daran, dass nur neue DVD+RWs formatiert werden müssen. Anschließend können DVD+RWs, wie gewohnt gebrannt werden. Wenn Sie auf einer DVD+RW ein neues Dateisystem erstellen wollen, brauchen Sie die DVD+RW vorher nicht zu löschen. Überschreiben Sie einfach das vorige Dateisystem indem Sie eine neue Session anlegen: &prompt.root; growisofs -Z /dev/cd0 -J -R /path/to/newdata Das DVD+RW-Format erlaubt es, Daten an eine vorherige Aufnahme anzuhängen. Dazu wird eine neue Session mit der schon bestehenden zusammengeführt. Es wird keine Multi-Session geschrieben, sondern &man.growisofs.1; vergrößert das ISO-9660-Dateisystem auf dem Medium. Das folgende Kommando fügt weitere Daten zu einer vorher erstellten DVD+RW hinzu: &prompt.root; growisofs -M /dev/cd0 -J -R /path/to/nextdata Wenn Sie eine DVD+RW erweitern, verwenden Sie dieselben &man.mkisofs.8;-Optionen wie beim Erstellen der DVD+RW. Verwenden Sie , um bessere Kompatibilität mit DVD-ROM-Laufwerken zu gewährleisten. Zu einem DVD+RW-Medium können Sie mit dieser Option auch weiterhin Daten hinzufügen. Um das Medium zu löschen, verwenden Sie: &prompt.root; growisofs -Z /dev/cd0=/dev/zero <acronym>DVD-RW</acronym>-Medien benutzen DVD DVD-RW Eine DVD-RW kann mit zwei Methoden beschrieben werden: Sequential-Recording oder Restricted-Overwrite. Voreingestellt ist Sequential-Recording. Eine neue DVD-RW kann direkt beschrieben werden; sie muss nicht vorher formatiert werden. Allerdings muss eine DVD-RW, die mit Sequential-Recording aufgenommen wurde, zuerst gelöscht werden, bevor eine neue Session aufgenommen werden kann. Der folgende Befehl löscht eine DVD-RW im Sequential-Recording-Modus: &prompt.root; dvd+rw-format -blank=full /dev/cd0 Das vollständige Löschen mit dauert mit einem 1x Medium ungefähr eine Stunde. Wenn die DVD-RW im Disk-At-Once-Modus (DAO) aufgenommen wurde, kann sie mit schneller gelöscht werden. Um eine DVD-RW im DAO-Modus zu brennen, benutzen Sie das folgende Kommando: &prompt.root; growisofs -use-the-force-luke=dao -Z /dev/cd0=imagefile.iso Die Option sollte nicht erforderlich sein, da &man.growisofs.1; den DAO-Modus automatisch erkennt. Der Restricted-Overwrite-Modus sollte mit jeder DVD-RW verwendet werden, da er flexibler als der voreingestellte Sequential-Recording-Modus ist. Um Daten auf eine DVD-RW im Sequential-Recording-Modus zu schreiben, benutzen Sie dasselbe Kommando wiefür die anderen DVD-Formate: &prompt.root; growisofs -Z /dev/cd0 -J -R /path/to/data Um weitere Daten zu einer Aufnahme hinzuzufügen, benutzen Sie mit &man.growisofs.1;. Werden die Daten im Sequential-Recording-Modus hinzugefügt, wird eine neue Session erstellt. Das Ergebnis ist ein Multi-Session-Medium. Eine DVD-RW im Restricted-Overwrite-Modus muss nicht gelöscht werden, um eine neue Session aufzunehmen. Das Medium kann einfach mit überschrieben werden. Mit kann das ISO-9660-Dateisystem, wie mit einer DVD+RW, vergrößert werden. Die DVD enthält danach eine Session. Benutzen sie das nachstehende Kommando, um den Restricted-Overwrite-Modus einzustellen: &prompt.root; dvd+rw-format /dev/cd0 Das folgende Kommando stellt den Modus wieder auf Sequential-Recording zurück: &prompt.root; dvd+rw-format -blank=full /dev/cd0 Multi-Session Nur wenige DVD-ROM-Laufwerke unterstützen Multi-Session-DVDs und lesen meist nur die erste Session. Mehrere Sessions werden von DVD+R, DVD-R und DVD-RW im Sequential-Recording-Modus unterstützt. Im Modus Restricted-Overwrite gibt nur eine Session. Wenn das Medium noch nicht geschlossen ist, erstellt das nachstehende Kommando eine neue Session auf einer DVD+R, DVD-R oder DVD-RW im Sequential-Recording-Modus: &prompt.root; growisofs -M /dev/cd0 -J -R /path/to/nextdata Wird dieses Kommando mit DVD+RW- oder DVD-RW-Medien im Restricted-Overwrite-Modus benutzt, werden die neuen Daten mit den Daten der bestehenden Session zusammengeführt. Das Medium enthält danach eine Session. Nutzen Sie diese Methode, um neue Daten zu einer bestehenden Session hinzuzufügen. Für den Anfang und das Ende einer Session wird auf dem Medium zusätzlicher Platz verbraucht. Um den Speicherplatz auf dem Medium optimal auszunutzen, sollten Sie daher Sessions mit vielen Daten hinzufügen. Auf ein DVD+R-Medium passen maximal 154 Sessions, 2000 Sessions auf ein DVD-R-Medium und 127 Sessions auf eine DVD+R Double Layer. Weiterführendes dvd+rw-mediainfo /dev/cd0 zeigt Informationen über eine im Laufwerk liegende DVD an. Weiteres zu dvd+rw-tools finden Sie in &man.growisofs.1;, auf der dvd+rw-tools Web-Seite und in den Archiven der cdwrite-Mailingliste. Wenn Sie einen Problembericht zur Nutzung der dvd+rw-tools erstellen, fügen Sie immer die Ausgabe von dvd+rw-mediainfo hinzu. <acronym>DVD-RAM</acronym> DVD DVD-RAM DVD-RAM-fähige Brenner nutzten die SCSI- oder ATAPI-Schnittstelle. Für ATAPI-Geräte muss der DMA-Modus aktiviert werden, indem die folgende Zeile in /boot/loader.conf hinzugefügt wird: hw.ata.atapi_dma="1" Eine DVD-RAM kann mit einer Wechselplatte verglichen werden. Wie diese, muss auch eine DVD-RAM vor dem ersten Einsatz formatiert werden. In diesem Beispiel wird das gesamte Medium mit dem Standard-UFS2-Dateisystem formatiert: &prompt.root; dd if=/dev/zero of=/dev/acd0 bs=2k count=1 &prompt.root; bsdlabel -Bw acd0 &prompt.root; newfs /dev/acd0 Denken Sie dabei daran, dass Sie gegebenenfalls die Gerätedatei (hier acd0) an Ihre Konfiguration anpassen müssen. Nachdem die DVD-RAM formatiert ist, kann sie wie eine normale Festplatte gemountet werden: &prompt.root; mount /dev/acd0 /mnt Danach kann schreibend und lesend auf das DVD-RAM Medium zugegriffen werden. Disketten benutzen Dieser Abschnitt beschreibt die Formatierung von 3,5 Zoll Disketten in &os;. Disketten formatieren Bevor eine Diskette benutzt werden kann, muss sie (low-level) formatiert werden, was normalerweise der Hersteller schon gemacht hat. Sie können die Diskette allerdings noch einmal formatieren, um das Medium zu überprüfen. Benutzen Sie &man.fdformat.1;, um Disketten unter &os; zu formatieren. Achten Sie dabei auf Fehlermeldungen, die schlechte Speichermedien anzeigen. Um eine Diskette zu formatieren, legen Sie eine 3,5 Zoll Diskette in das erste Diskettenlaufwerk ein und führen das folgende Kommando aus: &prompt.root; /usr/sbin/fdformat -f 1440 /dev/fd0 Nach dem Formatieren muss auf der Diskette ein Disklabel erstellt werden, um die Größe und Geometrie der Diskette zu erkennen. Eine Liste der unterstützten Geometrien finden Sie in /etc/disktab. Erstellen Sie nun das Label mit &man.bsdlabel.8;: &prompt.root; /sbin/bsdlabel -B -w /dev/fd0 fd1440 Auf der Diskette kann nun ein Dateisystem erstellt werden (high-level Formatierung). Das Dateisystem der Diskette kann entweder UFS oder FAT sein, wobei FAT für Disketten in der Regel die bessere Wahl ist. Um die Diskette mit FAT zu formatieren, geben Sie folgendes Kommando ein: &prompt.root; /sbin/newfs_msdos /dev/fd0 Die Diskette kann nun benutzt werden. Um die Diskette zu verwenden, kann sie mit &man.mount.msdosfs.8; eingehängt werden. Man kann auch emulators/mtools aus der Ports-Sammlung installieren, um mit der Diskette zu arbeiten. Datensicherung Die Planung und Umsetzung einer Backup-Strategie ist unerlässlich, um Daten in bestimmten Situationen wiederherstellen zu können, zum Beispiel bei Plattendefekten, versehentlichem Löschen von Dateien, willkürlicher Korrumpierung von Dateien oder der vollständigen Zerstörung des Systems und der Backups, die am gleichen Ort aufbewahrt werden. Die Art und der Zeitplan des Backups kann variieren, abhängig von der Wichtigkeit der Daten, der benötigten Granularität zur Wiederherstellung von Dateien und der Dauer einer akzeptablen Ausfallzeit. Zu den möglichen Backup-Strategien gehören unter anderem: Die Archivierung des kompletten Systems auf externen Datenträgern. Dieser Ansatz schützt zwar vor allen oben aufgeführten Problemen, ist aber zeitaufwändig und unbequem bei der Wiederherstellung, insbesondere für nicht privilegierte Benutzer. Dateisystem-Snapshots sind nützlich bei der Wiederherstellung von gelöschten Dateien, bzw. früheren Versionen von Dateien. Kopien ganzer Dateisysteme oder Festplatten, die mit einem anderen System im Netzwerk mittels net/rsync synchronisiert werden. Hardware oder Software RAID, was im Falle von Plattendefekten die Ausfallzeit minimiert oder vermeidet. Üblicherweise wird eine Mischung aus verschiedenen Strategien verwendet. Es kann zum Beispiel ein Sicherungsplan erstellt und automatisiert werden, um eine wöchentliche, vollständige Systemsicherung, ergänzt mit stündlichen ZFS-Snapshots, zu erstellen. Darüber hinaus könnte man eine manuelle Sicherung einzelner Verzeichnisse oder Dateien machen, bevor diese bearbeitet oder gelöscht werden. Dieser Abschnitt beschreibt einige Programme, die zur Erstellung und Verwaltung von Sicherungen unter &os; verwendet werden können. Sicherung von Dateisystemen Backup-Software dump / restore dump restore Die traditionellen &unix;-Programme zum Sichern und Wiederherstellen von Dateisystemen sind &man.dump.8; und &man.restore.8;. Diese Programme arbeiten auf der Block-Ebene der Festplatte, also unterhalb des Abstraktionslevels von Dateien, Links und Verzeichnissen, die die Grundlage des Dateisystemkonzepts bilden. Im Gegensatz zu anderen Backup-Programmen sichert dump ein ganzes Dateisystem und nicht nur einen Teil des Dateisystems, oder einen Verzeichnisbaum, der mehr als ein Dateisystem umfasst. Anstatt Dateien oder Verzeichnisse zu schreiben, schreibt dump die Blöcke, aus denen die Dateien und Verzeichnisse bestehen. Wird dump benutzt, um das Root-Verzeichnis zu sichern, werden /home, /usr und viele andere Verzeichnisse nicht gesichert, da dies normalerweise Mountpunkte für andere Dateisysteme oder symbolische Links zu diesen Dateisystemen sind. Wenn restore zum Extrahieren von Daten verwendet wird, werden temporäre Dateien standardmäßig in /tmp abgelegt. Wenn Sie von einer Platte mit einem kleinen /tmp-Verzeichnis zurücksichern, setzen Sie die Umgebungsvariable TMPDIR auf ein Verzeichnis mit mehr freiem Speicherplatz, damit die Wiederherstellung gelingt. Beachten Sie bei der Verwendung von dump, dass es einige Eigenarten aus den frühen Tagen der Version 6 von AT&T &unix; (ca. 1975) beibehalten hat. Die Standardparameter gehen davon aus, dass auf einem 9-Spur-Band gesichert wird, und nicht auf ein anderes Medium oder auf Sicherungsbänder mit hoher Dichte. Diese Standardwerte müssen auf der Kommandozeile überschrieben werden. .rhosts Es ist möglich, das Dateisystem über das Netzwerk auf einem anderen Rechner zu sichern, oder auf einem Bandlaufwerk eines anderen Rechners. Obwohl die Programme &man.rdump.8; und &man.rrestore.8; für diese Zwecke benutzt werden können, gelten sie als nicht sicher. Verwenden Sie stattdessen dump und restore in einer sichereren Weise über eine SSH-Verbindung. In diesem Beispiel wird eine vollständige, komprimierte Sicherung des /usr Dateisystems erstellt, das anschließend an einen bestimmten Host über eine SSH-Verbindung gesendet wird. <command>dump</command> mit <application>ssh</application> benutzen &prompt.root; /sbin/dump -0uan -f - /usr | gzip -2 | ssh -c blowfish \ targetuser@targetmachine.example.com dd of=/mybigfiles/dump-usr-l0.gz In diesem Beispiel wird RSH gesetzt, um über eine SSH-Verbindung eine Sicherung auf ein Bandlaufwerk eines entfernten Systems zu schreiben: <command>dump</command> über <application>ssh</application> mit gesetzter <envar>RSH</envar> benutzen &prompt.root; env RSH=/usr/bin/ssh /sbin/dump -0uan -f tatargetuser@targetmachine.example.com:/dev/sa0 /usr Sicherung von Verzeichnissen Backup-Software tar Einige integrierte Werkzeuge stehen zur Sicherung und Wiederherstellung von bestimmten Dateien und Verzeichnissen bei Bedarf zur Verfügung. Wenn es um die Sicherung von Dateien in einem Verzeichnis geht, ist &man.tar.1; eine gute Wahl. Dieses Werkzeug stammt aus Version 6 von AT&T &unix; und erwartet standardmäßig eine rekursive Sicherung auf ein lokales Band. Es können jedoch Optionen angegeben werden, um den Namen einer Sicherungsdatei zu bestimmen. tar In diesem Beispiel wird eine komprimierte Sicherung des aktuellen Verzeichnisses nach /tmp/mybackup.tgz gespeichert. Achten Sie bei der Sicherungsdatei darauf, dass sie nicht in dem Verzeichnis gepeichert wird, welches gesichert werden soll. Das aktuelle Verzeichnis mit <command>tar</command> sichern &prompt.root; tar czvf /tmp/mybackup.tgz . Um eine komplette Sicherung wiederherzustellen, wechseln Sie mit cd in das Verzeichnis, in dem Sie die Daten wiederherstellen möchten und geben Sie den Namen der Sicherungsdatei an. Beachten Sie, dass dabei alle Dateien in dem Verzeichnis überschrieben werden. Im Zweifel sichern Sie besser in einem temporären Verzeichnis, oder geben Sie den Verzeichnisnamen bei der Wiederherstellung an. Wiederherstellung mit <command>tar</command> in das aktuelle Verzeichnis &prompt.root; tar xzvf /tmp/mybackup.tgz Es gibt dutzende Optionen, die in &man.tar.1; beschrieben werden. Das Programm unterstützt auch die Verwendung von Ausschlußmustern, um bestimmte Dateien von der Sicherung oder Wiederherstellung von Verzeichnissen auszuschließen. Backup-Software cpio Um bestimmte, aufgelistete Dateien und Verzeichnisse zu sichern, ist &man.cpio.1; eine gute Wahl. Im Gegensatz zu tar weiß cpio nicht wie ein Verzeichnisbaum durchlaufen wird. Daher ist es auf eine Liste von zu sichernden Dateien angewiesen. So kann beispielsweise eine Liste von Dateien mit ls oder find erzeugt werden. Dieses Beispiel erstellt eine rekursive Liste des aktuellen Verzeichnisses, die dann über eine Pipe an cpio übergeben wird, um eine Sicherung namens /tmp/mybackup.cpio zu erstellen. Rekursive Sicherung des aktuellen Verzeichnisses mit <command>ls</command> und <command>cpio</command> &prompt.root; ls -R | cpio -ovF /tmp/mybackup.cpio Backup-Software pax pax POSIX IEEE &man.pax.1; ist ein Programm, welches versucht die Funktionen von tar und cpio zu kombinieren. Über die Jahre hinweg sind die verschiedenen Versionen von tar und cpio leicht inkompatibel geworden. Daher hat &posix; pax geschaffen, welches versucht viele der unterschiedlichen cpio- und tar-Formate zu lesen und zu schreiben, außerdem einige neue, eigene Formate. Für die vorangegangenen Beispiele wäre ein äquivalenter Aufruf von pax: Das aktuelle Verzeichnis mit <command>pax</command> sichern &prompt.root; pax -wf /tmp/mybackup.pax . Bandmedien benutzen Bandmedien Obwohl sich Bandmedien mit der Zeit weiterentwickelt haben, verwenden moderne Backup-Systeme in der Regel Offsite-Backups in Verbindung mit lokalen Wechseldatenträgern. &os; unterstützt alle SCSI-Bandlaufwerke, wie etwa LTO und DAT. Zusätzlich gibt es begrenzte Unterstützung für SATA- und USB-Bandlaufwerke. Für SCSI-Bandlaufwerke nutzt &os; den &man.sa.4; Treiber, der die Schnittstellen /dev/sa0, /dev/nsa0 und /dev/esa0 bereitstellt. Der Name des physikalischen Geräts ist /dev/sa0. Wird /dev/nsa0 benutzt, dann wird die Backup-Anwendung nach dem Schreibvorgang das Band nicht zurückspulen, was es ermöglicht, mehr als eine Datei auf das Band zu schreiben. Die Verwendung von /dev/esa0 wirft das Band aus, nachdem das Gerät geschlossen wurde. &os; nutzt mt für die Steuerung der Operationen des Bandlaufwerks, wie die Suche nach Dateien auf einem Band, oder um Kontrollmarkierungen auf ein Band zu schreiben. Beispielsweise können die ersten drei Dateien auf einem Band erhalten bleiben, indem sie übersprungen werden, bevor eine neue Datei auf das Band geschrieben wird &prompt.root; mt -f /dev/nsa0 fsf 3 Dieses Werkzeug unterstützt viele Operationen. Weitere Einzelheiten finden Sie in &man.mt.1;. Um eine Datei mit tar auf ein Band zu schreiben, geben Sie den Namen des Bandlaufwerks und den Dateinamen an: &prompt.root; tar cvf /dev/sa0 file Wiederherstellung von Dateien aus dem tar-Archiv von Band in das aktuelle Verzeichnis: &prompt.root; tar xvf /dev/sa0 Benutzen Sie dump, um ein UFSDateisystem zu sichern. Dieses Beispiel sichert /usr, ohne danach das Band zurückzuspulen: &prompt.root; dump -0aL -b64 -f /dev/nsa0 /usr Interaktive Wiederherstellung von Dateien aus einer &man.dump.8;-Datei von Band in das aktuelle Verzeichnis: &prompt.root; restore -i -f /dev/nsa0 Backup-Software von Drittanbietern Backup-Software Die &os; Ports-Sammlung enthält viele Programme von Drittanbietern, die verwendet werden können um die zeitliche Erstellung von Sicherungen zu planen, zu vereinfachen und bequemer zu machen. Viele dieser Programme basieren auf dem Client-Server-Modell und können benutzt werden, um die Sicherung von einzelnen Systemen oder allen Rechnern in einem Netzwerk zu automatisieren. Zu den bekannten Programmen gehören Amanda, Bacula, rsync und duplicity. Die Wiederherstellung in einem Notfall Zusätzlich zu den regelmäßigen Sicherungen empfiehlt es sich, die folgenden Schritte im Rahmen eines Notfallplans durchzuführen. bsdlabel Erstellen Sie einen Ausdruck der Ausgabe der folgenden Kommandos: gpart show more /etc/fstab dmesg Live-CD Bewahren Sie diesen Ausdruck und eine Kopie des Installationsmediums an einem sicheren Ort auf. Im Falle einer Wiederherstellung im Notfall, starten Sie von dem Installationsmedium und wählen Sie Live CD, um eine Rettungs-Shell zu starten. Dieser Rettungmodus kann verwendet werden, um den aktuellen Stand des Systems anzuzeigen, und wenn nötig, Festplatten zu formatieren und Daten aus den Sicherungen wiederherzustellen. Das Installationsmedium für &os;/&arch.i386; &rel2.current;-RELEASE enthält keine Rettungs-Shell. Laden Sie für diese Version ein Abbild der Livefs CD von ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/&arch.i386;/ISO IMAGES/&rel2.current;/&os;-&rel2.current;-RELEASE-&arch.i386;-livefs.iso. Als nächstes testen Sie die Rettungs-Shell und die Sicherungen. Dokumentieren Sie diesen Ablauf. Bewahren Sie diese Notizen zusammen mit den Medien, den Ausdrucken und den Sicherungen auf. Diese Notizen können Ihnen im Notfall helfen eine versehentliche Zerstörung der Sicherungen zu verhindern, während Sie unter Stress eine Wiederherstellung durchführen. Als zusätzliche Sicherheitsvorkehrung kann jeweils die letzte Sicherung an einem entfernten Standort aufbewahrt werden. Dieser Standort sollte räumlich von den Computern und Festplatten durch eine erhebliche Entfernung getrennt sein. Speicherbasierte Laufwerke MarcFonvieilleVerbessert und neu strukturiert von Neben physikalischen Laufwerken unterstützt &os; auch speicherbasierte Laufwerke. Eine mögliche Verwendung für ein speicherbarsiertes Laufwerk ist der Zugriff auf ein ISO-Dateisystem, jedoch ohne vorher die Daten auf eine CD oder DVD zu brennen und dann das Medium einzuhängen. &os; verwendet den &man.md.4; Treiber um Unterstützung für speicherbasierte Laufwerke bereitzustellen. Dieser Treiber ist bereits im GENERIC-Kernel enthalten. Wenn Sie eine angepasste Kernelkonfigurationsdatei verwenden, stellen Sie sicher, dass folgende Zeile enthalten ist: device md Ein- und Aushängen von bestehenden Abbildern Laufwerke speicherbasierte Um ein bestehendes Abbild eines Dateisystems einzuhängen, verwenden Sie mdconfig zusammen mit dem Namen der ISO-Datei und einer freien Gerätenummer. Benutzen Sie dann diese Gerätenummer, um das Abbild in einen existierenden Mountpunkt einzuhängen. Sobald dies erledigt ist, erscheinen die Dateien des Abbildes unterhalb des Mountpunktes. Dieses Beispiel wird diskimage.iso an das speicherbasierte Laufwerk /dev/md0 binden und dann in /mnt einhängen: &prompt.root; mdconfig -f diskimage.iso -u 0 &prompt.root; mount /dev/md0 /mnt Wenn keine Gerätenummer mit angegeben ist, wird von &man.md.4; automatisch eine ungenutzte Gerätenummer zugewiesen. Das zugewiesene Gerät wird auf der Standardausgabe ausgegeben (zum Beispiel md4). Weitere Informationen zu diesem Kommando und dessen Optionen finden Sie in &man.mdconfig.8;. Laufwerke speicherbasiertes Laufwerk aushängen Wenn ein speicherbasiertes Laufwerk nicht mehr in Gebrauch ist, sollten seine belegten Ressourcen wieder an das System zurückgegeben werden. Hängen Sie zuerst das Dateisystem aus, dann verwenden Sie mdconfig, um die Platte vom System zu trennen und die Ressourcen freizugeben. &prompt.root; umount /mnt &prompt.root; mdconfig -d -u 0 Um festzustellen, ob noch irgendwelche speicherbasierten Laufwerke am System angeschlossen sind, benutzen Sie mdconfig -l. Ein datei- oder speicherbasiertes Laufwerk erzeugen Laufwerke speicherbasierte &os; unterstützt auch speicherbasierte Laufwerke, bei denen der verwendete Speicher entweder einer Festplatte, oder einem Bereich im Arbeitsspeicher zugewiesen wird. Die erste Methode ist gemeinhin als dateibasiertes Dateisystem, die zweite als speicherbasiertes Dateisystem bekannt. Beide Typen können mit mdconfig erzeugt werden. Um ein speicherbasiertes Dateisystem zu erstellen, geben Sie den Typ swap sowie die gewünschte Größe des Laufwerks an. Dieses Beispiel erzeugt ein 5 MB großes Laufwerk an der Gerätenummer 1. Das Laufwerk wird mit dem UFS-Dateisystem formatiert, bevor es eingehängt wird: &prompt.root; mdconfig -a -t swap -s 5m -u 1 &prompt.root; newfs -U md1 /dev/md1: 5.0MB (10240 sectors) block size 16384, fragment size 2048 using 4 cylinder groups of 1.27MB, 81 blks, 192 inodes. with soft updates super-block backups (for fsck -b #) at: 160, 2752, 5344, 7936 &prompt.root; mount /dev/md1 /mnt &prompt.root; df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md1 4718 4 4338 0% /mnt Um ein dateibasiertes Dateisystem zu erstellen, muss zunächst ein Stück Speicher auf der Festplatte reserviert werden. Dieses Beispiel erzeugt eine 5 KB große Datei namens newimage: &prompt.root; dd if=/dev/zero of=newimage bs=1k count=5k 5120+0 records in 5120+0 records out Als nächstes muss diese Datei an ein speicherbasiertes Laufwerk gebunden, gelabelt und mit dem UFS-Dateisystem formatiert werden. Danach können Sie das Laufwerk einhängen und die Größe überprüfen: &prompt.root; mdconfig -f newimage -u 0 &prompt.root; bsdlabel -w md0 auto &prompt.root; newfs md0a /dev/md0a: 5.0MB (10224 sectors) block size 16384, fragment size 2048 using 4 cylinder groups of 1.25MB, 80 blks, 192 inodes. super-block backups (for fsck -b #) at: 160, 2720, 5280, 7840 &prompt.root; mount /dev/md0a /mnt &prompt.root; df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md0a 4710 4 4330 0% /mnt Es benötigt mehrere Befehle, um ein datei- oder speicherbasiertes Dateisystem mit mdconfig zu erstellen. &os; enthält auch mdmfs, das ein speicherbasiertes Laufwerk automatisch konfigurieren, formatieren und einhängen kann. Nachdem beispielsweise newimage mit dd erstellt wurde, hätte auch der folgende Befehl benutzt werden können, anstelle der oben verwendeten Kommandos bsdlabel, newfs und mount: &prompt.root; mdmfs -F newimage -s 5m md0 /mnt Um hingegen ein speicherbasiertes Laufwerk mit mdmfs zu erstellen, wird dieser Befehl benutzt: &prompt.root; mdmfs -s 5m md1 /mnt Wenn die Gerätenummer nicht angegeben wird, wählt mdmfs automatisch ein ungenutztes Gerät aus. Weitere Einzelheiten über mdmfs finden Sie in &man.mdmfs.8;. Schnappschüsse von Dateisystemen TomRhodesBeigetragen von Schnappschüsse von Dateisystemen Zusammen mit Soft Updates bietet &os; eine weitere Funktion: Schnappschüsse von Dateisystemen. UFS-Schnappschüsse sind Dateien, die ein Abbild eines Dateisystems enthalten und müssen auf dem jeweiligen Dateisystem erstellt werden. Pro Dateisystem darf es maximal 20 Schnappschüsse, die im Superblock vermerkt werden, geben. Schnappschüsse bleiben erhalten, wenn das Dateisystem abgehangen, neu eingehangen oder das System neu gestartet wird. Wenn ein Schnappschuss nicht mehr benötigt wird, kann er mit &man.rm.1; gelöscht werden. Es ist egal, in welcher Reihenfolge Schnappschüsse gelöscht werden. Es kann allerdings vorkommen, dass nicht der gesamte Speicherplatz wieder freigegeben wird, da ein anderer Schnappschuss einen Teil der entfernten Blöcke für sich beanspruchen kann. Das unveränderliche -Dateiflag wird nach der Erstellung des Snaphshots von &man.mksnap.ffs.8; gesetzt. Durch die Verwendung von &man.unlink.1; ist es allerdings möglich, einen Schnappschuss zu löschen. Schnappschüsse werden mit &man.mount.8; erstellt. Das folgende Kommando legt einen Schnappschuss von /var in /var/snapshot/snap ab: &prompt.root; mount -u -o snapshot /var/snapshot/snap /var Alternativ kann der Schnappschuss auch mit &man.mksnap.ffs.8; erstellt werden. &prompt.root; mksnap_ffs /var /var/snapshot/snap Um Schnappschüsse auf einem Dateisystem, beispielsweise /var zu finden, kann man &man.find.1; verwenden: &prompt.root; find /var -flags snapshot Nachdem ein Schnappschuss erstellt wurde, können Sie ihn für verschiedene Zwecke benutzen: Sie können den Schnappschuss für die Datensicherung benutzen und ihn auf eine CD oder ein Band schreiben. Die Intigrität des Schnappschusses kann mit &man.fsck.8; geprüft werden. Wenn das Dateisystem zum Zeitpunkt der Erstellung des Schnappschusses in Ordnung war, sollte &man.fsck.8; immer erfolgreich durchlaufen. Sie können den Schnappschuss mit &man.dump.8; sichern. Sie erhalten dann eine konsistente Sicherung des Dateisystems zu dem Zeitpunkt, der durch den Zeitstempel des Schnappschusses gegeben ist. Der Schalter von &man.dump.8; erstellt für die Sicherung einen Schnappschuss und entfernt diesen am Ende der Sicherung wieder. Sie können einen Schnappschuss in den Verzeichnisbaum einhängen und sich dann den Zustand des Dateisystems zu dem Zeitpunkt ansehen, an dem der Schnappschuss erstellt wurde. Der folgende Befehl hängt den Schnappschuss /var/snapshot/snap ein: &prompt.root; mdconfig -a -t vnode -f /var/snapshot/snap -u 4 &prompt.root; mount -r /dev/md4 /mnt Der eingefrorene Stand des /var-Dateisystems ist nun unterhalb von /mnt verfügbar. Mit Ausnahme der früheren Schnappschüsse, die als leere Dateien auftauchen, wird zu Beginn alles so aussehen, wie zum Zeitpunkt der Erstellung des Schnappschusses. Der Schnappschuss kann wie folgt abgehängt werden: &prompt.root; umount /mnt &prompt.root; mdconfig -d -u 4 Weitere Informationen über Soft Updates und Schnappschüsse von Dateisystemen sowie technische Artikel finden Sie auf der Webseite von Marshall Kirk McKusick. Disk Quotas Accounting Plattenplatz Disk Quotas Disk Quotas erlauben dem Administrator, den Plattenplatz und/oder die Anzahl der Dateien eines Benutzers oder der Mitglieder einer Gruppe, auf Dateisystemebene zu beschränken. Dadurch wird verhindert, dass ein Benutzer oder eine Gruppe von Benutzern den ganzen verfügbaren Plattenplatz belegt. Dieser Abschnitt beschreibt die Konfiguration von Disk Quotas für UFS-Dateisysteme. Lesen Sie , wenn Sie Disk Quotas auf einem ZFS-Dateisystem einrichten möchten. Disk Quotas aktivieren Prüfen Sie zunächst, ob der &os;-Kernel Disk Quotas unterstützt: &prompt.user; sysctl kern.features.ufs_quota kern.features.ufs_quota: 1 In diesem Beispiel zeigt die 1 an, das Quotas unterstützt werden. Falls 0 ausgegeben wird, fügen Sie folgende Zeile in die Kernelkonfigurationsdatei ein, und folgen Sie den Anweisungen in um den Kernel zu aktualisieren: options QUOTA Als nächstes aktivieren Sie Disk Quotas in /etc/rc.conf: quota_enable="YES" Disk Quotas überprüfen Normalerweise wird beim Booten die Integrität der Quotas auf allen Dateisystemen mit &man.quotacheck.8; überprüft. Dieses Programm stellt sicher, dass die Quota-Datenbank mit den Daten auf einem Dateisystem übereinstimmt. Dies ist allerdings ein zeitraubender Prozess, der die Zeit, die das System zum Booten braucht, signifikant beeinflusst. Eine Variable in /etc/rc.config erlaubt es, diesen Schritt zu überspringen: check_quotas="NO" Zuletzt muss noch /etc/fstab bearbeitet werden, um die Plattenquotas auf Dateisystemebene zu aktivieren. Um Quotas pro Benutzer für ein Dateisystem zu aktivieren, geben Sie für dieses Dateisystem im Feld Optionen von /etc/fstab an. Zum Beispiel: /dev/da1s2g /home ufs rw,userquota 1 2 Um Quotas für Gruppen einzurichten, verwenden Sie . Um Quotas für Benutzer und Gruppen einzurichten, trennen Sie die Optionen durch Kommata: /dev/da1s2g /home ufs rw,userquota,groupquota 1 2 Quota-Dateien werden standardmäßig im Rootverzeichnis des Dateisystems unter quota.user und quota.group abgelegt. Weitere Informationen finden Sie in &man.fstab.5;. Es wird nicht empfohlen, Quota-Dateien an anderen Stellen zu speichern. Sobald die Konfiguration abgeschlossen ist, starten Sie das System neu. /etc/rc wird dann automatisch die richtigen Kommandos aufrufen, um die Quota-Dateien für alle in /etc/rc.conf definierten Quotas anzulegen. Normalerweise brauchen die Kommandos &man.quotacheck.8;, &man.quotaon.8; oder &man.quotaoff.8; nicht händisch aufgerufen werden, obwohl man die entsprechenden Seiten im Manual lesen sollte, um sich mit ihnen vertraut zu machen. Setzen von Quota-Limits Disk Quotas Limits Stellen Sie sicher, dass Quotas auch tatsächlich aktiviert sind: &prompt.root; quota -v Für jedes Dateisystem, auf dem Quotas aktiviert sind, sollte eine Zeile mit der Plattenauslastung und den aktuellen Quota-Limits zu sehen sein. Mit edquota können nun Quota-Limits zugewiesen werden. Mehrere Möglichkeiten stehen zur Verfügung, um Limits für den Plattenplatz, den ein Benutzer oder eine Gruppe verbrauchen kann, oder die Anzahl der Dateien, die angelegt werden dürfen, festzulegen. Die Limits können auf dem Plattenplatz (Block-Quotas), der Anzahl der Dateien (Inode-Quotas) oder einer Kombination von beiden basieren. Jedes Limit wird weiterhin in zwei Kategorien geteilt: Hardlimits und Softlimits. Hardlimit Ein Hardlimit kann nicht überschritten werden. Hat der Benutzer einmal ein Hardlimit erreicht, so kann er auf dem betreffenden Dateisystem keinen weiteren Platz mehr beanspruchen. Hat ein Benutzer beispielsweise ein Hardlimit von 500 Kilobytes auf einem Dateisystem und benutzt davon 490 Kilobyte, so kann er nur noch 10 weitere Kilobytes beanspruchen. Der Versuch, weitere 11 Kilobytes zu beanspruchen, wird fehlschlagen. Softlimit Softlimits können für eine befristete Zeit überschritten werden. Diese Frist beträgt in der Grundeinstellung eine Woche. Hat der Benutzer das Softlimit über die Frist hinaus überschritten, so wird das Softlimit in ein Hardlimit umgewandelt und der Benutzer kann keinen weiteren Platz mehr beanspruchen. Wenn er einmal das Softlimit unterschreitet, wird die Frist wieder zurückgesetzt. Im folgenden Beispiel wird das Quota des Benutzerkonto test bearbeitet. Wenn edquota aufgerufen wird, wird der in EDITOR definierte Editor aufgerufen, um die Quota-Limts zu konfigurieren. Der Standard-Editor ist vi. &prompt.root; edquota -u test Quotas for user test: /usr: kbytes in use: 65, limits (soft = 50, hard = 75) inodes in use: 7, limits (soft = 50, hard = 60) /usr/var: kbytes in use: 0, limits (soft = 50, hard = 75) inodes in use: 0, limits (soft = 50, hard = 60) Für jedes Dateisystem, auf dem Quotas aktiv sind, sind zwei Zeilen zu sehen. Eine repräsentiert die Block-Quotas und die andere die Inode-Quotas. Um ein Limit zu modifizieren, ändern Sie einfach den angezeigten Wert. Um beispielsweise das Blocklimit von /usr auf ein Softlimit von 500 und ein Hardlimit von 600 zu erhöhen, ändern Sie die Zeile wie folgt: /usr: kbytes in use: 65, limits (soft = 500, hard = 600) Die neuen Limits sind wirksam, sobald der Editor verlassen wird. Manchmal ist es wünschenswert, die Limits für eine Reihe von Benutzern zu setzen. Dazu weisen Sie zunächst einem Benutzer das gewünschte Quota-Limit zu. Anschließend benutzen Sie , um das Quota auf einen bestimmten Bereich von Benutzer-IDs (UID) zu duplizieren. Der folgende Befehl dupliziert die Quota-Limits auf die UIDs 10000 bis 19999: &prompt.root; edquota -p test 10000-19999 Weitere Informationen finden Sie in &man.edquota.8;. Überprüfen von Quota-Limits und Plattennutzung Disk Quotas überprüfen Um die Limits oder die Plattennutzung individueller Benutzer und Gruppen zu überprüfen, kann &man.quota.1; benutzt werden. Ein Benutzer kann nur die eigenen Quotas und die Quotas der Gruppe, der er angehört untersuchen. Nur der Superuser darf sich alle Limits ansehen. Mit &man.repquota.8; erhalten Sie eine Zusammenfassung von allen Limits und der Plattenausnutzung für alle Dateisysteme, auf denen Quotas aktiv sind. In der Ausgabe von &man.quota.1; werden Dateisysteme, auf denen ein Benutzer keinen Platz verbraucht, nicht angezeigt, auch wenn diesem Quotas zugewiesen wurden. Benutzen Sie um solche Dateisysteme ebenfalls anzuzeigen. Das folgende Beispiel zeigt die Ausgabe von quota -v für einen Benutzer, der Quota-Limits auf zwei Dateisystemen besitzt: Disk quotas for user test (uid 1002): Filesystem usage quota limit grace files quota limit grace /usr 65* 50 75 5days 7 50 60 /usr/var 0 50 75 0 50 60 grace period Im Dateisystem /usr liegt der Benutzer momentan 15 Kilobytes über dem Softlimit von 50 Kilobytes und hat noch 5 Tage seiner Frist übrig. Der Stern * zeigt an, dass der Benutzer sein Limit überschritten hat. Quotas über NFS NFS Quotas werden von dem Quota-Subsystem auf dem NFS-Server erzwungen. Der &man.rpc.rquotad.8; Daemon stellt quota die Quota Informationen auf dem NFS-Client zur Verfügung, so dass Benutzer auf diesen Systemen ihre Quotas abfragen können. Sie aktivieren rpc.rquotad auf dem NFS-Server, indem Sie das Zeichen # auf folgender Zeile in /etc/inetd.conf entfernen: rquotad/1 dgram rpc/udp wait root /usr/libexec/rpc.rquotad rpc.rquotad Anschließend starten Sie inetd neu: &prompt.root; service inetd restart Partitionen verschlüsseln LuckyGreenBeigetragen von
shamrock@cypherpunks.to
Partitionen verschlüsseln &os; bietet ausgezeichnete Möglichkeiten, Daten vor unberechtigten Zugriffen zu schützen. Wenn das Betriebssystem läuft, schützen Zugriffsrechte und vorgeschriebene Zugriffskontrollen (MAC) (siehe ) die Daten. Die Zugriffskontrollen des Betriebssystems schützen allerdings nicht vor einem Angreifer, der Zugriff auf den Rechner hat. Der Angreifer kann eine Festplatte in ein anderes System einbauen und dort die Daten analysieren. Die für &os; verfügbaren kryptografischen Subsysteme, GEOM Based Disk Encryption (gbde) und geli sind in der Lage, Daten auf Dateisystemen auch vor hoch motivierten Angreifern zu schützen, die über erhebliche Mittel verfügen. Dieser Schutz ist unabhängig von der Art und Weise, durch die ein Angreifer Zugang zu einer Festplatte oder zu einem Rechner erlangt hat. Im Gegensatz zu anderen Verschlüsselungsmethoden, bei denen einzelne Dateien verschlüsselt werden, verschlüsseln gbde und geli transparent ganze Dateisysteme. Auf der Festplatte werden dabei keine Daten im Klartext gespeichert. Dieses Kapitel zeigt, wie ein verschlüsseltes Dateisystem unter &os; erstellt wird. Zunächst wird der Ablauf für gbde beschrieben und anschließend das gleiche Beispiel für geli. Plattenverschlüsselung mit <application>gbde</application> Das Ziel von &man.gbde.4; ist es, einen Angreifer vor eine große Herausforderung zu stellen, um an die Daten einer Festplatte zu gelangen. Falls jedoch der Rechner kompromittiert wurde, während er im Betrieb war und das Speichergerät aktiv verbunden war, oder wenn der Angreifer eine gültige Passphrase kennt, bietet dieses System keinen Schutz für die Daten der Festplatte. Daher ist es wichtig, für die physische Sicherheit zu sorgen, während das System im Betrieb ist. Außerdem muss die Passphrase für den Verschlüsselungsmechanismus geschützt werden. &man.gbde.4; besitzt einige Funktionen um die Daten, die in einem Sektor gespeichert sind, zu schützen. Es benutzt 128-Bit AES im CBC-Modus, um die Daten eines Sektors zu verschlüsseln. Jeder Sektor einer Festplatte wird mit einem anderen AES-Schlüssel verschlüsselt. Weitere Informationen zum kryptographischen Design und wie die Schlüssel für einen Sektor aus der gegebenen Passphrase ermittelt werden, finden Sie in &man.gbde.4;. &os; enthält ein Kernelmodul für gbde, das wie folgt geladen werden kann: &prompt.root; kldload geom_bde Wenn Sie einen angepassten Kernel verwenden, stellen Sie sicher, dass folgende Zeile in der Kernelkonfigurationsdatei enthalten ist: options GEOM_BDE Das folgende Beispiel beschreibt, wie eine Partition auf einer neuen Festplatte verschlüsselt wird. Die Partition wird in /private eingehangen. Eine Partition mit <application>gbde</application> verschlüsseln Installieren der Festplatte Installieren Sie die Festplatte wie in beschrieben. Im Beispiel verwenden wir die Partition /dev/ad4s1c. Die Gerätedateien /dev/ad0s1* sind Standard-Partitionen des &os;-Systems. &prompt.root; ls /dev/ad* /dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1 /dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c /dev/ad0s1a /dev/ad0s1d /dev/ad4 Verzeichnis für gbde-Lock-Dateien anlegen &prompt.root; mkdir /etc/gbde Die Lock-Dateien sind für den Zugriff von gbde auf verschlüsselte Partitionen notwendig. Ohne die Lock-Dateien können die Daten nur mit erheblichem manuellen Aufwand wieder entschlüsselt werden (dies wird auch von der Software nicht unterstützt). Jede verschlüsselte Partition benötigt eine gesonderte Lock-Datei. Vorbereiten der gbde-Partition Eine von gbde benutzte Partition muss einmalig initialisiert werden, bevor sie benutzt werden kann. Das Programm öffnet eine Vorlage im Standard-Editor, um verschiedene Optionen zu konfigurieren. Setzen Sie sector_size auf 2048, wenn Sie UFS benutzen: &prompt.root; gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c.lock# $FreeBSD: src/sbin/gbde/template.txt,v 1.1.36.1 2009/08/03 08:13:06 kensmith Exp $ # # Sector size is the smallest unit of data which can be read or written. # Making it too small decreases performance and decreases available space. # Making it too large may prevent filesystems from working. 512 is the # minimum and always safe. For UFS, use the fragment size # sector_size = 2048 [...] Sobald die Änderungen gespeichert werden, wird der Benutzer zweimal aufgefordert, die zum Schutz der Daten verwendete Passphrase einzugeben. Die Passphrase muss beide Mal gleich eingegeben werden. Die Sicherheit der Daten hängt allein von der Qualität der gewählten Passphrase ab. Die Auswahl einer sicheren und leicht zu merkenden Passphrase wird auf der Webseite http://world.std.com/~reinhold/diceware.html beschrieben. Bei der Initialisierung wird eine Lock-Datei für die gbde-Partition erstellt. In diesem Beispiel /etc/gbde/ad4s1c.lock. Lock-Dateien müssen die Dateiendung .lock aufweisen, damit sie von /etc/rc.d/gbde, dem Startskript von gbde, erkannt werden. Lock-Dateien müssen immer zusammen mit den verschlüsselten Dateisystemen gesichert werden. Ohne die Lock-Datei können Sie allerdings nicht auf die verschlüsselten Daten zugreifen. Einbinden der verschlüsselten Partition in den Kernel &prompt.root; gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lock Dieses Kommando fragt die Passphrase ab, die bei der Initialisierung der verschlüsselten Partition eingegeben wurde. Das neue verschlüsselte Gerät erscheint danach in /dev als /dev/device_name.bde: &prompt.root; ls /dev/ad* /dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1 /dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c /dev/ad0s1a /dev/ad0s1d /dev/ad4 /dev/ad4s1c.bde Dateisystem auf dem verschlüsselten Gerät anlegen Nachdem die verschlüsselte Partition im Kernel eingebunden ist, kann ein Dateisystem erstellt werden. Dieses Beispiel erstellt ein UFS-Dateisystem mit aktivierten Soft Updates. Achten Sie darauf, die Partition mit der Erweiterung *.bde zu benutzen: &prompt.root; newfs -U -O2 /dev/ad4s1c.bde Einhängen der verschlüsselten Partition Legen Sie einen Mountpunkt für das verschlüsselte Dateisystem an. Hängen Sie anschließend das Dateisystem ein: &prompt.root; mkdir /private &prompt.root; mount /dev/ad4s1c.bde /private Überprüfen des verschlüsselten Dateisystems Das verschlüsselte Dateisystem sollte jetzt erkannt und benutzt werden können: &prompt.user; df -H Filesystem Size Used Avail Capacity Mounted on /dev/ad0s1a 1037M 72M 883M 8% / /devfs 1.0K 1.0K 0B 100% /dev /dev/ad0s1f 8.1G 55K 7.5G 0% /home /dev/ad0s1e 1037M 1.1M 953M 0% /tmp /dev/ad0s1d 6.1G 1.9G 3.7G 35% /usr /dev/ad4s1c.bde 150G 4.1K 138G 0% /private Nach jedem Neustart müssen verschlüsselte Dateisysteme dem Kernel wieder bekannt gemacht werden, auf Fehler überprüft werden und eingehangen werden. Für die dazu nötigen Schritte fügen Sie folgende Zeilen in /etc/rc.conf hinzu: gbde_autoattach_all="YES" gbde_devices="ad4s1c" gbde_lockdir="/etc/gbde" Durch diese Argumente muss beim Systemstart auf der Konsole die Passphrase eingegeben werden. Erst nach Eingabe der korrekten Passphrase wird die verschlüsselte Partition automatisch in den Verzeichnisbaum eingehängt. Weitere Bootoptionen von gbde finden Sie in &man.rc.conf.5;. sysinstall ist nicht kompatibel mit gbde-verschlüsselten Geräten. Bevor sysinstall gestartet wird, müssen alle *.bde Geräte vom Kernel getrennt werden, da sonst der Kernel bei der ersten Suche nach Geräten abstürzt. Um das verschlüsselte Gerät aus dem Beispiel zu trennen, benutzen Sie das folgende Kommando: &prompt.root; gbde detach /dev/ad4s1c Plattenverschlüsselung mit <command>geli</command> DanielGerzoBeigetragen von Mit geli steht eine alternative kryptografische GEOM-Klasse zur Verfügung. Dieses Werkzeug unterstützt unterschiedliche Fähigkeiten und verfolgt einen anderen Ansatz für die Verschlüsselung. geli bietet die folgenden Funktionen: Die Nutzung des &man.crypto.9;-Frameworks. Wenn das System über kryptografische Hardware verfügt, wird diese von geli automatisch verwendet. Die Unterstützung verschiedener kryptografischer Algorithmen, wie AES, Blowfish, und 3DES. Die Möglichkeit, die root-Partition zu verschlüsseln. Um auf die verschlüsselte root-Partition zugreifen zu können, muss beim Systemstart die Passphrase eingegeben werden. Erlaubt den Einsatz von zwei voneinander unabhängigen Schlüsseln. Es ist durch einfache Sektor-zu-Sektor-Verschlüsselung sehr schnell. Die Möglichkeit, Master-Keys zu sichern und wiederherzustellen. Wenn ein Benutzer seinen Schlüssel zerstört, kann er über seinen zuvor gesicherten Schlüssel wieder auf seine Daten zugreifen. geli erlaubt es, Platten mit einem zufälligen Einmal-Schlüssel einzusetzen, was für Swap-Partitionen und temporäre Dateisysteme interessant ist. Weitere Funktionen und Anwendungsbeispiele finden Sie in &man.geli.8;. Das folgende Beispiel beschreibt, wie eine Schlüsseldatei erzeugt wird, die als Teil des Master-Keys für den Verschlüsselungs-Provider verwendet wird, der unter /private in den Verzeichnisbaum eingehängt wird. Die Schlüsseldatei liefert zufällige Daten, die für die Verschlüsselung des Master-Keys benutzt werden. Zusätzlich wird der Master-Key durch eine Passphrase geschützt. Die Sektorgröße des Providers beträgt 4 KB. Das Beispiel beschreibt, wie Sie einen geli-Provider aktivieren, ein vom ihm verwaltetes Dateisystem erzeugen, es mounten, mit ihm arbeiten und wie Sie es schließlich wieder unmounten und den Provider deaktivieren. Eine Partition mit <command>geli</command> verschlüsseln Laden der <command>geli</command>-Unterstützung Die Unterstützung für geli ist bereits im GENERIC enthalten. Damit das Modul automatisch beim Booten geladen wird, fügen Sie folgende Zeile in /boot/loader.conf ein: geom_eli_load="YES" Um das Modul direkt zu laden: &prompt.root; kldload geom_eli Stellen Sie bei einer angepassten Kernelkonfigurationsdatei sicher, dass diese Zeilen enthalten sind: options GEOM_ELI device crypto Erzeugen des Master-Keys Die folgenden Befehle erzeugen einen Master-Key (/root/da2.key), der durch eine Passphrase geschützt ist. Die Datenquelle für die Schlüsseldatei ist /dev/random. Um eine bessere Leistung zu erzielen beträgt die Sektorgröße des Providers (/dev/da2.eli) 4 KB: &prompt.root; dd if=/dev/random of=/root/da2.key bs=64 count=1 &prompt.root; geli init -s 4096 -K /root/da2.key /dev/da2 Enter new passphrase: Reenter new passphrase: Es ist nicht zwingend nötig, sowohl eine Passphrase als auch eine Schlüsseldatei zu verwenden. Die einzelnen Methoden können auch unabhängig voneinander eingesetzt werden. Wird für die Schlüsseldatei - angegeben, wird dafür die Standardeingabe verwendet. Das folgende Kommando erzeugt beispielsweise drei Schlüsseldateien: &prompt.root; cat keyfile1 keyfile2 keyfile3 | geli init -K - /dev/da2 Aktivieren des Providers mit dem erzeugten Schlüssel Um den Provider zu aktivieren, geben Sie die Schlüsseldatei, den Namen des Laufwerks und die Passphrase an: &prompt.root; geli attach -k /root/da2.key /dev/da2 Enter passphrase: Dadurch wird ein neues Gerät mit der Erweiterung .eli angelegt: &prompt.root; ls /dev/da2* /dev/da2 /dev/da2.eli Das neue Dateisystem erzeugen Als nächstes muss das Gerät mit dem UFS-Dateisystem formatiert und an einen vorhandenen Mountpunkt eingehängt werden: &prompt.root; dd if=/dev/random of=/dev/da2.eli bs=1m &prompt.root; newfs /dev/da2.eli &prompt.root; mount /dev/da2.eli /private Das verschlüsselte Dateisystem sollte jetzt erkannt und benutzt werden können: &prompt.root; df -H Filesystem Size Used Avail Capacity Mounted on /dev/ad0s1a 248M 89M 139M 38% / /devfs 1.0K 1.0K 0B 100% /dev /dev/ad0s1f 7.7G 2.3G 4.9G 32% /usr /dev/ad0s1d 989M 1.5M 909M 0% /tmp /dev/ad0s1e 3.9G 1.3G 2.3G 35% /var /dev/da2.eli 150G 4.1K 138G 0% /private Wenn Sie nicht mehr mit dem verschlüsselten Dateisystem arbeiten und die unter /private eingehängte Partition daher nicht mehr benötigen, sollten Sie diese unmounten und den geli-Verschlüsselungs-Provider wieder deaktivieren: &prompt.root; umount /private &prompt.root; geli detach da2.eli &os; verfügt über ein rc.d-Skript, das dass Einhängen von verschlüsselten Geräten beim Booten deutlich vereinfacht. Für dieses Beispiel, fügen Sie folgende Zeilen in /etc/rc.conf hinzu: geli_devices="da2" geli_da2_flags="-k /root/da2.key" Dies konfiguriert /dev/da2 als geli-Provider mit dem Master-Key /root/da2.key. Das System wird den Provider automatisch deaktivieren, bevor es heruntergefahren wird. Während des Startvorgangs fordert das Skript die Passphrase an, bevor der Provider aktiviert wird. Vor und nach der Eingabeaufforderung für die Passphrase werden noch weitere Kernelmeldungen angezeigt. Achten Sie sorgfältig auf die Eingabeaufforderung zwischen den anderen Meldungen, falls es zu Problemen beim Startvorgang kommt. Sobald die richtige Passphrase eingegeben wurde, wird der Provider aktiviert. Anschließend werden die Dateisysteme gemäß /etc/fstab eingehängt. Lesen Sie wenn Sie wissen möchten, wie Sie ein Dateisystem konfigurieren, sodass es beim booten automatisch gestartet wird.
Den Auslagerungsspeicher verschlüsseln ChristianBrüfferGeschrieben von Auslagerungsspeicher verschlüsseln Wie die Verschlüsselung von Partitionen, wird auch der Auslagerungsspeicher verschlüsselt, um sensible Informationen zu schützen. Stellen Sie sich eine Anwendung vor, die mit Passwörtern umgeht. Solange sich diese Passwörter im Arbeitsspeicher befinden, werden sie nicht auf die Festplatte geschrieben und nach einem Neustart gelöscht. Falls &os; jedoch damit beginnt Speicher auszulagern, um Platz für andere Anwendungen zu schaffen, können die Passwörter unverschlüsselt auf die Festplatte geschrieben werden. Die Verschlüsselung des Auslagerungsspeichers kann in solchen Situationen Abhilfe schaffen. Dieser Abschnitt zeigt die Konfiguration eines verschlüsselten Auslagerungsspeichers mittels &man.gbde.8; oder &man.geli.8;. In den Beispielen repräsentiert /dev/ada0s1b die Swap-Partition. Konfiguration eines verschlüsselten Auslagerungsspeichers Swap-Partitionen werden standardmäßig nicht verschlüsselt. Sie sollten daher alle sensiblen Daten im Auslagerungsspeicher löschen, bevor Sie fortfahren. Führen Sie folgenden Befehl aus, um die Swap-Partition mit Zufallsdaten zu überschreiben: &prompt.root; dd if=/dev/random of=/dev/ad0s1b bs=1m Um den Auslagerungsspeicher mit &man.gbde.8; zu verschlüsseln, fügen Sie in /etc/fstab das Suffix .bde an den Gerätenamen der Swap-Partition hinzu: # Device Mountpoint FStype Options Dump Pass# /dev/ad0s1b.bde none swap sw 0 0 Wenn Sie &man.geli.8; benutzen, verwenden Sie stattdessen das Suffix .eli, um den Auslagerungsspeicher zu verschlüsseln: # Device Mountpoint FStype Options Dump Pass# /dev/ad0s1b.eli none swap sw 0 0 In der Voreinstellung verschlüsselt &man.geli.8; mit dem AES-Algorithmus und einer Schlüssellänge von 128 Bit. Diese Voreinstellungen können mittels geli_swap_flags in /etc/rc.conf angepasst werden. Die folgende Zeile weist das rc.d-Skript encswap an, &man.geli.8;-Swap-Partitionen mit dem Blowfish-Algorithmus und einer Schlüssellänge von 128 Bit zu verschlüsseln. Zusätzlich wird die Sektorgröße auf 4 Kilobyte gesetzt und detach on last close aktiviert: geli_swap_flags="-e blowfish -l 128 -s 4096 -d" Eine Auflistung möglicher Optionen für onetime finden Sie in der Manualpage von &man.geli.8;. Überprüfung des verschlüsselten Auslagerungsspeichers Nachdem das System neu gestartet wurde, kann die korrekte Funktion des verschlüsselten Auslagerungsspeichers mit swapinfo geprüft werden. Wenn Sie &man.gbde.8; einsetzen, erhalten Sie eine Meldung ähnlich der folgenden: &prompt.user; swapinfo Device 1K-blocks Used Avail Capacity /dev/ad0s1b.bde 542720 0 542720 0% Wenn Sie &man.geli.8; einsetzen, erhalten Sie hingegen eine Ausgabe ähnlich der folgenden: &prompt.user; swapinfo Device 1K-blocks Used Avail Capacity /dev/ad0s1b.eli 542720 0 542720 0% Highly Available Storage (<acronym>HAST</acronym>) DanielGerzoBeigetragen von FreddieCashMit Beiträgen von Pawel JakubDawidek Michael W.Lucas ViktorPetersson BenedictReuschlingÜbersetzt von HAST high availability Hochverfügbarkeit ist eine der Hauptanforderungen von ernsthaften Geschäftsanwendungen und hochverfügbarer Speicher ist eine Schlüsselkomponente in solchen Umgebungen. Highly Available STorage (HAST) ist ein Framework in &os;, welches die transparente Speicherung der gleichen Daten über mehrere physikalisch getrennte Maschinen ermöglicht, die über ein TCP/IP-Netzwerk verbunden sind. HAST kann als ein netzbasiertes RAID1 (Spiegel) verstanden werden und ist dem DRBD®-Speichersystem der GNU/&linux;-Plattform ähnlich. In Kombination mit anderen Hochverfügbarkeitseigenschaften von &os; wie CARP, ermöglicht es HAST, hochverfügbare Speichercluster zu bauen, die in der Lage sind, Hardwareausfällen zu widerstehen. Die Hauptmerkmale von HAST sind: Es kann zur Maskierung von I/O-Fehlern auf lokalen Festplatten eingesetzt werden. Dateisystem-unabhängig, was es erlaubt, jedes von &os; unterstützte Dateisystem zu verwenden. Effiziente und schnelle Resynchronisation: es werden nur die Blöcke synchronisiert, die während der Ausfallzeit eines Knotens geändert wurden. Es kann in einer bereits bestehenden Umgebung eingesetzt werden, um zusätzliche Redundanz zu erreichen. Zusammen mit CARP, Heartbeat, oder anderen Werkzeugen, ist es möglich, ein robustes und dauerhaftes Speichersystem zu bauen. Nachdem Sie diesen Abschnitt gelesen haben, werden Sie folgendes wissen: Was HAST ist, wie es funktioniert und welche Eigenschaften es besitzt. Wie man HAST unter &os; aufsetzt und verwendet. Wie man CARP und &man.devd.8; kombiniert, um ein robustes Speichersystem zu bauen. Bevor Sie diesen Abschnitt lesen, sollten Sie: die Grundlagen von &unix; und &os; verstanden haben (). wissen, wie man Netzwerkschnittstellen und andere Kernsysteme von &os; konfiguriert (). ein gutes Verständnis der &os;-Netzwerkfunktionalität besitzen (). Das HAST-Projekt wurde von der &os; Foundation mit Unterstützung der OMCnet Internet Service GmbH und TransIP BV gesponsert. HAST im Einsatz HAST bietet eine synchrone Replikation auf Blockebene zwischen zwei Maschinen: einem primary, auch bekannt als master Knoten, sowie dem secondary, oder slave Knoten. Diese beiden Maschinen zusammen werden als Cluster bezeichnet. Da HAST in einer primär-sekundär-Konfiguration funktioniert, ist immer nur ein Knoten des Clusters zu jeder Zeit aktiv. Der primäre Knoten, auch active genannt, ist derjenige, der alle I/O-Anfragen verarbeitet, die an die HAST-Schnittstelle gesendet werden. Der sekundäre Knoten wird automatisch vom primären Knoten aus synchronisiert. Die physischen Komponenten des HAST-Systems sind die lokale Platte am Primärknoten und die entfernte Platte am Sekundärknoten. HAST arbeitet synchron auf Blockebene, was es für Dateisysteme und Anwendungen transparent macht. HAST stellt gewöhnliche GEOM-Provider in /dev/hast/ für die Verwendung durch andere Werkzeuge oder Anwendungen zur Verfügung. Es gibt keinen Unterschied zwischen dem Einsatz von HAST bereitgestellten Geräten und herkömmlichen Platten oder Partitionen. Jede Schreib-, Lösch- oder Entleerungsoperation wird an die lokale und über TCP/IP zu der entfernt liegenden Platte gesendet. Jede Leseoperation wird von der lokalen Platte durchgeführt, es sei denn, die lokale Platte ist nicht aktuell oder es tritt ein I/O-Fehler auf. In solchen Fällen wird die Leseoperation an den Sekundärknoten geschickt. HAST versucht, eine schnelle Fehlerbereinigung zu gewährleisten. Aus diesem Grund ist es wichtig, die Synchronisationszeit nach dem Ausfall eines Knotens zu reduzieren. Um eine schnelle Synchronisation zu ermöglichen, verwaltet HAST eine Bitmap von unsauberen Bereichen auf der Platte und synchronisiert nur diese während einer regulären Synchronisation (mit Ausnahme der initialen Synchronisation). Es gibt viele Wege, diese Synchronisation zu behandeln. HAST implementiert mehrere Replikationsarten, um unterschiedliche Methoden der Synchronisation zu realisieren: memsync: Dieser Modus meldet Schreiboperationen als vollständig, wenn die lokale Schreiboperation beendet ist und der entfernt liegende Knoten die Ankunft der Daten bestätigt hat, jedoch bevor die Daten wirklich gespeichert wurden. Die Daten werden auf dem entfernt liegenden Knoten direkt nach dem Senden der Bestätigung gespeichert. Dieser Modus ist dafür gedacht, Latenzen zu verringern und zusätzlich eine gute Verlässlichkeit zu bieten. fullsync: Dieser Modus meldet Schreiboperationen als vollständig, wenn sowohl die lokale, als auch die entfernte Schreiboperation abgeschlossen wurde. Dies ist der sicherste und zugleich der langsamste Replikationsmodus. Er stellt den momentanen Standardmodus dar. async: Dieser Modus meldet Schreiboperationen als vollständig, wenn lokale Schreibvorgänge abgeschlossen wurden. Dies ist der schnellste und gefährlichste Replikationsmodus. Er sollte nur verwendet werden, wenn die Latenz zu einem entfernten Knoten bei einer Replikation zu hoch ist für andere Modi. HAST-Konfiguration Das HAST-Framework besteht aus mehreren Komponenten: Dem &man.hastd.8;-Daemon, welcher für Datensynchronisation verantwortlich ist. Wenn dieser Daemon gestartet wird, wird automatisch geom_gate.ko geladen. Dem &man.hastctl.8; Management-Werkzeug. Der Konfigurationsdatei &man.hast.conf.5;. Diese Datei muss vorhanden sein, bevor hastd gestartet wird. Alternativ lässt sich die GEOM_GATE-Unterstützung in den Kernel statisch einbauen, indem folgende Zeile zur Kernelkonfigurationsdatei hinzugefügt wird. Anschließend muss der Kernel, wie in beschrieben, neu gebaut werden: options GEOM_GATE Das folgende Beispiel beschreibt, wie man zwei Knoten als master-slave / primary-secondary mittels HAST konfiguriert, um Daten zwischen diesen beiden auszutauschen. Die Knoten werden als hasta mit der IP-Adresse 172.16.0.1 und hastb mit der IP-Adresse 172.16.0.2 bezeichnet. Beide Knoten besitzen eine dedizierte Festplatte /dev/ad6 mit der gleichen Größe für den HAST-Betrieb. Der HAST-Pool, manchmal auch Ressource genannt, oder der GEOM-Provider in /dev/hast/ wird als test bezeichnet. Die Konfiguration von HAST wird in /etc/hast.conf vorgenommen. Diese Datei sollte auf beiden Knoten gleich sein. Die einfachste Konfiguration ist folgende: resource test { on hasta { local /dev/ad6 remote 172.16.0.2 } on hastb { local /dev/ad6 remote 172.16.0.1 } } Fortgeschrittene Konfigurationsmöglichkeiten finden Sie in &man.hast.conf.5;. Es ist ebenfalls möglich, den Hostnamen in den remote-Anweisungen zu verwenden, falls die Rechner aufgelöst werden können und in /etc/hosts, oder im lokalen DNS definiert sind. Sobald die Konfiguration auf beiden Rechnern vorhanden ist, kann ein HAST-Pool erstellt werden. Lassen Sie diese Kommandos auf beiden Knoten ablaufen, um die initialen Metadaten auf die lokale Platte zu schreiben und starten Sie anschliessend &man.hastd.8;: &prompt.root; hastctl create test &prompt.root; service hastd onestart Es ist nicht möglich, GEOM-Provider mit einem bereits bestehenden Dateisystem zu verwenden, um beispielsweise einen bestehenden Speicher in einen von HAST verwalteten Pool zu konvertieren. Dieses Verfahren muss einige Metadaten auf den Provider schreiben und dafür würde nicht genug freier Platz zur Verfügung stehen. Die Rolle eines HAST Knotens, primary oder secondary, wird vom einem Administrator, oder einer Software wie Heartbeat, mittels &man.hastctl.8; festgelegt. Auf dem primären Knoten hasta geben Sie diesen Befehl ein: &prompt.root; hastctl role primary test Geben Sie folgendes Kommando auf dem sekundären Knoten hastb ein: &prompt.root; hastctl role secondary test Überprüfen Sie das Ergebnis mit hastctl auf beiden Knoten: &prompt.root; hastctl status test Überprüfen Sie die status-Zeile. Wird hier degraded angezeigt, dann ist etwas mit der Konfigurationsdatei nicht in Ordnung. Auf jedem Konten sollte complete angezeit werden, was bedeutet, dass die Synchronisation zwischen den beiden Knoten gestartet wurde. Die Synchronisierung ist abgeschlossen, wenn hastctl status meldet, dass die dirty-Bereiche 0 Bytes betragen. Der nächste Schritt ist, ein Dateisystem auf dem GEOM-Provider anzulegen und dieses ins System einzuhängen. Dies muss auf dem primary-Knoten durchgeführt werden. Die Erstellung des Dateisystems kann ein paar Minuten dauern, abhängig von der Größe der Festplatte. Dieses Beispiel erstellt ein UFS-Dateisystem auf /dev/hast/test: &prompt.root; newfs -U /dev/hast/test &prompt.root; mkdir /hast/test &prompt.root; mount /dev/hast/test /hast/test Sobald das HAST-Framework richtig konfiguriert wurde, besteht der letzte Schritt nun darin, sicherzustellen, dass HAST während des Systemstarts automatisch gestartet wird. Fügen Sie diese Zeile in /etc/rc.conf hinzu: hastd_enable="YES" Failover-Konfiguration Das Ziel dieses Beispiels ist, ein robustes Speichersystem zu bauen, welches Fehlern auf einem beliebigen Knoten widerstehen kann. Wenn der primary-Knoten ausfällt, ist der secondary-Knoten da, um nahtlos einzuspringen, das Dateisystem zu prüfen, einzuhängen und mit der Arbeit fortzufahren, ohne dass auch nur ein einzelnes Bit an Daten verloren geht. Um diese Aufgabe zu bewerkstelligen, wird das Common Address Redundancy Protocol (CARP) benutzt, welches ein automatisches Failover auf der IP-Schicht ermöglicht. CARP erlaubt es mehreren Rechnern im gleichen Netzsegment, die gleiche IP-Adresse zu verwenden. Setzen Sie CARP auf beiden Knoten des Clusters anhand der Dokumentation in auf. In diesem Beispiel hat jeder Knoten seine eigene Management IP-Adresse und die geteilte IP-Adresse 172.16.0.254. Der primäre HAST-Knoten des Clusters muss der CARP-Masterknoten sein. Der HAST-Pool, welcher im vorherigen Abschnitt erstellt wurde, ist nun bereit für den Export über das Netzwerk auf den anderen Rechner. Dies kann durch den Export über NFS oder Samba erreicht werden, indem die geteilte IP-Addresse 172.16.0.254 verwendet wird. Das einzige ungelöste Problem ist der automatische Failover, sollte der primäre Knoten einmal ausfallen. Falls die CARP-Schnittstelle aktiviert oder deaktiviert wird, generiert das &os;-Betriebssystem ein &man.devd.8;-Ereignis, was es ermöglicht, Zustandsänderungen auf den CARP-Schnittstellen zu überwachen. Eine Zustandsänderung auf der CARP-Schnittstelle ist ein Indiz dafür, dass einer der Knoten gerade ausgefallen oder wieder verfügbar ist. Diese Zustandsänderungen machen es möglich, ein Skript zu starten, welches automatisch den HAST-Failover durchführt. Um Zustandsänderungen auf der CARP-Schnittstelle abzufangen, müssen diese Zeilen in /etc/devd.conf auf jedem Knoten hinzugefügt werden: notify 30 { match "system" "IFNET"; match "subsystem" "carp0"; match "type" "LINK_UP"; action "/usr/local/sbin/carp-hast-switch master"; }; notify 30 { match "system" "IFNET"; match "subsystem" "carp0"; match "type" "LINK_DOWN"; action "/usr/local/sbin/carp-hast-switch slave"; }; Wenn auf dem System &os; 10 oder höher eingesetzt wird, ersetzen Sie carp0 durch den Namen der konfigurierten Schnittstelle für CARP. Starten Sie &man.devd.8; auf beiden Knoten neu, um die neue Konfiguration wirksam werden zu lassen: &prompt.root; service devd restart Wenn die Schnittstelle aktiviert oder deaktiviert wird, erzeugt das System eine Meldung, was es dem &man.devd.8;-Subsystem ermöglicht, ein automatisches Failover-Skript zu starten, /usr/local/sbin/carp-hast-switch. Weitere Informationen zu dieser Konfiguration finden Sie in &man.devd.conf.5;. Es folgt ein Beispiel für ein automatisches Failover-Skript: #!/bin/sh # Original script by Freddie Cash <fjwcash@gmail.com> # Modified by Michael W. Lucas <mwlucas@BlackHelicopters.org> # and Viktor Petersson <vpetersson@wireload.net> # The names of the HAST resources, as listed in /etc/hast.conf resources="test" # delay in mounting HAST resource after becoming master # make your best guess delay=3 # logging log="local0.debug" name="carp-hast" # end of user configurable stuff case "$1" in master) logger -p $log -t $name "Switching to primary provider for ${resources}." sleep ${delay} # Wait for any "hastd secondary" processes to stop for disk in ${resources}; do while $( pgrep -lf "hastd: ${disk} \(secondary\)" > /dev/null 2>&1 ); do sleep 1 done # Switch role for each disk hastctl role primary ${disk} if [ $? -ne 0 ]; then logger -p $log -t $name "Unable to change role to primary for resource ${disk}." exit 1 fi done # Wait for the /dev/hast/* devices to appear for disk in ${resources}; do for I in $( jot 60 ); do [ -c "/dev/hast/${disk}" ] && break sleep 0.5 done if [ ! -c "/dev/hast/${disk}" ]; then logger -p $log -t $name "GEOM provider /dev/hast/${disk} did not appear." exit 1 fi done logger -p $log -t $name "Role for HAST resources ${resources} switched to primary." logger -p $log -t $name "Mounting disks." for disk in ${resources}; do mkdir -p /hast/${disk} fsck -p -y -t ufs /dev/hast/${disk} mount /dev/hast/${disk} /hast/${disk} done ;; slave) logger -p $log -t $name "Switching to secondary provider for ${resources}." # Switch roles for the HAST resources for disk in ${resources}; do if ! mount | grep -q "^/dev/hast/${disk} on " then else umount -f /hast/${disk} fi sleep $delay hastctl role secondary ${disk} 2>&1 if [ $? -ne 0 ]; then logger -p $log -t $name "Unable to switch role to secondary for resource ${disk}." exit 1 fi logger -p $log -t $name "Role switched to secondary for resource ${disk}." done ;; esac Im Kern führt das Skript die folgenden Aktionen durch, sobald ein Knoten zum Master wird: Es ernennt den HAST-Pool als den primären für einen gegebenen Knoten. Es prüft das Dateisystem, dass auf dem HAST-Pool erstellt wurde. Es hängt den Pool ins System ein. Wenn ein Knoten zum Sekundären ernannt wird: Hängt es den HAST-Pool aus dem Dateisystem aus. Degradiert es den HAST-Pool zum sekundären. Dieses Skript ist nur ein Beispiel für eine mögliche Lösung. Es behandelt nicht alle möglichen Szenarien, die auftreten können und sollte erweitert bzw. abgeändert werden, so dass z.B. benötigte Dienste gestartet oder gestoppt werden. Für dieses Beispiel wurde ein UFS-Dateisystem verwendet. Um die Zeit für die Wiederherstellung zu verringern, kann ein UFS mit Journal oder ein ZFS-Dateisystem benutzt werden. Weitere detaillierte Informationen mit zusätzlichen Beispielen können unter http://wiki.FreeBSD.org/HAST abgerufen werden. Fehlerbehebung HAST sollte generell ohne Probleme funktionieren. Jedoch kann es, wie bei jeder anderen Software auch, zu gewissen Zeiten sein, dass sie sich nicht so verhält wie angegeben. Die Quelle dieser Probleme kann unterschiedlich sein, jedoch sollte als Faustregel gewährleistet werden, dass die Zeit für alle Knoten im Cluster synchron läuft. Für die Fehlersuche bei HAST sollte die Anzahl an Debugging-Meldungen von &man.hastd.8; erhöht werden. Dies kann durch das Starten von hastd mit -d erreicht werden. Diese Option kann mehrfach angegeben werden, um die Anzahl an Meldungen weiter zu erhöhen. Sie sollten ebenfalls die Verwendung von -F in Erwägung ziehen, was hastd im Vordergrund startet. Auflösung des Split-brain-Zustands split-brain bezeichnet eine Situation, in der beide Knoten des Clusters nicht in der Lage sind, miteinander zu kommunizieren und dadurch beide als primäre Knoten fungieren. Dies ist ein gefährlicher Zustand, weil es beiden Knoten erlaubt ist, Änderungen an den Daten vorzunehmen, die miteinander nicht in Einklang gebracht werden können. Diese Situation muss vom Systemadministrator händisch bereinigt werden. Der Administrator muss entscheiden, welcher Knoten die wichtigeren Änderungen besitzt, oder die Zusammenführung manuell durchführen. Anschließend kann HAST die volle Synchronisation mit dem Knoten durchführen, der die beschädigten Daten enthält. Um dies zu tun, geben Sie folgende Befehle auf dem Knoten ein, der neu synchronisiert werden muss: &prompt.root; hastctl role init test &prompt.root; hastctl create test &prompt.root; hastctl role secondary test