Como faço para recuperar uma partição BTRFS que não será montada?

10

A instalação do 12.04 continuou com falha 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, estou tentando fazer com que ele monte a partição btrfs para que eu possa acessar meus 70 GB de arquivos. Ele não será montado e os erros do btrfsck serão exibidos 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 fazer essa partição funcionar? Eu li on-line que provavelmente posso recuperar os dados usando o btrfs-restore, mas não consigo encontrar esse programa em lugar nenhum.

    
por Tony 30.06.2012 / 10:37

5 respostas

8

maneira 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 de diário e o disco não corresponde a ele.

Como funciona:

Assim, quando os dados são gravados, primeiro são gravados no journal e depois no disco (ou ao mesmo tempo, mas o journal salva os metadados sobre a próxima gravação - não tenho certeza ... precisa de mais pesquisas sobre essa parte) ...

De qualquer forma, se você desligar o sistema no meio dessa gravação / exclusão ou fizer algo com o sistema (desmonte o USB que contém o ponto de montagem btrfs), quando ele retornar a montagem não funcionará, ele falhará (< strong> dmesg e btrfsck mostrarão os erros com mais detalhes) ...

Olhando para o dmesg, você verá essas mesmas mensagens transid.

Você verá algo assim:

parent transid verify failed on 109973766144 wanted 1823 found 1821

Isso significa que o btrfs queria o transif 1826 (que estava no diário), mas no disco que ele viu 1821. Assim, o disco tinha duas transações de estar em sincronia com o diário. Eu, pessoalmente, arriscaria um log de brtfs-zero aqui só porque é apenas duas transações. Mas para ser 100% seguro se este for seu único dado (a propósito se você tiver dados críticos você NUNCA DEVE ter 1 cópia disto, sempre tenha uma cópia / backup em um outro local seguro - culpando os criadores de btrfs wouldnt justificar contra a própria falta de responsabilidade de não ter um backup - btrfs não é solução de backup, é um sistema de arquivos - nada é uma verdadeira solução de backup além de ter uma cópia de outro lugar - nem paridade nem unidades espelhadas, um backup verdadeiro é sentado em algum lugar subterrâneo nos Alpes enquanto sua cópia ativa está em seu escritório no Texas)

parent transid verify failed on 31302336512 wanted 62455 found 62456

Aqui, a revista está querendo 62455, mas o disco está à frente, em 62456, então, no seu caso, eu apenas limparia o diário. O diário não atualizou desta vez. Mais uma vez eu disse a você sobre ser coisa segura, se é seu único dado e sua mega crítica (vergonha para você), e eu faria as operações abaixo primeiro para estar seguro.

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

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

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 local seguro, então quando seguro fazer o btrfs-zero-log, se for uma operação bem sucedida você acabou de perder muito tempo fazendo backup de seu sistema (mas se não for bem sucedido, você apenas salvei sua bunda)

Em seguida, se as montagens falharem, faça uma restauração btrfs (despejo do sistema, como eu entendo que é uma operação resumida, 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 em segurança (quando a restauração do btrfs estiver concluída) faça o btrfs-zero-log, se for uma operação bem-sucedida, você acabou perdendo muito tempo fazendo backup do seu sistema (mas se não tiver êxito, você 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 e digite ": detach" sem as aspas e pressione ENTER

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

Para verificar, basta voltar a ver:

screen -x

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

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

screen -ls

ls para listar todas as sessões, fácil de lembrar.

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 / puttys anexadas à mesma tela (elas produzirão o mesmo texto, você pode digitar comandos em um, e elas serão espelhadas no outro putty)

    
por kossboss 19.01.2014 / 15:01
6

Monte na inicialização usando as opções de montagem do root fs:

rootflags=recovery,nospace_cache

ou

rootflags=recovery,nospace_cache,clear_cache

A lista completa de opções de montagem do btrfs deve estar aqui link e outras coisas podem ser úteis também, como noatime, nodatacow (corrigiu um bug do kernel para mim, dando-me a chance de copiar meus arquivos).

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

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

Eu tive a mesma coisa há alguns dias atrás, e o anterior resolveu isso. Mas também depois, houve alguns problemas de espaço ... o espaço relatado não é 100%, mas ainda pode dizer que falta espaço.

==

Eu acho que você também pode adicionar as mesmas opções em 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 .

    
por Peter 02.08.2012 / 21:40
1

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

Eu montei a partição manualmente com o seguinte comando:

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

    
por Nikos 19.10.2012 / 13:39
0
mount -t btrfs -o ro,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3

ro = somente leitura

Este trabalho para mim

    
por Dan 27.05.2013 / 16:03
0

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

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

    
por Fabian Jakobs 11.03.2014 / 11:16