Stephen Winnall wrote:
> On 5 Jan 2008, at 04:39, Dan Langille wrote:
>
>> Dan Langille wrote:
>>> Stephen Winnall wrote:
>>>> I have been using Bacula for over two years quite happily on an
>>>> old Red Hat 9 server. The last version of Bacula that I used was
>>>> a hand- compiled 2.0.0 with PostgreSQL 7.3.9.
>>>>
>>>> This server is the data storage for my Mac OS X and Windows
>>>> clients , which it serves with Netatalk and Samba. So any given
>>>> file can be accessed via Netatalk, Samba or directly as a Linux
>>>> file. Filenames can be English or German (so may contain umlauts).
>>>>
>>>> I decided to migrate the system to Fedora 8 and go with the RPMs
>>>> in that distro (Bacula 2.0.3 and PostgreSQL 8.2.5). I had
>>>> previously done upgrades from Bacula 1.3.x to 2.0.0, and I've
>>>> migrated other PostgreSQL databases across release versions, so I
>>>> thought I knew what I was doing. I dumped the Bacula database
>>>> from PG 7.3.9 using the PostgreSQL facility in Webmin and
>>>> restored it to a new UTF-8 database in PG 8.2.5.
>>>>
>>>> I had to make a few minor alterations to my bacula-*.conf files
>>>> (I built stuff under "/opt/bacula" and the Fedora distro has it
>>>> under "/") and I was ready to go.
>>>>
>>>> Given the time of year, the first task to throw at the new system
>>>> was the annual full backup. This helped me to shake out the usual
>>>> silly errors that one has, but it's also thrown me up against
>>>> something which I don't know how to handle in Bacula.
>>>>
>>>> I have some filenames which contain lowercase-a-umlaut or
>>>> lowercase-u- umlaut which Netatalk has encoded in MacRoman (<8A>
>>>> and <9F> respectively). PostgreSQL takes exception to these and
>>>> Bacula generates messages like the following:
>>>>
>>>> 04-Jan 15:31 hub-dir: Annual_Backup.2008-01-04_15.26.38 Fatal
>>>> error: sql_create.c:870 sql_create.c:870 insert INSERT INTO
>>>> Filename (Name) VALUES ('2004-04-29 Z<9F>rich 0002.jpeg') failed:
>>>> ERROR: invalid byte sequence for encoding "UTF8": 0x9f
>>>> HINT: This error can also happen if the byte sequence does not
>>>> match the encoding expected by the server, which is controlled
>>>> by "client_encoding".
>>>>
>>>> because they fall into an area of UTF-8/Unicode/ISO-8859-1 which
>>>> seems to be unassigned (<82>-<8C> and <90>-<9F>).
>>>>
>>>> These files are not new and I didn't have this problem with my
>>>> old configuration, so something has presumably changed in Bacula
>>>> or PostgreSQL.
>>> Can you put one of those files (or just the filename) into a
>>> tarball and email it to me please? I will try to back it up here.
>> Read this slowly to see where I differ from you. I have not had any
>> backup failures yet.
>>
>> I have the files. Good news: The backup succeeded here. Here is
>> some of the job output:
>>
>> $ echo 'list files jobid=15984' | bconsole | grep nem
>> | /home/dan/bacula-nemesis/2004-05-05 Erg�nzung
>> 0002.jpeg | /home/dan/
>> bacula-nemesis/2004-05-05 Erg�nzung
>> 0001.jpeg | /home/dan/bacula-
>> nemesis/2004-04-29 Z�rich
>> 0002.jpeg | /home/dan/bacula-
>> nemesis/2004-04-29 Z�rich
>> 0001.jpeg | /home/dan/bacula-
>> nemesis/ | /home/dan/bacula-nemesis.tar.gz
>>
>> But then, I'm using SQL_ASCII here. Let me try UTF8 on another
>> system.
>>
>> Oh.. it worked there too:
>>
>> [EMAIL PROTECTED]:~] $ psql -l
>> List of databases
>> Name | Owner | Encoding
>> -----------+--------+-----------
>> bacula | bacula | UTF8
>> postgres | pgsql | SQL_ASCII
>> regress | dan | SQL_ASCII
>> template0 | pgsql | SQL_ASCII
>> template1 | pgsql | SQL_ASCII
>> (5 rows)
>>
>> [EMAIL PROTECTED]:~] $ bconsole
>> Connecting to Director ducky:9101
>> 1000 OK: ducky-dir Version: 2.2.6 (10 November 2007)
>> Enter a period to cancel a command.
>> *restore
>> Automatically selected Catalog: MyCatalog
>> Using Catalog "MyCatalog"
>>
>> First you select one or more JobIds that contain files
>> to be restored. You will be presented several methods
>> of specifying the JobIds. Then you will be allowed to
>> select which files from those JobIds are to be restored.
>>
>> To select the JobIds, you have the following choices:
>> 1: List last 20 Jobs run
>> 2: List Jobs where a given File is saved
>> 3: Enter list of comma separated JobIds to select
>> 4: Enter SQL list command
>> 5: Select the most recent backup for a client
>> 6: Select backup for a client before a specified time
>> 7: Enter a list of files to restore
>> 8: Enter a list of files to restore before a specified time
>> 9: Find the JobIds of the most recent backup for a client
>> 10: Find the JobIds for a backup for a client before a specified
>> time
>> 11: Enter a list of directories to restore for found JobIds
>> 12: Cancel
>> Select item: (1-12): 5
>> Automatically selected Client: ducky-fd
>> Automatically selected FileSet: Full Set
>> +-------+-------+----------+-------------+---------------------
>> +------------+
>> | jobid | level | jobfiles | jobbytes | starttime |
>> volumename |
>> +-------+-------+----------+-------------+---------------------
>> +------------+
>> | 2 | F | 20,689 | 344,879,617 | 2008-01-04 22:13:12 |
>> TestVol001 |
>> +-------+-------+----------+-------------+---------------------
>> +------------+
>> You have selected the following JobId: 2
>>
>> Building directory tree for JobId 2 ... +++++++++++++++++++++++++++++
>> ++++++++++++++++++
>> 1 Job, 19,459 files inserted into the tree.
>>
>> You are now entering file selection mode where you add (mark) and
>> remove (unmark) files to be restored. No files are initially added,
>> unless
>> you used the "all" keyword on the command line.
>> Enter "done" to leave this mode.
>>
>> cwd is: /
>> $ cd /home/dan
>> cwd is: /home/dan/
>> $ ls 2*
>> 2004-04-29 Z�rich 0001.jpeg
>> 2004-04-29 Z�rich 0002.jpeg
>> 2004-05-05 Erg�nzung 0001.jpeg
>> 2004-05-05 Erg�nzung 0002.jpeg
>> $
>>
>> $ [EMAIL PROTECTED]:~] $ psql bacula
>> Welcome to psql 8.2.5, the PostgreSQL interactive terminal.
>>
>> Type: \copyright for distribution terms
>> \h for help with SQL commands
>> \? for help with psql commands
>> \g or terminate with semicolon to execute query
>> \q to quit
>>
>> bacula=#
>>
>>
>> In short, I'm on a different version of PostgreSQL and Bacula.
>>
>> OK, let me upgrade Bacula to 2.2.7. Nope, that's OK too. So I'm on
>> the same Bacula and same PostgreSQL as you.
>>
>> Don't know what to tell you. :)
> Hi Dan
>
> Files created with the following Perl script reproduce the problem for
> me. I think it may give a more accurate test basis than the TGZ file I
> sent:
>
> #! /usr/bin/perl -w
>
> touch( "2004-04-29\ Z\237rich\ 0001.jpeg" );
> touch( "2004-04-29\ Z\237rich\ 0002.jpeg" );
> touch( "2004-05-05\ Erg\212nzung\ 0001.jpeg" );
> touch( "2004-05-05\ Erg\212nzung\ 0002.jpeg" );
>
> sub touch {
> my $filename = shift;
> open FILE, ">$filename";
> close FILE;
> }
I have confirmed a bug: the job silently fails without reporting the
following error, which is logged in /var/log/messages:
ERROR: invalid byte sequence for encoding "UTF8": 0x9f
HINT: This error can also happen if the byte sequence does not match
the encoding expected by the server is controlled by "client_encoding".
No entries are added to the file table. The error should be logged and
the backup at least not flagged as OK.
As for your situation, there are two questions remaining:
- is the file name valid UTF8?
- if it is, I wonder if we need to do a "set client_encoding 'utf-8'" first
--
Dan Langille - http://www.langille.org/
BSDCan - The Technical BSD Conference: http://www.bsdcan.org/
PGCon - The PostgreSQL Conference: http://www.pgcon.org/
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bacula-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bacula-users