Como corrigir o erro de superbloco do BTRFS após redimensionar / encolher (BTRFS: não foi possível obter o super buffer de bytenr 274877906944)

2

Matriz BTRFS RAID1 com 2 500 GB de hdds, sem erros. Este é o sistema de arquivos raiz, então existem 3 partições em cada drive: 1 = / boot (ext4), 2 = / (btrfs), 3 (swap)

/ boot é ext4 porque a atualização do kernel nem sempre funciona se / boot for um sistema de arquivos btrfs (novo kernel instalado, mas o grub config não atualizado).

Agora, esse espelho é movido para unidades menores, as novas unidades são de 120 GB, portanto, o sistema de arquivos btrfs precisa ser redimensionado. O redimensionamento de ambas as partições btrfs pode ser feito usando o GParted, por exemplo. Após o redimensionamento, o MBR com as informações da partição pode ser copiado das unidades antigas de 500 GB para as novas unidades de 120 GB ( dd if=/dev/sda of=/dev/sdb bs=512 count=1 ), bem como a partição btrfs ( dd if=/dev/sda2 of=/dev/sdb2 ). (Ignorando a partição swap, que teria que ser movida para caber dentro dos 120 GB.)

Embora o sistema inicialize e não tenha problemas com as novas unidades de 120 GB, uma mensagem de erro está sendo registrada (dmesg):

BTRFS: couldn't get super buffer head for bytenr 274877906944

E um scrub encontra um erro "super" (mas nenhum erro de dados):

"error details: super=1"

Existe o risco de corrupção de dados devido a esse erro?
Como isso pode ser corrigido?

Como 274877906944 é de 256 GB, a antiga partição btrfs tem > 256 GB e a nova é de < 256 GB, parece que o sistema está procurando o superbloco com 256 GB?

    
por basic6 30.10.2015 / 14:51

1 resposta

3

Aviso: não use o GParted para redimensionar um sistema de arquivos BTRFS de vários dispositivos!

É provável que ocorra perda de dados!

Parece que o GParted é o culpado. Aparentemente, ele não sabe como redimensionar os sistemas de arquivos btrfs de vários dispositivos e apenas executa btrfs filesystem resize , mas não cuida de cada dispositivo usando resize 1:49g e resize 2:49g .

Isso é o que btrfs filesystem show disse:

Total devices 2 FS bytes used 40.95GiB
devid    1 size 50.00GiB used 43.03GiB path /dev/sda2
devid    2 size 439.45GiB used 43.03GiB path /dev/sdb2

Obviamente, o GParted não redimensionou o sistema de arquivos no segundo dispositivo, então o Btrfs ainda acha que é um sistema de arquivos de 500 GB.

Em algum momento, o Btrfs teria tentado ler / gravar dados fora do disco. Isso causaria corrupção, pode até ter inutilizado todo o sistema de arquivos.

Corrigir

Primeiro, um sistema ativo foi inicializado para reduzir o risco de danos enquanto o sistema está sendo executado em um sistema de arquivos que é maior do que a partição.

Monte o sistema de arquivos:

mount /dev/sda2 /mnt/tmp

Primeiro, reduza o segundo dispositivo para 50 GB - 1 GB = 49 GB para evitar erros de arredondamento:

btrfs filesystem resize 2:49g /mnt/tmp

Redimensione-o para preencher a partição de 50 GB:

btrfs filesystem resize 2:max /mnt/tmp

Verifique btrfs filesystem show , ambos os dispositivos devem ter o tamanho certo:

devid    1 size 50.00GiB used 43.03GiB path /dev/sda2
devid    2 size 50.00GiB used 43.03GiB path /dev/sdb2

Desmonte, reinicie, o erro deve ter desaparecido.

Se nada foi danificado enquanto o sistema estava rodando nesse estado ruim, o sistema de arquivos deve estar saudável agora.

(Obrigado ao Darkling que me ajudou a consertar isso.)

    
por 01.11.2015 / 02:04