Existe alguma maneira no BTRFS de definir a compactação permanentemente?

7

Eu tenho um disco rígido USB.

Eu quero montá-lo com a compactação ativada. Eu posso fazer no fstab do meu sistema ou mesmo usando as regras do udev. O problema é que não vou montar o meu HDD USB apenas no meu computador. Até agora, eu costumava acionar um terminal toda vez que eu montava.

Então, descobri chattr +c . Isso está funcionando muito bem mas Eu quero usar o LZO em vez do ZLIB. Existe alguma maneira de ser mais específico e definir o algoritmo de compressão de uma vez por todas?

    
por Gilles 18.03.2014 / 11:43

1 resposta

4

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.

    
por 19.03.2014 / 00:20