Um disco tão cheio que não dava para restaurar
(sixcolors.com)- O volume de inicialização de um M2 MacBook Pro ficou tão cheio durante o download de um jogo no Steam que restaram apenas 41 KB, deixando o macOS em um estado em que nem conseguia apagar arquivos
- Esvaziar a Lixeira pelo Finder, usar
rmefind -exec rmno Terminal, e até apagar snapshots do Time Machine pelo Utilitário de Disco falharam com erros do tipo “No space left on device” - Após reiniciar, a inicialização também parou no meio; mesmo usando o recoveryOS e o Share Disk do Apple silicon para montar o disco em outro Mac, não foi possível forçar a exclusão
- Depois de apagar o drive e reinstalar o macOS, houve tentativa de restauração pelo Time Machine, mas surgiram novos problemas: interrupção da restauração no Ventura, diferença de versão entre o Sonoma 14.4 e o 14.3.1 anterior, e falha ao montar via SMB/Samba na rede
- No fim, a imagem de disco mais recente do Time Machine foi copiada para um SSD externo de 1 TB, e os arquivos do diretório pessoal e apps foram recuperados manualmente; quando falta de espaço e falhas de restauração de backup se combinam, até usuários experientes têm dificuldade para lidar com a situação
Mac sem espaço, a ponto de nem conseguir apagar arquivos
- O armazenamento de um M2 MacBook Pro lotou enquanto baixava um jogo comprado legalmente no Steam
- Mesmo com o drive perigosamente cheio, o macOS não interrompeu o grande download do Steam, e restaram apenas 41 KB no volume de inicialização
- A maioria dos arquivos importantes estava na nuvem, e não havia uma situação em que fosse indispensável preservar arquivos locais grandes
- O problema não era uma simples falta de espaço, mas um estado em que o sistema operacional não conseguia apagar arquivos de nenhuma forma
Causas suspeitas: download do Steam e snapshots locais do Time Machine
- É possível que, por causa da conexão de internet gigabit e dos arquivos grandes do Steam, o macOS não tenha conseguido controlar o aumento do uso de armazenamento
- Ao mesmo tempo, havia a suspeita de que o macOS estava criando snapshots locais do Time Machine
- O macOS mantém snapshots para oferecer backups locais das últimas 24 horas, mesmo durante backups para um destino externo ou de rede do Time Machine
- O arquivo do Steam parecia, por fora, um único arquivo gigantesco, mas pode ter sido tratado de forma diferente do ponto de vista do Time Machine
- Arquivos locais reais e snapshots criados de forma especial podem ter entrado em conflito, mas a causa exata não foi confirmada
Todas as tentativas de apagar falharam
- Esvaziar a Lixeira no Finder falhou em
File > Empty Trash- A mensagem de erro era “The operation can’t be completed because the disk is full”
- O Terminal abria, mas o comando Unix padrão
rmnão funcionava- A mensagem de erro era “No space left on device”
- Uma alternativa baseada em
find, que localizava arquivos grandes e executavarmcom a opção-exec, também falhou
- Também foi feita uma tentativa no Utilitário de Disco de selecionar e apagar snapshots do Time Machine no volume de inicialização APFS, mas ela encontrou a mesma limitação
- Em geral, snapshots ocupam apenas o espaço necessário para as diferenças em relação ao snapshot anterior
- Mesmo nesse caso, ocorreu o erro “no space left”
Reinicialização, recoveryOS e Share Disk também não resolveram
- Foi feita uma reinicialização esperando que caches fossem limpos, mas o Mac não inicializava mais normalmente
- O estado se repetia: a barra de progresso chegava a cerca da metade e então falhava
- No recoveryOS, foram tentadas operações relacionadas a reparo pelo Utilitário de Disco e reinstalação com o volume de inicialização desmontado, mas os comandos no Terminal geravam o mesmo erro
- Tentou-se montar o drive em outro Mac usando o recurso Share Disk do Apple silicon
- A tentativa de forçar a exclusão por meio do compartilhamento de disco baseado em Samba falhou
Problemas durante a restauração pelo Time Machine
- Havia um backup do Time Machine, incluindo o da noite anterior, e como a maior parte dos dados importantes estava na nuvem, a situação não exigia obsessão por uma recuperação completa
- Primeiro, o drive foi apagado e o Ventura, sistema padrão de fábrica do MacBook Pro, foi reinstalado pelo macOS Recovery
- Ao iniciar o macOS, o Migration Assistant acessou o backup de rede do Time Machine, e alguns itens de restauração foram desmarcados para deixar espaço suficiente livre
- Durante a restauração, o Ventura travou no meio e depois não retomou
- Em seguida, o Mac foi atualizado para o Sonoma, a versão do macOS que estava em uso na época
- A atualização foi bem-sucedida, mas a versão instalada era a 14.4
- No Mac original estava instalada a 14.3.1
- Ao tentar restaurar diretamente durante a etapa inicial, a diferença de versão impediu o processo
Problema do Sonoma 14.4 ao montar Time Machine pela rede
- Após criar uma conta de usuário padrão no Sonoma, o Migration Assistant foi executado
- O Migration Assistant encontrou e reconheceu o Mac de rede que gerenciava o backup do Time Machine
- Porém, não conseguiu montar o volume de backup da criança, e “Mount failed” aparecia repetidamente
- Buscas em fóruns indicaram que, no Sonoma, o procedimento de montagem em rede baseado em SMB/Samba estava quebrado para restaurações do Time Machine, sem que houvesse uma solução encontrada
- Esse problema parecia continuar válido também no macOS 14.4
Recuperação final: copiar o backup para um SSD externo e migrar manualmente
- A restauração completa pelo Migration Assistant foi abandonada, e apenas os apps e arquivos necessários foram recuperados manualmente
- No Mac que gerenciava o backup de rede, a imagem de disco daquele computador foi aberta com duplo clique, e a senha do volume do Time Machine foi inserida
- O volume de rede do Time Machine sempre tinha sido configurado com uma senha separada
- O ícone de disco com o timestamp mais recente foi localizado e copiado para um SSD externo de 1 TB vazio
- O SSD externo foi conectado à conta temporária no MacBook Pro para transferir os arquivos necessários
- A maior parte do conteúdo das pastas do diretório pessoal foi incluída
- Arquivos grandes de download e alguns vídeos desnecessários foram excluídos
- O SSD externo será mantido por algum tempo para permitir recuperação adicional caso algum arquivo esteja faltando
Alternativas que não foram tentadas
- O drive do Time Machine usado para o backup de rede poderia ter sido desmontado no Mac que gerenciava os backups e conectado diretamente ao Mac da criança
- Nesse caso, é possível que ele aparecesse como ponto de partida no Migration Assistant
- Também seria possível copiar o disco virtual da imagem de disco montada do Time Machine para fazer com que o SSD externo de 1 TB parecesse um volume de origem do Mac
- Não foi confirmado se esse método realmente funcionaria
- Se tivesse dado certo, talvez fosse possível restaurar diretamente pelo Migration Assistant
- Como já haviam se acumulado horas de trabalho e mais de um dia de tentativas, e o usuário não fazia questão de uma recuperação perfeita diretório por diretório, não foram feitos experimentos adicionais
1 comentários
Opiniões no Hacker News
Talvez tivesse sido melhor se o autor tivesse inicializado o Mac por um dispositivo de armazenamento externo e depois apagado os arquivos desnecessários do disco interno: Use an external storage device as a Mac startup disk
Foi surpreendente descobrir que, em Macs com Apple Silicon, nem todas as portas são equivalentes ao fazer boot externo
Ao instalar o macOS em um dispositivo de armazenamento, em notebooks Mac é preciso evitar a porta USB-C mais à esquerda entre as portas do lado esquerdo; em iMac/Mac mini/Mac Studio/Mac Pro, também há portas USB-C específicas a evitar conforme o modelo
Dizem que, depois que a instalação termina, pode-se conectar em qualquer porta
O autor inicializou pelo recoveryOS, que fica em uma partição separada, e tentou apagar arquivos da partição principal do sistema, mas o
rmfalhou com o mesmo erroNo space left on deviceEntão talvez a abordagem mencionada por outras pessoas, de truncar o arquivo com
echo -n >file, pudesse ter funcionadoCom um pouco de conhecimento sobre a estrutura de discos HFS+, dá para chutar que o arquivo de journal também ficou cheio e que a exclusão exige escrever no journal e, em alguns casos, expandi-lo; então parece ter entrado em um estado estranho em que o próprio ato de apagar exige mais espaço, ainda que temporariamente
O macOS continuou gravando arquivos até restarem apenas 41 KB no drive
Já enchi por acidente NTFS e FAT32 até 0 byte, e mesmo assim ainda era possível apagar algo
Vasculhando fóruns, parece que o Sonoma quebrou o procedimento de montagem de rede baseado em SMB/Samba para restauração do Time Machine, e aparentemente ainda não há solução no 14.4
Pela minha experiência, o SMB passou a ser pouco confiável e cheio demais de bugs por volta do 10.12~10.13, e agora parece que a Apple nem se importa mais se isso funciona
Não quero nem imaginar o que pessoas sem décadas de experiência com Mac fariam ao se deparar com esse tipo de falha sistêmica em cadeia
Não tenho décadas de experiência com Mac, mas, numa situação dessas, eu teria tentado primeiro
fsck; acho estranho isso não ter sido mencionado aquiSe não fosse possível copiar o conteúdo do disco para outro disco, formatar e devolver tudo, eu provavelmente consultaria a documentação do APFS (https://developer.apple.com/support/downloads/Apple-File-System-Reference.pdf) e tentaria descobrir, com
dde um editor hexadecimal, o que corrigir para criar algum espaço livreDepois, a coleta de lixo encontra arquivos que não pertencem mais à árvore ativa e devolve esse espaço ao armazenamento
Em geral, as alterações são agrupadas para manter o volume de mudanças na árvore em um nível administrável, e, graças a esse desenho, snapshots do sistema de arquivos viram apenas outra referência a uma árvore específica
Esse processo exige espaço, mas sistemas de arquivos CoW normalmente reservam armazenamento de emergência justamente por esse motivo
Alguns anos atrás, em um Hackintosh conectado por 10GbE a um NAS grande, medi com o BlackMagic Disk Speed Test: o SMB no Windows deu 900 MB/s, o SMB no macOS deu 200 MB/s, e NFS e AFP no macOS deram ambos 1000 MB/s
Recursos do macOS relacionados a trabalho profissional são, infelizmente, ridículos
Dizem que o AFP morreu, mas no meu Mac Pro ele ainda funciona bem como cliente, e o desempenho é tão melhor que o SMB que chega a parecer comédia
Se encher até o limite, podem surgir problemas
O BTRFS tenta alternar para somente leitura enquanto ainda resta espaço de metadados, permitindo remontar em modo seguro e apagar alguma coisa, mas não é uma proteção perfeita
Até onde sei, NTFS e FAT32 não são sistemas de arquivos com journaling
Passei por isso no meu primeiro emprego
Por engano, enchi o cluster com arquivos de job, e o administrador do sistema começou a mandar e-mails dizendo para eu corrigir rápido, mas
rmnão funcionavaFoi aí que aprendi que, mesmo quando não dá para apagar, truncar o arquivo geralmente funciona; então, quando
rm foonão funciona, muitas vezescat /dev/null > fooresolve:>filepathcostuma funcionarSó que alguns sistemas de arquivos podem nem permitir isso
Nesses casos, é preciso torcer para que o sistema de arquivos suporte expansão de tamanho, redução de tamanho, armazenamento temporário adicional, ou que o subsistema subjacente permita adicionar/remover armazenamento de apoio
Como no btrfs, pode ser necessário um comando separado para voltar à estrutura de um único dispositivo de bloco
Então fiz o processo de backup mandar periodicamente dados lixo diretamente para /dev/null, e esse hack sujo provavelmente ainda está rodando
/dev/nullé meio mágico e vale a pena ler sobre ele>filejá bastaOs formatos de sistemas de arquivos do século XXI são muito mais complexos que o UFS, e recursos como snapshots e journaling criam novas formas de o sistema de arquivos entrar em deadlock sozinho
No fim, tive que recuperar com
truncateEu sabia que o ZFS era melhor para esse tipo de situação, mas a sensação de afundamento do “ah... droga” quando você percebe que realmente fez besteira foi a mesma
O Time Machine parece piorar continuamente
Não entendo por que não há incentivo para torná-lo estável e funcionando direito
Depois de passar por sparse bundles corrompidos que exigem começar um novo backup, ou por falhas do recurso, agora sinto que quase não vale a pena configurar o Time Machine
É um contraste total com os backups do iOS/iPadOS, que sempre funcionaram bem
A Apple quer que as pessoas façam backup de tudo no iCloud para aumentar a receita de serviços
Uso o Time Machine há anos em vários Macs sobre compartilhamentos Samba, e só vi melhorias
Antes, os sparse bundles do Time Machine corrompiam com frequência e eu precisava recriá-los ou restaurar um snapshot ZFS anterior para continuar
Acho que naquela época era AFP, não SMB
Recentemente, não tive esse problema em nenhum dispositivo, embora eu tenha ativado em
smb.confalgumas flags específicas recomendadas para backups do Time MachineEm contrapartida, o ZFS tem slop space para evitar que o sistema de arquivos trave quando o espaço acaba durante uma operação grande
Por padrão, ele reserva 3,2% do espaço do volume, até um máximo de 128 GB
Assim, se você alterar o ajuste do kernel Linux
spa_slop_shiftpara reduzir o slop space, pode recuperar até 128 GB de espaço bônus para concluir com sucesso uma operação de exclusão de arquivos: https://openzfs.github.io/openzfs-docs/Performance%20and%20Tuning/Module%20Parameters.html#spa-slop-shiftPor esse motivo, reservar uma certa porcentagem do espaço em disco era um recurso comum de sistemas de arquivos “de verdade” décadas antes de ZFS ou Linux existirem
É parecido com o fato de que a maioria dos programas de terminal shareware para MS-DOS nos anos 1980 baixava arquivos muito bem em conexões de largura de banda limitada, enquanto o MS Windows atual é péssimo até nessa tarefa que deveria ser trivial
Para detalhes, veja
man tune2fsA maioria dos outros sistemas de arquivos modernos, e muitos nem tão modernos, também tem algo parecido
Pelo que me lembro, o UFS do SunOS dos anos 1980 também tinha: https://en.wikipedia.org/wiki/SunOS
As pessoas têm dificuldade para entender a ideia de que apagar algo pode, na prática, exigir mais espaço, temporária ou permanentemente
Outros comentários explicaram em detalhes por que sistemas de arquivos modernos, com snapshots, journaling e afins, precisam alocar espaço livre para executar uma exclusão
Em outras áreas, de forma parecida, durante a primeira década da Wikipedia era comum ter que explicar que tentar apagar páginas para economizar espaço nos servidores na verdade produzia o efeito oposto
Isso porque, pelo menos desde cerca de 2004, uma exclusão adicionava um registro ao banco de dados interno
No formato de arquivo ZOO de Rahul Dhesi, excluir uma entrada era apenas definir uma flag no registro de cabeçalho, e também havia o versionamento de arquivos ao estilo VMS, em que adicionar uma nova versão não sobrescrevia a anterior
Na época do MS/DR/PC-DOS e do FAT, se um utilitário de recuperação de arquivos apagados estivesse instalado, apagar um arquivo podia exigir mais espaço para salvar uma nova entrada em um banco de dados com informações de recuperação
Alguns utilitários antigos de compressão de disco comprimiam até os metadados, então também eram possíveis situações raras em que uma alteração nos metadados mudava a taxa de compressão e aumentava de fato o tamanho do volume visto externamente
A ideia de que apagar libera espaço é muito difundida, mas, a rigor, nem sempre é verdadeira
Em outubro de 2018, passei pelo mesmo problema e deixei registrado na pergunta do Stack Overflow abaixo
Por sorte, eu tinha uma partição APFS extra que podia remover, então consegui liberar espaço em disco
Levei bastante tempo para descobrir isso e, nesse meio-tempo, entrei em pânico de verdade
https://apple.stackexchange.com/questions/338721/disk-full-terminal-in-recovery-mode-won-t-delete-files-boot-kernel-panics
Logo depois de atualizar para o macOS Mojave, eu estava criando um
.dmg, enchi o disco e o sistema travouAo reiniciar, deu kernel panic; então inicializei em modo de recuperação, montei o disco e executei
rm /path/to/large/fileno terminal, mas apareceuNo space left on deviceEra essencialmente o mesmo problema de uma thread de Unix de 2008: https://www.unix.com/linux/69889-unable-remove-file-using-rm-disk-space-full.html
echo x > /path/to/large/filetambém não adiantou, e eu precisava de alguma sugestão além de “apague o drive e restaure a partir do backup”Parecido com o modo como sistemas de arquivos Unix antigos reservavam 5% para o root
Excluir a partição de memória virtual pode devolver espaço suficiente para permitir a exclusão de arquivos, desde que ela seja grande o bastante
Porque os contêineres só são alocados quando de fato são usados
Impressionante
Nunca passei por uma situação em que até o
rmfalhasse, mas já vivi o incômodo de usar e administrar Macs modernos com armazenamento interno de 256 GB ou menosPor isso costumo criar um arquivo placeholder de cerca de 16 GB
De qualquer forma, se o espaço encher e bloquear atualizações ou outras tarefas, basta apagar esse arquivo, sem precisar fazer uma limpeza cirúrgica com
ncduPor exemplo, comprar um drive novo quatro vezes maior pelo custo de uma hora de um funcionário ou do equipamento
Passei por algo parecido também no iPhone
O disco estava tão cheio que, mesmo apagando alguma coisa, parecia que nada acontecia de fato
Ao reiniciar, não consegui fazer login; ao reiniciar de novo, ele entrou em loop de boot
Depois de mais uma reinicialização, ele iniciou em um estado inconsistente: os ícones dos apps continuavam na tela inicial, mas os apps reais tinham desaparecido, deixando ícones vazios que não abriam
Preocupado com a integridade dos dados, acabei restaurando a partir de um backup
Tenho certeza de que isso é consequência de o APFS usar copy-on-write e oferecer suporte a snapshots
Se as alterações não são persistidas imediatamente e versões anteriores dos arquivos permanecem em snapshots, a situação fica complicada quando não há espaço nem para os metadados dos snapshots
Até seria possível pular snapshots quando o espaço em disco estivesse baixo, mas o problema dos metadados de CoW ainda permaneceria
Mesmo em 2024, com todos os recursos inteligentes de gerenciamento de volumes do APFS, é surpreendente que simplesmente preencher o armazenamento do usuário possa deixar um dispositivo “selado” como o iPhone em um estado que exige recuperação DFU
Em contraste, quando lotamos por engano o espaço de um notebook corporativo com Windows 11 usando um único volume de dados/boot, ainda foi possível inicializar e resolver o problema
Há pouco tempo passei por uma situação parecida na partição de sistema de uma instalação Linux
Para começo de conversa, a partição era pequena demais e, com o acúmulo de atualizações, quase não sobrou espaço nem para começar a apagar algo
Levei cerca de 30 minutos para encontrar um subdiretório do qual eu pudesse apagar qualquer coisinha
Parecia estar preso em um quarto tão cheio de tralha que a porta, que abria para dentro, não conseguia abrir
A partir daquele pequeno ponto inicial, consegui apagar espaços cada vez maiores e, por fim, depois da limpeza, aumentei o tamanho da partição para nunca mais passar por isso
Para usuários experientes, a lição deveria ser sempre deixar um pouco de espaço livre depois da partição