Filesystem ainda mostrando o valor antigo após redução no linux, porém mostrando o valor correto no LVM

3

Temos uma tarefa para redimensionar o sistema de arquivos de 8T para 7T, que está no LVM. Nós temos dado resize2fs comando, enquanto o comando ainda está sendo executado, temos o erro "Falha de gravação: Conexão redefinida pelo par", No entanto, quando entramos novamente, o comando resize2fs ainda está executando a lista de processos. Depois que o processo foi concluído, reduzimos o LVM usando "lvreduce" e o montamos de volta.

Agora em df -h está mostrando ainda 8TB, porém no LVM está mostrando 7TB. Como corrigir o problema?

    
por xrkr 23.04.2016 / 14:48

1 resposta

6

resize2fs provavelmente não terminou o trabalho, mas não é possível saber porque você perdeu o final da saída.

Você deve não seguir em frente e executar lvreduce nesse ponto. Há uma boa chance de que esta parte corrompida do seu sistema de arquivos. Note que você não pode desfazer esta operação executando lvextend e esperando que os bytes perdidos voltem e que o sistema de arquivos possa se recuperar, porque lvextend pode lhe dar bytes diferentes.

Se eu tivesse que adivinhar, o que provavelmente aconteceu é que sua conexão foi redefinida durante um ponto em que resize2fs estava funcionando por algum tempo sem emitir nenhuma saída. Depois que a conexão foi redefinida, ela continuou funcionando por um tempo (ela ignorou SIGHUP ou nunca a recebeu?). Mas, mais tarde, provavelmente quando estava quase terminado, emitiu alguma saída de status e foi prontamente eliminada porque recebeu um erro ou sinal tentando gravar em um terminal inexistente. E isso nunca foi concluído.

O estado em que o resize2fs deixou o sistema de arquivos é uma questão em aberto, mas pode-se esperar que ele tenha sido deixado em um estado razoavelmente utilizável, com a redução do tamanho do sistema de arquivos não comprometida.

Moral dessa parte da história: execute operações críticas como resize2fs em screen (ou como at jobs, ou qualquer outra coisa) se houver alguma chance de sua conexão ser interrompida.

Não importa o que você faça, certifique-se de ter um bom backup, porque qualquer coisa que você possa tentar neste momento é perigoso. Se você não tiver um bom backup, você pode montar o sistema de arquivos somente leitura (não montá-lo como lido + escrever, pois isso pode exacerbar o dano) e fazer um agora.

O mais seguro é simplesmente excluir o sistema de arquivos e recuperar-se do backup. No entanto, se você quiser tentar recuperar o sistema de arquivos no lugar, provavelmente desejará executar alguma combinação dessas duas tarefas:

  • fsck o sistema de arquivos como está. Isso irá notificá-lo de qualquer tentativa de ler além do fim do sistema de arquivos e talvez lhe dar uma idéia de quanto dos dados está além desses limites. Espero que não seja muito, já que resize2fs pode ter conseguido mover esses dados antes que eles caíssem.
  • re-estender o dispositivo de bloco usando lvextend para o tamanho que costumava ser, apenas para deixar o sistema de arquivos feliz, então fsck , e tente toda a operação novamente a partir do quadrado um. Isso poderia introduzir algum dano silencioso, já que o sistema de arquivos acessa os intervalos de bytes que estão além do intervalo em que os dados válidos se encontram.

Não sei ao certo o que funcionaria melhor para você. Depende do layout que as coisas tinham no sistema de arquivos e em quanto ele foi tocado desde o evento (você menciona que o montou, provavelmente leia + escreve, pelo menos uma vez ...)

    
por 23.04.2016 / 15:08