>>>>> On Tue, 18 Apr 2006 14:25:08 -0400, Emery Guevremont <[EMAIL PROTECTED]> 
>>>>> said:
> Martin Simmons wrote:
> >>>>>> On Thu, 13 Apr 2006 17:40:02 -0400, Emery Guevremont <[EMAIL 
> >>>>>> PROTECTED]> said:
> >> Martin Simmons wrote:
> >>>>>>>> On Thu, 13 Apr 2006 14:27:45 -0400, Emery Guevremont <[EMAIL 
> >>>>>>>> PROTECTED]> said:
> >>>> Martin Simmons wrote:
> >>>>>>>>>> On Wed, 12 Apr 2006 10:30:07 -0400, Emery Guevremont <[EMAIL 
> >>>>>>>>>> PROTECTED]> said:
> >>>>>> Martin Simmons wrote:
> >>>>>>>>>>>> On Fri, 07 Apr 2006 10:43:30 -0400, Emery Guevremont <[EMAIL 
> >>>>>>>>>>>> PROTECTED]> said:
> >>>>>>>> I have a weird problem. I'm trying to restore some files from a tape 
> >>>>>>>> backup taken a few months ago.
> >>>>>>>>
> >>>>>>>> The problem is that the files aren't on the tape. If I use the query 
> >>>>>>>> command in bconsole to find out which tape has the files, it says 
> >>>>>>>> the 
> >>>>>>>> files are on tape GKN079. If I check the "last date written" field 
> >>>>>>>> for 
> >>>>>>>> tape GKN079 it says Dec. 23rd 2005. I can also confirm the files I'm 
> >>>>>>>> trying to restored when backed up on dec. 18 and dec. 20.
> >>>>>>>>
> >>>>>>>> Now when I use the bls command to list the different jobs contained 
> >>>>>>>> on 
> >>>>>>>> the tape, it stops at a job done on dec. 15. This is the last entry 
> >>>>>>>> from 
> >>>>>>>> my bls command:
> >>>>>>>>
> >>>>>>>> JobId             : 9417
> >>>>>>>> VerNum            : 11
> >>>>>>>> PoolName          : BDDump
> >>>>>>>> PoolType          : Backup
> >>>>>>>> JobName           : VMDBDmaitre-BDDump
> >>>>>>>> ClientName        : vmdbdmaitre-fd
> >>>>>>>> Job (unique name) : VMDBDmaitre-BDDump.2005-12-14_20.05.11
> >>>>>>>> FileSet           : BDDump-fs
> >>>>>>>> JobType           : B
> >>>>>>>> JobLevel          : I
> >>>>>>>> JobFiles          : 531
> >>>>>>>> JobBytes          : 5,129,941,915
> >>>>>>>> StartBlock        : 0
> >>>>>>>> EndBlock          : 4,463
> >>>>>>>> StartFile         : 55
> >>>>>>>> EndFile           : 54
> >>>>>>>> JobErrors         : 0
> >>>>>>>> JobStatus         : T
> >>>>>>>> Date written      : 15-Dec-2005 08:15
> >>>>>>>> bls: Got EOF at file 61  on device /dev/nst0, Volume "GKN079"
> >>>>>>>> bls: End of Volume at file 61 on device /dev/nst0, Volume "GKN079"
> >>>>>>>> bls: End of all volumes.
> >>>>>>>> End of physical tape.
> >>>>>>>>
> >>>>>>>> What I'm wondering is where are the jobs that were done between dec. 
> >>>>>>>> 15, 
> >>>>>>>> 2005 and dec. 23, 2005?
> >>>>>>>>
> >>>>>>>> I've also used the bls command to list the files on tape and the 
> >>>>>>>> last 
> >>>>>>>> file on tape dates back to dec. 15. Here's how bls end after listing 
> >>>>>>>> my 
> >>>>>>>> files:
> >>>>>>>>
> >>>>>>>> End Session Record: VolSessionId=153 VolSessionTime=1134158972 
> >>>>>>>> JobId=9417 DataLen=209
> >>>>>>>> bls: Got EOF at file 61  on device /dev/nst0, Volume "GKN079"
> >>>>>>>> bls: End of Volume at file 61 on device /dev/nst0, Volume "GKN079"
> >>>>>>>> bls: End of all volumes.
> >>>>>>>> Unknown Record: VolSessionId=0 VolSessionTime=0 JobId=0 DataLen=0
> >>>>>>>> 4417 files found.
> >>>>>>>>
> >>>>>>>> What does unknown record mean?
> >>>>>>>>
> >>>>>>>> Whether I look at the logs or on bconsole, no errors ever happened 
> >>>>>>>> with 
> >>>>>>>> the backups between dec. 15 and dec. 23. Everything indicates my 
> >>>>>>>> backups 
> >>>>>>>> should be on tape GKN079, but I don't see it on the tape. Is the 
> >>>>>>>> tape 
> >>>>>>>> dying? BTW I also tried reading the tape on a different drive, and I 
> >>>>>>>> got 
> >>>>>>>> the same result.
> >>>>>> I suggest you post the output of running
> >>>>>> select * from jobmedia where mediaid=xx;
> >>>>>> from the bconsole sql command, where xx is the mediaid of GKN079.  
> >>>>>> Also, what
> >>>>>> is the jobid of the job you are trying to restore?
> >>>>>> __Martin
> >>>>>> The jobid of the job in question is 9580. I've attached a file that
> >>>>>> contains the output from the sql query. The problem starts from jobid 
> >>>>>> 9435. Every jobs after 8435 aren't available. One thing I noticed is 
> >>>>>> that there's no start or end file number 61, it skips from 60 to 62. 
> >>>>>> Could this be causing the problem?
>>>>> Yes, possibly.  I can think of three reasons why 61 could be missing now:
> >>>>>
>>>>> - There was an error during that job.
>>>>> - There is a bug in bacula that writes junk.
>>>>> - It has been pruned.
> >>>>>
>>>>> It is interesting that to see other gaps too, e.g. 39.  From the 
>>>>> numbering, it
>>>>> looks like 39 might be from job 9410.  Did that job run?
> >>>> Yes this job ran with the termination status OK, but there was nothing 
> >>>> to backup so it's normal there was nothing on the tape for job 9410.
> >>> OK, perhaps it didn't record this in the database, though your dd output 
> >>> does
> >>> show a single 64512 byte block at that position on the tape.
> >>>
> >>>
>>>>> Was the tape in the drive continuously for all of these jobs?  If not, 
>>>>> maybe
>>>>> the discontinuities occur at the point where the tape was reinserted?
> >>>> I'm using an Autoloader, and the tape is always in the drive.
> >>>>>>                                    If so, how do I force bextract to 
> >>>>>> skip fileid 61?
>>>>> Given the "Unknown Record" error, it might not be mpossible.  It could be
>>>>> interesting to play with mt and dd to see what happens at various points 
>>>>> on
>>>>> the tape.  Each "file" should be readable using dd and the size should be
>>>>> slightly larger than reported in the job output.  E.g. (parameters may 
>>>>> need
>>>>> adjusting):
> >>>>>
>>>>> mt rewind
>>>>> mt fsf 38
>>>>> dd if=/dev/nsa0 bs=64512 | wc -c   # size of file 38
>>>>> dd if=/dev/nsa0 bs=64512 | wc -c   # size of file 39
>>>>> dd if=/dev/nsa0 bs=64512 | wc -c   # size of file 40
> >>>>>
>>>>> mt rewind
>>>>> mt fsf 60
>>>>> dd if=/dev/nsa0 bs=64512 | wc -c   # size of file 60
>>>>> dd if=/dev/nsa0 bs=64512 | wc -c   # size of file 61
>>>>> dd if=/dev/nsa0 bs=64512 | wc -c   # size of file 62
> >>>>>
>>>>> __Martin
> >>>>>
> >>>> Size of file 38 is 894523392
> >>>> Size of file 39 is 64512
> >>>> Size of file 40 is 105348096
> >>>>
> >>>> Size of file 60 is 423005184
> >>>> Size of file 61 is 0
> >>>> Size of file 62 is 350106624
> >>>>
> >>>> So what can I do now?
> >>> 0 is rather worrying.  I think the problem might be that reading 0 bytes
> >>> (without error) is the way that the OS indicates the end of the tape, so
> >>> Bacula stops there.
> >>>
> >>> That is done in Bacula's low level device handling code, so the only way 
> >>> to
> >>> make it read past there would be to hack the source...
> >>>
> >> Couldn't I use some other tool to extract the info from the tape? I.E.
> >> the restore utility that comes with mt or cpio or dd?
> > 
> > Yes, you could use dd to read the raw data from the tape, but the problem 
> > then
> > is how to use this data with Bacula.  It probably requires some more source
> > code hackery.
> > 
> > Another possible idea would be to dd all the tape files into separate files 
> > on
> > disk.  Then insert a new unlabelled tape and dd them back onto the new tape,
> > but replace file 61 with another copy of file 39.  I think that bacula won't
> > care about the contents of this file.
> > 
> > You might not even need to copy all the files back to the tape, just the 
> > first
> > one (which contains the label) and the ones you need.
> > 
> > Rather a long long shot...
> > 
> 
> Got it!
> 
> I did what you suggested. I took a blank tape and dd onto it the files I 
> was interested in. Here's what I exactly did on the command line, then 
> I'll explain:
> 
> ----------
> # Device /dev/nst0 -> Original Tape
> # Device /dev/nst2 -> Blank Tape
> 
> mt -f /dev/nst0 rewind
> mt -f /dev/nst2 rewind
> dd if=/dev/nst0 bs=64512 of=/dev/nst2 # Copy of file 0
> dd if=/dev/nst0 bs=64512 of=/dev/nst2 # Copy of file 1
> dd if=/dev/nst0 bs=64512 of=/dev/nst2 # Copy of file 2
> mt -f /dev/nst0 rewind
> mt -f /dev/nst0 fsf 208
> dd if=/dev/nst0 bs=64512 of=/dev/nst2 # Copy of file 208
> dd if=/dev/nst0 bs=64512 of=/dev/nst2 # Copy of file 209
> dd if=/dev/nst0 bs=64512 of=/dev/nst2 # Copy of file 210
> dd if=/dev/nst0 bs=64512 of=/dev/nst2 # Copy of file 211
> dd if=/dev/nst0 bs=64512 of=/dev/nst2 # Copy of file 212
> dd if=/dev/nst0 bs=64512 of=/dev/nst2 # Copy of file 213
> mt -f /dev/nst2 rewind
> bls -v -V "GKN079" AutoLoader > /tmp/files
> 
> ----------
> 
> I had to copy the first file (at least), but to make sure I copied the 
> first 3, which contained the bacula label. Then using the mt command I 
> positioned the tape to file 208 and using the dd command I copied files 
> 208 through 213. I ran the bls command to view the contents, and 
> everything was there. I also successfully restored the files I needed 
> and their integrity checked out.

LOL, it's amazing what can be done from a shell prompt :-)


> BTW how did you know to use the "bs=64512" option with the dd command? 
> Where did you get the 64512 size from?

It is Bacula's default block size.  On FreeBSD at least, dd gives an error
without bs=64512 because the default buffer is too small.

__Martin


-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Bacula-users mailing list
Bacula-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bacula-users

Reply via email to