Pular para o conteúdo

Ferramentas de linha de comando

Todo programa do NGBackup fica em /opt/backup/bin/.

ProgramaFunçãoPorta
backup-dirDirector — agenda e orquestra9101
backup-sdStorage Daemon — lê/grava volumes9103
backup-fdFile Daemon — agente nas máquinas protegidas (por flags)9102
ProgramaPara que serveEquivalente Bacula
backup-consoleConsole interativo (run/restore/status)bconsole
backup-cliDirigir o Director por scripts
backup-copyCopiar/migrar volumes entre poolsbcopy
backup-extractExtrair arquivos direto de um volumebextract
backup-lsListar o conteúdo de um volumebls
backup-scanReconstruir o catálogo a partir de volumesbscan
backup-dbcheckVerificar e reparar o catálogodbcheck
backup-dirjson · backup-sdjson · backup-fdjson · backup-consjsonDespejar qualquer config em JSON

Dentro do backup-console você dirige o Director com os mesmos verbos do bconsole do Bacula, e a saída de texto é idêntica byte a byte ao Bacula 15.3 — runbooks e parsers existentes continuam funcionando.

VerboMostra
show <kind>[=name]Um recurso configurado (Director / Client / Storage / Pool / Catalog / Content / Schedule / Job / Messages). show job=NAME inclui recursivamente os recursos referenciados; show all despeja tudo na ordem do stock. Forma plana Kind: name=value (com a forma de sub-recurso -->), não a sintaxe .conf.
status dirStatus do Director — cabeçalho (Jobs: / Crypto: / Heap: / Res:), depois as seções Scheduled Jobs (N/50) / Running Jobs / Terminated Jobs. status storage=NAME / status client=NAME fazem proxy para o SD / FD.
list <kind>Linhas do catálogo como tabelas com bordas +---+ (list jobs / clients / pools / volumes / `jobmedia [jobid=N
llist jobsA forma longa / vertical (key: value) do list jobs, com as colunas juntadas (clientname, poolname, content, …).
status tenantLista os recursos Tenant {} configurados e suas diretivas de cota — maxclients / maxjobs / maxstorages / maxvolbytes / warnvolbytes / isolated / enabled — ou No Tenant resources defined. quando nenhum está configurado. Também acessível como item 6 do menu interativo status.
cancel <jobid=N | all>Cancela um job em execução, ou todos os jobs em execução com cancel all. O cancel puro abre um seletor interativo de jobs em execução.
purge <files | jobs | volume=NAME>Remove registros do catálogo sem tocar nos dados do volume. purge files jobid=N | job=NAME | client=NAME remove linhas de File; purge jobs client=NAME remove linhas de Job; purge volume=NAME faz purge de um volume. Destrutivo — as linhas do catálogo se vão, mas os bytes no volume permanecem até serem sobrescritos.
delete <jobid=N | client=NAME | volume=NAME | pool=NAME>delete client=NAME remove um cliente e faz cascade para suas linhas dependentes no catálogo. delete jobid=N remove um único registro de job. delete volume=NAME remove em cascata todos os jobs do volume e depois o registro do volume. delete pool=NAME remove um registro de pool vazio (recusado enquanto ainda possuir volumes). Apenas catálogo; não libera espaço no volume.
update <slots [storage=NAME] | pool=NAME | volume=NAME> …update slots relê o inventário de códigos de barras do autochanger e sincroniza as colunas Slot/InChanger de cada volume correspondente no catálogo (volumes que saíram do changer são desmarcados; códigos sem volume no catálogo são reportados, nunca criados automaticamente). update pool=NAME aplica campos de retenção/limites na linha do pool; update volume=NAME edita campos mutáveis de um volume (volstatus=, slot=, volretention=, …).
update <client=NAME | storage=NAME> version=X [package=NAME] [phase=all|precheck|stage|install] [downgrade=yes] [ignoreorder=yes]Atualização de frota (NGFLEET): instala um .ngpkg assinado do cache do repositório no daemon alvo, dentro de um job Update visível no catálogo (list jobs tipo W). O padrão phase=all executa precheck → stage (envio assinado, re-verificado no daemon) → install: a unidade de aplicação root re-verifica a assinatura, extrai para /opt/backup/releases/<pkg>-<ver>/ e troca o symlink do binário atomicamente; o daemon reinicia sozinho e o Director confirma o banner da nova versão no inventário da frota. Recusa enquanto houver jobs no alvo, quando a ordem director ≥ sd ≥ fd seria violada (ignoreorder=yes sobrepõe) e downgrades sem downgrade=yes. Requer o pacote no cache (repo sync / repo import) e as unidades systemd ngbackup-apply-update no host.

Todo verbo também aceita output=json para um envelope legível por máquina (o que os consoles Web e Desktop consomem). O log do job (list joblog jobid=N) renderiza o relatório de resumo do job em várias linhas do Bacula — Build OS, JobId, Level, Client, FileSet, Pool, Storage, horários, arquivos/bytes escritos, taxa e status de término.

list events lê a tabela de catálogo Events (somente-acréscimo) — um log de auditoria que o Director grava conforme jobs e comandos de operador são executados. As linhas voltam da mais nova para a mais antiga (padrão limit=100, ajuste com limit=N) numa tabela de sete colunas: code, type, time, daemon, source, ref e text. O Director registra DJ0001 quando um job recebe um JobId e DJ0002 quando ele finaliza, então um único job deixa um par claro de início/fim:

*list events
+--------+------+---------------------+------------+--------+------------+--------------------------+
| code | type | time | daemon | source | ref | text |
+--------+------+---------------------+------------+--------+------------+--------------------------+
| DJ0002 | job | 2026-06-30 18:21:07 | *Director* | | JobId=1080 | Job 1080 terminated OK |
| DJ0001 | job | 2026-06-30 18:20:55 | *Director* | | JobId=1080 | Job Daily (1080) created |
+--------+------+---------------------+------------+--------+------------+--------------------------+

O texto de término inclui o desfecho — terminated OK / with warnings / cancelled / with errors — para que a linha de auditoria mostre o resultado direto.

output=json retorna os mesmos campos (code / type / time / daemon / source / ref / text) como um envelope de lista estável.

O Director mantém um inventário de versão por daemon (a tabela de catálogo FleetInventory) para que você veja num relance o que cada FD/SD da frota está executando:

*version client=NAME # consulta o FD de um cliente e registra versão + plataforma
*version storage=NAME # consulta o SD de um Storage
*version all # consulta tudo (e o próprio Director)
*list fleet # o inventário registrado; sinaliza daemons nunca vistos

version sem alvo ainda imprime o banner do próprio Director. As consultas usam os canais autenticados normais DIR↔FD/DIR↔SD — sem portas ou agentes extras — e cada despacho de job também atualiza a linha do cliente automaticamente (no máximo uma vez por hora por cliente), de modo que list fleet se mantém atual num Director ocupado sem consultas manuais. Ambos os verbos aceitam output=json (envelope de lista kind: "fleet"). Daemons Bacula stock não implementam a consulta e são reportados como UNREACHABLE/never seen.

Toda build vem com uma concessão community assinada (10 objetos / 10 TB, perpétua), de modo que um Director novo já está licenciado sem configuração. O direito pago vem de três formas, resolvidas nesta ordem:

  1. LicenseFile = /path/grant.lic no recurso Director {} — um único arquivo de concessão assinado (legado, ainda suportado e prevalece quando definido).
  2. Um recurso License {} com OfflineFile = /path/grant.lic — o caminho air-gap; a concessão assinada é lida localmente, sem chamada de rede.
  3. Um recurso License {} com Serial + ApiUrlativação online: o Director envia (POST) o serial + uma impressão digital da máquina ao servidor de licenças, faz cache da concessão assinada retornada e a renova diariamente (o servidor define a cadência). Toda falha de rede é fail-open — o daemon mantém a última concessão válida, então o servidor de licenças estar inacessível nunca bloqueia backups.
License {
Name = Acme
Serial = "NGB-XXXX-XXXX-XXXX"
ApiUrl = "https://license.ngbackup.com/"
# OfflineFile = "/opt/backup/etc/grant.lic" # alternativa air-gap
}

A raiz de confiança é o token assinado nos três casos — o Director verifica cada concessão (arquivo ou online) contra a chave pública embutida, então o servidor de licenças nunca pode conceder mais do que o assinante offline. Verbos do console:

*license # edição, uso vs limites, expiração, estado e origem
*license activate # força ativação/renovação online imediata (após um novo serial)

license ganha uma linha source (community | offline-file | online:<serial-tail>); ambos aceitam output=json.

Terminal window
backup-dir -t -c /opt/backup/etc/backup-dir.conf
backup-sd -t -c /opt/backup/etc/backup-sd.conf
backup-fd -t -c /opt/backup/etc/backup-fd.conf

-t testa e sai; combine com as ferramentas *json para alimentar automação ou o Web Console.