Como recupero uma partição BTRFS que não será montada?

13

A instalação do 12.04 continuava falhando e a solução era fazer com que o instalador ignorasse a partição btrfs que eu estava usando anteriormente para / home.

Agora que está instalado, tenho tentado fazê-lo montar a partição btrfs para que eu possa acessar meus 70 GB de arquivos. Ele não será montado e os erros btrfsck serão lançados com as três linhas a seguir:

parent transid verify failed on 31302336512 wanted 62455 found 62456
parent transid verify failed on 31302336512 wanted 62455 found 62456
parent transid verify failed on 31302336512 wanted 62455 found 62456

Alguém pode me dizer como obter esta partição funcionando? Li online que provavelmente posso recuperar os dados usando o btrfs-restore, mas não consigo encontrar esse programa em nenhum lugar.

Tony
fonte

Respostas:

10

Caminho mais fácil

btrfs-zero-log /dev/sda5

Você está recebendo esse problema porque uma transação (gravação ou exclusão) está presa no log do diário e o disco não corresponde.

Como funciona:

Portanto, quando os dados são gravados primeiro, eles são gravados no diário e depois no disco (ou ao mesmo tempo, mas o diário salva apenas metadados sobre a próxima gravação - não tenho certeza ... preciso de mais pesquisas nessa parte) ...

De qualquer forma, se você desligar o sistema no meio desta gravação / exclusão ou fazer algo hickups o sistema (desmontar o USB que contém seus btrfs ponto de montagem), então quando ele retorna que montar não vai funcionar ele irá falhar ( dmesg e btrfsck vontade mostrar os erros com mais detalhes) ...

Olhando para o dmesg, você verá essas mesmas mensagens transitórias.

Você verá algo assim:

parent transid verify failed on 109973766144 wanted 1823 found 1821

Isso significa que os btrfs queriam o transif 1826 (que estava no diário), mas no disco viu 1821. Portanto, o disco estava a duas transações de estar em sincronia com o diário. Pessoalmente, arriscaria um log de brtfs-zero aqui apenas porque são apenas duas transações. Mas, para ser 100% seguro, se esses são seus únicos dados (a propósito, se você tiver dados críticos, NUNCA NUNCA terá apenas uma cópia, sempre tenha uma cópia / backup em outro local seguro - culpar os criadores de btrfs não justificar contra a falta de responsabilidade das pessoas de não ter um backup - o btrfs não é uma solução de backup, é um sistema de arquivos - nada é uma solução de backup verdadeira além de ter uma cópia dela em outro lugar onde - nem mesmo paridade ou unidades espelhadas, um backup verdadeiro é sentado em algum lugar subterrâneo nos Alpes enquanto sua cópia ativa estiver em seu escritório no Texas)

parent transid verify failed on 31302336512 wanted 62455 found 62456

Aqui, o diário está querendo 62455, mas o disco está à frente em 62456, portanto, no seu caso, eu simplesmente apagaria o diário. O diário não atualizou desta vez. Mais uma vez, eu lhe disse sobre ser uma coisa segura, se são seus únicos dados e sua mega crítica (que vergonha), e eu faria as operações abaixo primeiro para ser seguro.

A execução de um btrfsck / dev / sda5 (que, a propósito, faz uma verificação somente leitura, para que seja completamente seguro, são as únicas opções de btrfsck com as quais você precisa se preocupar) também mostrará essas mensagens.

Mas cuidado, se esses dados forem críticos, primeiro o faria (como disseram os outros senhores)

mount -t btrfs -o rootflags=recovery,nospace_cache /dev/sda3 /mnt/sda3

mount -t btrfs -o rootflags=recovery,nospace_cache,clear_cache /dev/sda3 /mnt/sda3

mount -t btrfs -o recovery,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3

Em seguida, cp ou rsync todos os seus arquivos para um local seguro; quando for seguro, faça o btrfs-zero-log; se for uma operação bem-sucedida, você gastará muito tempo fazendo backup do sistema (mas, se não for bem-sucedida, você apenas salvou o arquivo). bunda)

Então, se as montagens falharem, faça uma restauração btrfs (despejo do sistema, como eu entendo que é uma operação retomada, no entanto, ele continua pedindo Y ou y de vez em quando para assistir a saída)

btrfs restore /dev/sda5 /USB

Então, quando estiver seguro (quando a restauração do btrfs for concluída), faça o btrfs-zero-log, se for uma operação bem-sucedida, você gastará muito tempo fazendo backup do seu sistema (mas se não for bem-sucedida, você apenas salvou sua bunda)

