Como o Linux informa uma placa LSI Megaraid para liberar seu cache antes do desligamento?

5

O controlador Megaraid LSI possui um backup de bateria para seu cache de gravação, o que permite, no caso de uma queda de energia imprevista, reter os dados armazenados em cache, ainda não gravados, para que ele seja gravado no disco na próxima vez. servidor é inicializado. No caso de um desligamento limpo, este backup não é presumivelmente necessário, já que parte do desligamento limpo envolverá o controlador gravando os dados em cache no disco.

Como o controlador de raid é informado de que o desligamento está prestes a acontecer? Presumivelmente, esse flush deve ser a última coisa a ocorrer depois de outro código de desligamento do sistema operacional, o que pode envolver a gravação de dados ou logs no raid.

Existe alguma sinalização de nível PCIe que informa os periféricos de uma queda pendente de energia? O módulo do kernel Megaraid_sas informa a placa do desligamento pendente? Ou será que um comando MegaCli para liberar o cache precisa ser executado a partir de um script de inicialização para o encerramento?

Eu adicionei manualmente um cartão Megaraid e um conjunto adicional de unidades a um sistema Linux que foi instalado sem um, e quero ter certeza de que não preciso adicionar algo manualmente para garantir que o cache seja consistente no desligamento .

    
por bk. 20.10.2016 / 21:33

1 resposta

6

Durante o desligamento, o sistema desmontará a maioria dos sistemas de arquivos. Aqueles que não podem ser desmontados são remontados somente leitura. Umount syscall irá liberar os caches de disco via VFS, e buffers de disco usando o driver por trás do dispositivo de bloco. O driver de dispositivo de bloco no seu caso é o driver genérico SCSI sg . Isso enviará os dados para o dispositivo SCSI usando o driver específico para o dispositivo e um comando SCSI flush para que os dados sejam gravados do cache de disco interno para o meio de armazenamento em disco. Tudo isso é síncrono e o umount não retornará até que os dados estejam no disco. Para FS somente leitura remontado, os scripts de desligamento apenas executarão o syscall de sincronização.

    
por 21.10.2016 / 00:33