User Tools

Site Tools


IBM Tivoli Storage Manager Datensicherung für DEBIAN Lenny einrichten

Diese Doku basiert u.a. auf folgender Quelle:


  1. Alien installieren (RPM ⇒ DEB Converter) mit
    aptitude install alien libstdc++5
  2. TSM Linux Client lokal z.B. nach /root/install/tsm kopieren
  3. TSM Client auspacken mit
    tar -xvf

    ACHTUNG: Dateien werden DIREKT im aktuellen Verzeichniss entpackt! Besser ein Subdir anlegen.

  4. RPMs in DEBs umwandeln mit:
    alien -d TIVsm-API.i386.rpm
    alien -d TIVsm-BA.i386.rpm
  5. DEB Pakete installieren mit:
    dpkg -i tivsm-api_5.5.1-11_i386.deb
    dpkg -i tivsm-ba_5.5.1-11_i386.deb
  6. Nun sollten die BINs sowie die Konfigurationsdateien unter /opt/tivoli/tsm/client/ba/bin/ liegen
  7. Beispiel (Sample) Konfig Dateien umkopieren:
    cd /opt/tivoli/tsm/client/ba/bin/
    cp dsm.opt.smp dsm.opt
    cp dsm.sys.smp dsm.sys
  8. Anpassen der /opt/tivoli/tsm/client/ba/bin/dsm.opt wie folgt:
    ACHTUNG: Groß- Kleinschreibung beachten!
    * IBM Tivoli Storage Manager                                           *
    *                                                                      *
    * Sample Client User Options file for UNIX (dsm.opt.smp)               *
    *  This file contains an option you can use to specify the TSM
    *  server to contact if more than one is defined in your client
    *  system options file (dsm.sys).  Copy dsm.opt.smp to dsm.opt.
    *  If you enter a server name for the option below, remove the
    *  leading asterisk (*).
    * SErvername       A server name defined in the dsm.sys file
    SErvername tsmserver1
  9. Anpassen der /opt/tivoli/tsm/client/ba/bin/dsm.sys wie folgt:
    ACHTUNG: Groß- Kleinschreibung beachten!
    * IBM Tivoli Storage Manager                                           *
    *                                                                      *
    * Sample Client System Options file for UNIX (dsm.sys.smp)             *
    *  This file contains the minimum options required to get started
    *  using TSM.  Copy dsm.sys.smp to dsm.sys.  In the dsm.sys file,
    *  enter the appropriate values for each option listed below and
    *  remove the leading asterisk (*) for each one.
    *  If your client node communicates with multiple TSM servers, be
    *  sure to add a stanza, beginning with the SERVERNAME option, for
    *  each additional server.
    SErvername  tsmserver1
       COMMMethod         TCPip
       TCPPort            1500
       MANAGEDSERVICES Webclient schedule
       SCHEDLOGNAME            /var/log/tsm-schedule.log
       ERRORLOGNAME            /var/log/tsm-error.log
  10. Legen Sie eine Datei /etc/ an und fügen Sie nachfolgend gezeigten Inhalt ein. Hiermit werden die SHARED OBJECTS (.so) von TSM automatisch geladen wenn diese benötigt werden.
    # Bindet die SHARED OBJECT Files (.so) von TSM ein
  11. führen Sie nun einmalig folgenden Befehl aus:
  12. Ein Symbolischer Link muss noch :!: für die genutzte locale :!: angelegt werden. Gehen Sie dazu wie folgt vor:
    cd /opt/tivoli/tsm/client/ba/bin
    ln -s ../../lang/en_US en_US
    ln -s ../../lang/en_US en_US.UTF-8
    cd /opt/tivoli/tsm/client/api/bin/
    ln -s ../../lang/en_US en_US
    ln -s ../../lang/en_US en_US.UTF-8
  13. Init-Start/Stop Script erstellen. z.B. als /etc/init.d/tsm
    #! /bin/sh
    # Provides:          dsmcad tsm client
    # Required-Start:    $remote_fs
    # Required-Stop:     $remote_fs
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: dsmcad TSM Client Agent (Scheduler)
    # Description:       dsmcad TSM Client Agent (Scheduler) - Tivoli Storage Manager Client Init script to be placed in /etc/init.d.
    # Author: Axel Werner <>
    # History / Version
    # =================
    #	2009-11-25	A.Werner	FIX: missing locales enviroment 
    #					variables if started by init at system-
    #					boot.
    #	2009-11-26	A.Werner	useless if statement removed. setting
    #					LC_ALL to the same val as LANG sets 
    #					also any other LC_ variable
    # Do NOT "set -e"
    # PATH should only include /usr/* if it runs after the script
    DESC="dsmcad TSM Client Agent (Scheduler)"
    DAEMON_ARGS=""   # <<< use this if you use scheduler as managed service
    # Exit if the package is not installed
    [ -x "$DAEMON" ] || exit 0
    # Read configuration variable file if it is present
    [ -r /etc/default/"$NAME" ] && . /etc/default/"$NAME"
    # IF there are Problems backing up Files that include special characters try
    # putting these few lines in a /etc/default/dsmc
    # export LANG=de_DE@euro
    # export LC_ALL=de_DE@euro
    # export LC_CTYPE=de_DE@euro
    # FIX 2009-11-25 by A.Werner: Read/set enviroment vars (locales) as set by
    #				Systemowner (root)
    # /////////////////////////////////////////////////
    # DEBUG TEST BLOCK to simulate Server reboot
    #	export LANG=""
    #	export LC_ALL="POSIX""
    # /////////////////////////////////////////////////
    parse_environment () 
        [ -r /etc/environment ] && ENV_FILE="/etc/environment"
        [ -r /etc/default/locale ] && ENV_FILE="/etc/default/locale"
        [ $ENV_FILE = none ] && return
        for var in LANG LC_ALL LC_CTYPE; do
            value=$(egrep "^[^#]*${var}=" $ENV_FILE | tail -n1 | cut -d= -f2)
            eval $var=$value
    # Parse the system's environment
    # da LC_ALL in /etc/default/locale nicht gesetzt wurden setze ich
    # diesen nun manuell auf den gleichen Wert wie LANG
    # PS: LC_ALL setzt automatisch auch alle anderen LC_ locale variablen
    #	sofern diese nicht anderweitig überschrieben werden.
    export LC_ALL=$LANG
    # Load the VERBOSE setting and other rcS variables
    . /lib/init/
    # Define LSB log_* functions.
    # Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
    . /lib/lsb/init-functions
    # DEBUGING: show locales in tsm enviroment.
    #/usr/bin/locale > /root/tsm-debuging-locales-`date '+%F-%H%M'`
    # Function that starts the daemon/service
    	# Return
    	#   0 if daemon has been started
    	#   1 if daemon was already running
    	#   2 if daemon could not be started
    	start-stop-daemon --start --quiet --pidfile "$PIDFILE" --exec "$DAEMON" --test > /dev/null \
    		|| return 1
    	start-stop-daemon --start --quiet --pidfile "$PIDFILE" --exec "$DAEMON" -- \
    		$DAEMON_ARGS \
    		|| return 2
    	# Add code here, if necessary, that waits for the process to be ready
    	# to handle requests from services started subsequently which depend
    	# on this one.  As a last resort, sleep for some time.
    # Function that stops the daemon/service
    	# Return
    	#   0 if daemon has been stopped
    	#   1 if daemon was already stopped
    	#   2 if daemon could not be stopped
    	#   other if a failure occurred
    	start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile "$PIDFILE" --name "$NAME"
    	[ "$RETVAL" = 2 ] && return 2
    	# Wait for children to finish too if this is a daemon that forks
    	# and if the daemon is only ever run from this initscript.
    	# If the above conditions are not satisfied then add some other code
    	# that waits for the process to drop all resources that could be
    	# needed by services started subsequently.  A last resort is to
    	# sleep for some time.
    	start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec "$DAEMON"
    	[ "$?" = 2 ] && return 2
    	# Many daemons don't delete their pidfiles when they exit.
    	rm -f "$PIDFILE"
    	return "$RETVAL"
    # Function that sends a SIGHUP to the daemon/service
    do_reload() {
    	# If the daemon can reload its configuration without
    	# restarting (for example, when it is sent a SIGHUP),
    	# then implement that here.
    	start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
    	return 0
    case "$1" in
    	[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
    	case "$?" in
    		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
    		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    	[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
    	case "$?" in
    		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
    		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    	# If do_reload() is not implemented then leave this commented out
    	# and leave 'force-reload' as an alias for 'restart'.
    	#log_daemon_msg "Reloading $DESC" "$NAME"
    	#log_end_msg $?
    	# If the "reload" option is implemented then remove the
    	# 'force-reload' alias
    	log_daemon_msg "Restarting $DESC" "$NAME"
    	case "$?" in
    		case "$?" in
    			0) log_end_msg 0 ;;
    			1) log_end_msg 1 ;; # Old process is still running
    			*) log_end_msg 1 ;; # Failed to start
    	  	# Failed to stop
    		log_end_msg 1
    	#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
    	echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
    	exit 3
  14. Init-Script ausführbar machen mit:
    chmod +x /etc/init.d/tsm
  15. Start-/Stop-Script in den gewünschten Runlevels verlinken:
    update-rc.d tsm defaults
    verlinkt das start/stop script in den default runleveln wie sie im script hinterlegt sind.
    zum löschen der Links:
    update-rc.d -f tsm remove
    zum präzisen Anlegen:
    update-rc.d tsm start 2 3 4 5 . stop 0 1 6 . 
  16. Spätestens jetzt muss auf dem TSM Server (Backup Server) ein “Node” für unseren Server eingerichtet werden.
  17. Anschließend muss man sich auf dem Linux Server als ROOT anmelden und den TMS Client das erste mal manuell starten.
  18. Starten des TSM Scheduler Dienstes per Init-Script:
    /etc/init.d/tsm restart
  19. Der TSM Backup-Client ist nun bereit zur Sicherung. Ein Standard-Sicherungsjob kann von Seiten TSM Backupserver eingerichtet werden. Einfache EIN- und AUSSCHLUESSE (includes excludes) können über eine der oben genannten Konfigurationsdateien auch selbst durchgeführt werden. Dazu später mehr…

