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
O perfil ativo não se adivinha pelo tamanho. Leia:
grep -A2 '^\[Install' ~/.config/mozilla/firefox/installs.ini
[Install4F96D1932A9F858E]
Default=35tlppzk.default-release
Locked=1
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
Resultado:
15G storage
40M suggest.sqlite
21M places.sqlite
21M favicons.sqlite
Descendo mais um nível, um único site:
du -sh "storage/default/https+++web.whatsapp.com"/*
13G cache <-- lixo
589M idb <-- dado real
196K ls <-- dado real
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
dumostra 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 {} +
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
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
systemctl --user enable --now firefox-limpeza.timer
systemctl --user list-timers firefox-limpeza.timer
Especificidades do Arch Linux
Pacotes necessários para os comandos acima:
pacman -Q firefox sqlite coreutils
sudo pacman -S --needed sqlite coreutils
O seletor de perfis não tem atalho gráfico no Arch:
firefox --ProfileManager
firefox -P "Perfil 22" --no-remote # abrir um perfil especifico
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
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
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 /
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
- Firefox Cache: HTTP Caching, BFCache, Service Worker Cache, and How to Debug Stale Files — a diferença entre cache HTTP, BFCache e storage de Service Worker, que é metade da confusão deste post.
- Firefox Data Export: Bookmarks, Passwords, History, and Profile Migration Guide — o que é dado seu dentro de um perfil, útil antes de mexer.
-
Disk Full on Linux? Find What's Eating Your Space in 60 Seconds — a sequência
df→du→ncdu.
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)