💾 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:
- Chunks de dados deduplica dos
- Índices de backups
- Metadados
- Snapshots
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
-
Datastore → Add Datastore
-
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 |
- 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
-
Datastore → pve-store → Prune & GC
-
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 |
- 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:
- Mark Phase: Identificar chunks em uso
- Sweep Phase: Remover chunks não referenciados
- 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:
- Disk Usage: Espaço usado/disponível
- Estimated Full Date: Previsão de enchimento
- Deduplication Factor: Taxa de deduplicação
- Backup Count: Número de backups
- Snapshot Count: Número de snapshots
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
- Planear 3-4x o tamanho total das VMs
- Considerar taxa de mudança dos dados
- Monitorizar crescimento regularmente
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
- Executar GC semanalmente
- Agendar fora do horário de backups
- Monitorizar duração do GC
4. Verificação
- Verificar mensalmente
- Mais frequente para dados críticos
- Alertar em caso de corrupçã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:
- Disco: 50 GB
- Utilização: 41 GB (100% cheio)
- Estado: ENOSPC (No space left on device)
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:
- Disco VM: 850 GB
- Filesystem: 834 GB (após overhead do LVM)
- Utilização: 41 GB (5% usado)
- Disponível: 762 GB livres
- Estado: ✅ Resolvido
🐛 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:
- Muitos chunks
- I/O lento
- Fragmentação
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:
- ✅ Datastore Criado
- ➡️ Integração com PVE - Adicionar PBS ao Proxmox VE
- ➡️ 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