|- scripts (scripts and .conf files)
|- tests (test scripts)
|- tmp (temporary directory for temp files)
+ |- working (temporary working directory for Bacula daemons)
Project docs:
|- docs (documentation directory)
-img1.png\ 1./bacula-logo.eps
img2.png\ 1./smartall.eps
+img1.png\ 1./bacula-logo.eps
-1.39.20 (16 August 2006)
+1.39.23 (28 September 2006)
-1.39.20 (16 August 2006)
+1.39.23 (28 September 2006)
\end{verbatim}
\normalsize
- The special characters \&()[]\{\}\^{}=;!'+,`\~{} will need to be quoted
+ The special characters
+\begin{verbatim}
+&<>()@^|
+\end{verbatim}
+ will need to be quoted,
if they are part of a filename or argument.
If someone is logged in, a blank "command" window running the commands
rather than DOS/Windows form:
ClientRunBeforeJob =
-
+
"c:\textbackslash{}bacula\textbackslash{}bin\textbackslash{}systemstate.bat"
INCORRECT
\end{enumerate}
+
+For Win32, please note that there are certain limitations:
+
+
+ClientRunBeforeJob = "C:/Program Files/Bacula/bin/pre-exec.bat"
+
+Lines like the above do not work because there are limitations of
+cmd.exe that is used to execute the command.
+Bacula prefixes the string you supply with {\bf cmd.exe /c }. To test that
+your command works you should type {\bf cmd /c "C:/Program Files/test.exe"} at a
+cmd prompt and see what happens. Once the command is correct insert a
+backslash (\textbackslash{}) before each double quote ("), and
+then put quotes around the whole thing when putting it in
+the director's .conf file. You either need to have only one set of quotes
+or else use the short name and don't put quotes around the command path.
+
+Below is the output from cmd's help as it relates to the command line
+passed to the /c option.
+
+
+ If /C or /K is specified, then the remainder of the command line after
+ the switch is processed as a command line, where the following logic is
+ used to process quote (") characters:
+
+\begin{enumerate}
+\item
+ If all of the following conditions are met, then quote characters
+ on the command line are preserved:
+ \begin{itemize}
+ \item no /S switch.
+ \item exactly two quote characters.
+ \item no special characters between the two quote characters,
+ where special is one of:
+\begin{verbatim}
+&<>()@^|
+\end{verbatim}
+ \item there are one or more whitespace characters between the
+ the two quote characters.
+ \item the string between the two quote characters is the name
+ of an executable file.
+ \end{itemize}
+
+\item Otherwise, old behavior is to see if the first character is
+ a quote character and if so, strip the leading character and
+ remove the last quote character on the command line, preserving
+ any text after the last quote character.
+
+\end{enumerate}
+
The following example of the use of the Client Run Before Job directive was
submitted by a user:\\
since they are already inside quotes. For example:
\begin{verbatim}
- run = "Nightly-backup level=%s since=\"%s\" storage=DDS-4"
+ run = "Nightly-backup level=%l since=\"%s\" storage=DDS-4"
\end{verbatim}
to a Backup Job but with {\bf Type = Migrate} instead of {\bf Type =
Backup}. One of the key points to remember is that the Pool that is
specified for the migration job is the only pool from which jobs will
-be migrated, with one exception noted below.
+be migrated, with one exception noted below. Also, Bacula permits pools
+to contain Volumes with different Media Types. However, when doing
+migration, this is a very undesirable condition. For migration to work
+properly, you {\bf must} use pools containing only Volumes of the same
+Media Type for all migration jobs.
The migration job normally is either manually started or starts
from a Schedule much like a backup job. It searches
\index[general]{Important Migration Considerations}
\addcontentsline{toc}{subsection}{Important Migration Considerations}
\begin{itemize}
+\item Each Pool into which you migrate Jobs or Volumes {\bf must}
+ contain Volumes of only one Media Type.
+
\item Migration takes place on a JobId by JobId basis. That is
each JobId is migrated in its entirety and independently
of other JobIds. Once the Job is migrated, it will be
different options. Turning on a debug level of 100 or more will provide
a limited amount of debug information about the migration selection
process.
+
+\item Bacula does not currently do any Storage conflict resolution, so you
+ must take care to ensure that you don't try to read and write to the
+ same device or Bacula will block waiting to reserve a drive that it
+ will never find. In general, ensure that all your migration
+ pools contain only one Media Type, and that you always
+ migrate to pools with different Media Types.
\end{itemize}
with the lowest MediaId is chosen).
\item Try recycling any purged Volumes.
\item Prune volumes applying Volume retention period (Volumes with VolStatus
- Full, Used, or Append are pruned).
+ Full, Used, or Append are pruned). Note, even if all the File and Job
+ records are pruned from a Volume, the Volume will not be marked Purged
+ until the Volume retention period expires.
\item Search the Pool for a Volume with VolStatus=Purged
\item If a Pool named "Scratch" exists, search for a Volume and if found
move it to the current Pool for the Job and use it. Note, when
it is in the Autochanger.
\item Attempt to create a new Volume if automatic labeling enabled
If Python is enabled, a Python NewVolume event is generated before
- the Label Format directve is used.
-\item Prune the oldest Volume if RecycleOldestVolume=yes (the Volume with the
+ the Label Format directve is used. If the maximum number of Volumes
+ specified for the pool is reached, a new Volume will not be created.
+\item Prune the oldest Volume if RecycleOldestVolume=yes (the Volume with the
oldest LastWritten date and VolStatus equal to Full, Recycle, Purged, Used,
or Append is chosen). This record ensures that all retention periods are
- properly respected.
+ properly respected.
\item Purge the oldest Volume if PurgeOldestVolume=yes (the Volume with the
oldest LastWritten date and VolStatus equal to Full, Recycle, Purged, Used,
or Append is chosen). We strongly recommend against the use of {\bf
- PurgeOldestVolume} as it can quite easily lead to loss of current backup
+ PurgeOldestVolume} as it can quite easily lead to loss of current backup
data.
\item Give up and ask operator.
\end{itemize}
Current Volume = yes} and the Volume is marked as Used or Full, Bacula will
prune the volume and if all jobs were removed during the pruning (respecting
the retention periods), the Volume will be recycled and used.
-The recycling algorithm in this case is:
+The recycling algorithm in this case is:
\begin{itemize}
\item If the VolStatus is {\bf Append} or {\bf Recycle}
is set, the volume will be used.
an order different from what is in the catalog, and if the volume does not
contain a current copy of your backup data, it will be used.
+A few points from Alan Brown to keep in mind:
+
+\begin{enumerate}
+\item If a pool doesn't have maximum volumes defined then Bacula will prefer to
+ demand new volumes over forcibly purging older volumes.
+
+\item If volumes become free through pruning and the Volume retention period has
+ expired, then they get marked as "purged" and are immediately available for
+ recycling - these will be used in preference to creating new volumes.
+
+\item If the Job, File, and Volume retention periods are different, then
+ it's common to see a tape with no files or jobs listed in the database,
+ but which is still not marked as "purged".
+\end{enumerate}
+
+
\subsection*{Recycle Status}
\index[general]{Status!Recycle }
\index[general]{Recycle Status }
-1.39.23 (20 September 2006)
+1.39.23 (28 September 2006)