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 1) 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.2)
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 3) 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: <html><font color=„red“>YEAH, really funny …</font></html>

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 <qmgr> -c >> <outputfile>
saveqmgr -m GATEWT01 -c >> GATEWT01.mq.200703300912.def
saveqmgr -m <qmgr> -f <outputfile>
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 <Optional flags as below>
        [-c <CCSID>[: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 <Display Options>]
            a  Add ASCII columns to HEX file
            A  Write ASCII lines rather than HEX
            i  Write message index
        [-f <File Name>]
        [-F <File Name>   (forcing overwrite)]
        [-i <Input Queue> (Browse)]
        [-I <Input Queue> (Get)]
        [-l <library name> e.g.mqm or mqic32]
        [-m <Queue Manager name>]
        [-o <Output Queue>]
        [-q  Quiet]
        [-r <Message Range>]
           x    Message x only
           x..y Message x to message y
           x#y  y messages starting at message x
           #x   First x messages
        [-s <Ascii Search String>]
        [-S <Ascii Not Search String>]
        [-e <Ebcdic Search String>]
        [-E <Ebcdic Not Search String>]
        [-x <Hex Search String>]
        [-X <Hex Not Search String>]

Beispiel:

qload -m <qmgr> -i <queue> -f <outputfile>
qload -m <qmgr> -I <queue> -f <outputfile>

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 <qmgr> -o <queue> -f <inputfile>

Hier werden Nachrichten aus einer Textdatei in die Queue geschrieben.

qload -m <qmgr> -i <queue> -o <queue>
qload -m <qmgr> -I <queue> -o <queue>

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. 4)
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 <ENTER> abschließen.

$> /opt/mqm/samp/bin/amqsput MEINE.TEST.QUEUE TESTQM01
Sample AMQSPUT0 start
target queue is MEINE.TEST.QUEUE
NACHRICHT1 wird geschrieben <ENTER>
NACHRICHT2 wird geschrieben <ENTER>
<CTRL+D>
$>

WICHTIG : Die Eingabe wird mit <CTRL+D> beendet. Benutzt man <CTRL+C> 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 <QMGR>
  DELETE QLOCAL(<QUEUENAME>) PURGE
  DELETE QREMOTE(<QUEUENAME>)

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 <QMGR>
  ALTER QLOCAL(<QUEUENAME>) GET(DISABLED) PUT(DISABLED)

2. Man sucht sich die PID des Prozesses raus und stoppt diesen dann

runmqsc <QMGR>
  DISPLAY QSTATUS(<QUEUENAME>) TYPE(HANDLE) ALL

In der Ausgabe ist nach PID zu suchen und mit einem ps -ef|grep <PID> bekommt man den Prozess heraus. Nun muß man diesen nur noch stoppen oder mit einem kill <PID> 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 <RPMPACKAGE>.rpm

Damit wird das <RPMPACKAGE>.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 <RPMPACKAGE>.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 <number>
       /usr/sbin/cleanup [-p|-n] -d <depot> [-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. 5)

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
1)
/tmp ist also eine schlechte Wahl, /var/tmp wäre schon besser ;-)
2)
ab Solaris 10 werden autofs, bind, keyserv, nisplus als Service über svcadm gestoppt/gestartet
3)
außer als /export/home
4)
vorausgesetzt, die Installation von MQ erfolgte in /opt/mqm
5)
Beide Zahlen sollten gleich sein
snippets.txt · Zuletzt geändert: 2011/03/21 16:55 von 127.0.0.1
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Noncommercial-Share Alike 4.0 International
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki