==== UFS dumps ==== Um Sicherungen ganzer Partitionen unter Solaris durchzuführen, nutzt man die von SUN mitgelieferten Programme **ufsdump** und **ufsrestore**. Eine Sicherung legt man somit mit ufsdump Optionen Ziel Quelle an, wobei die Optionen unter anderem folgende sein können: * 0-9 - wobei 0 ein Vollbackup kennzeichnet und 1-9 inkrementelle Backups in absteigender Priorität * u - führt ein Update auf /etc/dumpdates durch, wenn die Sicherung erfolgreich war * v - Sicherung nach dem Anlegen überprüfen * f - Sicherung in eine Datei anstelle eines Bandes * S - erstellt eine Schätzung des für eine Sicherung benötigten Plattenplatzes in Bytes * x - holt die angegebenen Dateien aus der Sicherung (wenn angegeben, sonst komplette Rücksicherung) * i - interaktiver Modus, öffnet eine Subshell in der man die rückzusichernden Dateien und Verzeichnisse auswählen kann Im folgenden Beispiel wird von **/dev/md/dsk/d6** (gemounted unter ///usr//) unseres Servers (//ciamissp7//) auf dem Server **172.31.33.60** (//sysadmp1//) im Verzeichnis **/backup/ciamissp7** ein Vollbackup mit dem Namen **usr_010816** angelegt und verfiziert: ufsdump S /dev/md/dsk/d6 ufsdump 0uvf 172.31.33.60:/backup/ciamissp7/usr_010816 /dev/md/dsk/d6 Zu beachten ist dabei, daß die Datei **usr_010816** auf dem entfernten Server vorhanden sein muß, da sonst die komplette Sicherung fehlschlägt. Außerdem müssen auf dem entfernten Server die Ports **512-514** (**exec, login, shell**) geöffnet und ein Eintrag in **/.rhosts** mit dem Hostnamen des zu sichernden Rechners vorhanden sein, da der Sicherungsvorgang per **rsh** vonstatten geht.\\ \\ Man kann die beiden Programme auch verwenden, um eine Platte auf eine andere partitionsweise zu kopieren. Das passiert dann folgendermaßen: ufsdump 0f - /dev/rdsk/c0t0d0s7 | (cd /home;ufsrestore xf -) Hier wurde nun **/dev/rdsk/c0t0d0s7** in das Verzeichnis **/home** "kopiert".\\ \\ Um nach einer Neuinstallation eines Servers z.B. die vorher gesicherten Home-Verzeichnisse der Nutzer wieder zur Verfügung zu haben gibt es 2 Vorgehensweisen. \\ \\ **ufsrestore über Netzwerk**\\ Dabei müssen die gleichen Voraussetzungen gelten wie bei einer Sicherung (offene Ports, Eintrag in .rhosts) Dann setzt man den folgenden Befehl ab: ufsrestore xf 172.31.33.60:/backup/ciamissp7/home_010816 \\ **interaktives ufsrestore auf dem Server**\\ Hier kopiert man die Sicherungsdatei auf den Server in ein Verzeichnis seiner Wahl, welches genug Platz bietet und auch bei einem eventuellen Reboot nicht bereinigt wird ((/tmp ist also eine schlechte Wahl, /var/tmp wäre schon besser ;-) )) Nun hat man 2 Möglichkeiten, die komplette Rücksicherung oder die Rücksicherung einiger Dateien und Verzeichnisse auf interaktiver Basis.\\ Zu beachten ist, daß man vor der Rücksicherung in das gewünschte Verzeichnis wechseln muß, da die Verzeichnisstruktur in der Sicherungsdatei relativ und nicht absolut ist.\\ Für die komplette Rücksicherung setzt man folgende Befehle ab: cd /export/home ufsrestore xf /var/tmp/home_010816 Für die Rücksicherung einiger Dateien setzt man folgende Befehle ab: cd /export/home ufsrestore if /var/tmp/home_010816 In der hier erscheinenden Subshell kann man sich über **help** oder **?** die verfügbaren Befehle anzeigen lassen.\\ \\ Sollen Solarispartitionen auf einen Linuxserver gesichert werden, sollte man auf jeden Fall nachschauen, daß der Automounter von Solaris nicht dazwischen funkt.\\ Das kann passieren, wenn auf dem Linuxserver die Dumps in einem Verzeichnis unterhalb von **/home** gespeichert werden.\\ Dann versucht der Automounter nämlich diese lokal auf /home umzubiegen.\\ Deshalb sollten die folgenden Vorsichtsmaßnahmen getroffen werden. Zuerst wird nachgeschaut, ob ein automount-Prozess läuft.\\ Danach läßt man sich die Dateien **auto_home** und **auto_master** im Verzeichnis **/etc** anzeigen. Sind dort nicht auskommentierte Einträge der Art "+auto_home" oder "/home auto_home -nobrowse" vorhanden, werden die Skripte **rpc** und **autofs** im Verzeichnis **/etc/init.d** gestartet.((ab Solaris 10 werden autofs, bind, keyserv, nisplus als Service über svcadm gestoppt/gestartet))\\ Danach werden die beiden Dateien **auto_home** und **auto_master** editiert und alles auskommentiert. Danach wird der Befehl **automount -v** abgesetzt, welcher jetzt sowas anzeigen sollte wie "automount: no mounts"\\ Jetzt sollte man noch schauen, ob home in /etc/mnttab auftaucht ((außer als /export/home)) und die Skripte wieder stoppen: cd /etc ps -ef|grep mount cat auto_* /etc/init.d/rpc start && /etc/init.d/autofs start vi auto_* # alles auskommentieren automount -v grep home mnttab /etc/init.d/rpc stop && /etc/init.d/autofs stop ==== Farbige Textausgaben mit printf in Shellskripten erzeugen ==== Um farbige Textausgaben mit print in Shellskripten zu erzeugen, muß man die folgenden Escape-Sequenzen vor bzw. hinter die auszugebenen Texte stellen: "\033[m" ist immer Endtag "\033[1m" fetter Text "\033[4m" unterstrichener Text "\033[7m" inverser Text "\033[30m" schwarzer Text "\033[31m" dunkelroter Text "\033[32m" dunkelgruener Text "\033[33m" dunkelgelber Text "\033[34m" blauer Text "\033[35m" lila Text "\033[36m" hellblauer Text "\033[37m" weisser Text "\033[40m" schwarzer Text auf schwarzem Hintergrund "\033[41m" schwarzer Text auf dunkelrotem Hintergrund "\033[42m" schwarzer Text auf dunkelgruenem Hintergrund "\033[43m" schwarzer Text auf dunkelgelbem Hintergrund "\033[44m" schwarzer Text auf blauem Hintergrund "\033[45m" schwarzer Text auf lila Hintergrund "\033[46m" schwarzer Text auf hellblauem Hintergrund "\033[47m" schwarzer Text auf weissem Hintergrund "\033[90m" grauer Text "\033[91m" roter Text "\033[92m" gruener Text "\033[93m" gelber Text "\033[94m" blauer Text "\033[95m" lila Text "\033[96m" hellblauer Text "\033[97m" weisser Text "\033[100m" schwarzer Text auf grauem Hintergrund "\033[101m" schwarzer Text auf rotem Hintergrund "\033[102m" schwarzer Text auf gruenem Hintergrund "\033[103m" schwarzer Text auf gelbem Hintergrund "\033[104m" schwarzer Text auf blauem Hintergrund "\033[105m" schwarzer Text auf lila Hintergrund "\033[106m" schwarzer Text auf hellblauem Hintergrund "\033[107m" schwarzer Text auf weissem Hintergrund Die Zeile printf "033[91mYEAH, really funny ...\033[m\n" würde dementspechend so aussehen: YEAH, really funny ... ==== MQ-Konfiguration sichern ==== Mit dem Tool **saveqmgr** kann man die Konfiguration eines IBM-Websphere-MQ Queuemanagers im Textformat sichern.\\ Das ist zum Beispiel sinnvoll, wenn man größere Änderungen an der Konfiguration vornehmen möchte, für Backups der Konfiguration oder wenn man einen Queuemanager klonen möchte.\\ Die Syntax lautet wie folgt: ./saveqmgr [options], where [options] are one or more of the following optional switches -h | -? : gives help (this) -v version : determines which version of MQSC to generate and can be '2','5','51','52','53' or '6' The default is to generate mqsc at the version of the connected queue manager Note: see read.me for more information on this flag -m lqmgr : is the name of the local qmgr to connect (MQCONN) -r rqmgr : is the name of the remote qmgr (XMITQ name) -f [file] : allows the output file to be named, if -f is not specified, the output file defaults to SAVEQMGR.TST if -f is specified without a filename, it is named "qmgrname".MQS. -o : specifies to replace (overwrite) the output file if the -o flag is not specified, then the default is to append if the file exists (on iSeries, *REPLACE,*APPEND must be specified after the -o flag) -F [file] : behaves the same as -f except no header line is created in the output file (and CURDEPTH, ALTDATE and ALTTIME are not reported) -c : directs output to STDOUT and overrides use of -f flag -s : suppress creation of objects that begin with "SYSTEM*" -R [flags] : create RESET CHANNEL commands flags can be any combination of the follow to create RESET for that channel type: s (SENDER) v (SERVER) r (RECEIVER) q (REQUESTER) c (CLUSSDR) d (CLUSRCVR) the default is to create RESET commands for all the above channel types -p : Create 'local queue' definitions from PERMDYN queues. -i : Ignore 'pcf' error codes 'damaged object' 'unknown object'. Sets RetCode to WARNING if this error encountered. -q : Quiet mode, do not issue warning about unknown PCF attributes -1 : generate entire DEFINE command on one line (which does NOT include ALTDATE etc) -2 : on a 2nd line, generate the DEFINE as a comment (which DOES include ALTDATE etc) -z [file] : create 'security definitions (like amqoamd -s)' in file 'file'(only >=V6) if not specified, defaults to "qmgrname".AUT -Z [file}: same as -z only without the header line Beispiel: saveqmgr -m -c >> saveqmgr -m GATEWT01 -c >> GATEWT01.mq.200703300912.def saveqmgr -m -f saveqmgr -m GATEWT01 -f GATEWT01.mq.200703300912.def Die obigen Beispiele sichern die Konfiguration des Queuemanagers GATEWT01 in die Textdatei GATEWT01.mq.200703300912.def mit dem Unterschied, daß Beispiel 2 direkt eine Datei anlegt und Beispiel 1 auf STDOUT schreibt und diese Ausgabe umgeleitet wird. ==== Entfernen von Nachrichten aus einer Queue ==== Um sich Nachrichten anzeigen zu lassen, die in einer Queue stehen oder gar diese zu löschen, benutzt man das Tool **qload**.\\ Außerdem kann man mit diesem Programm auch Nachrichten in eine Queue scheiben, die Nachrichten einer Queue in eine andere kopieren oder verschieben. Die Syntax lautet hier wie folgt: Usage: QLOAD [-c [:X'Encoding'] Convert] [-C [A][I][a][i][d][n] Context] A Set all context (default) I Set identity context a Pass all context i Pass identity context d Default context n No context [-d ] a Add ASCII columns to HEX file A Write ASCII lines rather than HEX i Write message index [-f ] [-F (forcing overwrite)] [-i (Browse)] [-I (Get)] [-l e.g.mqm or mqic32] [-m ] [-o ] [-q Quiet] [-r ] x Message x only x..y Message x to message y x#y y messages starting at message x #x First x messages [-s ] [-S ] [-e ] [-E ] [-x ] [-X ] Beispiel: qload -m -i -f qload -m -I -f Im obigen Beispiel werden Nachrichten aus einer Queue in eine Textdatei geschrieben, einmal im "Browse"-Modus (-i) und einmal im "Get"-Modus (-I). qload -m -o -f Hier werden Nachrichten aus einer Textdatei in die Queue geschrieben. qload -m -i -o qload -m -I -o Hier werden Nachrichten von einer Queue in eine andere kopiert (-i) bzw. bewegt (-I). ==== Schreiben von Nachrichten in eine Queue ==== Wenn man Nachrichten testweise in eine Queue schreiben will, kann man dazu das Tool **amqsput** benutzen, welches von IBM mit MQ Series mitgeliefert wird und sich mit anderen nützlichen Utilities im Verzeichnis **/opt/mqm/samp/bin** befindet. ((vorausgesetzt, die Installation von MQ erfolgte in /opt/mqm)) \\ Das Programm wird mit den Parametern **Queuename** und **Queuemanagername** aufgerufen und verbindet sich dann an die Queue.\\ Nun kann man zeilenweise Nachrichten schreiben und jede Nachricht mit einem abschließen. $> /opt/mqm/samp/bin/amqsput MEINE.TEST.QUEUE TESTQM01 Sample AMQSPUT0 start target queue is MEINE.TEST.QUEUE NACHRICHT1 wird geschrieben NACHRICHT2 wird geschrieben $> **WICHTIG** : Die Eingabe wird mit beendet. Benutzt man bricht das Programm einfach nur ab. ==== Löschen einer Queue ==== Wenn man eine Queue löschen will, geht man folgendermaßen vor. ssh server su - mqm runmqsc DELETE QLOCAL() PURGE DELETE QREMOTE() Manchmal kann es natürlich vorkommen, daß die Queue noch benutzt wird und sie somit nicht gelöscht werden kann. Dann gibt es 2 Möglichkeiten: \\ 1. Man setzt die Parameter für GET und PUT auf DISABLED. Dann können die Prozesse, welche diese Queue benutzen, nicht mehr darauf zugreifen und man kann die Queue gefahrlos löschen. runmqsc ALTER QLOCAL() GET(DISABLED) PUT(DISABLED) 2. Man sucht sich die PID des Prozesses raus und stoppt diesen dann runmqsc DISPLAY QSTATUS() TYPE(HANDLE) ALL In der Ausgabe ist nach PID zu suchen und mit einem **ps -ef|grep ** bekommt man den Prozess heraus. Nun muß man diesen nur noch stoppen oder mit einem **kill ** abschießen. ==== Umwandeln eines RPM-Pakets in ein Debian-Package ==== Das Programm der Wahl heißt hier **alien**.\\ Mit diesem Programm lassen sich auf einfache Art und Weise .deb-Dateien aus .rpm-Dateien erstellen.\\ Die wichtigsten Kommandozeilenparameter sind hier aufgeführt: --generate Unpack, but do not generate a new package. --veryverbose Be verbose, and also display output of run commands. --fixperms Munge/fix permissions and owners. --keep-version Do not change version of generated package. --scripts Include scripts in package. Solchermaßen gewappnet kann man nun ans Konvertieren gehen: alien --veryverbose --fixperms --keep-version --scripts .rpm Damit wird das .deb erstellt, welches man dann mit dpkg einspielen kann.\\ Sollten bei der Installation Probleme der Art auftauchen, daß z.B. einige Dateien nicht gefunden werden, kann man mit dem folgenden Befehl das RPM-Paket auspacken und in einem Unterverzeichnis ablegen: alien --generate --veryverbose --fixperms --keep-version --scripts .rpm ==== serielle Konsole mit Linux & GRUB ==== Wenn man Linuxrechner in einem Rechenzentrum betreibt und sich die wunderschönen Bootmeldungen live anschauen möchte, braucht man entweder einen Monitor und einen Stuhl, um sich beim heimeligen Rauschen der Lüfter eine Erkältung oder einen Tinnitus zu holen oder aber man benötigt Zugriff auf die serielle Konsole.\\ Da die meisten neuen Distributionen heutzutage mit GRUB als Standardbootloader ausgeliefert werden, werde ich die Einrichtung der Konsolenverbindung anhand von GRUB betrachten.\\ In den folgenden Dateien müssen dazu Änderungen vorgenommen werden: /boot/grub/menu.lst, /etc/inittab, /etc/securetty.\\ Betrachten wir zunächst **/boot/grub/menu.lst**\\ Dort müssen folgende Änderungen vorgenommen werden: serial --unit=0 --speed=9600 --word=8 --parity=no --stop=1 terminal --timeout=10 serial console Außerdem muß # kopt=root=/dev/hda1 ro geändert werden in kopt=root=/dev/hda1 ro console=tty0 console=ttyS0,9600n8 Unter Debian sollte man dann noch update-grub ausführen. In **/etc/inittab** muß die folgende Zeile aktiviert werden: T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100 In **/etc/securetty** muß die folgende Zeile aktiviert werden: ttyS0 Abschließend muß noch im BIOS eingestellt werden, daß eine serielle Konsole benutzt werden soll. ==== Oracle Tablespace vergrößern ==== Um unter Oracle einen Tablespace zu vergrößern, loggt man sich als der User auf dem Server ein, unter dem Oracle läuft (meistens oracle) und startet eine Datenbanksession mit sqlplus: ssh oracle@server sqlplus "/as sysdba" alter database datafile '/pfad/zur/tablespace/datei.dbf' resize 500M; quit Im obigen Beispiel wird datei.dbf auf eine Größe von 500 MB gebracht. Zu beachten ist dabei, daß der Dateiname mit absolutem Pfad angegeben wird und in Single Quotes stehen muß. Außerdem ist als Größenangabe die neue **absolute** Größe anzugeben. ==== Vergrößern eines XFS-Filesystems unter LVM-Kontrolle ==== ssh root@server lvextend -L +20G /dev/vg0/home xfs_growfs /dev/vg0/home Im obigen Beispiel wird das Logical Volume, welches /home beinhaltet um 20 GB vergößert. * -L ☞ erweitern um die dahinter angegebene Größe * +20G ☞ mit "+" erweitern um 20 GB, ohne 20 GB ist die neue absolute Größe * /dev/vg0/home ☞ Name des Logical Volumes, bekommt man mit lvdisplay raus ==== Suchen nach gelöschten Daten auf einer ext3-Partition ==== Wenn man unter Linux versehentlich eine Datei gelöscht hat, kann man mit etwas Glück wenigstens noch Fragmente dieser Datei wiederherstellen.\\ Dazu braucht man nur grep und einen Suchbegriff, welcher in der gelöschten Datei vorkommt: grep -a -B200 -A200 "[Suchbegriff]" /dev/hda3 >recover.txt Dieser Aufruf sichert alle auffindbaren Vorkommnisse von [Suchbegriff] auf der Partition /dev/hda3 mit vorangestellten (-B) sowie nachfolgenden (-A) 200 Zeilen in die Datei recover.txt im aktuellen Verzeichnis. ==== HP-UX Befehle ==== An dieser Stelle werden meines Erachtens wichtige Befehle für HP-UX vorgestellt.\\ \\ **/usr/sbin/cleanup**\\ Dieses Programm räumt die Patchdatenbank auf, welche sich unter /var/adm/sw/save befindet um Plattenplatz freizuschaufeln.\\ Syntax: usage: /usr/sbin/cleanup [-p|-n] -c /usr/sbin/cleanup [-p|-n] -d [-o 10|11] [-e true|false] /usr/sbin/cleanup [-p|-n] -i /usr/sbin/cleanup [-p|-n] -s Beispiel: cleanup -p -c 3 cleanup -n -c 3 Die beiden Befehle im obigen Beispiel haben folgende Wirkungsweise: * cleanup -p -c 3 ☞ Preview: welche Patches, die mindestens 3x durch neuere Versionen ersetzt wurden, sind vorhanden * cleanup -n -c 3 ☞ Remove: lösche Patches, welche mindestens 3x durch neuere Versionen ersetzt wurden und benachrichtige/frage den User bei jeder Aktion. ==== Einzeiler ==== Der folgende Befehl zeigt an, welche Applikation auf welchem Port hängt. lsof -i -P Der folgende Befehl kann einen Hinweis liefern, ob auf dem Server ein Rootkit läuft oder nicht. ((Beide Zahlen sollten gleich sein)) ls -d /proc/[0-9]*|wc -l && ps ax -o pid= -o comm=|wc -l Der folgende Befehl packt alle Dateien in ein TAR-Archiv außer denen, die in excludefile stehen. tar cvfX archiv.tar excludefile filelist