O BTRFS pode recuperar / continuar após a falha do disco no modo “único”?

3

Testando o btrfs pela primeira vez para ver se posso usá-lo para um projeto específico.

Estou trabalhando em uma máquina virtual.

  1. Criado um volume com esses 3 discos pequenos e aleatórios.

    mkfs.btrfs -d single /dev/sdb /dev/sdc /dev/sdd
    mount /dev/sdb /mnt/data
    
  2. Adicionado outro dispositivo apenas para testar

    btrfs device add /dev/sde /mnt/data 
    
  3. Criamos vários arquivos de 1 GB para preencher os discos

    dd if=/dev/urandom of=1GB_07.bin bs=64M count=16 iflag=fullblock
    
  4. Eu removi um dos discos da VM e reiniciei

  5. Consegui forçar a montagem no modo somente leitura

    mount -ro degraded /dev/sdb /mnt/data
    

Eu posso ver todos os arquivos. Eu tentei rsync-los para um diretório diferente e não consegui copiar um dos arquivos 1G que criei. Faz sentido, está no disco ausente!

A partir daqui, existe uma maneira de "limpar" o disco e os arquivos que estavam nele e ter as coisas rodando no modo de leitura / gravação novamente? Eu só estou tentando juntar uma caixa com um monte de discos de tamanho aleatório. A redundância não é importante para mim aqui e não quero a sobrecarga de espelhamento de dados nessa caixa .

Se eu perder uma unidade com alguns dados, quero apenas substituir / removê-la e re-rsync da origem para obter novas cópias dos arquivos ausentes na máquina BTRFS.

Isso faz sentido? Isso é possível?

    
por LVLAaron 29.01.2017 / 01:37

2 respostas

0

Dada a sua descrição exata, não, não é possível porque você perdeu parte da árvore de metadados também (e se você tiver muito azar, você terá perdido a árvore de fragmentos (o System chunks em btrfs fi df output) também, o que equivale a limpar os superblocos e parte das tabelas de inode em um sistema de arquivos ext4). Esses metadados ausentes fazem parte do motivo pelo qual você foi forçado a montar somente leitura.

Por padrão, o BTRFS usa o modo dup para metadados. Isso significa que ele armazena 2 cópias de cada bloco de metadados, mas ambos são mantidos no mesmo dispositivo (mesmo que você tenha mais de um dispositivo). Como resultado disso, se você perder um dispositivo de um volume BTRFS de vários dispositivos usando esse perfil de metadados, provavelmente perderá alguns de seus metadados. Se a árvore de metadados estiver danificada, você provavelmente terá grandes partes do sistema de arquivos em falta, e provavelmente também não conseguirá montar o sistema de arquivos.

O que você precisa fazer é usar o modo raid1 para metadados. Sério, isso não é tanto um acerto de desempenho quanto você pensa, especialmente se você não estiver escrevendo regularmente para o sistema de arquivos, e evitará que uma única falha de dispositivo atinja todo o sistema de arquivos.

Com isso, quando um dispositivo falha:

  1. Use mount -o remount,rw,degraded para forçar o sistema de arquivos a ser gravável novamente. NÃO DEIXE O SISTEMA DE ARQUIVO FUNCIONANDO COMO ISSO SE VOCÊ NÃO ESTIVER FIXANDO-O! Sério, coisas muito ruins podem acontecer se você deixar o sistema de arquivos degradado, mas gravável.
  2. Exclua cada arquivo afetado pela falha de alguma forma. Descobrir com segurança o que é afetado não é trivial atualmente, especialmente se você tiver algum grau de fragmentação.
  3. Depois que esses arquivos e diretórios forem removidos, use btrfs device delete para remover o dispositivo com falha (se o dispositivo estiver completamente ausente, você poderá usar btrfs device delete missing para se livrar dele). Usar btrfs replace nesse cenário provavelmente falhará e não resultará em um desempenho melhor. Usar btrfs device delete também remove o requisito de que o novo dispositivo seja pelo menos tão grande quanto o antigo (e, portanto, facilita sua vida, já que você não está lidando com dispositivos de tamanho uniforme).
  4. Use btrfs device add para adicionar o dispositivo de substituição e, em seguida, btrfs balance start -musage=100 para rebalancear os blocos de metadados (os blocos de dados serão naturalmente reequilibrados conforme você copia os arquivos perdidos).
  5. Use rsync ou uma ferramenta semelhante para copiar o material que está faltando agora.
por 23.08.2017 / 17:26
-1

Para substituir um dispositivo com falha por um em funcionamento, use btrfs replace , por exemplo

btrfs replace start -r /dev/failed-dev /dev/new-dev /mountpoint

Para monitorar

btrfs replace status /mountpoint
    
por 23.08.2017 / 17:04

Tags