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

Eu tenho um HDD USB.

Quero montá-lo com a compressão habilitada. Posso fazer no fstab do meu sistema ou até mesmo usando as regras do udev. O problema é que não irei montar meu HDD USB apenas no meu computador. Até agora, costumava acionar um terminal cada vez que o montava.

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

Resposta

O btrfs comprimirá cada arquivo alterado desde que foi montado se você usar:

mount -o compress-force=lzo /dev/btrfsdev /mnt/btrfsmnt 

Se você quiser 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 "\1"/p" |\ sudo sh -n 

O acima só funciona no meu diretório $HOME – mas você pode usá-lo em qualquer coisa ou em tudo que quiser. Ele também tem o operando -n alimentado para sh como está você pode ver por si mesmo o que sh é atualmente not fazendo antes de removê-lo para instruí-lo a fazer isso.

De qualquer forma, primeiro ele consulta du para arquivos no formato human-readable (provavelmente redundante aqui, pois o removemos na próxima etapa de qualquer maneira) que são maiores do que 1MB ou $((1024*1024)).

É |pipes suas informações para sed que retira desligar tudo antes do /, "quotes" principal do nome do arquivo, construir o comando btrfs filesystem defragment -verbose -flush-to-disk -compress-lzo \filename e passe-o para um |pipe para sudo sh para executar.

Mais uma vez, não fará nada enquanto sh --no-execute estiver em vigor.

Acho que muito recente btrfs compilações de ferramentas de espaço do usuário desfragmentam diretórios inteiros recursivamente, mas se for assim, é uma coisa muito nova, sempre teve que fazer coisas assim.

Comentários

  • Essa ' é uma resposta muito boa. No entanto, isso é o que eu já fiz (isso é o que sugeri por " Até agora, eu costumava acionar um terminal cada vez que o montava. "). Eu ' d gostaria de saber se há alguma maneira de associar sinalizadores de montagem padrão ao FS. Se você não ' não tiver root, nada disso funcionará.
  • Sinalizadores de montagem padrão? Bem, você definitivamente pode usar o fstab. E com btrfs, você pode montar por subvolume também, então você pode associar, como você diz, um subvolume com opções de montagem específicas e com a opção user = mount, você pode dar ao usuário. Você pode estar se perguntando – mas como faço um subvolume dos arquivos que já tenho? Se você criar um subvolume vazio, cp –reflink tudo o que quiser nele que deve fazer o trabalho.
  • Além disso, o trabalho de desfragmentação acima pode ser um cron job …
  • compress=lzo é suficiente, você não ' não precisa compactar novamente os arquivos binários compactados como PNG.

Resposta

Pelo que li, você pode definir a propriedade compression na raiz do subvolume para conseguir isso [0, 1]:

sudo btrfs property set /mnt/your-subvolume compression lzo 

Depois de pegar seu UUID de subvolume Btrfs com sudo btrfs filesystem show /mnt/your-subvolume, você pode então valide se o recurso de compactação LZO está habilitado atualmente com:

cat /sys/fs/btrfs/<UUID>/features/compress_lzo 

Deve retornar 1 se estiver habilitado.

[0] https://btrfs.wiki.kernel.org/index.php/Compression

[1] https://www.berthon.eu/2016/setting-shared-folder-compression-on-synology-nas-btrfs/

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *