O que é Btrfs
Sistema de arquivos moderno com Copy-on-Write (CoW): em vez de sobrescrever arquivos, cria uma nova versão antes de alterar a antiga. Isso permite snapshots rápidos e rollback do sistema.
Subvolumes
“Mini partições” dentro do mesmo disco. No Arch/CachyOS:
@ → /
@home → /home
Snapshot de / não inclui /home.
sudo btrfs subvolume list /
findmnt -t btrfs
Snapshots
# Raiz
sudo btrfs subvolume snapshot -r / /.snapshots/meu-snap-$(date +%Y-%m-%d_%H-%M)
# Home
sudo btrfs subvolume snapshot -r /home /home/.snapshots/home-snap-$(date +%Y-%m-%d_%H-%M)
Snapshot ≠ Backup. Se o SSD morrer, os snapshots morrem junto.
Snapper
# Instalar
sudo pacman -S snapper snap-pac grub-btrfs
# Configurar
sudo snapper -c root create-config /
sudo snapper -c home create-config /home
# Ativar
sudo systemctl enable --now snapper-timeline.timer
sudo systemctl enable --now snapper-cleanup.timer
Cria snapshot PRE + POST automaticamente a cada pacman -Syu.
# Snapshot manual
sudo snapper -c root create --description "antes-de-atualizar"
Rollback
sudo snapper list
sudo snapper rollback N
sudo reboot
# Recuperar arquivo apagado
sudo cp /.snapshots/2/snapshot/caminho/arquivo .
# Ver diferenças
sudo snapper diff 2..0
Ver uso real do disco
df -h não é confiável no Btrfs.
sudo btrfs filesystem usage /
# Espaço por snapshot (coluna "excl" = quanto seria liberado ao deletar)
sudo btrfs qgroup show -reF /
# Peso dos snapshots
sudo du -sh /.snapshots
sudo du -sh /home/.snapshots 2>/dev/null
Sinal de alerta na saída do filesystem usage:
Data,single: Size:437.01GiB, Used:433.74GiB (99.25%)
Apagar snapshots
Nunca use
rm -rf. Usebtrfs subvolume deleteou Snapper.
sudo snapper list
# Apagar um
sudo snapper delete 20
# Apagar intervalo (verifique a lista antes — número inexistente falha o comando)
sudo snapper delete 14-94
# Home
sudo snapper -c home list
sudo snapper -c home delete 1-10
Subvolumes de backup do rollback
Após um snapper rollback, o CachyOS cria subvolumes no nível raiz do Btrfs que não aparecem no snapper list:
@_backup_2026-05-31T16:39:04.582Z
@home_backup_2026-05-31T16:38:57.703Z
# Montar o nível raiz (confirme o dispositivo com findmnt -t btrfs)
sudo mkdir -p /mnt/btrfs-top
sudo mount -o subvolid=5 /dev/nvme0n1p2 /mnt/btrfs-top
ls -lah /mnt/btrfs-top
# Apagar os backups
sudo btrfs subvolume delete "/mnt/btrfs-top/@_backup_..."
sudo btrfs subvolume delete "/mnt/btrfs-top/@home_backup_..."
sudo btrfs subvolume sync /mnt/btrfs-top
Forçar liberação do espaço
Após apagar, o espaço pode não aparecer imediatamente — o Btrfs trabalha com chunks de alocação.
sudo btrfs filesystem sync /
sudo btrfs balance start -dusage=50 /
df -h
sudo btrfs filesystem usage /
Por que os snapshots enchem o disco
O snap-pac cria PRE + POST para cada operação do pacman, mesmo pacotes pequenos. Snapshots do /home também preservam arquivos grandes já deletados — se havia snapshot quando um jogo de 50GB estava instalado, ele continua ocupando espaço mesmo após desinstalar.
Limitar snapshots
sudo nano /etc/snapper/configs/root
# (repita para /home se necessário)
Conservador (recomendado para SSDs menores):
TIMELINE_LIMIT_HOURLY="3"
TIMELINE_LIMIT_DAILY="3"
TIMELINE_LIMIT_WEEKLY="1"
TIMELINE_LIMIT_MONTHLY="0"
TIMELINE_LIMIT_YEARLY="0"
NUMBER_LIMIT="10"
NUMBER_LIMIT_IMPORTANT="5"
# Forçar limpeza manualmente
sudo snapper cleanup number
sudo snapper cleanup timeline
Desligar snapshots automáticos (opcional)
sudo systemctl disable --now snapper-timeline.timer
sudo systemctl disable --now snapper-cleanup.timer
Ou só parar a criação mantendo o Snapper ativo:
TIMELINE_CREATE="no"
sudo systemctl list-timers | grep snapper
Liberar espaço adicional
# Cache do pacman
sudo du -sh /var/cache/pacman/pkg
sudo paccache -rk2
sudo pacman -Scc
# Logs
sudo journalctl --vacuum-time=7d
# Encontrar o que está pesando
sudo du -xh / | sort -h | tail -40
sudo pacman -S ncdu && sudo ncdu /
Manutenção
sudo btrfs scrub start -Bd /
sudo btrfs device stats /
Resumo
Btrfs
├── CoW → copia antes de alterar
├── Subvolumes → @ e @home separados
├── Snapshots → rollback rápido
├── Snapper → automação
└── grub-btrfs → snapshots no boot
Fluxo normal:
pacman -Syu → PRE → update → POST → deu problema? → snapper rollback N → reboot
Fluxo de limpeza:
snapper list
↓ snapper delete <intervalo>
↓ verificar subvolumes de backup no btrfs-top
↓ btrfs subvolume delete "@_backup_..."
↓ btrfs filesystem sync / && btrfs balance start -dusage=50 /
↓ df -h
↓ ajustar limites em /etc/snapper/configs/root