Btrfs (Português)

Status de tradução:
Esse artigo é uma tradução de
Btrfs
. Data da última tradução: 2022-08-11. 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):
O Btrfs é uma cópia moderna do sistema de arquivos de gravação (Copy-on-Write) para Linux, destinada a implementar recursos avançados, ao mesmo tempo em que se concentra na tolerância a falhas, reparo e fácil administração. Desenvolvido em conjunto em várias empresas, o Btrfs é licenciado sob a GPL e aberto à contribuição 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 de Ext3/4 para Btrfs
. Para usar uma configuração sem partição, Veja
#Disco Btrfs sem partições
.
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 de nó (
nodesize
) padrão do Btrfs para metadados é 16 KB, enquanto o tamanho de setor padrão para dados é igual ao tamanho da página e detectado automaticamente. Para usar um tamanho de nó maior para metadados (deve ser um múltiplo do tamanho do setor, até 64 KB é permitido), especifique um valor para o
nodesize
por meio da opção
-n
conforme mostrado neste exemplo usando blocos de 32 KB:
# mkfs.btrfs -L
minhaEtiqueta
-n 32k /dev/
partição
Nota
De acordo com
mkfs.btrfs(8) § OPTIONS
, "[o] tamanho de nó menor aumenta a fragmentação, mas leva a mais altas que, por sua vez, levam a menor contenção de bloqueio. Tamanhos de nó mais altos proporcionam melhor compactação e menos fragmentação ao custo de operações de memória mais caras ao atualizar os blocos de metadados".
Sistema de arquivos com vários dispositivos
Atenção
Os modos RAID 5 e RAID 6 do Btrfs são fatalmente falhos e não devem ser usados para "nada além de testes com dados descartáveis".
Lista de problemas conhecidos e soluções parciais.
Consulte
a página do Btrfs em RAID5 e RAID6
para atualizações de status (parece não estar atualizado).
Vários dispositivos podem ser usados para criar um RAID. Os níveis de RAID suportados incluem RAID 0, RAID 1, RAID 10, RAID 5 e RAID 6. A partir do kernel 5.5 RAID1c3 e RAID1c4 para 3 e 4 cópias do nível RAID 1. Os níveis de RAID podem ser configurados separadamente para dados e metadados usando as opções
-d
e
-m
, respectivamente. Por padrão, os dados têm uma cópia (
single
) e os metadados são espelhados (
raid1
). Isso é semelhante à criação de uma
configuração JBOD
, onde os discos são vistos como um sistema de arquivos, mas os arquivos não são duplicados. Consulte
Usando Btrfs com vários dispositivos
para obter mais informações sobre como criar um volume RAID Btrfs.
# mkfs.btrfs -d single -m raid1 /dev/
partição1
/dev/
partição2
...
Você deve incluir o hook
udev
ou o hook
btrfs
em
/etc/mkinitcpio.conf
para usar vários dispositivos Btrfs em uma 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.
O Btrfs não lê automaticamente do dispositivo mais rápido, portanto, misturar diferentes tipos de discos resulta em desempenho inconsistente. Consulte
[1]
para obter detalhes.
Veja
#RAID
para obter conselhos sobre manutenção específica para sistemas de arquivos Btrfs de vários dispositivos.
Configurando o sistema de arquivos
Copy-on-Write (CoW)
Por padrão, o Btrfs usa
copy-on-write
para todos os arquivos o tempo todo. As gravações não substituem os dados no local; em vez disso, uma cópia modificada do bloco é gravada em um novo local e os metadados são atualizados para apontar para o novo local. Veja a
seção Guia Sysadmin do Btrfs
para detalhes de implementação, bem como vantagens e desvantagens.
Desativando CoW
Atenção
Desabilitar CoW em Btrfs também desabilita checksums. Btrfs não será capaz de detectar arquivos
nodatacow
corrompidos. Quando combinado com RAID 1, quedas de energia ou outras fontes de corrupção podem fazer com que os dados fiquem fora de sincronia.
Para desativar copy-on-write de arquivos recém-criados em um subvolume montado, use a opção de montagem
nodatacow
. Isso afetará apenas os arquivos recém-criados. A cópia na gravação ainda acontecerá para arquivos existentes. A opção
nodatacow
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 aquelas operações nas quais há apenas uma referência ao arquivo. Se houver mais de uma referência, por exemplo devido a clones de arquivo (leves ou não) ou snapshots do sistema de arquivos, o copy-on-write ainda ocorre. Observe que a partir do
coreutils
9.0,
cp
tenta realizar cópias leves por padrão — veja
cp(1)
para mais detalhes.
Nota
De
chattr(1)
(traduzido): "Para Btrfs, o sinalizador '
C
' deve ser definido em arquivos novos ou vazios. Se estiver definido em um arquivo que já possui blocos de dados, fica indefinido quando os blocos atribuídos ao arquivo estarão totalmente estáveis. Se o sinalizador '
C
' estiver definido em um diretório, ele 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 nota 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 --reflink=never
/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 este processo. Observe também que
mv
ou
cp
sem
--reflink=never
conforme descrito abaixo não funcionar.
Compressão
Btrfs suporta
compressão transparente e automática
. Isso reduz o tamanho dos arquivos e aumenta significativamente a vida útil da mídia baseada em flash, reduzindo a amplificação de gravação. Veja
Fedora:Changes/BtrfsByDefault#Compression
,
[2]
e
[3]
. Ela também pode
melhorar o desempenho
, em alguns casos (por exemplo, thread único com E/S de arquivo pesado), enquanto obviamente prejudica o desempenho em outros casos (por exemplo, tarefas multi-threaded e/ou com uso intensivo de CPU com E/S de arquivo grande). O melhor desempenho geralmente é alcançado com os algoritmos de compactação mais rápidos,
zstd
e
lzo
, e alguns
benchmarks
fornecem 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.
[4]
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=
alg
permite considerar automaticamente cada arquivo para compactação, onde
alg
é
zlib
,
lzo
,
zstd
ou
no
(para nenhuma compactação). Usando esta opção, o btrfs verificará se a compactação da primeira parte dos dados os reduz. Se isso acontecer, toda a gravação nesse arquivo será compactada. Se isso não acontecer, nada disso é compactado. Com essa 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 reduza tremendamente
[5]
. Isso é feito para evitar que o disco espere para iniciar a gravação 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 em vez disso, o que faz com que o btrfs ignore a verificação se a compactação reduz a primeira parte e habilita a tentativa de compactação automática para cada arquivo. Na pior das hipóteses, isso pode causar (um pouco) mais uso da CPU sem nenhum propósito. No entanto, testes empíricos em vários sistemas de uso misto mostraram uma melhoria significativa de cerca de 10% de compactação de disco ao usar
compress-force=
zstd
em vez de apenas
compress=
zstd
, que também tinha 10% de compactação de disco.
Somente os 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 -c
alg
, onde
alg
é
zlib
,
lzo
ou
zstd
. Por exemplo, para recompactar 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/sd
xY
/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 habilitada por arquivo sem usar a opção de montagem
compress
; para isso, aplique
chattr +c
ao 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 suporte a
zstd
podem 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 em seu MBR/ESP desde então, executando
grub-install
com as opções apropriadas para a configuração de BIOS/UEFI, pois isso não é feito automaticamente. Veja
FS#63235
.
Visualizar tipos e proporções de compactação
compsize
obtém uma lista de arquivos (ou um sistema de arquivos btrfs inteiro) e mede os tipos de compactação usados e as taxas de compactação efetivas. O tamanho descompactado pode não corresponder ao número fornecido por outros programas, como
du(1)
, porque cada extensão é contada uma vez, mesmo que seja revinculada várias vezes, e mesmo que parte dela não seja mais usada em nenhum lugar, mas não tenha sido coletada como lixo. A opção
-x
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 em 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."
[6]
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
).
Montando subvolumes
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 montá-lo como
/
. Pode-se imitar partições tradicionais do sistema de arquivos criando vários subvolumes no nível superior do sistema de arquivos e, em seguida, montando-os nos pontos de montagem apropriados. É preferível montar usando
subvol=
/caminho/para/subvolume
, em vez do subvolid, pois o subvolid pode mudar ao restaurar
#Snapshots
, exigindo uma mudança de configuração de montagem.
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á-lo como
/
.
Nota
De
btrfs(5) § MOUNT OPTIONS
:
A maioria das opções de montagem se aplicam ao
sistema de arquivos inteiro
, e somente as opções para o primeiro subvolume a ser montado terão efeito. 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#Layout do sistema de arquivos sugerido
,
Btrfs SysadminGuide#Managing Snapshots
e
Btrfs SysadminGuide#Layout
para obter exemplos de 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 root
Para usar um subvolume como o ponto de montagem raiz, especifique o subvolume por meio de um
parâmetro 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=
. Alternativamente, 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
. É preferível montar usando
subvol=
/caminho/para/subvolume
, em vez do subvolid, pois o subvolid pode mudar ao restaurar
#Snapshots
, exigindo uma mudança na configuração de montagem, ou então o sistema não inicializará.
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
[7]
.
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 de todo o sistema. O padrão do Btrfs é 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 a opção de montagem
commit
em
/etc/fstab
para a partição btrfs.
LABEL=arch64 / btrfs defaults,noatime,compress=zstd,commit=120 0 0
As configurações de todo o 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 da wiki. A documentação do kernel para eles está disponível em
https://docs.kernel.org/admin-guide/sysctl/vm.html
.
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 Linux 5.0
[8]
. A maneira correta de inicializar um swap file é primeiro criar um subvolume do qual não se tenha snapshots para hospedar o arquivo e, em seguida, denifir o atributo
No_COW
em todo o diretório com
chattr
.
# chattr +C
/caminho/para/subvolume_do_swap
A partir de agora qualquer novo arquivo criado dentro do subvolume do swap terá o atributo
No_COW
definido.
Continue com as etapas em
Arquivo swap#Criação de arquivo swap
. A configuração da hibernação para um arquivo swap é descrita em
Hibernação
.
Nota
Desde o kernel Linux 5.0, 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 adequado é criar um novo subvolume para colocar o arquivo swap.
Ele não suporta arquivos swap em sistemas de arquivos que abrangem vários dispositivos. Veja
btrfs(5) § SWAPFILE SUPPORT
e
discussão nos fóruns do Arch
.
Exibindo espaço usado/livre
Ferramentas gerais de espaço de usuário linux, como
df(1)
relatam imprecisamente o espaço livre em uma partição Btrfs. É recomendado usar
btrfs filesystem usage
para consultar partições Btrfs. Por exemplo, para um detalhamento completo da alocação de dispositivos e estatísticas de uso:
# btrfs filesystem usage /
Nota
O comando
btrfs filesystem usage
atualmente não funciona corretamente com os níveis de RAID
RAID5/RAID6
.
Alternativamente,
btrfs filesystem df
permite uma verificação rápida do uso do espaço alocado sem a necessidade de executar como root:
$ btrfs filesystem df /
Veja
[9]
para mais informações.
As mesmas limitações se aplicam a ferramentas que analisam o uso de espaço para algum subconjunto do sistema de arquivos, como
du(1)
ou
ncdu(1)
, pois não levam em consideração reflinks, snapshots e compressão. Em vez disso, veja
btdu
AUR
e
compsize
para alternativas compatíveis com Btrfs.
Desfragmentação
Atenção
Uma grande regressão no kernel Linux versão 5.16.x < 5.16.5 faz com que a desfragmentação Btrfs faça um loop infinito em alguns sistemas, afetando tanto a desfragmentação manual quanto a automática. Isso causa cargas extremas de E/S nas unidades afetadas, o que pode reduzir bastante sua vida útil e afetar seu desempenho. Como tal, não é recomendado usar
autodefrag
nessas versões, deve-se usar
noautodefrag
para garantir que a desfragmentação online esteja desabilitada. Veja
[10]
e
[11]
.
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 /
Usar o comando acima sem a opção
-r
resultará na desfragmentação apenas dos metadados mantidos pelo subvolume que contém o diretório. Isso permite a desfragmentação de um único arquivo simplesmente especificando o caminho.
Desfragmentar um arquivo que tenha uma cópia COW (uma cópia de snapshot ou uma feita com
cp
ou bcp) e usar a opção
-c
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
. Os recursos notáveis que diferenciam o btrfs RAID do
mdadm
são arrays redundantes de autorrecuperação e balanceamento online. Veja
a página wiki do Btrfs
para obter mais informações. A página sysadmin do Btrfs também
tem uma seção
com um pouco mais de conhecimento técnico.
Atenção
O código de paridade RAID (RAID 5/6) contém vários erros sérios de perda de dados. Veja a página
RAID5/6
da Wiki do Btrfs e um relatório de bug na
lista de discussão linux-btrfs
para informações mais detalhadas. Em junho de 2020, alguém postou uma
lista abrangente de problemas atuais
e um
guia de recuperação útil
.
Scrub
O
Glossário da Wiki do Btrfs
afirma que o Btrfs scrub é "[uma] ferramenta de verificação de sistema de arquivos online. Lê todos os dados e metadados no sistema de arquivos e usa checksums e cópias duplicadas do armazenamento RAID para identificar e reparar quaisquer dados corrompidos".
Nota
Um processo scrub em execução impedirá que o sistema seja suspenso, veja
este tópico
para obter detalhes.
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 timer
O pacote
btrfs-progs
traz o unit
btrfs-scrub@.timer
para executar o scrub mensalmente no ponto de montagem especificado.
Habilite
o temporizador com um caminho de escape, por exemplo
btrfs-scrub@-.timer
para
/
e
btrfs-scrub@home.timer
para
/home
. Você pode usar
systemd-escape -p
/caminho/para/ponto_de_montagem
para escapar do caminho (
path
), veja
systemd-escape(1)
para detalhes.
Você também pode executar o scrub
iniciando
btrfs-scrub@.service
(com o mesmo caminho codificado). A vantagem disso sobre
btrfs scrub
(como usuário root) é que os resultados do scrub serão registrados no
journal do systemd
.
Em unidades NVMe grandes com resfriamento insuficiente (por exemplo, em um laptop), a execução do scrub pode ler a unidade com rapidez e tempo suficientes para deixá-la muito quente. Se estiver executando scrubs com systemd, você pode facilmente limitar a taxa de
scrubbing
com a opção
IOReadBandwidthMax
descrita em
systemd.resource-control(5)
usando um
arquivo drop-in
.
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."
[12]
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 --bg /
# 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 dele.
Nota
É possível que um snapshot seja convertido no local de somente leitura (
read-only
) para gravável (
writable
). No entanto, isso não é recomendado porque
causa problemas
com qualquer envio/recebimento incremental futuro. Criar um novo instantâneo gravável evita esses problemas.
Os snapshots não são recursivos. Cada subvolume aninhado será um diretório vazio dentro do snapshot.
Enviar/receber
Um subvolume pode ser enviado para stdout ou um arquivo usando o comando
send
. 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 fez um novo snapshot somente leitura em seu sistema chamado
novo_backup_da_raiz
, então, para enviar apenas a diferença incremental para
/backup
, faça:
# 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
e
#Backup incremental para unidade externa
para saber como usá-lo e para 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
e
bees
. Pode-se também querer apenas desduplicar dados em um nível baseado em arquivo, em vez de usar, por exemplo,
rmlint-git
AUR
,
jdupes
AUR
ou
dduper-git
AUR
. 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
.
Redimensionando
Atenção
Para evitar perda de dados, certifique-se de fazer backup de seus dados antes de iniciar qualquer tarefa de redimensionamento.
Você pode aumentar um sistema de arquivos até o espaço máximo disponível no dispositivo ou especificar um tamanho exato. Certifique-se de aumentar o tamanho do dispositivo ou volume lógico antes de tentar aumentar o tamanho do sistema de arquivos. Ao especificar um tamanho exato para o sistema de arquivos, tanto aumentando-o quanto diminuindo-o, certifique-se de que o novo tamanho atenda às seguintes condições:
O novo tamanho deve ser maior que o tamanho dos dados existentes; caso contrário, ocorrerá perda de dados.
O novo tamanho deve ser igual ou menor que o tamanho do dispositivo atual porque o tamanho do sistema de arquivos não pode se estender além do espaço disponível.
Nota
Se você planeja também diminuir o tamanho do volume lógico que contém o sistema de arquivos, certifique-se de diminuir o tamanho do sistema de arquivos antes de tentar diminuir o tamanho do dispositivo ou volume lógico.
Para estender o tamanho do sistema de arquivos para o tamanho máximo disponível do dispositivo:
# btrfs filesystem resize max /
Para estender o sistema de arquivos para um tamanho específico:
# btrfs filesystem resize
tamanho
/
Substitua
tamanho
pelo tamanho desejado em bytes. Você também pode especificar unidades no valor, como K (kibibytes), M (mebibytes) ou G (gibibytes). Alternativamente, você pode especificar um aumento ou diminuição do tamanho atual prefixando o valor com um sinal de mais (+) ou menos (-), respectivamente:
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
#btrfs check
.
Dicas e truques
Disco Btrfs sem partições
Atenção
A maioria dos usuários não deseja esse tipo de configuração e, em vez disso, deve instalar o Btrfs em uma partição normal. Além disso, o GRUB desencoraja fortemente a instalação em um disco sem partição.
O Btrfs pode ocupar um dispositivo de armazenamento de dados inteiro, substituindo os esquemas de particionamento
MBR
ou
GPT
, usando
subvolumes
para simular partições. No entanto, não é necessário usar uma configuração sem partição para simplesmente
criar um sistema de arquivos Btrfs
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 é possível colocar outros
sistemas de arquivos
em outra partição no mesmo disco.
Devido ao ponto anterior, não é possível ter uma
ESP
neste disco. Outro dispositivo é necessário para a inicialização do
UEFI
.
Se estiver usando uma versão do kernel Linux anterior a 5.0, você não pode usar
espaço swap
porque o Btrfs não suportava
arquivos swap
pré-5.0 e não há lugar para criar
partição swap
Para substituir a tabela de partição existente com Btrfs, execute o seguinte comando:
# mkfs.btrfs /dev/sd
X
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#Manually
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 de Ext3/4 para Btrfs
Atenção
Existem muitos relatórios na lista de discussão btrfs sobre conversões incompletas, corrompidas ou quebradas. Certifique-se de ter backups
funcionando
de todos os dados que você não pode perder. Veja
Conversão de Ext3
na wiki do Btrfs para mais informações.
Inicialize a partir de um CD de instalação e converta fazendo:
# btrfs-convert /dev/
partição
Monte a partição e teste a conversão verificando os arquivos. Certifique-se de alterar o
/etc/fstab
para refletir a alteração (em
type
altere para
btrfs
e em
pass
[o último campo] altere para
0
, pois 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 de acordo ao usar UUIDs. Entre no sistema atráves do
chroot
e reconstrua sua lista de menus de bootloaders (veja
Instalar a partir de um Linux existente
). 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 sucesso.
Depois de confirmar que não há problemas, conclua a conversão excluindo o subvolume de backup
ext2_saved
. Observe que você não pode reverter para ext3/4 sem ele.
# btrfs subvolume delete /ext2_saved
Finalmente
equilibre
o sistema de arquivos para recuperar o espaço.
Lembre-se que alguns aplicativos que foram instalados anteriormente precisam ser adaptados ao Btrfs.
Aceleração do hardware do checksum
O CRC32 é uma nova instrução no Intel SSE4.2. Para verificar se a soma de verificação (
checksum
) do 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. Colocar
crc32c-intel
em
mkinitcpio.conf
não
funciona.
Recuperação de corrupção
Atenção
A ferramenta
btrfs check
tem problemas conhecidos, consulte a seção
#btrfs check
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 ramdisk inicial:
/etc/mkinitcpio.conf
BINARIES=(btrfs)
Gere novamente o initramfs
.
Então, se houver um problema na inicialização, o utilitário estará disponível para reparo.
Nota
Se o processo fsck tiver que invalidar o cache de espaço (e/ou outros caches?) então é 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 para montar um subvolume como sua partição raiz, conforme fornecido na seção [[#Montando o subvolume como root|]], porque os snapshots podem ser montados como subvolumes.
Se estiver usando o
GRUB
, você poderá preencher automaticamente seu menu de inicialização com os snapshots do Btrfs ao regenerar o arquivo de configuração com a ajuda do
grub-btrfs
ou
grub-btrfs-git
AUR
.
Se estiver usando
rEFInd
você pode preencher automaticamente seu menu de inicialização com snapshots do Btrfs com a ajuda de
refind-btrfs
AUR
, depois de
habilitar
refind-btrfs.service
.
Use subvolumes Btrfs com systemd-nspawn
Consulte os artigos
Systemd-nspawn#Use Btrfs subvolume as container root
e
Systemd-nspawn#Use temporary Btrfs snapshot of container
.
Reduzindo atualizações de metadados de tempo de acesso
Devido à natureza copy-on-write do Btrfs, simplesmente acessar arquivos pode acionar a cópia e gravação de metadados. Reduzir a frequência das atualizações de tempo de acesso pode eliminar esse uso inesperado do disco e aumentar o desempenho. Veja
fstab#Opções atime
para as opções disponíveis.
Backup incremental para unidade externa
Os pacotes a seguir usam
btrfs send
e
btrfs receive
para enviar backups incrementalmente para uma unidade externa. Consulte a documentação para ver as diferenças na implementação, recursos e requisitos.
btrbk
— Ferramenta para criar snapshots e backups remotos de subvolumes Btrfs.
https://github.com/digint/btrbk
||
btrbk
snap-sync
— Usa snapshots do
Snapper
para fazer backup em uma unidade externa ou máquina remota.
https://github.com/wesbarnett/snap-sync.git
||
snap-sync
AUR
snapsync
— Uma ferramenta de sincronização para o
Snapper
.
https://github.com/doudou/snapsync
||
ruby-snapsync
AUR
O pacote a seguir permite fazer backup de snapshots do snapper para sistemas de arquivos não Btrfs.
snapborg
— Ferramenta semelhante ao borgmatic que integra snapshots do snapper com backups do
borg
.
https://github.com/enzingerm/snapborg
||
snapborg
AUR
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. Isso significa que
está tudo bem
para incorporar o
core.img
do GRUB em um pool Btrfs em um disco sem partição (por exemplo
/dev/sd
X
) diretamente.
GRUB
pode inicializar partições Btrfs, porém o módulo pode ser maior que outros
sistemas de arquivos
. E o arquivo
core.img
feito pelo
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:
Sugere a edição manual de um arquivo sem configuração. (Discuss in
Talk:Btrfs#Should not suggest to edit files in /usr/share
)
Se experenciando o seguinte erro
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 deve inicializar sem erros.
Tempo limite de montagem esgotado
Às vezes, especialmente com grandes arrays RAID 1, a montagem pode atingir o tempo limite durante a inicialização com uma mensagem do journal como:
Jan 25 18:05:12 host systemd[1]: storage.mount: Mounting timed out. Terminating.
Jan 25 18:05:46 host systemd[1]: storage.mount: Mount process exited, code=killed, status=15/TERM
Jan 25 18:05:46 host systemd[1]: storage.mount: Failed with result 'timeout'.
Jan 25 18:05:46 host systemd[1]: Failed to mount /storage.
Jan 25 18:05:46 host systemd[1]: Startup finished in 32.943s (firmware) + 3.097s (loader) + 7.247s (kernel)>
Jan 25 18:05:46 host kernel: BTRFS error (device sda): open_ctree failed
Isso pode ser facilmente contornado fornecendo um tempo limite mais longo por meio da opção de montagem específica do systemd
x-systemd.mount-timeout
em
fstab
. Por exemplo:
/dev/sda                /storage    btrfs       rw,relatime,x-systemd.mount-timeout=5min  0 0
BTRFS: open_ctree falhou
Em novembro de 2014, pareceu 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 array
HOOKS
em
/etc/mkinitcpio.conf
e, em vez disso, adicionar
btrfs
ao array
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 no array, você também deve adicionar
rootflags=degraded
para os
parâmetros do kernel
.
Desde agosto de 2016, uma possível solução alternativa para esse bug é montar o array por uma única unidade apenas em
/etc/fstab
, e permitir que o Btrfs descubra e anexe as outras unidades automaticamente. Identificadores baseados em grupo, como UUID e LABEL, parecem contribuir para a falha. Por exemplo, uma array RAID1 de dois dispositivos que consiste em 'disco1' e 'disco2' terá um UUID alocado para ele, mas em vez de usar o UUID, use apenas
/dev/mapper/disco1
no
/etc/fstab
. Para obter uma explicação mais detalhada, consulte a seguinte
postagem no blog
.
Outra solução possível é remover o hook
udev
no
mkinitcpio.conf
e substituir ele pelo hook
systemd
. Nesse caso,
btrfs
não
deve estar nos vetores
HOOKS
ou
MODULES
.
Veja a
discussão no fórum
e
FS#42884
para mais informações e discussão.
btrfs check
Atenção
Como o Btrfs está em desenvolvimento pesado, especialmente o comando
btrfs check
, é altamente recomendável criar um
backup
e consultar
btrfs-check(8)
antes de executar
btrfs check
com a opção
--repair
.
O comando
btrfs-check(8)
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
Btrfs Documentation
Relacionado a 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 5.8
Linux 5.0
Linux 4.9
Linux 3.14
Linux 3.11
Linux 3.9
Linux 3.7
Linux 3.2
Lzo vs. zLib
Diversos
Funtoo: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