Como desfragitar um sistema de arquivos BTRFS

Como desfragitar um sistema de arquivos BTRFS

O BTRFS é um sistema de arquivos de cópia em branco baseado em extensão (vaca). Arquivos grandes são armazenados em várias extensões de dados; E quando esses arquivos grandes são modificados, as extensões a serem modificadas são copiadas para novas extensões vazias em outro local do dispositivo de armazenamento e são modificadas no novo local. Em seguida, as extensões dos arquivos grandes são re-vinculadas para apontar para as extensões atualizadas. As extensões antigas nunca são removidas instantaneamente.

É assim que o recurso Copy-on-Write (Cow) do sistema de arquivos BTRFS causa fragmentação. Fragmentação significa que as extensões de dados de arquivos grandes estão espalhadas em torno de todo o dispositivo de armazenamento. Eles não são instantâneos. Portanto, o desempenho (velocidade de leitura/gravação) do sistema de arquivos pode ser reduzido.

Para resolver esse problema, é necessário desfragitar o sistema de arquivos BTRFS de vez em quando. Este artigo mostra como desfragitar o sistema de arquivos BTRFS.

Abreviações

As abreviações (formas curtas) usadas neste artigo são as seguintes:

  • Vaca - Cópia-em-escrever
  • BTRFS - Sistema de arquivos B-Tree
  • HDD - Drive de disco rígido
  • SSD - Disco de Estado Sólido
  • GB - Gigabyte
  • Vm - Máquina virtual

Pré -requisitos

Para experimentar os exemplos incluídos neste artigo:

  • Você deve ter o sistema de arquivos BTRFS instalado no seu computador.
  • Você deve ter um HDD/SSD sobressalente (de qualquer tamanho) ou pelo menos 1 partição gratuita de disco rígido/ssd (de qualquer tamanho).

Eu tenho um HDD de 20 GB sdb Na minha máquina Ubuntu. Vou criar um sistema de arquivos BTRFS no HDD sdb.

$ sudo lsblk -e7

Observação: Seu HDD/SSD provavelmente terá um nome diferente do meu, assim como as partições. Então, certifique -se de substituí -los por seus a partir de agora.

Você pode criar um sistema de arquivos BTRFS em seu HDD/SSD (sem particionamento) se você tiver um HDD/SSD sobressalente. Você também pode criar uma partição em seu HDD/SSD e criar um sistema de arquivos BTRFS lá.

Para obter assistência na instalação do sistema de arquivos BTRFS no Ubuntu, confira o artigo Instale e use o BTRFS no Ubuntu 20.04 LTS.

Para obter assistência na instalação do sistema de arquivos BTRFS no Fedora, confira o artigo Instale e use o BTRFS no Fedora 33.

Criando um sistema de arquivos BTRFS

Você pode criar um sistema de arquivos BTRFS em seu HDD/SSD (não entregue) ou em sua partição HDD/SSD.

Para criar um sistema de arquivos BTRFS no sdb HDD (HDD inteiro, sem partições) e dê o rótulo do sistema de arquivos dados, Execute o seguinte comando:

$ sudo mkfs.BTRFS -L DATA /DEV /SDB

Um sistema de arquivos BTRFS agora deve ser criado no sdb HDD.

Crie o diretório /dados Para montar o sistema de arquivos BTRFS que você acabou de criar com o seguinte comando:

$ sudo mkdir -v /dados

Para montar o sistema de arquivos BTRFS criado no sdb HDD no /dados Diretório, execute o seguinte comando:

$ sudo montagem /dev /sdb /dados

O sistema de arquivos BTRFS agora deve ser montado, como você pode ver na captura de tela abaixo:

$ df -h /dados

Desfragmentando um sistema de arquivos BTRFS manualmente

Como você pode ver na captura de tela abaixo, copiei dois arquivos no sistema de arquivos BTRFS montado no /dados Diretório para demonstrar o processo de desfragmentação do sistema de arquivos BTRFS:

$ ls -lh /dados

Você pode desfragitar um único arquivo ou um subvolume/diretório inteiro recursivamente.

Para desfragitar o único arquivo /Data/Ubuntu-20.04.1-Live-Server-AMD64.ISO, Vamos executar o seguinte comando:

$ sudo btrfs filesystem desfragment -vf /data /ubuntu -20.04.1-Live-Server-AMD64.ISO

O arquivo /Data/Ubuntu-20.04.1-Live-Server-AMD64.ISO deve ser desfragmentado.

Para desfragitar todos os arquivos ou diretórios do /dados diretório recursivamente, execute o seguinte comando:

$ sudo btrfs filesystem desfragment -rvf /dados

Como você pode ver, todos os arquivos do /dados Diretório são desfragmentados.

Da mesma maneira, se você tivesse o subvolume /dados/osimages, Então você pode desfragitar todos os arquivos do /dados/osimages Subvolume recursivamente com o seguinte comando:

$ sudo btrfs filesystem desfragment -rvf /data /osimages

Comprimindo um sistema de arquivos BTRFS enquanto desfragmentava

O sistema de arquivos BTRFS permite compactar arquivos enquanto os desfragmentam.

Para desfragmentar todos os arquivos no /dados diretório e compacte -os com o Zlib Algoritmo de compressão ao mesmo tempo, execute o comando de desfragmentação com o -czlib opção, como segue:

$ sudo btrfs filesystem desfragment -rvf -czlib /data

Para desfragmentar todos os arquivos no /dados diretório e compacte -os com o Zstd Algoritmo de compressão ao mesmo tempo, execute o comando de desfragmentação com o -czstd opção, como segue:

$ sudo btrfs filesystem desfragment -rvf -czstd /data

