DEV Community

Cover image for 18 GB de lixo no Firefox: limpando perfis com segurança no Arch Linux

18 GB de lixo no Firefox: limpando perfis com segurança no Arch Linux

Meu disco estava em 82% e o du apontou um suspeito improvável: 18 GB dentro de ~/.config/mozilla/firefox. Nenhum download esquecido, nenhum Docker. Só o navegador.

Depois de investigar, 15,6 GB eram descartáveis — e 13 GB disso era uma única pasta que o Firefox nunca esvaziou. Nenhum bookmark, senha ou sessão foi perdido.

Este é o passo a passo completo, com a parte específica do Arch Linux no final.


Primeiro: qual perfil você está usando

No Arch, o pacote oficial firefox historicamente usa ~/.mozilla/firefox. Versões recentes passaram a respeitar XDG_CONFIG_HOME e criam ~/.config/mozilla/firefox. Os dois podem coexistir numa máquina atualizada ao longo dos anos:

ls -d ~/.mozilla/firefox ~/.config/mozilla/firefox 2>/dev/null
du -sh ~/.mozilla/firefox ~/.config/mozilla/firefox 2>/dev/null
Enter fullscreen mode Exit fullscreen mode

O perfil ativo não se adivinha pelo tamanho. Leia:

grep -A2 '^\[Install' ~/.config/mozilla/firefox/installs.ini
Enter fullscreen mode Exit fullscreen mode
[Install4F96D1932A9F858E]
Default=35tlppzk.default-release
Locked=1
Enter fullscreen mode Exit fullscreen mode

Esse é o perfil que abre por padrão. Dentro do Firefox, about:profiles mostra o mesmo.

Onde os 18 GB estavam

cd ~/.config/mozilla/firefox/35tlppzk.default-release
du -sh * | sort -hr | head
du -sh storage/default/* | sort -hr | head -5
Enter fullscreen mode Exit fullscreen mode

Resultado:

15G   storage
40M   suggest.sqlite
21M   places.sqlite
21M   favicons.sqlite
Enter fullscreen mode Exit fullscreen mode

Descendo mais um nível, um único site:

du -sh "storage/default/https+++web.whatsapp.com"/*
Enter fullscreen mode Exit fullscreen mode
13G   cache     <-- lixo
589M  idb       <-- dado real
196K  ls        <-- dado real
Enter fullscreen mode Exit fullscreen mode

13 GB de cache no WhatsApp Web. E, dentro dele, a pasta que explica tudo.

O vilão: cache/morgue

O Firefox controla armazenamento por site através do QuotaManager. Quando ele remove algo do cache de uma origem, o arquivo não é apagado na hora: é movido para cache/morgue/ e só é destruído quando aquela origem é reinicializada.

Se o site recria cache mais rápido do que o Firefox limpa, o morgue cresce para sempre. Sites com muito churn — WhatsApp Web, Teams, YouTube, qualquer app atrás de Service Worker — são os campeões.

Os sintomas são bem característicos:

  • gigabytes dentro de storage/default/https+++<site>/cache/morgue
  • centenas de subpastas numéricas (0/, 1/, 2/…)
  • arquivos com data de hoje, porque continua sendo alimentado
  • o du mostra 13 GB, mas as Configurações do Firefox não mostram nada parecido

Aquele último ponto confunde muita gente: as Configurações só listam dados que o QuotaManager considera ativos. morgue e o cache HTTP ficam fora da conta.

O conteúdo do morgue é, por definição, arquivo que o Firefox já decidiu descartar. Nenhum site lê dali. Apagar é seguro.

# onde estão e quanto ocupam
find ~/.config/mozilla/firefox -type d -name morgue -exec du -sh {} + 2>/dev/null | sort -hr

# apagar (com o Firefox fechado)
find ~/.config/mozilla/firefox -type d -name morgue -prune -exec rm -rf {} +
Enter fullscreen mode Exit fullscreen mode

O que pode apagar sem medo

Caminho Tamanho no meu caso O que se perde
<perfil>/storage/**/cache/morgue/ 13 GB nada — cache já descartado
~/.cache/mozilla/firefox/ 1,6 GB cache HTTP; sites recarregam
<perfil>/datareporting/ 11 MB telemetria local
<perfil>/sessionstore-backups/ 7,3 MB backups de sessão antigos
<perfil>/saved-telemetry-pings/ 300 KB fila de telemetria
<perfil>/crashes/, minidumps/ ~20 KB relatórios locais
Crash Reports/*, Pending Pings/* 2,1 MB crashes não enviados

O que não se apaga

Arquivo Contém
places.sqlite histórico e bookmarks
logins.db + key4.db senhas salvas
cookies.sqlite suas sessões logadas
prefs.js todas as preferências
profiles.ini, installs.ini qual perfil é qual
Profile Groups/*.sqlite catálogo de perfis nomeados
storage/<site>/idb/ IndexedDB: conversas do WhatsApp, rascunhos, estado de apps

Sobre o idb: apagar não corrompe nada, mas força ressincronizar do celular — e mídia que só existia em cache local pode sumir. Se o objetivo é liberar espaço do WhatsApp, prefira limpar pelo próprio app (Configurações → Armazenamento).

Regra prática: se o nome não tem "cache", "crash", "telemetry" ou "morgue", olhe duas vezes.

O script que eu uso

Salve como limpar-firefox.sh. Por padrão ele só mostra o que faria; --executar aplica.

#!/usr/bin/env bash
set -euo pipefail

EXECUTAR=0
[[ "${1:-}" == "--executar" ]] && EXECUTAR=1

RAIZ_DADOS="${FIREFOX_DIR:-$HOME/.config/mozilla/firefox}"
RAIZ_CACHE="${FIREFOX_CACHE:-$HOME/.cache/mozilla/firefox}"

if pgrep -x firefox >/dev/null; then
  echo "Firefox esta rodando. Feche-o antes de limpar." >&2
  exit 1
fi

bytes_de() { du -sb "$1" 2>/dev/null | awk '{s+=$1} END{print s+0}'; }

limpar_pasta() {                  # $1 = descricao, $2 = caminho
  [[ -e "$2" ]] || return 0
  printf '%-58s %9s\n' "$1" "$(numfmt --to=iec --suffix=B "$(bytes_de "$2")")"
  if (( EXECUTAR )); then rm -rf -- "$2"; fi
}

while IFS= read -r -d '' m; do
  limpar_pasta "morgue: ${m#"$RAIZ_DADOS"/}" "$m"
done < <(find "$RAIZ_DADOS" -type d -name morgue -prune -print0 2>/dev/null)

limpar_pasta "cache HTTP"   "$RAIZ_CACHE"
limpar_pasta "Crash Reports" "$RAIZ_DADOS/Crash Reports"
limpar_pasta "Pending Pings" "$RAIZ_DADOS/Pending Pings"

for p in "$RAIZ_DADOS"/*/; do
  nome=$(basename "$p")
  limpar_pasta "telemetria: $nome"        "${p}datareporting"
  limpar_pasta "pings: $nome"             "${p}saved-telemetry-pings"
  limpar_pasta "backups de sessao: $nome" "${p}sessionstore-backups"
