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:
Pré -requisitos
Para experimentar os exemplos incluídos neste artigo:
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 -e7Observaçã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 /SDBUm 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 /dadosPara montar o sistema de arquivos BTRFS criado no sdb HDD no /dados Diretório, execute o seguinte comando:
$ sudo montagem /dev /sdb /dadosO sistema de arquivos BTRFS agora deve ser montado, como você pode ver na captura de tela abaixo:
$ df -h /dadosDesfragmentando 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 /dadosVocê 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.ISOO 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 /dadosComo 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 /osimagesComprimindo 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 /dataPara 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 /dataPara 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 /dataOs 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 /sdbComo 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 /fstabAdicione 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 reiniciarComo 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.
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.