FSociety.pt

Infraestrutura Empresarial Segura | Four-Legged Firewall

View on GitHub

💾 Configuração de Datastore - Proxmox Backup Server

Guia de configuração de datastores no Proxmox Backup Server, incluindo criação, gestão e garbage collection.


📋 Visão Geral

Um datastore é o local onde o PBS armazena backups. Cada datastore é um diretório no filesystem que contém:

Arquitetura do Datastore

/backup/pve-store/                  <- Datastore root
├── .chunks/                        <- Chunks deduplicados (dados reais)
│   ├── 0000/
│   ├── 0001/
│   ├── ...
│   └── ffff/
├── ct/                             <- Backups de containers
├── vm/                             <- Backups de VMs
│   ├── 102/                        <- VM ID 102 (pfSense)
│   │   ├── 2024-12-01T02:00:00Z/  <- Snapshot timestamp
│   │   │   ├── index.json.blob    <- Índice do backup
│   │   │   ├── drive-scsi0.img.fidx <- Índice de disco
│   │   │   └── qemu-server.conf.blob
│   │   └── 2024-12-02T02:00:00Z/
│   ├── 104/                        <- VM ID 104
│   ├── 105/                        <- VM ID 105
│   └── 106/                        <- VM ID 106
└── .gc-status                      <- Estado do garbage collection

🗂️ Datastore do Projeto: pve-store

Especificações

Parâmetro Valor
Nome pve-store
Path /backup/pve-store
Filesystem ext4
Capacidade 42 GB
Utilizado 40 GB (95%)
Disponível 2 GB
GC Mode Week day schedule
Verify Schedule Configurado

🛠️ Criar Datastore

Via Web UI

  1. Datastore → Add Datastore

  2. Preencher campos:

Campo Valor Descrição
Name pve-store ID do datastore
Backing Path /backup/pve-store Path absoluto
GC Schedule weekly (opcional) Garbage collection
Prune Schedule (vazio) Prune automático
Verify Schedule (vazio) Verificação
Comment Datastore principal Descrição
  1. Clicar em Add

Via CLI

# SSH para o PBS
ssh root@192.168.1.30

# Criar diretório
mkdir -p /backup/pve-store

# Criar datastore
proxmox-backup-manager datastore create pve-store /backup/pve-store

# Verificar
proxmox-backup-manager datastore list

📁 Preparar Filesystem

Opção 1: Usar Disco Existente (Projeto FSociety)

# Verificar espaço disponível
df -h /

# Criar diretório para datastore
mkdir -p /backup/pve-store

# Definir permissões
chown backup:backup /backup/pve-store
chmod 750 /backup/pve-store

Opção 2: Adicionar Disco Dedicado

Se adicionar disco separado para backups:

No Proxmox VE (adicionar disco à VM)

# Adicionar disco de 500GB à VM 101
qm set 101 -scsi1 local-lvm:500

# Ou criar em storage específico
qm set 101 -scsi1 pve-nvme:500

No PBS (formatar e montar)

# Listar discos
lsblk

# Saída esperada:
# sdb      8:16   0  500G  0 disk

# Criar partição
fdisk /dev/sdb
# n (nova), p (primária), 1, [Enter], [Enter], w (write)

# Formatar com ext4
mkfs.ext4 -L backup-data /dev/sdb1

# Criar diretório de montagem
mkdir -p /backup/pve-store

# Montar
mount /dev/sdb1 /backup/pve-store

# Adicionar ao fstab
echo "/dev/sdb1 /backup/pve-store ext4 defaults 0 2" >> /etc/fstab

# Verificar
df -h /backup/pve-store

# Definir permissões
chown backup:backup /backup/pve-store
chmod 750 /backup/pve-store

Opção 3: Usar ZFS (Recomendado para Grandes Datastores)

# Criar pool ZFS
zpool create -o ashift=12 backup-pool /dev/sdb

# Criar dataset
zfs create -o compression=lz4 -o atime=off backup-pool/pve-store

# Definir montagem
zfs set mountpoint=/backup/pve-store backup-pool/pve-store

# Verificar
zfs list
df -h /backup/pve-store

⚙️ Configurar Datastore

Políticas de Retenção (Prune)

Via Web UI

  1. Datastore → pve-store → Prune & GC

  2. Configurar:

Opção Valor Descrição
Keep Last 7 Manter últimos 7 backups
Keep Daily 7 1 backup/dia por 7 dias
Keep Weekly 4 1 backup/semana por 4 semanas
Keep Monthly 3 1 backup/mês por 3 meses
Keep Yearly 1 1 backup/ano
  1. Clicar em OK

Via CLI