done

df -h "$RAIZ_DADOS" | tail -1
Enter fullscreen mode Exit fullscreen mode

Duas armadilhas de shell que me custaram meia hora: passar rm -rf como argumento do du (a medição sai zerada) e terminar o corpo de um while com (( EXECUTAR )) && rm ... — quando o teste é falso, o set -e mata o script. Use if.

Prevenção

Em about:config:

Preferência Valor Efeito
browser.cache.disk.capacity 512000 ~500 MB de cache
browser.cache.disk.smart_size.enabled false respeita o valor acima

E um timer mensal, que falha em silêncio se o Firefox estiver aberto:

# ~/.config/systemd/user/firefox-limpeza.timer
[Unit]
Description=Limpeza mensal do cache do Firefox

[Timer]
OnCalendar=monthly
Persistent=true

[Install]
WantedBy=timers.target
Enter fullscreen mode Exit fullscreen mode
systemctl --user enable --now firefox-limpeza.timer
systemctl --user list-timers firefox-limpeza.timer
Enter fullscreen mode Exit fullscreen mode

Especificidades do Arch Linux

Pacotes necessários para os comandos acima:

pacman -Q firefox sqlite coreutils
sudo pacman -S --needed sqlite coreutils
Enter fullscreen mode Exit fullscreen mode

O seletor de perfis não tem atalho gráfico no Arch:

firefox --ProfileManager
firefox -P "Perfil 22" --no-remote   # abrir um perfil especifico
Enter fullscreen mode Exit fullscreen mode

O outro vilão do Arch é o cache do pacman. Depois de limpar o Firefox, é comum o disco continuar cheio:

du -sh /var/cache/pacman/pkg
sudo pacman -S --needed pacman-contrib
sudo paccache -r        # mantem as 3 versoes mais recentes
sudo paccache -ruk0     # remove tambem pacotes desinstalados
Enter fullscreen mode Exit fullscreen mode

Em instalações com anos de uso isso rende fácil 5 a 20 GB.

Flatpak: se o Firefox veio do Flathub, os caminhos mudam e o script precisa dos dois:

FIREFOX_DIR="$HOME/.var/app/org.mozilla.firefox/.mozilla/firefox" \
FIREFOX_CACHE="$HOME/.var/app/org.mozilla.firefox/cache/mozilla/firefox" \
./limpar-firefox.sh
Enter fullscreen mode Exit fullscreen mode

AUR: firefox-nightly, firefox-developer-edition e firefox-esr usam diretórios de perfil separados. Limpe cada raiz individualmente.

Verificação final

# o tamanho caiu?
du -sh ~/.config/mozilla/firefox

# bookmarks intactos (deve ser > 0)
sqlite3 "file:$HOME/.config/mozilla/firefox/SEU-PERFIL/places.sqlite?immutable=1" \
  "select count(*) from moz_bookmarks where type=1;"

df -h /
Enter fullscreen mode Exit fullscreen mode

O ?immutable=1 evita que o SQLite tente escrever no arquivo enquanto o Firefox está aberto.

Depois confira no navegador: bookmarks, about:logins, abas restauradas e about:profiles. A primeira abertura é mais lenta, porque não há nada em cache. É esperado.

Resultado

Antes Depois
~/.config/mozilla/firefox — 18 GB ~4 GB (28 perfis preservados)
~/.cache/mozilla/firefox — 1,6 GB ~0
Disco: 135 GB / 174 GB (82%) 119 GB / 174 GB (69%)

Para ler junto

O tutorial completo (14 seções) e o script ficam em ~/git/firefoxLimpeza. O script roda em modo simulação por padrão — rode sem argumentos, confira a lista, e só depois passe --executar.

Se você roda Arch e nunca olhou o tamanho de ~/.config/mozilla/firefox, vale os dois minutos — o morgue costuma ser a maior surpresa.

Top comments (0)