# Btrfs (Português)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Status de tradução: Esse artigo é uma tradução de Btrfs. Data da última tradução: 2020-05-03. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

Artigos relacionados

- Sistemas de arquivos
- Snapper
- dm-crypt/Criptografando todo um sistema#Subvolumes do Btrfs com swap

Da Wiki do Btrfs (traduzido):

  Btrfs é uma cópia moderna no sistema de arquivos de gravação (Copy-on-Write) para Linux, visando implementar recursos avançados, além de focar na tolerância a falhas, reparo e administração fácil. Desenvolvido em conjunto com várias empresas, o Btrfs é licenciado sob a GPL e aberto à contribuições de qualquer pessoa.

Atenção: O Btrfs possui alguns recursos instáveis. Veja o Status na Wiki do Btrfs, O Btrfs é estável? e Começando para informações mais detalhadas. Veja a sessão #Problemas conhecidos.

## Preparação

Para utilitários do userspace instale o pacote btrfs-progs necessário para as operações básicas.

Se você precisar inicializar a partir de um sistema de arquivos Btrfs (ou seja, seu kernel e initramfs residem em uma partição Btrfs), verifique se o seu gerenciador de boot suporta Btrfs.

## Criação do sistema de arquivos

Veja, a seguir como criar um novo sistema de arquivos Btrfs. Para converter uma partição ext3/4 em Btrfs, veja #Conversão Ext3/4 para Btrfs. Para usar uma configuração sem partição, Veja #Disco Btrfs sem partição.

Veja mkfs.btrfs(8) para mais informações.

## Sistema de arquivos em um único dispositivo

Para criar um sistema de arquivos Btrfs na partição `/dev/partição`:

    # mkfs.btrfs -L minhaEtiqueta /dev/partição

O tamanho do bloco padrão do Btrfs é de 16 KB. Para usar um tamanho de bloco maior para dados / metadados, especifique-o um valor para o `nodesize` através da opção `-n` como mostrado neste exemplo, usando blocos de 16 KB:

    # mkfs.btrfs -L minhaEtiqueta -n 16k /dev/partição

### Sistema de arquivos com vários dispositivos

Atenção: Os modos RAID 5 e RAID 6 dos Btrfs são fatalmente falhos, e não deve ser usado para "nada além de testaes com dados descartáveis." Veja a página Btrfs em RAID5 e RAID6 para atualizações de status.

Vários dispositivos pode ser usado para criar um RAID. Os níveis de RAID suportados incluem RAID 0, RAID 1, RAID 10, RAID 5 e RAID 6. Os níveis de RAID podem ser configurados separadamente para dados e metadados usando essas opções respectivamente `-d` e `-m`. Por padrão, os dados são distribuídos (`raid0`) e os metadados são espelhados (`raid1`). Veja Usando Btrfs em vários dispositivos para obter mais informações sobre como criar um volume RAID Btrfs.

    # mkfs.btrfs -d raid0 -m raid1 /dev/partição1 /dev/partição2 ...

Você pode criar uma configuração JBOD, onde os discos são vistos como um sistema de arquivos, mas os arquivos não são duplicados usando `-d single -m raid1`.

Você deve incluir o `udev` hook ou the `btrfs` hook no `/etc/mkinitcpio.conf` para usar vários dispositivos Btrfs em um pool. Veja o artigo Mkinitcpio#Hooks comuns para mais informações.

Nota:

- É possível adicionar dispositivos a um sistema de arquivos com vários dispositivos posteriormente. Veja o Artigo da Wiki do Btrfs para mais informações.
- Os dispositivos podem ter tamanhos diferentes. No entanto, só se uma unidade em uma configuração RAID for maior que as outras, esse espaço extra não será usado.
- Alguns gerenciadores de boot como Syslinux não suportam sistemas de arquivos com vários dispositivos.

Veja #RAID para obter conselhos sobre manutenção específica para sistemas de arquivos Btrfs para vários dispositivos.

## Configurando o sistema de arquivos

### Copy-on-Write (CoW)

Por padrão, Btrfs usa copy-on-write para todos os arquivos o tempo todo. Veja a Seção Guia do Btrfs Sysadmin para detalhes de implementação, bem como vantagens e desvantagens.

#### Desativando CoW

Para desativar copy-on-write de arquivos recém-criados em um subvolume montado, use o `nodatacow` opção de montagem. Isso afetará apenas os arquivos recém-criados. A cópia na gravação ainda ocorrerá para arquivos existentes. O `nodatacow` Essa opção também desativa a compactação. Veja btrfs(5) para detalhes.

