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:
- 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. - 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.
- 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á usarbtrfs device delete missing
para se livrar dele). Usarbtrfs replace
nesse cenário provavelmente falhará e não resultará em um desempenho melhor. Usarbtrfs 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). - 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). - Use
rsync
ou uma ferramenta semelhante para copiar o material que está faltando agora.