I had been given a DAT drive with a 4-tape changer by Marius Sorteberg (thanks). I immediately
started playing with Bacula on that machine. I liked the way Bacula was set up to use a
database in conjunction with scheduled jobs. My immediate goal was to create a
of this tool (it uses MySQL or
SQLite at present).
I also want to create a web interface for it.
Given that the archive information is in a database, Bacula just screams out for a
Let's walk, then run. First, I wanted to test Bacula on my setup.
I knew nothing about my DAT drive, and my tapes were aging. I started backing up large amounts
of data and restoring them. I found a problem. If a file spanned two tapes, the restored
file was not the same size as the original file.
Kern Sibbald, the author of Bacula, has to be one of the most patient developers I know. Backup
software isn't the most glamorous of applications. You don't hear people bragging about their
latest backup app. Yet Kern has been working away on this application for years. It's well
designed, and has great potential. Kern has been very helpful with the problem I found.
We have slowly tracked down the cause of the problem. The bug was difficult to isolate because
the problem occurred at the end of the tape and that meant testing was very time consuming.
We never thought the problem would be with the pthreads library, but it was.
With assistance from people on the FreeBSD SCSI list, we've found a
bug in the pthreads library of FreeBSD 4.*. The problem doesn't exist on 5.* because it does
not rely on non-blocking file descriptors. On FreeBSD 5.*, Bacula runs fine, with either
libkse or libthr (the two threading libraries available).
Kern and I have been able to isolate the bug, and in conjunction with advice from the freebsd-hackers
and freebsd-standards mailing lists, a patch has been created. Preliminary testing has been very
promising. We have to do more testing before we are satisfied that it works. Then it'll go
into -CURRENT, and after some testing there, it'll be merged from current (MFC'd) into -STABLE.
Watch this space. [NOTE:
This patch was committed on 29 Sep 2003, and was merged from current into stable on 11 Oct 2003 and therefore
will be available in FreeBSD 4.9. For details, pleaes refer to the commit log.]