Wichtige Dateien und Tools

Datei Funktion
/opt/tivoli/tsm/client/ Installationsort des TSM Client Agents.
/opt/tivoli/tsm/client/ba/bin/dsm.opt Konfigurationsdatei - Enthält Informationen darüber welche Sektion in dsm.sys verwendet werden soll.
/opt/tivoli/tsm/client/ba/bin/dsm.sys Konfigurationsdatei - Enthält Informationen darüber welcher Backup-Server angesprochen werden soll sowie die eigentlichen Client-Einstellungen. Diese Datei kann ebenfalls auf eine optionale include-exclude Datei (liste) zeigen über welche zusätzliche Verzeichnisse zur normalen Sicherung ggf. mit eingeschlossen oder ausgeschlossen werden sollen.
/var/log/tsm-schedule.log Scheduler Log - Zeit die letzten Aktivitäten des Client-Agents.
/var/log/tsm-error.log Fehler Log - Enthält Hinweise zu aufgetretenen Fehlern.
/var/log/dsmwebcl.log LOG des internen Webservers des Client-Agents (port 1581)
/usr/bin/dsmc Kommandozeiletool zum Rücksicherung von Dateien, die über Tivolie gesichert wurden

Beispielbefehle für Rücksicherungen

Befehl Befehlswirkung
queryabfragen (können ggf. auch mit wild cards z. B. '*' ausgeführt werden)
dsmc q backup '*' Zeigt alle aktiven restorefähigen Dateien des aktuellen Verzeichnisses an. Das “q” bedeutet, dass es sich erst mal nur um eine Abfrage handeln soll (“q” steht für “query”) und nicht um eine tatsächliche Rücksicherung.
dsmc q backup '/data1/Bin/DasProgramm/konfig.xml' -inactive Zeigt alle restorefähigen Versionen der Datei /data1/Bin/DasProgramm/konfig.xml an.
dsmc q backup '/data1/Bin/DasProgramm/' -inactive Zeigt alle restorefähigen Dateien eines Verzeichnisses an.
dsmc q backup '/data1/Bin/DasProgramm/' -inactive -detail -subdir=yes Zeigt alle restorefähigen Dateien eines Verzeichnisses und dessen Unterverzeichnisse detailiert an. (mit Angabe der letzten Modifikation und des letzten Zugriffs)
ruecksicherungen (können ggf. auch mit wild cards z. B. “*” ausgeführt werden) Wenn eine Zieldatei schon existiert, und NICHT '-replace=all' aktiviert ist, werden folgende Optionen inteaktiv abgefragt/bereitgestellt:
1. Replace this object
2. Replace all objects that already exist
3. Skip this object 
4. Skip all objects that already exist
A. Abort this operation
dsmc restore '/data1/Bin/DasProgramm/config.xml' Lädt die letzte aktive Version der Datei /data1/Bin/DasProgramm/config.xml zurück und frägt, ob die Datei überschrieben werden soll.
dsmc restore '/data1/Bin/DasProgramm/config.xml' '/tmp/rueck_config.xml' Lädt die letzte aktive Version der Datei /data1/Bin/DasProgramm/config.xml nach Datei /tmp/rueck_config.xml zurück und frägt (falls vorhanden) nach, ob die Datei /tmp/rueck_config.xml überschrieben werden soll.
dsmc restore '/data1/Bin/DasProgramm/' Lädt das Verzeichnis /data1/Bin/DasProgramm/ mit den aktiven Versionen der Dateien zurück und frägt, ob die Dateien im Verzeichnis /data1/Bin/DasProgramm/ überschrieben werden sollen. ACHTUNG: OHNE UNTERVERZEICHNISSE!! Um inkl. Unterverzeichnisse rückzusichern muss am Ende der Zeile die Option -subdir=yes verwendet werden.
dsmc restore '/data1/Bin/DasProgramm/' -latest Lädt die letzten Versionen (egal ob inaktiv oder aktive) der Dateien des Verzeichnis /data1/Bin/DasProgramm/ zurück und frägt, ob die Dateien im Verzeichnis /data1/Bin/DasProgramm/ überschrieben werden sollen.
dsmc restore '/data1/Bin/DasProgramm/*xml' Lädt alle XML-Dateien des Verzeichnis /data1/Bin/DasProgramm/ zurück und frägt, ob die Dateien ggf. überschrieben werden sollen.
dsmc restore '/data1/Bin/DasProgramm/*xml' '/tmp/' Lädt alle XML-Dateien des Verzeichnis /data1/Bin/DasProgramm/ nach Verzeichnis /tmp/ zurück und frägt, ob die Dateien in Verzeichnis /tmp/ überschrieben werden sollen.
dsmc restore -pitd=05/18/2010 -pitt=12:00:00 '/data1/Bin/TBStarter/' -subdir=yes Es werden alle Dateien unterhalb von Verzeichnis /data1/Bin/DasProgramm/ nach /data1/Bin/DasProgramm/ rückgesichert. Es werden jede Dateien zurückgesichert, welche am 18.05.2010 gegen 12:00 Uhr aktuell waren.
dsmc restore '/data1/Bin/DasProgramm/' '/tmp/' -subdir=yes -pick -inactive Lädt herausgepickte (-pick) Dateien unterhalb des Verzeichnisses /data1/Bin/DasProgramm/ nach Verzeichnis /tmp/ zurück. Es können einzelne aktive und inaktive Versionen von Dateien durch einen Programmdialog herausgepickt ergo rückgesichert werden.
dsmc restore “/home/” -subdir=yes -replace=yes -ifnewer Läd die gesamte Verzeichnissstruktur von /home/* inkl aller Unterverzeichnisse zurück an den Originalort. Es werden allerdings bereits vorhandene Dateien nur dann ersetzt wenn diese ÄLTER als die Version in der Datensicherung sind. AUszug aus dem TSM Handbuch: “Mit der Option ifnewer wird eine vorhandene Datei nur dann durch die letzte Sicherungsversion ersetzt, wenn die Sicherungsversion neuer ist als die vorhandene Datei. Wenn die Option inactive oder latest nicht verwendet wird, werden nur aktive Sicherungsversionen berücksichtigt.
Anmerkung: Verzeichniseinträge werden durch die neueste Sicherungsversion ersetzt, unabhängig davon, ob diese älter oder neuer als die vorhandene Version ist.”
dsmc query restore Hat man eine Rücksicherung mit CTRL+C abgebrochen (eigentlich nur “unterbrochen”), so bleibt der eigentliche Rücksicherungs-Job auf dem TSM Server bestehen und wartet auf Fortsetzung! Die zur Fortsetzung wartenden Aufträge können mit query restore angezeigt werden. Zum löschen/abbrechen von wartenden Aufträgen kann dsmc cancel restore verwendet werden.
dsmc cancel restore Bricht aktuell laufende Rücksicherungsaufträge ab. Zeigt eine Liste mir “unterbrochenen” jedoch auf Fortsetzung wartenden Rücksicherungsaufträgen an und frägt interaktiv welcher aktiver Auftrag tatsächlich abgebrochen (canceled) werden soll.
dsmc restart restoreUnterbrochene, jedoch noch wartende Rücksicherungsaufträge können an gleicher Stelle fortgesetzt werden.
killall dsmcad
killall dsmc

Weitere Dokus zur TSM Datensicherung

it-artikel/linux/ibm-tivoli-storage-manager-datensicherung-fuer-debian-lenny-einrichten.txt · Last modified: 2019-05-18 14:26 by