Substituindo uma unidade com falha em um array mdadm no Ubuntu
Publicado: 15 de fevereiro de 2025 às 22:02:30 UTC
Última atualização: 12 de janeiro de 2026 às 08:50:01 UTC
Se você se encontra na temida situação de ter uma falha de disco em um array RAID mdadm, este artigo explica como substituí-lo corretamente em um sistema Ubuntu.
Replacing a Failed Drive in an mdadm Array on Ubuntu
As informações neste post são baseadas no Ubuntu 18.04 e na versão do mdadm incluída em seus repositórios; no momento da escrita, a versão era a v4.1-rc1. Elas podem ou não ser válidas para outras versões.
Recentemente, meu servidor de arquivos doméstico, composto por nove discos em um array RAID-6 configurado com mdadm, apresentou uma falha repentina. Isso sempre assusta, mas felizmente consegui encontrar rapidamente um disco de substituição, que foi entregue já no dia seguinte, permitindo que eu iniciasse a reconstrução do sistema.
Confesso que economizei um pouco demais quando montei o servidor de arquivos; apenas dois dos discos são NAS de verdade (Seagate IronWolf), enquanto os demais são discos rígidos de mesa (Seagate Barracuda). Não surpreendentemente, foi um dos discos de mesa que pifou (depois de quase três anos de uso, aliás). Estava completamente morto; depois de transferi-lo para um gabinete USB externo, tudo o que consegui foi um estalo irritante, e nem o Ubuntu 20.04 nem o Windows 10 conseguiram detectá-lo.
Bem, vamos à parte da substituição (e sim, o novo disco que comprei foi um IronWolf, aprendi a lição) - por mais assustador que seja perder um disco em um array em funcionamento, é ainda mais assustador se você não souber o procedimento correto para substituí-lo. Não é a primeira vez que preciso substituir um disco com defeito em um array mdadm, mas felizmente é tão raro que geralmente preciso consultar os comandos corretos. Desta vez, decidi criar meu próprio pequeno guia para referência futura.
Então, em primeiro lugar, quando você recebe o temido e-mail de falha do mdadm, precisa identificar qual unidade falhou. Claro, ele mostrará o nome do dispositivo (no meu caso, /dev/sdf), mas provavelmente não é óbvio qual unidade física é essa, já que esses nomes podem mudar quando a máquina é inicializada.
Se você não tiver certeza de qual dispositivo falhou, pode usar o seguinte comando para descobrir (substitua /dev/md0 pelo nome do seu dispositivo RAID):
Como mencionei, no meu caso era /dev/sdf, então vamos continuar com isso.
Em seguida, você pode tentar encontrar o número de série da unidade com falha executando este comando:
(Caso o smartctl não seja encontrado, você precisa instalar o pacote smartmontools no Ubuntu)
O número de série pode então ser comparado aos números de série na etiqueta física das unidades para descobrir qual delas apresentou falha.
Desta vez, porém, não tive tanta sorte. O disco rígido estava completamente inoperante e sequer forneceu dados SMART ou outros dados, incluindo o número de série.
Como eu tinha acesso físico ao servidor (o que é realmente necessário se você for substituir um disco rígido por conta própria, suponho ;-)) e o servidor estava funcionando quando o disco falhou (e continuou funcionando bem graças à redundância RAID-6), optei pelo método mais primitivo, porém extremamente eficaz e óbvio, de simplesmente copiar um arquivo grande para o servidor e observar qual luz do HD não piscava. Em poucos segundos, identifiquei o culpado.
Antes de remover o disco rígido, é recomendável informar formalmente o mdadm dessa intenção, executando o seguinte comando (substitua os nomes dos dispositivos pelos seus, se necessário):
Em caso de sucesso, o mdadm responderá com uma mensagem informando que removeu a unidade a quente, aparentemente porque o dispositivo RAID virtual está em execução naquele momento.
Se a operação falhar com uma mensagem de erro semelhante a "dispositivo ou recurso ocupado", pode ser que o mdadm não tenha registrado a falha completa da unidade. Para corrigir isso, execute o seguinte comando (lembre-se de substituir os nomes dos dispositivos pelos seus, se necessário):
Depois disso, você poderá remover o dispositivo da matriz com o comando anterior.
Agora é hora de realmente substituir o disco. Se você tiver certeza absoluta de que sua máquina e controladora suportam troca a quente, você pode fazer isso sem desligar o computador. Essa seria a melhor opção para sistemas de produção críticos executados em hardware de servidor adequado, que você sabe que suporta essa operação. Meu servidor de arquivos doméstico é baseado em uma placa-mãe de desktop comum com algumas controladoras SATA genéricas nos slots PCIe para fornecer mais portas SATA.
Embora o SATA geralmente suporte a troca a quente, eu não queria arriscar nada nessa configuração, então optei por desligar o computador enquanto substituía o disco.
Antes de fazer isso, é uma boa ideia comentar a linha referente ao dispositivo RAID no arquivo /etc/fstab para que o Ubuntu não tente montá-lo automaticamente na próxima inicialização, pois isso pode causar travamentos e forçar a entrada no modo de recuperação devido à degradação do array RAID. Isso pode não ser um grande problema em um sistema desktop, mas como executo este servidor sem monitor ou teclado conectados, seria um tanto trabalhoso.
Após inicializar o computador com o novo disco instalado, use o comando `lsblk` ou outro método para identificá-lo. Se você não alterou mais nada, ele provavelmente (mas não necessariamente) terá o mesmo nome do disco que você substituiu. No meu caso, foi assim, então o novo disco também se chama `/dev/sdf`.
Como meu array é baseado em partições em vez de dispositivos físicos, precisei copiar a tabela de partições de uma unidade em funcionamento para a nova unidade para garantir que fossem exatamente iguais. Se você executar seu array em dispositivos físicos, poderá pular esta etapa.
Usei o sgdisk para isso, copiando a tabela de partições de /dev/sdc para /dev/sdf. Certifique-se de substituir os nomes dos dispositivos para corresponderem aos seus, conforme necessário.
Observe a ordem aqui: você lista a unidade "para" primeiro! Isso é um pouco contraintuitivo para mim, mas certifique-se de fazer certo para não ter outra falha de unidade no array ;-)
Para evitar conflitos de UUID, gere novos UUIDs para a nova unidade:
E agora, finalmente, chegou a hora de adicionar o novo disco ao array e começar a reconstrução! (Ok, não é bem uma festa, na verdade é um processo bem lento e angustiante, já que você realmente não quer que outro disco falhe neste momento. Uma cerveja talvez ajude.)
De qualquer forma, para adicionar a nova unidade ao array, execute este comando (novamente, certifique-se de substituir os nomes dos dispositivos pelos seus, conforme apropriado):
Se tudo correr bem, o disco será adicionado ao array sem problemas. Acredito que ele seja adicionado como um "hot spare" por padrão, mas como este array está sem um disco (aquele que falhou), ele é imediatamente colocado em uso e o processo de reconstrução será iniciado.
Você pode ficar de olho nisso da seguinte forma:
Isso provavelmente levará algum tempo; no meu modesto servidor (baseado principalmente em hardware de consumo e discos rígidos de desktop, diga-se de passagem), consegui atingir pouco menos de 100 MB/s. Lembre-se de que se trata de RAID-6, então há muitos cálculos de paridade envolvidos na reconstrução; um RAID-10 teria sido muito mais rápido. Esta máquina em particular possui um processador AMD A10 9700E quad-core (o "E" significa que é um modelo com clock reduzido e baixo consumo de energia, ou seja, não é super rápido), apenas para você ter uma ideia do que esperar. Com os nove discos rígidos de 8 TB na minha configuração, a reconstrução completa levou pouco mais de 24 horas.
Durante a reconstrução, você pode montar o sistema de arquivos no array e usá-lo normalmente, se desejar, mas eu prefiro deixar a reconstrução para a conclusão. Lembre-se de que, se uma unidade falhar, outra pode falhar em breve, então é importante que a reconstrução seja feita o mais rápido possível, pois você não quer que outra unidade falhe durante esse processo. Portanto, não sobrecarregue o array com outras operações de E/S que não sejam estritamente necessárias.
Assim que terminar, adicione-o de volta ao seu arquivo /etc/fstab, reinicie e aproveite seus arquivos :-)