Você pode executar a tela primeiro

screen /bin/bash

btrfs restore /dev/sda5 /USB

NOTA LATERAL DA TELA

Para desanexar (o comando ainda será executado): CONTROL-a, digite ": desanexar" sem as aspas e pressione ENTER

Outra maneira de desanexar: Em seguida, feche a massa ou o seu terminal e ele será desconectado (o comando / restauração ainda será executado).

Para verificar, basta voltar a tela:

screen -x

a tela -x será anexada às sessões, mesmo se desanexada, e, ao contrário de -h diz, será anexada mesmo que já esteja anexada)

Se você tiver várias telas, a tela -x indicará que você precisa ser mais específico para anexar à sessão:

screen -ls

É para listar todas as sessões, é fácil lembrar disso.

para ver o PID, você também pode fazer isso:

ps aux | grep screen

Depois de descobrir seu PID, execute a tela assim:

screen -x PID

Isso será anexado a uma sessão específica. Você pode ter várias sessões / massas anexadas à mesma tela (elas produzirão o mesmo texto, você pode digitar comandos em uma e serão espelhadas na outra massa)

kossboss
fonte
7

Montar na inicialização usando as opções de montagem fs raiz:

rootflags=recovery,nospace_cache

ou

rootflags=recovery,nospace_cache,clear_cache

A lista completa de opções de montagem do btrfs deve estar aqui https://btrfs.wiki.kernel.org/index.php/Mount_options e outras coisas também podem ser úteis, como noatime, nodatacow (corrigi um bug do kernel para mim, fornecendo um chance de copiar meus arquivos).

Adicione-o ao seu grub.cfg / menu.lst ou digite-o ao inicializar.

O material nospace_cache tornará as coisas terrivelmente lentas. Basta inicializar, esperar (longo), desligar e inicializar normalmente.

Eu tinha a mesma coisa há alguns dias atrás, e o acima foi corrigido. Mas também depois, houve alguns problemas de espaço ... o espaço relatado não é 100%, mas ainda pode dizer que está sem espaço.

==

Eu acho que você também pode adicionar as mesmas opções no seu fstab, por exemplo:

UUID=0237alksfadg-lhdfkj3624-4fdfjb-9dsfe2d-dfddaf /home btrfs defaults,recovery,nospace_cache,clear_cache,subvol=@home 0  
 2

Se você estava tentando recuperar um diretório / home montado sobre uma partição com UUID=0237alksfadg-lhdfkj3624-4fdfjb-9dsfe2d-dfddaf.

Pedro
fonte
Por que dois nospace_cache?
um CVn
Foi um erro de digitação, era suposto ser clear_cache
Peter
:) Você acabou de salvar por backup!
Derflocki
1

A resposta de Peter resolveu o problema para mim, embora não no Ubuntu. Eu tinha uma /homepartição btrfs'd que obviamente foi corrompida. O sistema não inicializou porque estava ligado fstab. Entrei no modo de manutenção, dividi a linha com essa partição e inicializei normalmente (eu tinha uma partição ext4 sobressalente que poderia usar como /home).

Montei a partição manualmente com o seguinte comando:

mount -t btrfs -o recovery,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3e foi realmente capaz de salvar meus dados. Embora não demorou tanto tempo para montá-lo. Então, obrigado Peter.

Nikos
fonte
3
Você pode postar isso como um comentário na resposta de Pedro, dizendo 'Isso funcionou' e depois marcar isso como a resposta verdadeira. caso contrário, Peter não receberá nenhum crédito "verdadeiro" (pontos de repetição)
Thomas Ward
1
mount -t btrfs -o ro,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3

ro = somente leitura

Esse trabalho pra mim

Dan
fonte
1
Você leu o comentário de @The Lord of Time em um comentário semelhante que foi adicionado como resposta? Aqui está novamente se você não o fez - "Você pode simplesmente postar isso como um comentário na resposta de Peter, dizendo 'Isso funcionou' e depois marcar isso como a resposta verdadeira. Caso contrário, Peter não obterá nenhuma" verdadeira " credit (rep points) "
geezanansa 27/05
1

Eu tive o mesmo problema. Após uma reinicialização, não era mais capaz de montar minha partição btrfs. No entanto, nenhuma das soluções mencionadas aqui poderia resolvê-lo.

O que o corrigiu para mim foi atualizar o kernel da 3.10 para a 3.12. Após uma reinicialização, a partição btrfs pode ser montada novamente.

Fabian Jakobs
fonte