Nota: De btrfs(5) § MOUNT OPTIONS (traduzido): "em um único sistema de arquivos, não é possível montar alguns subvolumes com `nodatacow` e outros com `datacow`. A opção de montagem do primeiro subvolume montado se aplica a quaisquer outros subvolumes."

Para desativar copy-on-write de arquivos/diretórios únicos,:

    $ chattr +C /diretório/arquivo

Isso desabilitará copy-on-write para as operações em que há apenas uma referência ao arquivo. Se houver mais de uma referência (por exemplo através de `cp --reflink=always` ou por causa de um snapshot do sistema de arquivos), copy-on-write ainda vai ocorrer.

Nota: De página man do chattr (traduzido): "Para btrfs, a opção 'C' deve ser definida em arquivos novos ou vazios. Se estiver definido em um arquivo que já possui blocos de dados, é indefinido quando os blocos atribuídos ao arquivo estarão totalmente estáveis. Se a opção 'C' estiver definida em um diretório, ela não terá efeito no diretório, mas os novos arquivos criados nesse diretório terão o atributo No_COW."
Dica: De acordo com a observação acima, você pode usar o seguinte truque para desativar Copy-on-Write em arquivos existentes em um diretório:

    $ mv /caminho/para/diretório /caminho/para/diretório_antigo
    $ mkdir /caminho/para/diretório
    $ chattr +C /caminho/para/diretório
    $ cp -a /caminho/para/diretório_antigo/* /caminho/para/diretório
    $ rm -rf /caminho/para/diretório_antigo

Certifique-se de que os dados não sejam usados durante esse processo. Observe também que `mv` ou `cp --reflink` conforme descrito abaixo não funcionarão.

#### Criando cópias leves

Por padrão, ao copiar arquivos em um sistema de arquivos Btrfs com `cp`, cópias reais são criadas. Para criar uma cópia leve que faça referência aos dados originais, use a opção reflink:

    $ cp --reflink fonte destino

Veja a página de manual do cp(1) para mais detalhes sobre a opção `--reflink`.

### Compressão

Btrfs suporta compactação transparente e automática. Isso não apenas reduz o tamanho dos arquivos, mas também pode melhorar o desempenho, em alguns casos de uso específicos (por exemplo. thread único com E/S de arquivo pesado), enquanto obviamente prejudica o desempenho em outros casos (por exemplo. tarefas em múltiplas threads e / ou intensivas da CPU com E/S de arquivos grandes). Geralmente, é obtido melhor desempenho com os algoritmos de compactação mais rápidos, zstd e lzo, e alguns benchmarks para fornecer comparações detalhadas.

`compress=alg` é uma opção de montagem ativada automaticamente considerando todos os arquivos para compactação, onde `alg` e também `zlib`, `lzo`, `zstd`, ou `no` (sem compressão). Usando esta opção, o btrfs verificará se a compactação da primeira parte dos dados a reduz. Se isso acontecer, toda a gravação nesse arquivo será compactada. Caso contrário, nada será compactado. Com esta opção, se a primeira parte da gravação não diminuir, nenhuma compactação será aplicada à gravação, mesmo que o restante dos dados diminua tremendamente. [1] Isso é feito para evitar que o disco aguarde para começar a gravar até que todos os dados a serem gravados sejam totalmente fornecidos ao btrfs e compactados.

A opção de montagem `compress-force=alg` pode ser usada, o que faz com que o btrfs pule a verificação se a compactação diminui a primeira parte e ativa a compactação automática para cada arquivo. Na pior das hipóteses, isso pode causar (levemente) mais espaço a ser usado e uso da CPU sem nenhum objetivo.

Somente arquivos criados ou modificados após a adição da opção de montagem serão compactados.

Para aplicar compactação a arquivos existentes, use o comando `btrfs filesystem defragment -calg`, onde `alg` e também `zlib`, `lzo` ou `zstd`. Por exemplo, para compactar novamente todo o sistema de arquivos com zstd, execute o seguinte comando:

    # btrfs filesystem defragment -r -v -czstd /

Para habilitar a compactação ao instalar o Arch em uma partição Btrfs vazia, use a opção `compress` quando montar o sistema de arquivos: `mount -o compress=zstd /dev/sdxY /mnt/`. Durante a configuração, adicione `compress=zstd` para as opções de montagem do sistema de arquivos raiz no fstab.

Dica: A compactação também pode ser ativada por arquivo sem usar o `compress` opção de montagem; para fazer isso se aplica `chattr +c` para o arquivo. Quando aplicado a diretórios, fará com que novos arquivos sejam automaticamente compactados à medida que forem chegando.
Atenção:

- Sistemas usando kernels mais antigos ou btrfs-progs sem `zstd` o suporte pode não conseguir ler ou reparar seu sistema de arquivos se você usar esta opção.
- GRUB introduziu suporte a zstd na versão 2.04. Certifique-se de atualizar o gerenciador de boot instalado na sua MBR/ESP desde então, executando `grub-install` com as opções apropriadas para a configuração do BIOS/UEFI, pois isso não é feito automaticamente. Veja FS#63235.
- rEFInd antes da versão 0.11.4 falta suporte para zstd, mude para refind-efi-gitAUR[link quebrado: package not found], use uma partição de inicialização separada sem zstd, ou redefina a compactação dos arquivos de inicialização para algo suportado usando, por exemplo, o comando:

      $ btrfs filesystem defragment -v -clzo /boot/*

#### Exibir tipos e proporções de compactação

compsize pega uma lista de arquivos (ou um sistema de arquivos btrfs inteiro) e mede os tipos de compressão usados e as taxas de compressão efetivas. O tamanho não compactado pode não corresponder ao número fornecido por outros programas, como `du`, porque toda extensão é contada uma vez, mesmo que seja refletida várias vezes e mesmo que parte dela não seja mais usada em nenhum lugar, mas não tenha sido coletada como lixo. O `-x` A opção mantém em um único sistema de arquivos, o que é útil em situações como `compsize -x /` para evitar que ele tente procurar em subdiretórios não-btrfs e falhe durante toda a execução.

### Subvolumes

"Um subvolume btrfs não é um dispositivo de bloco (e não pode ser tratado como um) em vez disso, um subvolume btrfs pode ser pensado como um espaço para nome do arquivo POSIX. Este espaço para nome pode ser acessado através do subvolume de nível superior do sistema de arquivos ou pode ser montado por si próprio." [2]

Cada sistema de arquivos Btrfs possui um subvolume de nível superior com o ID 5. Ele pode ser montado como `/` (por padrão), ou outro subvolume pode ser mountado. Os subvolumes podem ser movimentados no sistema de arquivos e são mais identificados pelo ID do que pelo caminho.

Consulte os seguintes links para obter mais detalhes:

- Btrfs Wiki SysadminGuide#Subvolumes
- Btrfs Wiki Getting started#Basic Filesystem Commands
- Btrfs Wiki Trees

#### Criando um Subvolume

Para criar um subvolume:

    # btrfs subvolume create /caminho/para/subvolume

#### Listando subvolumes

Para ver uma lista dos subvolumes atuais e seus IDs em `caminho`:

    # btrfs subvolume list -p caminho

#### Excluindo um subvolume

Para excluir um subvolume:

    # btrfs subvolume delete /caminho/para/subvolume

Desde o Linux 4.18, também é possível excluir um subvolume como um diretório regular (`rm -r`, `rmdir`).

#### Subvolumes de montagem

Os subvolumes podem ser montados como partições do sistema de arquivos usando a opção de montagem `subvol=/caminho/para/subvolume` ou `subvolid=id-do-objeto`. Por exemplo, você pode ter um subvolume chamado `subvol_root` e monte-o como `/`. Pode-se imitar partições tradicionais do sistema de arquivos criando vários subvolumes no nível superior do sistema de arquivos e montando-os nos pontos de montagem apropriados. Assim, é possível restaurar facilmente um sistema de arquivos (ou parte dele) para um estado anterior usando #Snapshots.

Dica: A alteração dos layouts de subvolume é simplificada ao não usar o subvolume de nível superior (ID = 5) como `/` (o que é feito por padrão). Em vez disso, considere criar um subvolume para abrigar seus dados reais e montá-los como `/`.
Nota: De btrfs(5) § MOUNT OPTIONS: "A maioria das opções de montagem se aplica ao sistema de arquivos inteiro, e somente as opções para o primeiro subvolume a ser montado entrarão em vigor. Isso ocorre devido à falta de implementação e pode mudar no futuro.". Veja o FAQ da Wiki do Btrfs para quais opções de montagem podem ser usadas por subvolume.

Veja Snapper#Suggested filesystem layout, Btrfs SysadminGuide#Managing Snapshots, e Btrfs SysadminGuide#Layout por exemplo, layouts de sistema de arquivos usando subvolumes.

Veja btrfs(5) para obter uma lista completa das opções de montagem específicas do btrfs.

#### Montando o subvolume como raiz

Para usar um subvolume como ponto de montagem raiz, especifique o subvolume por meio de um parâmetros do kernel usando `rootflags=subvol=/caminho/para/subvolume`. Edite o ponto de montagem raiz em `/etc/fstab` e especifique a opção de montagem `subvol=`. Como alternativa, o subvolume pode ser especificado com seu ID, `rootflags=subvolid=id-do-objeto` como parâmetro do kernel e `subvolid=id-do-objeto` como opção de montagem em `/etc/fstab`.

#### Alterando o Subvolume padrão

O subvolume padrão é montado se não houver `subvol=` opção de montagem é fornecida. Para alterar o subvolume padrão, faça:

    # btrfs subvolume set-default id-do-subvolume /

onde id-do-subvolume pode ser encontrado por listando.

Nota: Após alterar o subvolume padrão em um sistema com GRUB, você deveria executar `grub-install` novamente para notificar o carregador de inicialização sobre as alterações. Veja este tópico do fórum.

Alterando o subvolume padrão com `btrfs subvolume set-default` tornará o nível superior do sistema de arquivos inacessível, exceto pelo uso das opções de montagem `subvol=/` ou `subvolid=5` [3].

### Quota

Atenção: O Qgroup ainda não está estável e a combinação de quota com (muitos) snapshots de subvolumes pode causar problemas de desempenho, por exemplo, ao excluir snapshots. Além disso, existem vários outros problemas conhecidos.

O suporte a quota no Btrfs é implementado em um nível de subvolume pelo uso de grupos de quota ou qgroup: a cada subvolume é atribuído um grupo de quota na forma de 0 / subvolume_id por padrão. No entanto, é possível criar um grupo de cotas usando qualquer número, se desejado.

Para usar qgroups, você precisa habilitar o quota primeiro usando

    # btrfs quota enable caminho

A partir deste ponto, os subvolumes recém-criados serão controlados por esses grupos. Para habilitá-los retrospectivamente para subvolumes já existentes, ative o quota normalmente, crie um qgroup (grupo de quota) para cada um desses subvolumes usando seu subvolume_id e redigitalize-os:

    # btrfs subvolume list caminho | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} caminho
    # btrfs quota rescan caminho

Grupos de quota no Btrfs formam uma hierarquia de árvore, na qual qgroups são anexados a subvolumes. Os limites de tamanho são definidos por qgroup e se aplicam quando qualquer limite é atingido na árvore que contém um determinado subvolume.

Os limites dos grupos de quota podem ser aplicados ao uso total de dados, uso não compartilhado de dados, uso de dados compactados ou ambos. A cópia e a exclusão de arquivos podem afetar os limites, pois o limite não compartilhado de outro qgroup pode mudar se os arquivos do volume original forem excluídos e apenas uma cópia restar. Por exemplo, um snapshot novo compartilha quase todos os blocos com o subvolume original; as novas gravações em um subvolume aumentam em direção ao limite exclusivo; as exclusões de dados comuns em um volume aumentam em direção ao limite exclusivo no outro.

Para aplicar um limite a um qgroup, use o comando `btrfs qgroup limit`. Dependendo do seu uso, use um limite total, um limite não compartilhado (`-e`) ou limite compactadot (`-c`). Para mostrar o uso e os limites de um determinado caminho em um sistema de arquivos, use

    # btrfs qgroup show -reF caminho

### Intervalo de confirmação

A resolução na qual os dados são gravados no sistema de arquivos é ditada pelo próprio Btrfs e pelas configurações do sistema. O Btrfs assume como padrão um intervalo de ponto de verificação de 30 segundos no qual novos dados são confirmados no sistema de arquivos. Isso pode ser alterado anexando o `commit` opção de montagem em `/etc/fstab` para a partição btrfs.

    LABEL=arch64 / btrfs defaults,noatime,compress=lzo,commit=120 0 0

As configurações do sistema também afetam os intervalos de confirmação. Eles incluem os arquivos em `/proc/sys/vm/*` e estão fora do escopo deste artigo wiki. A documentação do kernel para eles reside em `Documentation/sysctl/vm.txt`.

### TRIM do SSD

Um sistema de arquivos Btrfs pode liberar blocos não utilizados de uma unidade SSD que suporta o comando TRIM. A partir da versão 5.6 do kernel, há suporte a descarte assíncrono, ativado com a opção mount `discard=async`. As extensões liberadas não são descartadas imediatamente, mas agrupadas e aparadas posteriormente por um thread de trabalho separado, melhorando a latência de consolidação.

Mais informações sobre como ativar e usar o TRIM podem ser encontradas em Solid State Drives#TRIM.

## Uso

### Arquivo swap

Arquivos swap no Btrfs são suportados desde o kernel 5.0 do Linux.[4] A maneira correta de inicializar um swap file é descrita em Arquivo swap#Criação de arquivo swap. A configuração da hibernação para um swap file é descrita em Power management/Suspend and hibernate#Hibernation into swap file on Btrfs.

Nota: Para a versão 5.0 ou superior do kernel, o Btrfs possui suporte nativo ao swap file com algumas limitações:

- O arquivo swap não pode estar em um subvolume de snapshot. O procedimento apropriado é criar um novo subvolume para colocar o swap file.
- Ele não suporta swap files em sistemas de arquivos que abrangem vários dispositivos. Veja Btrfs wiki: Does btrfs support swap files? e Arch forums discussion.

Atenção: Os kernels do Linux anteriores à versão 5.0 não suportam swap files. O uso de um swap file com Btrfs e um kernel anterior à 5.0 pode levar à corrupção do sistema de arquivos.

### Exibindo espaço usado/espaço livre

Ferramentas gerais de espaço de usuário do linux, como `df` relatará incorretamente o espaço livre em uma partição Btrfs. Recomenda-se usar `btrfs filesystem usage` para consultar partições Btrfs. Por exemplo:

    # btrfs filesystem usage /

Nota: O `btrfs filesystem usage` Atualmente, não funciona corretamente com os níveis RAID `RAID5/RAID6`.

Veja [5] para mais informações.

### Desfragmentação

O Btrfs suporta a desfragmentação online através da opção de montagem `autodefrag`, veja btrfs(5) § MOUNT OPTIONS. Para desfragmentar manualmente sua raiz, use:

    # btrfs filesystem defragment -r /

Usando o comando acima sem o `-r` Essa opção resultará em apenas os metadados mantidos pelo subvolume que contém o diretório sendo desfragmentado. Isso permite a desfragmentação de arquivo único, especificando simplesmente o caminho.

Desfragmentando um arquivo que possui uma cópia COW (uma cópia de snapshot ou uma feita com `cp --reflink` ou bcp) além de usar o `-c` alternar com um algoritmo de compactação pode resultar em dois arquivos não relacionados, aumentando efetivamente o uso do disco.

### RAID

O Btrfs oferece "RAID" nativo para #Sistema de arquivos com vários dispositivos. Recursos notáveis que diferenciam o btrfs RAID do mdadm são matrizes redundantes de autocorreção e balanceamento on-line. Veja a página wiki do Btrfs Para maiores informações. A página sysadmin do Btrfs também tem uma seção com algum informações mais técnicas.

Atenção: O código de paridade RAID (RAID 5/6) possui vários bugs de perda de dados em série. Veja a página RAID5/6 da Wiki do Btrfs e reportes de bugs na lista de discussão linux-btrfs para mais informações.

### Scrub

O Glossário da Btrfs Wiki afirma que o Btrfs scrub é "[uma] ferramenta de verificação de sistema de arquivos on-line. Lê todos os dados e metadados no sistema de arquivos e usa somas de verificação e cópias duplicadas do armazenamento RAID para identificar e reparar dados corrompidos".

{{Warning|Um processo scrub em execução vai impedir o sistema de suspender, veja esta discussão

#### Iniciar manualmente

Para iniciar uma limpeza (em segundo plano) no sistema de arquivos que contém `/`:

    # btrfs scrub start /

Para verificar o status de uma limpeza em execução:

    # btrfs scrub status /

#### Comece com um serviço ou cronômetro

O pacote btrfs-progs traz o `btrfs-scrub@.timer` para executar o scrub mensalmente no ponto de montagem especificado. Habilite o temporizador com um caminho de escape, `btrfs-scrub@-.timer` para `/` e `btrfs-scrub@home.timer` para `/home`. Você pode usar `systemd-escape -p /path/to/mountpoint` para escapar do path, veja systemd-escape(1) para detalhes.

Você também pode executar o scrub iniciando o `btrfs-scrub@.service` (com o mesmo caminho codificado). A vantagem disso sobre `btrfs scrub` (como usuário root) é que os resultados da limpeza serão registrados no journal do systemd.

### Balance

"O balance passa todos os dados no sistema de arquivos pelo alocador novamente. Destina-se principalmente a reequilibrar os dados no sistema de arquivos entre os dispositivos quando um dispositivo é adicionado ou removido. O balance regenerará cópias ausentes dos níveis redundantes de RAID, se um dispositivo falhou."[6] Veja a página FAQ.

Em um sistema de arquivos de dispositivo único, o balance também pode ser útil para (temporariamente) reduzir a quantidade de blocos de dados alocados, mas não utilizados (meta). Às vezes, isso é necessário para corrigir problemas "filesystem full".

    # btrfs balance start /
    # btrfs balance status /

### Snapshots

"Um snapshot é simplesmente um subvolume que compartilha seus dados (e metadados) com outros subvolumes, usando os recursos btrfs COW ". Veja o SysadminGuide#Snapshots da Wiki do Btrfs para detalhes.

Para criar um snapshot:

    # btrfs subvolume snapshot fonte [destino/]nome

Para criar um snapshot somente leitura, adicione a opção `-r`. Para criar uma versão modificável de um snapshot somente leitura, basta criar um snapshot.

Nota: Os snapshots não são recursivos. Todo subvolume aninhado será um diretório vazio dentro do snapshot.

### Enviar/receber

Um subvolume pode ser enviado para stdout ou um arquivo usando o `send` comando. Isso geralmente é mais útil quando direcionado para o comando do Btrfs `receive`. Por exemplo, para enviar um snapshot chamado `/backup_da_raiz` (talvez de um snapshot que você fez do `/` mais cedo) para `/backup` você faria o seguinte:

     # btrfs send /backup_da_raiz | btrfs receive /backup

O snapshot enviado deve ser somente leitura. O comando acima é útil para copiar um subvolume para um dispositivo externo (por exemplo, um dispositivo USB montado em `/backup`).

Você também pode enviar apenas a diferença entre dois snapshots. Por exemplo, se você já enviou uma cópia do `backup_da_raiz` acima e criaram um novo instantâneo somente leitura em seu sistema chamado `root_backup_new`, para enviar apenas a diferença incremental para `/backup`:

     # btrfs send -p /backup_da_raiz /novo_backup_da_raiz | btrfs receive /backup

Agora, um novo subvolume chamado `novo_backup_da_raiz` estará presente em `/backup`.

Veja a página da Wiki do Btrfs sobre Backup incremental, para saber como usá-lo e ferramentas que automatizam o processo.

### Desduplicação

Usando copy-on-write, O Btrfs pode copiar arquivos ou subvolumes inteiros sem copiar os dados. No entanto, sempre que um arquivo é alterado, uma nova cópia adequada é criada. A desduplicação leva isso um passo adiante, identificando ativamente blocos de dados que compartilham seqüências comuns e combinando-os em uma extensão com a mesma semântica copy-on-write.

As ferramentas dedicadas para desduplicar uma partição formatada em Btrfs incluem duperemove, bedupAUR e btrfs-dedup. Pode-se também querer desduplicar dados em um nível baseado em arquivo, usando rmlint ou jdupesAUR. Para uma visão geral dos recursos disponíveis desses programas e informações adicionais, consulte essa página da Wiki.

Além disso, os desenvolvedores do Btrfs estão trabalhando na desduplicação inband (também conhecida como síncrona ou inline), o que significa que a desduplicação é feita ao gravar novos dados no sistema de arquivos. Atualmente, ainda é um experimento desenvolvido fora da árvore. Usuários dispostos a testar o novo recurso devem ler a página apropriada da wiki do kernel.

## Problemas conhecidos

Algumas limitações devem ser conhecidas antes de tentar.

### Criptografia

O Btrfs não tem suporte nativo à criptografia, mas pode ter no futuro. Os usuários podem criptografar a partição antes de executar `mkfs.btrfs`. Veja dm-crypt/Criptografando todo um sistema#Subvolumes do Btrfs com swap.

Os sistemas de arquivos Btrfs existentes podem usar algo como EncFS ou TrueCrypt, embora talvez sem alguns dos recursos do Btrfs.

### Problemas de verificação do btrfs

A ferramenta `btrfs check` possui problemas conhecidos e não deve ser executada sem leitura adicional, consulte a seção #Verificação do Btrfs.

## Dicas e truques

### Disco Btrfs sem partição

Atenção: A maioria dos usuários não deseja esse tipo de instalação e, em vez disso, deve instalar o Btrfs em uma partição regular. Além disso, o GRUB desencoraja fortemente a instalação em um disco sem partição. Considere usar `--alloc-start` para mkfs.btrfs para dar grande espaço ao GRUB.

O Btrfs pode ocupar um dispositivo de armazenamento de dados inteiro, substituindo o MBR ou GPT esquemas de particionamento, usando subvolumes para simular partições. No entanto, não é necessário usar uma configuração sem partição para simplesmente Criação do sistema de arquivos em uma partição existente que foi criada usando outro método. Existem algumas limitações nas configurações de disco único sem partição:

- Não pode colocar outro sistema de arquivos em outra partição no mesmo disco.
- Se você estiver usando uma versão do kernel Linux anterior à 5.0, não poderá usar swap já que o Btrfs ainda não suportava arquivos swap antes do kernel 5.0 e não há espaço para criar uma partição swap
- Não pode usar UEFI para inicializar.

Para substituir a tabela de partição existente com Btrfs, execute o seguinte comando:

    # mkfs.btrfs /dev/sdX

Por exemplo, use `/dev/sda` ao invés de `/dev/sda1`. O último formata uma partição existente em vez de substituir todo o esquema de particões. Como a partição raiz está em Btrfs, verifique se `btrfs` é compilado no kernel, ou coloque `btrfs` dentro do arranjo MODULES do mkinitcpio e gere novamente o initramfs.

Instale o gerenciador de boot como você faria para um dispositivo de armazenamento de dados com Master Boot Record. Veja Syslinux#Manual install ou GRUB/Tips and tricks#Install to partition or partitionless disk. Se o seu kernel não inicializar devido a `Failed to mount /sysroot.`, por favor adicione `GRUB_PRELOAD_MODULES="btrfs"` em `/etc/default/grub` e gere a configuração do grub (GRUB#Gerar o arquivo de configuração principal).

### Conversão Ext3/4 para Btrfs

Atenção: Existem muitos relatórios na lista de discussão btrfs sobre conversões incompletas / corrompidas / quebradas. Verifique se você tem backups válidos de todos os dados que não pode perder. Veja Conversão Ext3 ou a wiki do btrfs para mais informações.

Inicialize a partir de um CD de instalação e depois converta:

    # btrfs-convert /dev/partição

Monte a partição e teste a conversão verificando os arquivos. Certifique-se de alterar o `/etc/fstab` refletir a mudança (type para `btrfs` e fs_passno [o ultimo campo] para `0` porque o Btrfs não faz uma verificação do sistema de arquivos na inicialização). Observe também que o UUID da partição será alterado, portanto, atualize o fstab adequadamente ao usar UUIDs. `chroot` no sistema e reconstrua a lista de menus do GRUB (veja Instalar a partir de um Linux existente e artigos GRUB). Se estiver convertendo um sistema de arquivos raiz, enquanto ainda estiver em chroot, execute `mkinitcpio -p linux` para regenerar o initramfs ou o sistema não inicializará com êxito. Se você ficar preso no grub com 'sistema de arquivos desconhecido', tente reinstalar o grub com `grub-install /dev/partição` e gere novamente a configuração `grub-mkconfig -o /boot/grub/grub.cfg`.

Depois de confirmar que não há problemas, conclua a conversão excluindo o backup `ext2_saved` subvolume. Observe que você não pode voltar ao ext3/4 sem ele.

    # btrfs subvolume delete /ext2_saved

Finalmente balance o sistema de arquivos para recuperar o espaço.

### Aceleração de hardware de soma de verificação

O CRC32 é uma nova instrução no Intel SSE4.2. Para verificar se a soma de verificação Btrfs é acelerada por hardware:

    # dmesg | grep crc32c

    Btrfs loaded, crc32c=crc32c-intel

Se você ver `crc32c=crc32c-generic`, provavelmente é porque sua partição raiz é Btrfs, e você terá que compilar `crc32c-intel` no kernel para fazê-lo funcionar. Colocando `crc32c-intel` para dentro do mkinitcpio.conf não vai funcionar.

### Recuperação de corrupção

Atenção: A ferramenta `btrfs check` tem problemas conhecidos, consulte a seção #Verificação do Btrfs

btrfs-check não pode ser usado em um sistema de arquivos montado. Para poder usar o btrfs-check sem inicializar a partir de um USB ativo, adicione-o ao disco RAM inicial:

    /etc/mkinitcpio.conf

    BINARIES=("/usr/bin/btrfs")

Gere novamente o initramfs.

Se houver um problema na inicialização, o utilitário estará disponível para reparo.

Nota: Se o processo fsck precisar invalidar o cache de espaço (e/ou outros caches?) é normal que uma inicialização subsequente seja interrompida por um tempo (isso pode gerar mensagens do console sobre a interrupção da transação btrfs). O sistema deve se recuperar disso depois de um tempo.

Veja a página da Wiki do Btrfs para mais informações.

### Inicializando em snapshots

Para inicializar em um snapshot, o mesmo procedimento se aplica à montagem de um subvolume como sua partição raiz, conforme fornecido na seção montando um subvolume como sua partição raiz, porque os instantâneos podem ser montados como subvolumes. Se você estiver usando o GRUB, poderá preencher automaticamente o menu de inicialização com os instantâneos btrfs ao gerar novamente o arquivo de configuração com a ajuda do grub-btrfs ou grub-btrfs-gitAUR.

### Use subvolumes Btrfs com systemd-nspawn

Veja os artigos Systemd-nspawn#Use Btrfs subvolume as container root e Systemd-nspawn#Use temporary Btrfs snapshot of container.

## Solução de problemas

Veja o FAQ de problemas do Btrfs para solução de problemas gerais.

### GRUB

#### Deslocamento da partição

O problema de deslocamento pode ocorrer quando você tenta incorporar `core.img` em um disco particionado. Significa que está tudo bem para incorporar o grub `core.img` em um pool Btrfs em um disco sem partição (por exemplo `/dev/sdX`) diretamente.

GRUB pode inicializar partições Btrfs, no entanto, o módulo pode ser maior que outros sistemas de arquivos. E o arquivo `core.img` feito por `grub-install` pode não caber nos primeiros 63 setores (31,5 KiB) da unidade entre o MBR e a primeira partição. Ferramentas de particionamento atualizadas, como `fdisk` e `gdisk` evitam esse problema compensando a primeira partição em aproximadamente 1MiB ou 2MiB.

#### Raiz ausente

The factual accuracy of this article or section is disputed.

Reason: Sugerir não editar um arquivo de configuração manualmente. (Discuss in Talk:Btrfs#Should not suggest to edit files in /usr/share)

Usuários com o seguinte: `error no such device: root` ao inicializar a partir de uma configuração de estilo RAID, edite /usr /share /grub /grub-mkconfig lib e remova as duas aspas da linha `echo " search --no-floppy --fs-uuid --set=root ${hints} ${fs_uuid}"`. Gere novamente a configuração do grub e o sistema deverá inicializar sem erros.

### BTRFS: open_ctree falhou

Em novembro de 2014, parece haver um bug no systemd ou no mkinitcpio causando o seguinte erro em sistemas que usam Btrfs em vários dispositivos usando o hook `btrfs` em `mkinitcpio.conf`:

    BTRFS: open_ctree failed
    mount: wrong fs type, bad option, bad superblock on /dev/sdb2, missing codepage or helper program, or other error

    In some cases useful info is found in syslog - try dmesg|tail or so.

    You are now being dropped into an emergency shell.

Uma solução é remover `btrfs` do vetor `HOOKS` em `/etc/mkinitcpio.conf` e adicionar `btrfs` no vetor `MODULES`. Em seguida, gere novamente o initramfs e reinicie.

Você receberá o mesmo erro se tentar montar um arranjo raid sem um dos dispositivos. Nesse caso, você deve adicionar a opção de montagem `degraded` para `/etc/fstab`. Se sua raiz reside na matriz, você também deve adicionar `rootflags=degraded` para os parâmetros do kernel.

Desde agosto de 2016, uma solução em potencial para esse bug é montar o arranjo por uma única unidade apenas em `/etc/fstab`, e permita que o btrfs descubra e acrescente as outras unidades automaticamente. Identificadores baseados em grupo, como UUID e LABEL, parecem contribuir para a falha. Por exemplo, uma arranjo RAID1 de dois dispositivos que consiste em 'disco1' e 'disco2' terá um UUID alocado, mas em vez de usar o UUID, use apenas `/dev/mapper/disco1` no `/etc/fstab`. Para uma explicação mais detalhada, consulte a seguinte postagem no blog.

Outra solução possível é remover o hook `udev` no mkinitcpio.conf e substitua ele pelo hook `systemd`. Nesse caso, `btrfs` não deve estar nos vetores `HOOKS` ou `MODULES`.

Veja a discussão no forum e FS#42884 para mais informações e discussão.

### Verificação do Btrfs

Atenção: Como o Btrfs está em forte desenvolvimento, especialmente o comando `btrfs check` é altamente recomendado criar um backup e consulte a Documentação do Btrfsck antes de executar `btrfs check` com o `--repair`.

O comando btrfs check pode ser usado para verificar ou reparar um sistema de arquivos Btrfs não montado. No entanto, essa ferramenta de reparo ainda é imatura e não é capaz de reparar certos erros do sistema de arquivos, mesmo aqueles que não tornam o sistema de arquivos desmontável.

## Veja também

- Site oficial
  - Btrfs Wiki
- Relacionado com desempenho
  - Btrfs on raw disks?
  - Varying leafsize and nodesize in Btrfs
  - Btrfs support for efficient SSD operation (data blocks alignment)
  - Is Btrfs optimized for SSDs?
  - Benchmark de opções de montagem do Phoronix
    - Linux 4.9
    - Linux 3.14
    - Linux 3.11
    - Linux 3.9
    - Linux 3.7
    - Linux 3.2
  - Lzo vs. zLib
- Diversos
  - Funtoo Wiki Btrfs Fun
  - Avi Miller presenting Btrfs at SCALE 10x, January 2012.
  - Summary of Chris Mason's talk from LFCS 2012
  - Btrfs: stop providing a bmap operation to avoid swapfile corruptions 2009-01-21
  - Doing Fast Incremental Backups With Btrfs Send and Receive

Category:

- File systems (Português)

Hidden categories:

- Pages with broken package links
- Pages or sections flagged with Template:Accuracy