On 3/12/2011 9:29 AM, ganiuszka wrote:
> W dniu 11 marca 2011 21:45 użytkownik ganiuszka<ganiuszka AT gmail DOT com>
> napisał:
>> Hi,
>> In my example jobid is putting in:
>> ... File.JobId=8...
>> but this "eight":
>>
>> base64_decode_lstat(8,File.LStat)
>>
>> is exactly eight field (encoded filesize field). I seem that you used
>> standard base64 decoder to decode eighth field. Am I right?
>>
>> Bacula lstat is encoded by using non-standard base64 algorithm. Your
>> decoded lstat shows like this:
>>
>> [dev] => 89
>> [inodes] => 1366434
>> [mode] => 33200
>> [links] => 1
>> [uid] => 80
>> [gid] => 91
>> [rdev] => 5481898
>> [size] => 315
>> [blksize] => 16384
>> [blocks] => 4
>> [atime] => 1299770037
>> [mtime] => 1299770037
>> [ctime] => 1299770066
>> [LinkFl] => 0
>> [flags] => 0
>> [data] => 2
>>
>> I do not understand every field, but most fields is clear. Now, I
>> wrote implementation of Bacula base64_decoder in PHP. I need finish it
>> and make WebGUI for this and I will share this decoder here. For this
>> I am using source code of base64 implementation in Bacula and this:
>>
>> http://old.nabble.com/The-File.LStat-field-td940366.html
>>
>> Regards.
>> gani
>>
>> 2011/3/11 Dan Langille<dan AT langille DOT org>:
>>> On 3/9/2011 5:36 PM, ganiuszka wrote:
>>>
>>>> 2011/3/9 Mike Eggleston<mikeegg1 AT mac DOT com>:
>>>>>
>>>>> Afternoon,
>>>>>
>>>>> I just noticed one of my clients had a huge incremental (level 2)
>>>>> backup. I want to see what file caused the huge increase. I tried 'list
>>>>> files jobid=20097' and though I'm shown the files, I'm not shown the
>>>>> size of each file. Is there a command or query that shows me the size
>>>>> of the file?
>>>>>
>>>>> Mike
>>>
>>>> Hi,
>>>> Here you have SQL function for PostgreSQL (I took it from bweb):
>>>>
>>>> CREATE PROCEDURAL LANGUAGE plpgsql;
>>>> BEGIN;
>>>>
>>>> CREATE OR REPLACE FUNCTION base64_decode_lstat(int4, varchar) RETURNS int8
>>>> AS $$
>>>> DECLARE
>>>> val int8;
>>>> b64 varchar(64);
>>>> size varchar(64);
>>>> i int;
>>>> BEGIN
>>>> size := split_part($2, ' ', $1);
>>>> b64 := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
>>>> val := 0;
>>>> FOR i IN 1..length(size) LOOP
>>>> val := val + (strpos(b64, substr(size, i, 1))-1) * (64^(length(size)-i));
>>>> END LOOP;
>>>> RETURN val;
>>>> END;
>>>> $$ language 'plpgsql';
>>>>
>>>> COMMIT;
>>>>
>>>> and this is a query which lists file path, filename and size in Bytes
>>>> (in this example for jobid=8):
>>>>
>>>> SELECT Path.Path, Filename.Name, base64_decode_lstat(8,File.LStat) AS
>>>> size FROM Filename, File, Path WHERE File.JobId=8 AND
>>>> File.PathId=Path.PathId AND Filename.FilenameId=File.FilenameId ORDER
>>>> BY size ASC;
>>>>
>>>> I tested it. It works.
>>>
>>> For the record:
>>>
>>> In this query, I see base64_decode_lstat(8,File.LStat)
>>>
>>> What is 8? It is not jobid. It is a field id. This lstat value:
>>>
>>> BZ FNmi IGw B BQ Bb U6Wq E7 EAA E BNeOq1 BNeOq1 BNeOrS A A C
>>>
>>> The eight field, as defined by ' ', is E7.
>>>
>>> --
>>> Dan Langille - http://langille.org/
>>>
>
>
>
> Hi,
>
> I wrote the Bacula LStat decoder implementation in PHP. I made WebGUI
> for this also. Now online LStat decoder (beta version) is available on
> my page Bacula.pl:
>
> http://www.bacula.pl/bacula-lstat-decoder/
>
> In the near future I need to make description of fields.
>
> Here is Bacula LStat decoder function in PHP:
>
> function decode_bacula_lstat($lstat) {
> $base64 =
> 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
> $lstat = trim($lstat);
> $lstat_fields = explode(' ', $lstat);
>
> if(count($lstat_fields) !== 16) {
> die('Error! Number of lstat fields is invalid. Please make sure
> that
> it is valid lstat string.');
> }
>
> list($dev, $inode, $mode, $links, $uid, $gid, $rdev, $size, $blksize,
> $blocks, $atime, $mtime, $ctime, $linkfi, $flags, $data) =
> $lstat_fields;
> $encoded_values = array('dev' => $dev, 'inode' => $inode, 'mode' =>
> $mode, 'links' => $links, 'uid' => $uid, 'gid' => $gid, 'rdev' =>
> $rdev, 'size' => $size, 'blksize' => $blksize, 'blocks' => $blocks,
> 'atime' => $atime, 'mtime' => $mtime, 'ctime' => $ctime, 'linkfi' =>
> $linkfi, 'flags' => $flags, 'data' => $data);
>
> $ret = array();
> foreach($encoded_values as $key => $val) {
> $result = 0;
> $is_minus = false;
> $start = 0;
>
> if(substr($val, 0, 1) === '-') {
> $is_minus = true;
> $start++;
> }
>
> for($i = $start; $i < strlen($val); $i++) {
> $result <<= 6;
> $result += strpos($base64, substr($val, $i , 1));
> }
> $ret[$key] = ($is_minus === true) ? -$result : $result;
> }
> return $ret;
> }
>
> and here is usage for this:
>
> $lstat = 'gB DL+b IGg B A y A D5dZR BAA fN4 BNeR+z BNeR+7 BNeR+7 A A C';
> $decoded_lstat = decode_bacula_lstat($lstat);
> print_r($decoded_lstat);
>
> Any suggestions and modifications are welcome.
> Regards
> gani
>
I tried this function. I got an interesting value for:
Bn bIgF IGk B Pp Pp BsZ/o Cp7/ZH EAA VQLA BNachF BNacW5 BNachH A A C
The PHP function returns: -1443891641
The pgsql function returns:
bacula=# select base64_decode_lstat(8,'Bn bIgF IGk B Pp Pp BsZ/o Cp7/ZH
EAA VQLA BNachF BNacW5 BNachH A A C')
bacula-# ;
base64_decode_lstat
---------------------
2851075655
(1 row)
bacula=#
Which is a more likely value.... FYI.
--
Dan Langille - http://langille.org/
------------------------------------------------------------------------------
Colocation vs. Managed Hosting
A question and answer guide to determining the best fit
for your organization - today and in the future.
http://p.sf.net/sfu/internap-sfd2d
_______________________________________________
Bacula-users mailing list
Bacula-users AT lists.sourceforge DOT net
https://lists.sourceforge.net/lists/listinfo/bacula-users
|