btrfs replace
é realmente a coisa a ser tentada, mas há duas dicas sobre sua invocação: ela só mostrará erros quando você usar -B
(caso contrário, ela sairá com o status 0, como se tudo estivesse bem, mas você verá "nunca iniciado" ao verificar o status) e os parâmetros inválidos gerarão erros não relacionados.
Por exemplo, acho que meu disco está bom, mas o RAID1 ficou fora de sincronia de alguma forma (provavelmente uma queda de energia durante a qual o host sobreviveu, mas os discos não estão com energia de backup e podem estar on-line em momentos ligeiramente diferentes). Para verificar, quando eu desligar o disco B (enquanto montado), eu posso ler os dados muito bem. Quando eu desativo o disco A (o disco B está ligado e o sistema de arquivos já está montado), então recebo erros e dados corrompidos. Então, claramente, o disco A está bom e o disco B está corrompido. Mas o disco B parece funcionar, então eu quero reutilizá-lo e apenas reconstruí-lo. Portanto, eu quero substituir /dev/diskB
por /dev/diskB
.
Quando usei btrfs replace start -B /dev/diskB /dev/diskB /mnt/btrfs
, ele me mostrou ERROR: ioctl(DEV_REPLACE_START) failed on "/mnt/btrfs": Invalid argument, <illegal result value>
. Então, há um problema com o ponto de montagem, certo? Não, quando eu mudei o primeiro /dev/diskB
para /dev/diskA
, ele simplesmente funcionou. O erro foi nos dispositivos, não no ponto de montagem.
Da mesma forma, vejo que o primeiro argumento ( 2
) é meio estranho. Talvez o erro esteja errado e funcione com um dispositivo no lugar do 2
?
btrfs replace
tem dois modos de operação: um em que você usa o dispositivo quebrado como primeiro argumento (depois de start -B
ou qualquer outro) e um modo (se a primeira opção estiver indisponível) onde você usa o dispositivo de trabalho copiado de. Em ambos os casos, o segundo argumento é o disco que você deseja usar para reconstruir com.
Se o sistema de arquivos é montado como somente leitura ou como leitura-gravação, não parece importar. É por isso que suspeito que está rejeitando seus argumentos e dando a você um erro errado, em vez de o erro estar correto.