Atualmente, o btrfs não suporta sem retrovisores .
O Btrfs tem um subcomando de substituição especial:
btrfs replace start /dev/left /dev/new_device /mnt/foo
Lendo nas entrelinhas da página btrfs-replace
man, esse comando deve poder usar as duas pernas existentes - por exemplo, para situações em que ambas as pernas tenham erros de leitura, mas ambos os conjuntos de erros são separados.
O comando btrfs replace é executado em segundo plano. Você pode verificar seu status por meio do subcomando status
, por exemplo:
btrfs replace status /mnt/foo
45.4% done, 0 write errs, 0 uncorr. read errs
Como alternativa, também é possível adicionar um dispositivo ao arquivo de arquivos raid-1 e, em seguida, excluir uma perna existente:
btrfs dev add /dev/mapper/new_device /mnt/foo
btrfs dev delete /dev/mapper/right /mnt/foo
O add
deve retornar rapidamente, pois ele adiciona o dispositivo (emita btrfs fi show
para confirmar).
O seguinte delete
deve acionar um balanceamento entre os dispositivos restantes, de modo que cada extensão esteja disponível em cada dispositivo restante. Assim, o comando é potencialmente muito longo em execução. Esse método também funciona para lidar com a situação descrita na pergunta.
Em comparação com btrfs replace
, o ciclo de adicionar / excluir envia spam ao syslog com mensagens de informação de baixo nível. Além disso, demora muito mais para terminar (por exemplo, 2-3 vezes mais, no meu sistema de teste com drives SATA de 3 TB, uso de 80% FS).
Por fim, após a substituição real, se os dispositivos mais novos forem maiores do que os dispositivos originais, você precisará emitir um btrfs fi resize
em cada dispositivo para utilizar todo o espaço em disco disponível. Para o exemplo replace
no topo, parece algo como:
btrfs fi resize <devid>:max /mnt/foo
em que devid
representa o ID do dispositivo que btrfs fi show
retorna.