BTRFS vai readonly com erros de IO

0

Eu tenho um Raspberry Pi 2B com 4 unidades flash USB de 256GB recém-adquiridas conectadas. Eu configurei as 4 unidades como um volume btrfs RAID10 (dados e metadados). Eu tenho tentado copiar um arquivo muito grande (~ 35GB) de outro computador para este volume via rsync. A primeira vez que fiz isso, ele gastou 2 horas copiando e as informações de progresso do rsync disseram 100%, mas ele falhou devido ao "sistema de arquivos readonly".

Um pouco de pesquisa mostrou dmesg dando erros dizendo que o volume foi forçado somente leitura devido a errno -5 :

[58463.350227] BTRFS: error (device sdd) in btrfs_commit_transaction:2071: errno=-5 IO failure (Error while writing out transaction)
[58463.352106] BTRFS info (device sdd): forced readonly
[58463.352120] BTRFS warning (device sdd): Skipping commit of aborted transaction.

Então eu me perguntei se essa era uma coisa única:

# btrfs device stats /dev/sda
[/dev/sda].write_io_errs   3339
[/dev/sda].read_io_errs    0
[/dev/sda].flush_io_errs   0
[/dev/sda].corruption_errs 0
[/dev/sda].generation_errs 0
# btrfs device stats /dev/sdb
[/dev/sdb].write_io_errs   3469
[/dev/sdb].read_io_errs    0
[/dev/sdb].flush_io_errs   0
[/dev/sdb].corruption_errs 0
[/dev/sdb].generation_errs 0
# btrfs device stats /dev/sdc
[/dev/sdc].write_io_errs   3601
[/dev/sdc].read_io_errs    2
[/dev/sdc].flush_io_errs   0
[/dev/sdc].corruption_errs 0
[/dev/sdc].generation_errs 0
# btrfs device stats /dev/sdd
[/dev/sdd].write_io_errs   4335
[/dev/sdd].read_io_errs    3
[/dev/sdd].flush_io_errs   0
[/dev/sdd].corruption_errs 0
[/dev/sdd].generation_errs 0

Isso parece um monte de erros de IO, mas os números são consistentes em todas as 4 unidades. Isso é exatamente o que eu deveria esperar de drives flash USB? Toda vez que eu copio esse arquivo, ele força o volume do meu BTRfs rapidamente, e eu não sei como consertá-lo.

    
por Edward 07.12.2017 / 16:37

1 resposta

0

O mais provável é que seja porque é um drive USB. O USB é notoriamente pouco confiável no Linux para qualquer tipo de uso a longo prazo, e o hub integrado e o controlador USB no Pi não são particularmente bons, o que só piora as coisas. As altas contagens de erro de escrita corroboram essa conclusão, o dispositivo vai cair no barramento USB por algum motivo, mas o BTRFS nunca vê que isso aconteceu (porque a camada de bloco não passa essa informação corretamente), então ele continua tentando escrever para o arquivo e recebendo erros de escrita de volta.

É importante notar que isso pode (e eventualmente irá) resultar em corrupção do sistema de arquivos potencialmente irrecuperável.

Em relação à correção, comece desmontando o volume BTRFS (forçosamente se for necessário) e, em seguida, desconectando e reconectando cada unidade flash por vez. Depois de fazer isso, o sistema de arquivos deve ser montado e executado sem problemas (até que o mesmo problema inevitavelmente aconteça novamente).

    
por 07.12.2017 / 22:02