“Rm: não é possível remover xxx: não há espaço no dispositivo” no BTRFS

17

Executando o OpenSuse 12.2.

De repente, a partição raiz parece estar cheia (99%), mas não consigo mais remover arquivos manualmente.

"rm: não é possível remover xxx: não há espaço no dispositivo", embora 450mb ainda estejam livres de acordo com df. O sistema de arquivos é BTRFS.

Tentei verificar o FS usando o btrfsck, mas não ajudou.

O que fazer?

Andreas Jung
fonte
1
Você tem snapshots ativados?
MadHatter 14/02
você verificou se ainda existe algum processo em execução usando o arquivo? (verifique com lsof); nesse caso, interrompa o processo e tente remover o arquivo novamente.
chocripple

Respostas:

20

Provavelmente, você está enfrentando um problema em que o BTRFS precisa alocar um pouco de metadados antes de remover o arquivo. Um dos pontos fracos do BTRFS é o manuseio da condição de falta de espaço; melhorar o comportamento nessa área é uma das prioridades do projeto.

Uma sugestão no wiki do btrfs é bloquear o arquivo em vez de removê-lo.

#instead of this
rm -f ./some_file

# do this
true >| ./some_file

Isso removerá o conteúdo do arquivo sem alterar a entrada do diretório. Depois de sair do canto em que está, você poderá excluir os arquivos normalmente. Se isso lhe causar problemas, convém remontar temporariamente com a nodatacowopção, que desativa o comportamento de copiar na gravação. Mas ... não tenho certeza se isso vai ajudar ou não.

Em geral, porém: não execute um sistema de arquivos BTRFS seco. Ainda é um software de pré-produção, e as caixas de canto são um pouco ásperas.

tylerl
fonte
2
O truque também funciona bem para uma unidade de rede montada CIFS, obrigado!
markusN
2

Eu enfrentei a mesma mensagem de erro, mas no meu caso, o sistema de arquivos não foi relatado como completo:

user@host:/# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       2.8G  2.0G  618M  77% /

Mas perguntar ao BTRFS revelou que estava realmente cheio:

user@host:/# btrfs fi show
Label: none  uuid: {UUID redacted because reasons}
        Total devices 1 FS bytes used 1.92GiB
        devid    1 size 2.79GiB used 2.79GiB path /dev/sda3

Mesmo sobrescrever qualquer arquivo (como sugerido por tylerl) era impossível. Minha solução foi encontrada em http://marc.merlins.org/perso/btrfs/post_2014-05-04_Fixing-Btrfs-Filesystem-Full-Problems.html, que recomenda executar um reequilíbrio manual do sistema de arquivos usando btrfs balance start -dusage=55 /path/to/filesystem.

O zovits suporta o GoFundMonica
fonte
0

Para mim, usando o ZFS, descobri que a exclusão de outros arquivos liberava espaço suficiente na partição ZFS e, em seguida, pude excluir os arquivos em questão.

user1429980
fonte
0

No meu caso, com um sistema de arquivos ZFS no Linux, eu não conseguia nem truncar o arquivo. Destruir instantâneos antigos fez o truque (se presente).

zfs destroy /path/of/snapshot

John White
fonte