Eu tenho uma instalação do BareOS com poucas modificações nos arquivos de configuração padrão. Há backups completos, incrementais e diferenciais sendo executados. A maioria dos clientes parece estar sendo copiada conforme o esperado.
No entanto, um de meus clientes parece estar fazendo backup repetidamente de mais de 10% do sistema de arquivos geral em cada ciclo incremental.
Como localizo os maiores arquivos e pastas cujo backup está sendo feito repetidamente?
BAT não parece ser muito útil aqui, pois lista apenas o tamanho do próprio nó do arquivo, em vez do tamanho da pasta inteira. Estou efetivamente procurando um du
comando que funcione na estrutura do BareOS para uma tentativa de backup específica.
Observe que uma atualização importante foi adicionada no final da primeira parte
Infelizmente, mesmo que seja muito fácil verificar exatamente o que aconteceu com um backup específico, não é tão fácil obter o tamanho dos arquivos de backup.
Vamos nos aprofundar com alguns exemplos.
No meu caso,
bconsole
posso obter a lista dos últimos trabalhos com:Acima, você pode ver dois trabalhos:
Vamos nos concentrar no Trabalho 7060, pois é incremental. Vamos verificar quais arquivos foram copiados:
Portanto, o Job 7060 interessava a um arquivo (Backup_Plone.bkf) e a um diretório (a pasta que o continha).
Infelizmente, como você pode ver, a saída de
list files jobid=7060
NÃO apresenta o tamanho de arquivo que você precisa, então ..... é útil, espero, mas não resolve seu problema.Vamos dar um passo à frente.
Eu viajei ao longo da documentação oficial do bareos sendo incapaz de encontrar a maneira correta de obter "tamanhos de arquivo" de dentro do bconsole. Então decidi pegar o caminho mais pesado: acesso SQL direto ao catálogo.
Nota: Por favor, seja extremamente cuidadoso ao lidar com o acesso direto ao catálogo, pois cada ação imprópria pode levar a sérios danos, com perda de dados relacionada!
Uma vez conectado ao mecanismo de banco de dados (MySQL, no meu caso .... mas isso é um detalhe, pois com o PostgreSQL é a mesma coisa), vi que os metadados do arquivo de backup são armazenados (...
File
tabela: armazena quase todos os metadados, com exceção de...Filename
tabela: armazena o nome do arquivo do backupPath
tabela: armazena o caminho completo do arquivo de backupCom uma grande surpresa, descobri que a
File
tabela não inclui umsize
campo. Então não é possível, com uma simples consulta, conseguir o que precisamos. De qualquer forma, encontrei umLStat
campo interessante (mais sobre ele, mais tarde).Então, iniciei a seguinte consulta SQL:
e voltou com os seguintes resultados:
Quanto ao
LStat
campo, no Guia oficial do desenvolvedor do BareOS , vi:Então, agora, o problema é:
e, como eu apostaria em um "SIM! Com certeza!":
Uma busca rápida por "BareOS LStat" me leva a vários resultados. Em poucos segundos recebi este tópico, incluindo vários comentários sobre o campo LStat, incluindo um pequeno script PERL para decodificá-lo corretamente. Aqui está ( * cortesia de Brian McDonald , 2005 * ), ligeiramente modificado para atender melhor às suas necessidades:
Quando iniciado e fornecido uma string LSTAT, ele relata muitos dados, incluindo o tamanho do arquivo (st_size, último campo da saída):
Portanto, agora temos o tamanho do arquivo, mas, infelizmente, não é facilmente acessível em uma única consulta para encontrar o maior arquivo de uma única tarefa de backup.
Existem várias soluções:
se você estiver executando o MySQL 5.6.1 ou posterior, ou um mecanismo DBMS com suporte para codificação/decodificação BASE_64, poderá consultar um SUBSTR do LSTAT e solicitar ao mecanismo de banco de dados que decodifique seu valor como um Base64. Por exemplo, veja aqui
você poderia escrever um procedimento armazenado. Na verdade, ele já deveria estar presente no PostgreSQL, como para isso (que afirma: " ...Adicionou procedimentos armazenados de amostra postgresql para o campo lstat.... ");
você poderia escrever um pequeno script PERL, consultando o catálogo e passando pelo material de decodificação
...
Espero que isso seja suficiente ;-)
Atualização 1
Acabei de descobrir a existência da API BVFS , explicitamente " ...destinada principalmente a desenvolvedores que desejam desenvolver uma nova interface GUI para Bareos... ".
Essas APIs fornecem um novo conjunto de comandos (os chamados " dot-commands "), incluindo um interessante
.bvfs_lsfiles
que mostra no console alguns metadados, incluindo o campo LSTAT . Então:Além disso, com o BareOS 15.2, um novo "modo API 2" foi introduzido, adicionando suporte para saída JSON. Acabei de testar isso:
.bvfs_lsfiles
, contém o campo de tamanho do arquivo, devidamente decodificado .Aqui segue um exemplo:
Então, no final, com uma versão recente do BareOS, o problema original parece ser solucionável sem acesso direto ao catálogo.
Embora eu aprecie o esforço de @damiano-verzulli, uma discussão no canal BareOS IRC no FreeNode iludiu esta resposta:
Acontece que Kjetil Torgrim Homme já escreveu um script para fazer isso, chamado
bacula-du
. (Juntamente com alguns outros scripts úteis!)Eles estão todos listados e podem ser obtidos aqui:
http://heim.ifi.uio.no/kjetilho/hacks/
Em particular
bacula-du
é explicado como isto:Há uma pequena observação que devo acrescentar aqui. Para que isso funcione, ele precisa ter acesso ao banco de dados (obviamente). Na configuração padrão, ele usa um mecanismo de segurança baseado no usuário, portanto, você deve executar o comando como o usuário bareos para que funcione, por exemplo