Para desfragmentar todos os arquivos no /dados diretório e compacte -os com o LZO Algoritmo de compressão ao mesmo tempo, execute o comando de desfragmentação com o -Clzo opção, como segue:

$ sudo btrfs filesystem desfragment -rvf -clzo /data

Os arquivos no /dados o diretório deve ser desfragmentado e comprimido ao mesmo tempo.

Da mesma maneira, você pode desfragitar e comprimir os arquivos de um subvolume BTRFS também.

Desfragmentando um sistema de arquivos BTRFS automaticamente

Você pode ativar a desfragmentação automática no seu sistema de arquivos BTRFS no tempo de montagem. Esse recurso do sistema de arquivos BTRFS irá desfragmentar todos os arquivos do seu sistema de arquivos BTRFS automaticamente.

Para montar o sistema de arquivos BTRFS criado no sdb HDD no /dados Diretório com desfragmentação automática ativada no tempo de inicialização, você deve adicionar uma entrada para o sistema de arquivos BTRFS no sistema /etc/fstab arquivo.

Primeiro, encontre o Uuid do sistema de arquivos BTRFS criado no sdb HDD, como segue:

$ sudo blkid /dev /sdb

Como você pode ver, o uuid do sistema de arquivos BTRFS criado no sdb HDD é 60AFC092-E0FA-4B65-81FD-5DFD7DD884DE.

Vai ser diferente para você. Então, certifique -se de substituí -lo por seu a partir de agora.

Abra o /etc/fstab arquivo com o Nano Editor de texto, como segue:

$ sudo nano /etc /fstab

Adicione a seguinte linha ao final do /etc/fstab arquivo:

UUID = 60AFC092-E0FA-4B65-81FD-5DFD7DD884DE /DATA BTRFS AUTODEFRAG 0 0 0

Depois de terminar, pressione + X seguido pela Y e Para salvar o /etc/fstab arquivo.

Para que as alterações entrem em vigor, reinicie seu computador com o seguinte comando:

$ sudo reiniciar

Como você pode ver, o sistema de arquivos BTRFS criado no sdb HDD é montado no /dados diretório com desfragmentação automática habilitada.

Problemas com a desfragmentação de um sistema de arquivos BTRFS

Embora possa parecer que a desfragmentação melhora o desempenho do sistema de arquivos, há alguns problemas com a desfragmentação de um sistema de arquivos BTRFS.

Como o BTRFS é um sistema de arquivos de cópia sobre gravação (vaca), para entender os problemas com a desfragmentação do sistema de arquivos BTRFS, você deve entender o recurso Copy-on-Write do sistema de arquivos BTRFS.

Suponha que você tenha um arquivo grande (arquivo1) que usa 100 extensões (você pode pensar em extensões como blocos de arquivo) de um sistema de arquivos BTRFS. Se você criar outra cópia desse arquivo grande (File2) no mesmo sistema de arquivos BTRFS, você verá que nenhum espaço de disco adicional é usado. Isso ocorre porque os arquivos são idênticos e as 100 extensões de cada arquivo são as mesmas. Portanto, o sistema de arquivos BTRFS usa as mesmas extensões para ambos os arquivos.

Figura 1: arquivo1 e File2 são idênticos e compartilham as mesmas extensões do sistema de arquivos BTRFS para salvar o espaço do disco

Agora, digamos, você modificou uma das cópias do arquivo grande (File2). A modificação precisa alterar 10 das 100 extensões. O sistema de arquivos BTRFS copiará as 10 extensões necessárias em outro local não utilizado (digamos, e101-E110) do sistema de arquivos e alterá -los lá. Depois que as alterações forem gravadas no disco, o sistema de arquivos BTRFS re-vinculará as extensões para que as alterações sejam refletidas no grande arquivo. O processo é ilustrado na figura abaixo:

Figura 2: 10 extensões são alteradas em File2. Portanto, as extensões são re-vinculadas no sistema de arquivos BTRFS.

Nas Figuras 1 e 2, você pode entender como funciona a cópia sobre write (vaca) e como o sistema de arquivos BTRFS usa copy-on-write (vaca) para salvar o espaço do disco.

Agora que você sabe como funciona o recurso Copy-on-Write (Cow) do sistema de arquivos BTRFS, você entenderá os problemas com a desfragmentação de um sistema de arquivos BTRFS.

  1. Os arquivos de desfragmentação movem extensões de dados do BTRFS e tentam alinhá -los, um após o outro. Então, os links de cópia sobre gravação entre as cópias das quebras de arquivo. Isso aumentará as extensões de dados redundantes, bem como o uso de disco de um sistema de arquivos BTRFS que foi salvo anteriormente compartilhando extensões de dados entre cópias idênticas (ou quase idênticas) do arquivo.
  2. Se um subvolume BTRFS tiver vários instantâneos, a desfragmentação do subvolume quebrará os links de cópia sobre gravação entre o subvolume e os instantâneos. Isso aumentará o uso de disco de um sistema de arquivos BTRFS.
  3. Se você estiver usando o sistema de arquivos BTRFS para grandes bancos de dados ou imagens de máquina virtual (para armazenar dados/discos da VM), desfragmentar o sistema de arquivos também afetará negativamente o desempenho do sistema de arquivos.

Conclusão

Neste artigo, você aprendeu a desfragitar um único arquivo e os arquivos em um diretório/subvolume recursivamente de um sistema de arquivos BTRFS. Você também aprendeu a ativar a desfragmentação automática em um sistema de arquivos BTRFS no tempo de montagem. Finalmente, o artigo discutiu alguns dos problemas com a desfragmentação de um sistema de arquivos BTRFS.