# Configurar política de retenção
proxmox-backup-manager datastore update pve-store \
  --keep-last 7 \
  --keep-daily 7 \
  --keep-weekly 4 \
  --keep-monthly 3 \
  --keep-yearly 1

Configuração Atual do Projeto

# keep-all=1
# Mantém TODOS os backups (1 de cada)
# Adequado para ambientes de teste/desenvolvimento
# ⚠️ Em produção, usar política mais granular

Garbage Collection (GC)

Remove chunks órfãos e liberta espaço.

Agendar GC

# Via CLI - Agendar GC semanal (domingo às 03:00)
proxmox-backup-manager garbage-collection schedule update pve-store \
  --schedule "sun 03:00"

# Ver agenda
proxmox-backup-manager garbage-collection schedule show pve-store

Executar GC Manualmente

# Via CLI
proxmox-backup-manager garbage-collect pve-store

# Via Web UI
# Datastore → pve-store → Prune & GC → Garbage Collect

Processo de GC:

  1. Mark Phase: Identificar chunks em uso
  2. Sweep Phase: Remover chunks não referenciados
  3. Update Stats: Atualizar estatísticas de espaço

Verificação de Integridade

Verifica checksums de todos os chunks.

Agendar Verificação

# Verificação mensal (1º domingo do mês às 04:00)
proxmox-backup-manager verify-job create monthly-verify \
  --datastore pve-store \
  --schedule "sun 1 04:00"

# Verificar job criado
proxmox-backup-manager verify-job list

Executar Verificação Manual

# Via CLI - verificar datastore completo
proxmox-backup-client snapshot verify-all \
  --repository root@pam@localhost:pve-store

# Verificar apenas um backup
proxmox-backup-client snapshot verify \
  vm/102/2024-12-01T02:00:00Z \
  --repository root@pam@localhost:pve-store

📊 Monitorização do Datastore

Via Web UI

Datastore → pve-store

Métricas visíveis:

Via CLI

# Status do datastore
proxmox-backup-manager datastore status pve-store

# Estatísticas detalhadas
proxmox-backup-client datastore status \
  --repository root@pam@localhost:pve-store

# Listar todos os backups
proxmox-backup-client snapshot list \
  --repository root@pam@localhost:pve-store

# Informação de um backup específico
proxmox-backup-client snapshot info \
  vm/102/2024-12-01T02:00:00Z \
  --repository root@pam@localhost:pve-store

Script de Monitorização

# Criar script
nano /usr/local/bin/pbs-datastore-check.sh
#!/bin/bash
# Monitorização de Datastore PBS

DATASTORE="pve-store"
THRESHOLD=90
MAILTO="admin@fsociety.pt"

# Obter utilização
USAGE=$(df -h /backup/pve-store | awk 'NR==2 {print $5}' | sed 's/%//')

# Alertar se > 90%
if [ $USAGE -gt $THRESHOLD ]; then
    echo "ALERTA: Datastore $DATASTORE está ${USAGE}% cheio!" | \
    mail -s "PBS Datastore Alert" $MAILTO
fi

# Estatísticas
proxmox-backup-client datastore status \
  --repository root@pam@localhost:$DATASTORE \
  | mail -s "PBS Datastore Status" $MAILTO
# Tornar executável
chmod +x /usr/local/bin/pbs-datastore-check.sh

# Agendar execução diária
cat >> /etc/cron.d/pbs-datastore-check << EOF
# PBS datastore check diário às 08:00
0 8 * * * root /usr/local/bin/pbs-datastore-check.sh
EOF

🔧 Gestão de Backups no Datastore

Listar Backups

# Listar todos
proxmox-backup-client snapshot list \
  --repository root@pam@localhost:pve-store

# Listar apenas VM 102
proxmox-backup-client snapshot list \
  --repository root@pam@localhost:pve-store \
  vm/102

Remover Backup Específico

# Via CLI
proxmox-backup-client snapshot remove \
  vm/102/2024-11-01T02:00:00Z \
  --repository root@pam@localhost:pve-store

# Via Web UI
# Datastore → pve-store → Content
# VM → Selecionar backup → Remove

Proteger Backup (Prevent Prune)

# Proteger backup crítico
proxmox-backup-client snapshot protect \
  vm/102/2024-12-01T02:00:00Z \
  --repository root@pam@localhost:pve-store

# Desproteger
proxmox-backup-client snapshot unprotect \
  vm/102/2024-12-01T02:00:00Z \
  --repository root@pam@localhost:pve-store

🎯 Boas Práticas

1. Capacidade do Datastore

Cálculo:

VMs totais: 200 GB
Taxa de mudança: 10% diário
Retenção: 30 dias

Espaço necessário ≈ 200 GB + (200 GB × 10% × 30 dias) = 800 GB
Com deduplicação (70%): 800 GB × 0.3 = 240 GB

2. Filesystem

Cenário Recomendado
< 100 GB ext4
100 GB - 1 TB ext4 ou XFS
> 1 TB ZFS
Performance crítica ZFS com SSD cache

3. Garbage Collection

4. Verificação


🔧 Expansão de Disco

Contexto

Se o datastore ficar sem espaço (disco cheio a 100%), é necessário expandir a capacidade.

Procedimento de Expansão

1. Expandir Disco no Proxmox VE

# No host Proxmox VE
# Expandir disco da VM PBS (exemplo: adicionar 400GB)
qm resize 101 scsi0 +400G

# Verificar
qm config 101 | grep scsi0

2. Expandir Partição e Filesystem no PBS

# SSH para o PBS
ssh root@192.168.1.30

# Instalar growpart se não estiver disponível
apt update && apt install cloud-guest-utils -y

# Expandir partição (exemplo: /dev/sda3)
growpart /dev/sda 3

# Expandir Physical Volume (LVM)
pvresize /dev/sda3

# Expandir Logical Volume
lvextend -l +100%FREE /dev/pbs/root

# Expandir filesystem (ext4)
resize2fs /dev/pbs/root

# Verificar novo espaço
df -h /

Exemplo Real - Expansão do Projeto FSociety

Situação Inicial:

Ação Tomada:

# No Proxmox VE
# Nota: O comando abaixo foi um dos passos de expansão
# Resultado final: disco VM de 850GB
qm resize 101 scsi0 +400G

# No PBS
growpart /dev/sda 3
pvresize /dev/sda3
lvextend -l +100%FREE /dev/pbs/root
resize2fs /dev/pbs/root

Resultado:


🐛 Troubleshooting

Problema: Datastore cheio (100%) - ENOSPC

Sintomas:

Error: unable to start garbage collection job - ENOSPC: No space left on device

Soluções (em ordem de prioridade):

# 1. Verificar espaço atual
df -h /

# 2. Expandir disco (ver secção "Expansão de Disco" acima)
# No host Proxmox VE:
qm resize VMID scsi0 +SIZE

# No PBS:
apt update && apt install cloud-guest-utils -y
growpart /dev/sda 3
pvresize /dev/sda3
lvextend -l +100%FREE /dev/pbs/root
resize2fs /dev/pbs/root

# 3. Executar GC para recuperar espaço
proxmox-backup-manager garbage-collection start pve-store

# 4. Remover backups antigos (prune)
proxmox-backup-client snapshot prune \
  vm/102 \
  --keep-last 3 \
  --repository root@pam@localhost:pve-store

# 5. Adicionar disco adicional (novo datastore)

Problema: Datastore cheio (95%)

Soluções:

# 1. Executar GC
proxmox-backup-manager garbage-collect pve-store

# 2. Remover backups antigos (prune)
proxmox-backup-client snapshot prune \
  vm/102 \
  --keep-last 3 \
  --repository root@pam@localhost:pve-store

# 3. Expandir filesystem
# Se em LVM:
lvextend -L +100G /dev/mapper/pve-backup
resize2fs /dev/mapper/pve-backup

# 4. Adicionar disco adicional (novo datastore)

Problema: GC muito lento

Causas:

Soluções:

# Verificar I/O
iostat -x 2

# Se em HDD, considerar:
# 1. Mover para SSD
# 2. Otimizar filesystem
# 3. Executar GC com menos frequência

Problema: Backup corrompido

Verificar:

# Verificar backup específico
proxmox-backup-client snapshot verify \
  vm/102/2024-12-01T02:00:00Z \
  --repository root@pam@localhost:pve-store

# Se corrompido, remover e fazer novo backup
proxmox-backup-client snapshot remove \
  vm/102/2024-12-01T02:00:00Z \
  --repository root@pam@localhost:pve-store

📖 Próximos Passos

Após configurar datastore:

  1. Datastore Criado
  2. ➡️ Integração com PVE - Adicionar PBS ao Proxmox VE
  3. ➡️ Backup Jobs - Configurar backups automáticos

🎓 Informação Académica

Campo Informação
Instituição ESTG - Instituto Politécnico do Porto
Unidade Curricular Administração de Sistemas II
Ano Letivo 2025/2026
Autores Ryan Barbosa, Hugo Correia, Igor Araújo

**[⬅️ Anterior: Instalação](/fsociety-infrastructure/07-proxmox-backup/01-instalacao.html)** | **[Índice](/fsociety-infrastructure/07-proxmox-backup/)** | **[Próximo: Integração PVE ➡️](/fsociety-infrastructure/07-proxmox-backup/03-integracao-pve.html)**

Última atualização: Dezembro 2025