Estou tentando substituir um disco com falha em um sistema de arquivos RAID1 btrfs.
Ainda posso montar a partição rw
(após cerca de 5 minutos de atraso e muitos erros de kernel de E/S).
Comecei replace
com -r
uma tentativa de que o disco com falha não afetasse a velocidade da operação:
-r only read from <srcdev> if no other zero-defect mirror exists. (enable this if your drive has lots of read errors, the access would be very slow)
Ainda assim, estou tendo um desempenho muito ruim. A partição é de 3,6 TiB e em 9,25 horas eu obtive:
3.8% done, 0 write errs, 0 uncorr. read errs
Nesse ritmo, levará mais de 10 dias para ser concluído!
Devido a circunstâncias além do meu controle, isso é muito tempo para esperar.
Estou vendo erros de kernel em relação ao disco com falha com bastante frequência, com média a cada 5 minutos ou mais:
Jan 26 09:31:53 tara kernel: print_req_error: I/O error, dev sdc, sector 68044920
Jan 26 09:31:53 tara kernel: BTRFS warning (device dm-3): lost page write due to IO error on /dev/mapper/vg4TBd2-ark
Jan 26 09:31:53 tara kernel: BTRFS error (device dm-3): bdev /dev/mapper/vg4TBd2-ark errs: wr 8396, rd 3024, flush 58, corrupt 0, gen 3
Jan 26 09:31:53 tara kernel: BTRFS error (device dm-3): error writing primary super block to device 2
Jan 26 09:32:32 tara kernel: sd 2:0:0:0: [sdc] tag#0 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
Jan 26 09:32:32 tara kernel: sd 2:0:0:0: [sdc] tag#0 Sense Key : Medium Error [current]
Jan 26 09:32:32 tara kernel: sd 2:0:0:0: [sdc] tag#0 Add. Sense: Unrecovered read error
Jan 26 09:32:32 tara kernel: sd 2:0:0:0: [sdc] tag#0 CDB: Read(10) 28 00 02 eb 9e 23 00 00 04 00
Jan 26 09:32:32 tara kernel: print_req_error: critical medium error, dev sdc, sector 391967000
Eu estou supondo que os erros são devidos ao btrfs tentando gravar dados contábeis no disco (mesmo que esteja completamente ocioso).
Mesmo montado ro
, o btrfs pode tentar gravar em um disco. Opção de montagem -o
nologreplay
:
Warning currently, the tree log is replayed even with a read-only mount! To disable that behaviour, mount also with nologreplay.
Como posso acelerar o processo?
Este artigo diz que a replace
continuará após a reinicialização.
Estou pensando:
- Cancelar a corrente
replace
- Remova o disco com falha
mount -o degraded,rw
- Espero que não haja falta de energia, dada a pegadinha dessa opção de montagem única )
Neste momento, proponho-me a:
- Permitir
replace
continuar sem o disco com falha presente (um recentescrub
mostrou que o disco bom tem todos os dados) - Converta os dados para
single
permitir a montagem novamenterw
em caso de falta de energia durante o processo
Este é um bom plano para ter o replace
completo mais cedo?
Meus cálculos dizem que 6,5 horas (não 10 dias) seriam viáveis dadas as velocidades de E/S do disco.
Se você tiver dados importantes em uma unidade com falha, o programa desejado é o
ddrescue
.Primeiro, copie qualquer coisa vital
Se houver algum dado no sistema de arquivos que você não possa prescindir por um tempo prolongado, faça isso primeiro.
Desconecte a unidade com falha.
Monte o sistema de arquivos como somente leitura e degradado.
Copie os dados necessários para outro local.
Então ddrescue drive
Agora, para obter o restante dos dados, criamos uma imagem da unidade com
ddrescue
.Desmonte o sistema de arquivos Btrfs. Não o monte. Não o monte como somente leitura.
Tenha uma nova unidade formatada como Ext4 ou Btrfs com Copy On Write desabilitado.
Execute ddrescue para criar a imagem da unidade em extinção para a nova unidade
O Ddrescue pode levar horas ou até dias para ser concluído, dependendo do tamanho e da velocidade da unidade. Além disso, pode nunca ser concluído se a unidade estiver falhando demais. O tempo que você permite que ele resgate é com você.
Quando o ddrescue terminar o processamento, remova/desconecte a unidade com falha e não a reconecte novamente.
Monte a imagem da unidade em um dispositivo de loop.
Agora você deve ser capaz de montar seu sistema de arquivos raid Btrfs com o comando normal de montagem e não no modo degradado. Ele usará automaticamente o dispositivo de imagem de loop no lugar da unidade ausente.
Depois de montar a unidade Btrfs, execute imediatamente uma limpeza nela para reparar quaisquer dados que o ddrescue não conseguiu recuperar.
A partir daí você tem 2 opções. Você pode continuar executando o sistema de arquivos Btrfs com o dispositivo de loop ou pode substituir o dispositivo de loop por outra unidade.
Esta resposta menciona gravações no disco com falha, fazendo com que o disco
replace
pare.Ele sugere
dmsetup
configurar um dispositivo COW em cima do disco com falha, de modo que todas as gravações sejam bem-sucedidas.Cuidado : Neste caso, o sistema de arquivos foi colocado dentro de um
dmcrypt
dispositivo. Veja meu comentário sobre a "pegadinha" e a possível perda de dados, se esse não for o caso.Dado que o
replace
estava rastejando, fiz o seguinte:noauto
em/etc/fstab
Desabilitou o LVM VG contendo o btrfs fs na unidade com falha:
Desabilitou o dispositivo com falha:
Montado o sistema de arquivos
-o ro,degraded
(degraded
só pode ser usado uma vez )Verifiquei
replace status
e vi que estava suspenso:Montei
-o remount,rw
e vi oreplace
continue:Enquanto estou escrevendo isso:
replace status
mostra um progresso saudável de 0,1% a cada 30 segundos ou maisiostat -d 1 -m <target-dev>
mostra cerca de 145 MB/s (a Seagate anuncia 160 MB/s)Atualizar:
Após a conclusão, notei que
btrfs device usage /mountpoint
estava mostrando algunsData,DUP
eMetadata,single
, ao invés de apenasRAID1
, então rebalancei:Além disso, considere
resize
se ambos os dispositivos agora contêm folga:Eu também recomendaria que você
scrub
, pois eu tinha 262016csum
erros corrigíveis aparentemente relacionados aoreplace
arquivo .