]> git.sur5r.net Git - bacula/docs/blobdiff - docs/manuals/de/old/problems/kaboom.tex
Reset everything to English
[bacula/docs] / docs / manuals / de / old / problems / kaboom.tex
diff --git a/docs/manuals/de/old/problems/kaboom.tex b/docs/manuals/de/old/problems/kaboom.tex
new file mode 100644 (file)
index 0000000..a4e5bc5
--- /dev/null
@@ -0,0 +1,233 @@
+%%
+%%
+
+\chapter{What To Do When Bacula Crashes (Kaboom)}
+\label{KaboomChapter}
+\index[general]{Kaboom!What To Do When Bacula Crashes }
+\index[general]{What To Do When Bacula Crashes (Kaboom) }
+
+If you are running on a Linux system, and you have a set of working
+configuration files, it is very unlikely that {\bf Bacula} will crash. As with
+all software, however, it is inevitable that someday, it may crash,
+particularly if you are running on another operating system or using a new or
+unusual feature. 
+
+This chapter explains what you should do if one of the three {\bf Bacula}
+daemons (Director, File, Storage) crashes.  When we speak of crashing, we 
+mean that the daemon terminates abnormally because of an error.  There are
+many cases where Bacula detects errors (such as PIPE errors) and will fail 
+a job. These are not considered crashes.  In addition, under certain
+conditions, Bacula will detect a fatal in the configuration, such as 
+lack of permission to read/write the working directory. In that case,
+Bacula will force itself to crash with a SEGFAULT. However, before
+crashing, Bacula will normally display a message indicating why.    
+For more details, please read on.
+  
+
+\section{Traceback}
+\index[general]{Traceback}
+
+Each of the three Bacula daemons has a built-in exception handler which, in
+case of an error, will attempt to produce a traceback. If successful the
+traceback will be emailed to you. 
+
+For this to work, you need to ensure that a few things are setup correctly on
+your system: 
+
+\begin{enumerate}
+\item You must have a version of Bacula built with debug information turned
+   on and not stripped of debugging symbols.
+
+\item You must have an installed copy of {\bf gdb} (the GNU debugger),  and it
+   must be on {\bf Bacula's} path. On some systems such as Solaris, {\bf
+   gdb} may be replaced by {\bf dbx}.
+
+\item The Bacula installed script file {\bf btraceback} must  be in the same
+   directory as the daemon which dies, and it must  be marked as executable.  
+
+\item The script file {\bf btraceback.gdb} must  have the correct  path to it
+   specified in the {\bf btraceback} file.  
+
+\item You must have a {\bf mail} program which is on {\bf Bacula's}  path. 
+   By default, this {\bf mail} program is set to {\bf bsmtp}, so it must
+   be correctly configured.
+
+\item If you run either the Director or Storage daemon under a non-root
+   userid, you will most likely need to modify the {\bf btraceback} file
+   to do something like {\bf sudo} (raise to root priority) for the       
+   call to {\bf gdb} so that it has the proper permissions to debug
+   Bacula.
+\end{enumerate}
+
+If all the above conditions are met, the daemon that crashes will produce a
+traceback report and email it to you. If the above conditions are not true,
+you can either run the debugger by hand as described below, or you may be able
+to correct the problems by editing the {\bf btraceback} file. I recommend not
+spending too much time on trying to get the traceback to work as it can be
+very difficult. 
+
+The changes that might be needed are to add a correct path to the {\bf gdb}
+program, correct the path to the {\bf btraceback.gdb} file, change the {\bf
+mail} program or its path, or change your email address. The key line in the
+{\bf btraceback} file is: 
+
+\footnotesize
+\begin{verbatim}
+gdb -quiet -batch -x /home/kern/bacula/bin/btraceback.gdb \
+     $1 $2 2>\&1 | bsmtp -s "Bacula traceback" your-address@xxx.com
+\end{verbatim}
+\normalsize
+
+Since each daemon has the same traceback code, a single btraceback file is
+sufficient if you are running more than one daemon on a machine. 
+
+\section{Testing The Traceback}
+\index[general]{Traceback!Testing The }
+\index[general]{Testing The Traceback }
+
+To "manually" test the traceback feature, you simply start {\bf Bacula} then
+obtain the {\bf PID} of the main daemon thread (there are multiple threads).
+The output produced here will look different depending on what OS and what
+version of the kernel you are running.
+Unfortunately, the output had to be split to fit on this page: 
+
+\footnotesize
+\begin{verbatim}
+[kern@rufus kern]$ ps fax --columns 132 | grep bacula-dir
+ 2103 ?        S      0:00 /home/kern/bacula/k/src/dird/bacula-dir -c
+                                       /home/kern/bacula/k/src/dird/dird.conf
+ 2104 ?        S      0:00  \_ /home/kern/bacula/k/src/dird/bacula-dir -c
+                                       /home/kern/bacula/k/src/dird/dird.conf
+ 2106 ?        S      0:00      \_ /home/kern/bacula/k/src/dird/bacula-dir -c
+                                       /home/kern/bacula/k/src/dird/dird.conf
+ 2105 ?        S      0:00      \_ /home/kern/bacula/k/src/dird/bacula-dir -c
+                                       /home/kern/bacula/k/src/dird/dird.conf
+\end{verbatim}
+\normalsize
+
+which in this case is 2103. Then while Bacula is running, you call the program
+giving it the path to the Bacula executable and the {\bf PID}. In this case,
+it is: 
+
+\footnotesize
+\begin{verbatim}
+./btraceback /home/kern/bacula/k/src/dird 2103
+\end{verbatim}
+\normalsize
+
+It should produce an email showing you the current state of the daemon (in
+this case the Director), and then exit leaving {\bf Bacula} running as if
+nothing happened. If this is not the case, you will need to correct the
+problem by modifying the {\bf btraceback} script. 
+
+Typical problems might be that {\bf gdb} or {\bf dbx} for Solaris is not on
+the default path.  Fix this by specifying the full path to it in the {\bf
+btraceback} file.  Another common problem is that you haven't modified the
+script so that the {\bf bsmtp} program has an appropriate smtp server or
+the proper syntax for your smtp server.  If you use the {\bf mail} program
+and it is not on the default path, it will also fail.  On some systems, it
+is preferable to use {\bf Mail} rather than {\bf mail}.
+
+\section{Getting A Traceback On Other Systems}
+\index[general]{Getting A Traceback On Other Systems}
+\index[general]{Systems!Getting A Traceback On Other}
+
+It should be possible to produce a similar traceback on systems other than
+Linux, either using {\bf gdb} or some other debugger. Solaris with {\bf dbx}
+loaded works quite fine. On other systems, you will need to modify the {\bf
+btraceback} program to invoke the correct debugger, and possibly correct the
+{\bf btraceback.gdb} script to have appropriate commands for your debugger. If
+anyone succeeds in making this work with another debugger, please send us a
+copy of what you modified. Please keep in mind that for any debugger to
+work, it will most likely need to run as root, so you may need to modify
+the {\bf btraceback} script accordingly.
+
+\label{ManuallyDebugging}
+\section{Manually Running Bacula Under The Debugger}
+\index[general]{Manually Running Bacula Under The Debugger}
+\index[general]{Debugger!Manually Running Bacula Under The}
+
+If for some reason you cannot get the automatic traceback, or if you want to
+interactively examine the variable contents after a crash, you can run Bacula
+under the debugger. Assuming you want to run the Storage daemon under the
+debugger (the technique is the same for the other daemons, only the name
+changes), you would do the following: 
+
+\begin{enumerate}
+\item Start the Director and the File daemon. If the  Storage daemon also
+   starts, you will need to find its PID  as shown above (ps fax | grep
+   bacula-sd) and kill it  with a command like the following:  
+
+\footnotesize
+\begin{verbatim}
+      kill -15 PID
+\end{verbatim}
+\normalsize
+
+where you replace {\bf PID} by the actual value. 
+
+\item At this point, the Director and the File daemon should  be running but
+   the Storage daemon should not.  
+
+\item cd to the directory containing the Storage daemon  
+
+\item Start the Storage daemon under the debugger:  
+
+   \footnotesize
+\begin{verbatim}
+    gdb ./bacula-sd
+\end{verbatim}
+\normalsize
+
+\item Run the Storage daemon:  
+
+   \footnotesize
+\begin{verbatim}
+     run -s -f -c ./bacula-sd.conf
+\end{verbatim}
+\normalsize
+
+You may replace the {\bf ./bacula-sd.conf} with the full path  to the Storage
+daemon's configuration file.  
+
+\item At this point, Bacula will be fully operational.  
+
+\item In another shell command window, start the Console program  and do what
+   is necessary to cause Bacula to die.  
+
+\item When Bacula crashes, the {\bf gdb} shell window will  become active and
+   {\bf gdb} will show you the error that  occurred.  
+
+\item To get a general traceback of all threads, issue the following  command:
+
+\footnotesize
+\begin{verbatim}
+       thread apply all bt
+\end{verbatim}
+\normalsize
+
+After that you can issue any debugging command. 
+\end{enumerate}
+
+\section{Getting Debug Output from Bacula}
+\index[general]{Getting Debug Output from Bacula }
+Each of the daemons normally has debug compiled into the program, but
+disabled. There are two ways to enable the debug output. One is to add the
+{\bf -d nnn} option on the command line when starting the debugger. The {\bf
+nnn} is the debug level, and generally anything between 50 and 200 is
+reasonable. The higher the number, the more output is produced. The output is
+written to standard output. 
+
+The second way of getting debug output is to dynamically turn it on using the
+Console using the {\bf setdebug} command. The full syntax of the command is: 
+
+\footnotesize
+\begin{verbatim}
+ setdebug level=nnn client=client-name storage=storage-name dir
+\end{verbatim}
+\normalsize
+
+If none of the options are given, the command will prompt you. You can
+selectively turn on/off debugging in any or all the daemons (i.e. it is not
+necessary to specify all the components of the above command).