O btrfs irá compactar todos os arquivos alterados desde que foi montado, se você usar:
mount -o compress-force=lzo /dev/btrfsdev /mnt/btrfsmnt
Se você quiser fazer com que TODOS os arquivos sejam compactados dessa forma, eu tenho um pequeno script que escrevi para fazer isso ...
du -ht +$((1024*1024)) "$HOME" |\
sed -rn 's/^[^/]*(.*)/btrfs fi defrag -fvclzo ""/p' |\
sudo sh -n
O acima só funciona no meu diretório $HOME - mas você pode usá-lo em qualquer coisa ou em tudo como quiser. Ele também tem o operando -n alimentado para sh , assim você pode ver por si mesmo o que sh é atual > not fazendo antes de removê-lo para dizer para fazer isso.
De qualquer forma, primeiro ele consulta du para arquivos no formato human-readable (provavelmente redundantes aqui, já que retiramos isso na próxima etapa) que são maiores que 1MB ou $((1024*1024)).
É |pipes sua informação para sed , que retira tudo antes do início /, "quotes" do nome do arquivo, cria o < em> btrfs filesystem defragment -verbose -flush-to-disk -compress-lzo \filename comando e passa para |pipe para sudo sh para executar.
Mais uma vez, não fará nada desde que sh --no-execute esteja em vigor.
Acho que alguma muito recente btrfs ferramenta userspace constrói desfragmentar diretórios inteiros de forma recursiva, mas se for assim é uma coisa muito nova, então eu sempre tive que faça coisas assim.