O btrfs comprimirá automaticamente os arquivos existentes quando a compactação estiver ativada?

26

Eu escolhi o btrfs como o formato do meu /sistema de arquivos no instalador do Ubuntu 12.04 LTS. Após a instalação concluída, adicionei compress=lzoas opções de montagem /etc/fstabe reinicializei.

Os arquivos existentes serão compactados automaticamente agora ou devo fazer algo explicitamente para que isso aconteça?

ændrük
fonte
1
Você não precisa reiniciar, você pode simplesmente sudo mount -o remount /e as novas opções do fstab entrarão em vigor.
sep332
NB que você pode precisar usar a opção de força compressa ou alguns arquivos ainda permanecem não-comprimido, não importa o que você faz ...
rogerdpack
Uma observação sobre a força de compressão. A compactação normal tem um recurso, pois, se detectar que a compactação tem pouco ou nenhum benefício, ela não se incomoda em continuar a compactação para esse arquivo específico (economizando assim a CPU desperdiçada). Ao usar a força de compressão, ele tenta a compactação inútil de qualquer maneira. Bons exemplos onde isso se aplica são para arquivos que já estão compactados (multimídia, arquivos zip, etc.). Em outras palavras, a força de compressão geralmente é uma ideia. ;)
zaTricky 15/10

Respostas:

27

Você precisará executar btrfs fi defragmentpara forçar a recompressão dos dados existentes. Caso contrário, apenas novos dados serão compactados.

Do FAQ :

... considere remontar -o compresse reescrever arquivos específicos no local ou executar btrfs fi defragmentpara recomprimir tudo. Isso pode demorar um pouco.

Norbert Fabritius
fonte
btrfs fi desfragmentar -r -clzo / path / to / fs
David Goodwin
2
E a autodefragopção de montagem? Isso também faz com que ele comprima arquivos não compactados anteriormente quando desfragmenta automaticamente?
Geremia
1
Certifique-se de usar "-r" o sinalizador recursivo para compactar nos diretórios.
Salami
10

Eu fiz o que Norbert Fabritius disse, mas não notei nenhuma compactação nos arquivos existentes - df -h / before btrfs fi defragment = 658MB | df -h / após desfragmentação btrfs fi = 658MB. Novos arquivos estão ok. Pesquisando um pouco, traga-me esta citação:

Executando isso:

# btrfs filesystem defragment ~/stuff

não desfragmenta o conteúdo do diretório.

Isso ocorre por design. O btrfs fi defrag opera no único objeto do sistema de arquivos passado para ele. Isso significa que o comando desfragmenta apenas os metadados mantidos pelo diretório> objeto, e não o conteúdo do diretório. Se você deseja desfragmentar o conteúdo> do diretório, algo assim seria mais útil:

# find -xdev -type f -exec btrfs fi defrag '{}' \;

Depois disso, meu / ele está ocupando 656MB - nada enorme, mas certamente há compressão.

Fonte: https://btrfs.wiki.kernel.org/index.php/Problem_FAQ#Defragmenting_a_directory_doesn.27t_work

Espero que esta ajuda.

Desculpe meu inglês.

J. Neto
fonte
1
1. Ao usar o btrfs, não use ou confie no df . 2. Para uma melhor relação de compressão, o uso zlib (no entanto, é mais lenta)
Ignis
3
Sua linha de comando não deve incluir defrag -clzoou, em defrag -czlibvez de apenas defrag, se você realmente deseja compactar as coisas?
jbo5112
5
Há um sinalizador recursivo "-r" para que você possa fazer isso agora:btrfs fi defrag -r -czlib ~/stuff
Salami
8

De acordo com a documentação da Oracle, você pode compactar arquivos existentes em um sistema de arquivos on-line existente desfragmentando cada arquivo nele com as opções -c, -clzo ou -czlib. LZO é recomendado para velocidade.

find / -xdev \( -type f -o -type d \) -exec btrfs filesystem defragment -v -clzo -- {} +

Isso usa o comando find para executar o desfragmentador btrfs em todos os arquivos no sistema de arquivos raiz (fornecido pela barra logo após o comando "find" no início). Se você tiver outros subvolumes, poderá usá-lo novamente com o caminho de um subvolume (eu tenho um em / home, por exemplo) em vez da barra simples.

Você precisará de privilégios de root para isso, então adicione sudo à frente, se necessário.

Vejo:

Geoff
fonte
3

De acordo com https://btrfs.wiki.kernel.org/index.php/Mount_options#List_of_options, os seguintes algoritmos de compactação estão disponíveis:


compress,compress-force
Enable compression. Starting with kernel 2.6.38 you can choose the algorithm for compression:

 - compress=zlib - Better compression ratio. It's the default and safe for olders kernels.
 - compress=lzo - Faster compression.
 - compress=no - Disables compression (starting with kernel 3.6). 

compress-force= - Enable compression even for files that don't compress well, like videos and dd images of disks. The options compress-force=zlib and compress-force=lzo works for kernels >2.6.38.

Note that old (before 2012) btrfs-progs versions will probably fail some operations (e.g. fsck) on filesystems with LZO compression. 

Nota: Este post é a resposta para a pergunta adicional, que tipo de algoritmos de compactação estão disponíveis, os quais foram solicitados abaixo ... então, por favor, não me culpe.

Rostislav Stribrny
fonte
2

De acordo com o ArchWiki :

Dica: A compactação também pode ser ativada por arquivo sem usar a compressopção de montagem; basta aplicar chattr +cao arquivo. Quando aplicado a diretórios, fará com que novos arquivos sejam automaticamente compactados à medida que forem chegando.

Muito agradável! Deus abençoe o BTRFS!

Além disso, no wiki do BTRFS :

Posso forçar a compactação em um arquivo sem usar a opção de montagem de compactação ?

Sim. O utilitário chattrsuporta a configuração do atributo de arquivo c que marca o inode para compactar os dados gravados recentemente.

Geremia
fonte
-9

A compactação é ativada por padrão no Btrfs, portanto, a menos que você a tenha desativado explicitamente, ela deve ser compactada.

Diego
fonte
11
Não é verdade, você precisa passar compression="seu algoritmo de compactação favorito" no fstab para habilitá-lo.
turbo
@turbo Que algoritmos de compressão estão disponíveis?
ζ--
Parece que há 2 compressões actualmente autorizados (bem, 3 se você contar "none"): btrfs.wiki.kernel.org/index.php/...
rogerdpack